summaryrefslogtreecommitdiffstats
path: root/crypto/pkcs7/enc.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>1999-07-30 01:12:46 +0000
committerDr. Stephen Henson <steve@openssl.org>1999-07-30 01:12:46 +0000
commit922180d794873b3aa6fac3412a73c829b1dbd27c (patch)
tree3d3bf6d64f6df4d0a292655002b1fcf8a1154890 /crypto/pkcs7/enc.c
parent12ea44704a320d3abddb0db9d8560178cca86db0 (diff)
Allow the PKCS#7 (S/MIME encrypt) application to support more than one
recipient.
Diffstat (limited to 'crypto/pkcs7/enc.c')
-rw-r--r--crypto/pkcs7/enc.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/crypto/pkcs7/enc.c b/crypto/pkcs7/enc.c
index 22bf9b04b5..43bfd10a23 100644
--- a/crypto/pkcs7/enc.c
+++ b/crypto/pkcs7/enc.c
@@ -74,6 +74,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 +97,20 @@ 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))) 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 +128,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 */