OpenSSL
1.0.1c
Main Page
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
demos
cms
cms_denc.c
Go to the documentation of this file.
1
/* S/MIME detached data encrypt example: rarely done but
2
* should the need arise this is an example....
3
*/
4
#include <
openssl/pem.h
>
5
#include <
openssl/cms.h
>
6
#include <
openssl/err.h
>
7
8
int
main
(
int
argc,
char
**argv)
9
{
10
BIO
*
in
= NULL, *
out
= NULL, *tbio = NULL, *dout = NULL;
11
X509
*rcert = NULL;
12
STACK_OF
(
X509
) *recips = NULL;
13
CMS_ContentInfo
*cms = NULL;
14
int
ret = 1;
15
16
int
flags
=
CMS_STREAM
|
CMS_DETACHED
;
17
18
OpenSSL_add_all_algorithms
();
19
ERR_load_crypto_strings
();
20
21
/* Read in recipient certificate */
22
tbio =
BIO_new_file
(
"signer.pem"
,
"r"
);
23
24
if
(!tbio)
25
goto
err;
26
27
rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
28
29
if
(!rcert)
30
goto
err;
31
32
/* Create recipient STACK and add recipient cert to it */
33
recips =
sk_X509_new_null
();
34
35
if
(!recips || !
sk_X509_push
(recips, rcert))
36
goto
err;
37
38
/* sk_X509_pop_free will free up recipient STACK and its contents
39
* so set rcert to NULL so it isn't freed up twice.
40
*/
41
rcert = NULL;
42
43
/* Open content being encrypted */
44
45
in =
BIO_new_file
(
"encr.txt"
,
"r"
);
46
47
dout =
BIO_new_file
(
"smencr.out"
,
"wb"
);
48
49
if
(!in)
50
goto
err;
51
52
/* encrypt content */
53
cms =
CMS_encrypt
(recips, in,
EVP_des_ede3_cbc
(), flags);
54
55
if
(!cms)
56
goto
err;
57
58
out =
BIO_new_file
(
"smencr.pem"
,
"w"
);
59
if
(!out)
60
goto
err;
61
62
if
(!
CMS_final
(cms, in, dout, flags))
63
goto
err;
64
65
/* Write out CMS structure without content */
66
if
(!PEM_write_bio_CMS(out, cms))
67
goto
err;
68
69
ret = 0;
70
71
err:
72
73
if
(ret)
74
{
75
fprintf(stderr,
"Error Encrypting Data\n"
);
76
ERR_print_errors_fp
(stderr);
77
}
78
79
if
(cms)
80
CMS_ContentInfo_free(cms);
81
if
(rcert)
82
X509_free(rcert);
83
if
(recips)
84
sk_X509_pop_free
(recips, X509_free);
85
86
if
(in)
87
BIO_free
(in);
88
if
(out)
89
BIO_free
(out);
90
if
(dout)
91
BIO_free
(dout);
92
if
(tbio)
93
BIO_free
(tbio);
94
95
return
ret;
96
97
}
Generated on Thu Jan 10 2013 09:53:41 for OpenSSL by
1.8.2