Fix some of the command line password stuff. New function
[openssl.git] / crypto / pkcs7 / enc.c
index 22bf9b04b5747e20d3d6f98db19fdf0fa2aa1e87..66a300aee7ccfcc6d64cab65ec9edb7640bb13b7 100644 (file)
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 #include <stdio.h>
+#include <string.h>
 #include <openssl/bio.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
@@ -74,6 +75,7 @@ char *argv[];
        int nodetach=1;
        char *keyfile = NULL;
        const EVP_CIPHER *cipher=NULL;
+       STACK_OF(X509) *recips=NULL;
 
        SSLeay_add_all_algorithms();
 
@@ -96,13 +98,21 @@ char *argv[];
                        keyfile = argv[2];
                        argc-=2;
                        argv+=2;
+                       if (!(in=BIO_new_file(keyfile,"r"))) goto err;
+                       if (!(x509=PEM_read_bio_X509(in,NULL,NULL,NULL)))
+                               goto err;
+                       if(!recips) recips = sk_X509_new_null();
+                       sk_X509_push(recips, x509);
+                       BIO_free(in);
                } else break;
        }
 
-       if (!BIO_read_filename(data,argv[1])) goto err;
+       if(!recips) {
+               fprintf(stderr, "No recipients\n");
+               goto err;
+       }
 
-       if ((in=BIO_new_file(keyfile,"r")) == NULL) goto err;
-       if ((x509=PEM_read_bio_X509(in,NULL,NULL)) == NULL) goto err;
+       if (!BIO_read_filename(data,argv[1])) goto err;
 
        p7=PKCS7_new();
 #if 0
@@ -120,9 +130,10 @@ char *argv[];
        if(!cipher) cipher = EVP_des_ede3_cbc();
 
        if (!PKCS7_set_cipher(p7,cipher)) goto err;
-       if (PKCS7_add_recipient(p7,x509) == NULL) goto err;
-
-
+       for(i = 0; i < sk_X509_num(recips); i++) {
+               if (!PKCS7_add_recipient(p7,sk_X509_value(recips, i))) goto err;
+       }
+       sk_X509_pop_free(recips, X509_free);
 
        /* Set the content of the signed to 'data' */
        /* PKCS7_content_new(p7,NID_pkcs7_data); not used in envelope */