Skip to content

Commit f811807

Browse files
add smime detatched example
1 parent 21cc2df commit f811807

2 files changed

Lines changed: 81 additions & 14 deletions

File tree

pkcs7/smime-verify.c

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,16 @@ static int ReadSmimeAndCert(char* smimeFile, char* certFile, byte* smime,
135135
else {
136136
ret = XFREAD(smime, 1, *smimeSz, f);
137137
if (ret >= 0) {
138-
*smimeSz = ret;
139-
ret = 0;
140-
XFCLOSE(f);
138+
if (ret == *smimeSz) {
139+
printf("smime read in was larger than buffer\n");
140+
XFCLOSE(f);
141+
return -1;
142+
}
143+
else {
144+
*smimeSz = ret;
145+
ret = 0;
146+
XFCLOSE(f);
147+
}
141148
}
142149
}
143150

@@ -149,9 +156,16 @@ static int ReadSmimeAndCert(char* smimeFile, char* certFile, byte* smime,
149156
else {
150157
ret = XFREAD(cert, 1, *certSz, f);
151158
if (ret >= 0) {
152-
*certSz = ret;
153-
ret = 0;
154-
XFCLOSE(f);
159+
if (ret == *certSz) {
160+
printf("Cert read in was larger than buffer\n");
161+
XFCLOSE(f);
162+
return -1;
163+
}
164+
else {
165+
*certSz = ret;
166+
ret = 0;
167+
XFCLOSE(f);
168+
}
155169
}
156170
}
157171

@@ -173,6 +187,11 @@ int main(int argc, char** argv)
173187
return -1;
174188
}
175189

190+
if (wolfSSL_Init() != WOLFSSL_SUCCESS) {
191+
printf("Failure to initialize wolfSSL library\n");
192+
return -1;
193+
}
194+
176195
ret = ReadSmimeAndCert(argv[1], argv[2], smime, &smimeSz, cert, &certSz);
177196
if (ret == 0) {
178197
ret = Verify(smime, smimeSz, cert, certSz, 0);
@@ -184,6 +203,7 @@ int main(int argc, char** argv)
184203
}
185204
}
186205

206+
wolfSSL_Cleanup();
187207
return ret;
188208
}
189209
#else

pkcs7/smime.c

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,14 @@ static int Create(byte* smime, int* smimeSz, byte* key, int keySz,
9898
if (ret == 0) {
9999
ret = wolfSSL_BIO_read(out, smime, *smimeSz);
100100
if (ret > 0) {
101-
*smimeSz = ret;
102-
ret = 0;
101+
if (ret == *smimeSz) {
102+
printf("output smime buffer too small\n");
103+
ret = -1;
104+
}
105+
else {
106+
*smimeSz = ret;
107+
ret = 0;
108+
}
103109
}
104110
else {
105111
ret = -1;
@@ -128,9 +134,16 @@ static int ReadKeyAndCert(char* keyFile, char* certFile, byte* key, int* keySz,
128134
else {
129135
ret = XFREAD(key, 1, *keySz, f);
130136
if (ret >= 0) {
131-
*keySz = ret;
132-
ret = 0;
133-
XFCLOSE(f);
137+
if (ret == *keySz) {
138+
printf("Key read in is larger than buffer\n");
139+
XFCLOSE(f);
140+
return -1;
141+
}
142+
else {
143+
*keySz = ret;
144+
ret = 0;
145+
XFCLOSE(f);
146+
}
134147
}
135148
}
136149

@@ -142,9 +155,16 @@ static int ReadKeyAndCert(char* keyFile, char* certFile, byte* key, int* keySz,
142155
else {
143156
ret = XFREAD(cert, 1, *certSz, f);
144157
if (ret >= 0) {
145-
*certSz = ret;
146-
ret = 0;
147-
XFCLOSE(f);
158+
if (ret == *certSz) {
159+
printf("Cert read in is larger than buffer\n");
160+
XFCLOSE(f);
161+
return -1;
162+
}
163+
else {
164+
*certSz = ret;
165+
ret = 0;
166+
XFCLOSE(f);
167+
}
148168
}
149169
}
150170

@@ -173,6 +193,11 @@ int main(int argc, char** argv)
173193
return -1;
174194
}
175195

196+
if (wolfSSL_Init() != WOLFSSL_SUCCESS) {
197+
printf("Failure to initialize wolfSSL library\n");
198+
return -1;
199+
}
200+
176201
ret = ReadKeyAndCert(argv[1], argv[2], key, &keySz, cert, &certSz);
177202
if (ret == 0)
178203
ret = Create(smime, &smimeSz, key, keySz, cert, certSz,
@@ -191,6 +216,28 @@ int main(int argc, char** argv)
191216
}
192217
}
193218

219+
/* create detached pkcs7 smime bundle */
220+
printf("\n");
221+
smimeSz = 3072;
222+
memset(smime, 0, smimeSz);
223+
if (ret == 0)
224+
ret = Create(smime, &smimeSz, key, keySz, cert, certSz,
225+
content, contentSz, PKCS7_DETACHED);
226+
if (ret == 0) {
227+
FILE* f;
228+
printf("Generated SMIME : ");
229+
for (i = 0; i < smimeSz; i++)
230+
printf("%02X", smime[i]);
231+
printf("\n");
232+
printf("output to file ./detached-smime-created.p7s\n");
233+
f = fopen("./detached-smime-created.p7s", "wb");
234+
if (f != NULL) {
235+
fwrite(smime, 1, smimeSz, f);
236+
fclose(f);
237+
}
238+
}
239+
240+
wolfSSL_Cleanup();
194241
return ret;
195242
}
196243
#else

0 commit comments

Comments
 (0)