<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><span class="" style="font-size: 14px;">Hi! I’m a hobbiest developer. I’m trying to execute this command using C functions in objective C. The output using this subcommand and its functions are very different. I’d been reading the open source smime.c file but I don’t understand where is my mistake. Nevertheless I don’t know where I can get a detailed documentation of the flags. Below I paste my code and a stack overflow question I had asked. Thanks for your time.<br class=""><br class="">openssl smime -sign -signer *certificate.cer* -inkey *myKey* -outoutFile.xml.cms -in *infile.xml -outform PEM -nodetach</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;"><br class="">I do try to do this in Objective-C, but the length of the string which I end up is very different.<br class=""><br class="">SSL_library_init();</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">OPENSSL_add_all_algorithms_noconf</span><span class="" style="font-size: 14px;">();</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><span class="" style="font-size: 14px;">OpenSSL_add_all_digests();<br class="">//Load the private key</span><br class=""><span class="" style="font-size: 14px;">NSString *privateKeyPath = [[NSBundle mainBundle]pathForResource:@"nameOfPrivateKeyFile" ofType:@"”];</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span><div class=""><span class="" style="font-size: 14px;">BIO</span><span class="" style="font-size: 14px;">*</span><span class="" style="font-size: 14px;"> bio </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> BIO_new_file</span><span class="" style="font-size: 14px;">([</span><span class="" style="font-size: 14px;">privateKeyPath cStringUsingEncoding</span><span class="" style="font-size: 14px;">:</span><span class="" style="font-size: 14px;">NSUTF8StringEncoding</span><span class="" style="font-size: 14px;">],</span><span class="" style="font-size: 14px;"> </span><span class="" style="font-size: 14px;">"rb"</span><span class="" style="font-size: 14px;">);</span></div><span class="" style="font-size: 14px;">if (!bio) {<br class=""></span><span class="" style="font-size: 14px;"><span class="Apple-tab-span" style="white-space: pre;">        </span>NSLog(@"Error %s (%d)",strerror(errno), errno);<br class="">}</span><div class=""><br class=""></div><div class=""><span class="" style="font-size: 14px;">EVP_PKEY</span><span class="" style="font-size: 14px;">*</span><span class="" style="font-size: 14px;"> pkey </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">;</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">PEM_read_bio_PrivateKey</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">bio</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> </span><span class="" style="font-size: 14px;">&</span><span class="" style="font-size: 14px;">pkey</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">);</span></div><div class=""><br class=""></div><span class="" style="font-size: 14px;">if (!pkey) {</span><span class="" style="font-size: 14px;">    </span><span class="" style="font-size: 14px;"><br class=""></span><span class="" style="font-size: 14px;"><span class="Apple-tab-span" style="white-space: pre;">      </span>NSLog(@"problem");<br class="">}</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">BIO_free_all</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">bio</span><span class="" style="font-size: 14px;">);</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">// Load the certificate</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">X509</span><span class="" style="font-size: 14px;">*</span><span class="" style="font-size: 14px;"> certificate </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">;</span></div><span class="" style="font-size: 14px;">NSString *certificatePath = [[NSBundle mainBundle]pathForResource:@"certificateFilePath" ofType:@"cer"];</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">bio </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> BIO_new_file</span><span class="" style="font-size: 14px;">([</span><span class="" style="font-size: 14px;">certificatePath cStringUsingEncoding</span><span class="" style="font-size: 14px;">:</span><span class="" style="font-size: 14px;">NSUTF8StringEncoding</span><span class="" style="font-size: 14px;">],</span><span class="" style="font-size: 14px;"> </span><span class="" style="font-size: 14px;">"rb"</span><span class="" style="font-size: 14px;">);</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">certificate </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> PEM_read_bio_X509_AUX</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">bio</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">);</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">BIO_free_all</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">bio</span><span class="" style="font-size: 14px;">);</span></div><div class=""><br class=""></div><span class="" style="font-size: 14px;">//Sign the binary..</span><div class=""><br class=""></div><div class=""><span class="" style="font-size: 14px;">PKCS7</span><span class="" style="font-size: 14px;">*</span><span class="" style="font-size: 14px;"> pkcs7 </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> PKCS7_sign</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> PKCS7_PARTIAL</span><span class="" style="font-size: 14px;">);</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">PKCS7_sign_add_signer</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">pkcs7</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> certificate</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> pkey</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> PKCS7_PARTIAL</span><span class="" style="font-size: 14px;">);</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">PKCS7_final</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">pkcs7</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> NULL</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;"> PKCS7_PARTIAL</span><span class="" style="font-size: 14px;">);</span></div><div class=""><br class=""></div><span class="" style="font-size: 14px;">if (!pkcs7) {</span><span class="" style="font-size: 14px;">    </span><span class="" style="font-size: 14px;"><br class=""></span><span class="" style="font-size: 14px;"><span class="Apple-tab-span" style="white-space: pre;">     </span>NSLog(@“Problem in PKCS7");<br class="">}</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">BIO_free_all</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">bio</span><span class="" style="font-size: 14px;">);</span></div><div class=""><br class=""></div><span class="" style="font-size: 14px;">//Load file to sign..<br class="">NSString *fileToWritePath = [[NSBundle mainBundle]pathForResource:@"fileToEncrypt" ofType:@"xml"];</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">bio </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> BIO_new_file</span><span class="" style="font-size: 14px;">([</span><span class="" style="font-size: 14px;">fileToWritePath cStringUsingEncoding</span><span class="" style="font-size: 14px;">:</span><span class="" style="font-size: 14px;">NSUTF8StringEncoding</span><span class="" style="font-size: 14px;">],</span><span class="" style="font-size: 14px;"> </span><span class="" style="font-size: 14px;">"rb"</span><span class="" style="font-size: 14px;">);</span></div><div class=""><span class="" style="font-size: 14px;">NSString</span><span class="" style="font-size: 14px;"> </span><span class="" style="font-size: 14px;">*</span><span class="" style="font-size: 14px;">fileToSignPath </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> </span><span class="" style="font-size: 14px;">[[</span><span class="" style="font-size: 14px;">NSBundle</span><span class="" style="font-size: 14px;"> mainBundle</span><span class="" style="font-size: 14px;">]</span><span class="" style="font-size: 14px;">pathForResource</span><span class="" style="font-size: 14px;">:@</span><span class="" style="font-size: 14px;">"fileToSign"</span><span class="" style="font-size: 14px;"> ofType</span><span class="" style="font-size: 14px;">:@</span><span class="" style="font-size: 14px;">"xml"</span><span class="" style="font-size: 14px;">];</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">BIO</span><span class="" style="font-size: 14px;">*</span><span class="" style="font-size: 14px;"> bioIn </span><span class="" style="font-size: 14px;">=</span><span class="" style="font-size: 14px;"> BIO_new_file</span><span class="" style="font-size: 14px;">([</span><span class="" style="font-size: 14px;">secondTicketPath cStringUsingEncoding</span><span class="" style="font-size: 14px;">:</span><span class="" style="font-size: 14px;">NSUTF8StringEncoding</span><span class="" style="font-size: 14px;">],</span><span class="" style="font-size: 14px;"> </span><span class="" style="font-size: 14px;">"rb"</span><span class="" style="font-size: 14px;">);</span></div><span class="" style="font-size: 14px;">if (!bioIn) {</span><div class=""><span class="" style="font-size: 14px;">    </span><span class="" style="font-size: 14px;">NSLog</span><span class="" style="font-size: 14px;">(@</span><span class="" style="font-size: 14px;">"Error %s (%d)"</span><span class="" style="font-size: 14px;">,</span><span class="" style="font-size: 14px;">strerror</span><span class="" style="font-size: 14px;">(</span><span class="" style="font-size: 14px;">errno</span><span class="" style="font-size: 14px;">),</span><span class="" style="font-size: 14px;"> errno</span><span class="" style="font-size: 14px;">);</span></div><span class="" style="font-size: 14px;">}</span><div class=""><br class=""></div><span class="" style="font-size: 14px;">int rv = PEM_write_bio_PKCS7_stream(bio, pkcs7, bioIn, PKCS7_F_PKCS7_FINAL);</span><div class=""><br class=""></div><span class="" style="font-size: 14px;">if (rv == 0){</span><span class="" style="font-size: 14px;">    </span><span class="" style="font-size: 14px;"><br class=""></span><span class="" style="font-size: 14px;"><span class="Apple-tab-span" style="white-space: pre;"> </span>NSLog(@"Error writting file ");<br class="">}</span><div class=""><br class=""></div><span class="" style="font-size: 14px;">NSString *result = [NSString stringWithContentsOfFile:dalaiPath encoding:NSUTF8StringEncoding error:NULL];</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;"><br class="">The expected result is this file in printed in text format<br class=""><br class="">-----BEGIN PKCS7-----</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">MIIG7QYJKoZIhvcNAQcCoIIG3jCCBtoCAQExCzAJBgUrDgMCGgUAMIIBWAYJKoZI</span></div><div class=""><span class="" style="font-size: 14px;">…….</span></div><div class=""><span class="" style="font-size: 14px;">qz5dxSDJ4rYBoio1ZncTIwUnpHAWwe2OTWt9wSEu3d5elPFXQ</span></div><div class=""><span class="" style="font-size: 14px;">mw</span></div><span class="" style="font-size: 14px;">==<br class="">-----END PKCS7——</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;"><br class="">but I obtain, the length of the string is completely different (short) I cannot get the -----END PKCS7------ part of the message. Now the first part of the message seems right. But not the last.</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""><br class="">-----BEGIN PKCS7-----</span><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;">MIIF3QYJKoZIhvcNAQcCoIIFzjCCBcoCAQExDzANBglghkgBZQMEAgEFADAPBgkq</span></div><div class=""><span class="" style="font-size: 14px;">…….</span></div><div class=""><span class="" style="font-size: 14px;">aPdcT7Wg5StNrGYsmmRzxaY=</span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><div class=""><span class="" style="font-size: 14px;"><br class=""></span></div><span class="" style="font-size: 14px;">Can anyone please give a clue of what I may be doing wrong?<br class=""><br class="">Thanks</span></div></div></div></body></html>