| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 /* Simple S/MIME encrypt example */ | 
|  | 2 #include <openssl/pem.h> | 
|  | 3 #include <openssl/pkcs7.h> | 
|  | 4 #include <openssl/err.h> | 
|  | 5 | 
|  | 6 int main(int argc, char **argv) | 
|  | 7         { | 
|  | 8         BIO *in = NULL, *out = NULL, *tbio = NULL; | 
|  | 9         X509 *rcert = NULL; | 
|  | 10         STACK_OF(X509) *recips = NULL; | 
|  | 11         PKCS7 *p7 = NULL; | 
|  | 12         int ret = 1; | 
|  | 13 | 
|  | 14         /* | 
|  | 15          * On OpenSSL 0.9.9 only: | 
|  | 16          * for streaming set PKCS7_STREAM | 
|  | 17          */ | 
|  | 18         int flags = PKCS7_STREAM; | 
|  | 19 | 
|  | 20         OpenSSL_add_all_algorithms(); | 
|  | 21         ERR_load_crypto_strings(); | 
|  | 22 | 
|  | 23         /* Read in recipient certificate */ | 
|  | 24         tbio = BIO_new_file("signer.pem", "r"); | 
|  | 25 | 
|  | 26         if (!tbio) | 
|  | 27                 goto err; | 
|  | 28 | 
|  | 29         rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL); | 
|  | 30 | 
|  | 31         if (!rcert) | 
|  | 32                 goto err; | 
|  | 33 | 
|  | 34         /* Create recipient STACK and add recipient cert to it */ | 
|  | 35         recips = sk_X509_new_null(); | 
|  | 36 | 
|  | 37         if (!recips || !sk_X509_push(recips, rcert)) | 
|  | 38                 goto err; | 
|  | 39 | 
|  | 40         /* sk_X509_pop_free will free up recipient STACK and its contents | 
|  | 41          * so set rcert to NULL so it isn't freed up twice. | 
|  | 42          */ | 
|  | 43         rcert = NULL; | 
|  | 44 | 
|  | 45         /* Open content being encrypted */ | 
|  | 46 | 
|  | 47         in = BIO_new_file("encr.txt", "r"); | 
|  | 48 | 
|  | 49         if (!in) | 
|  | 50                 goto err; | 
|  | 51 | 
|  | 52         /* encrypt content */ | 
|  | 53         p7 = PKCS7_encrypt(recips, in, EVP_des_ede3_cbc(), flags); | 
|  | 54 | 
|  | 55         if (!p7) | 
|  | 56                 goto err; | 
|  | 57 | 
|  | 58         out = BIO_new_file("smencr.txt", "w"); | 
|  | 59         if (!out) | 
|  | 60                 goto err; | 
|  | 61 | 
|  | 62         /* Write out S/MIME message */ | 
|  | 63         if (!SMIME_write_PKCS7(out, p7, in, flags)) | 
|  | 64                 goto err; | 
|  | 65 | 
|  | 66         ret = 0; | 
|  | 67 | 
|  | 68         err: | 
|  | 69 | 
|  | 70         if (ret) | 
|  | 71                 { | 
|  | 72                 fprintf(stderr, "Error Encrypting Data\n"); | 
|  | 73                 ERR_print_errors_fp(stderr); | 
|  | 74                 } | 
|  | 75 | 
|  | 76         if (p7) | 
|  | 77                 PKCS7_free(p7); | 
|  | 78         if (rcert) | 
|  | 79                 X509_free(rcert); | 
|  | 80         if (recips) | 
|  | 81                 sk_X509_pop_free(recips, X509_free); | 
|  | 82 | 
|  | 83         if (in) | 
|  | 84                 BIO_free(in); | 
|  | 85         if (out) | 
|  | 86                 BIO_free(out); | 
|  | 87         if (tbio) | 
|  | 88                 BIO_free(tbio); | 
|  | 89 | 
|  | 90         return ret; | 
|  | 91 | 
|  | 92         } | 
| OLD | NEW | 
|---|