add smime detatched example

pull/379/head
Jacob Barthelmeh 2023-05-23 13:18:35 -06:00
parent 21cc2df19e
commit f811807462
2 changed files with 81 additions and 14 deletions

View File

@ -135,9 +135,16 @@ static int ReadSmimeAndCert(char* smimeFile, char* certFile, byte* smime,
else { else {
ret = XFREAD(smime, 1, *smimeSz, f); ret = XFREAD(smime, 1, *smimeSz, f);
if (ret >= 0) { if (ret >= 0) {
*smimeSz = ret; if (ret == *smimeSz) {
ret = 0; printf("smime read in was larger than buffer\n");
XFCLOSE(f); XFCLOSE(f);
return -1;
}
else {
*smimeSz = ret;
ret = 0;
XFCLOSE(f);
}
} }
} }
@ -149,9 +156,16 @@ static int ReadSmimeAndCert(char* smimeFile, char* certFile, byte* smime,
else { else {
ret = XFREAD(cert, 1, *certSz, f); ret = XFREAD(cert, 1, *certSz, f);
if (ret >= 0) { if (ret >= 0) {
*certSz = ret; if (ret == *certSz) {
ret = 0; printf("Cert read in was larger than buffer\n");
XFCLOSE(f); XFCLOSE(f);
return -1;
}
else {
*certSz = ret;
ret = 0;
XFCLOSE(f);
}
} }
} }
@ -173,6 +187,11 @@ int main(int argc, char** argv)
return -1; return -1;
} }
if (wolfSSL_Init() != WOLFSSL_SUCCESS) {
printf("Failure to initialize wolfSSL library\n");
return -1;
}
ret = ReadSmimeAndCert(argv[1], argv[2], smime, &smimeSz, cert, &certSz); ret = ReadSmimeAndCert(argv[1], argv[2], smime, &smimeSz, cert, &certSz);
if (ret == 0) { if (ret == 0) {
ret = Verify(smime, smimeSz, cert, certSz, 0); ret = Verify(smime, smimeSz, cert, certSz, 0);
@ -184,6 +203,7 @@ int main(int argc, char** argv)
} }
} }
wolfSSL_Cleanup();
return ret; return ret;
} }
#else #else

View File

@ -98,8 +98,14 @@ static int Create(byte* smime, int* smimeSz, byte* key, int keySz,
if (ret == 0) { if (ret == 0) {
ret = wolfSSL_BIO_read(out, smime, *smimeSz); ret = wolfSSL_BIO_read(out, smime, *smimeSz);
if (ret > 0) { if (ret > 0) {
*smimeSz = ret; if (ret == *smimeSz) {
ret = 0; printf("output smime buffer too small\n");
ret = -1;
}
else {
*smimeSz = ret;
ret = 0;
}
} }
else { else {
ret = -1; ret = -1;
@ -128,9 +134,16 @@ static int ReadKeyAndCert(char* keyFile, char* certFile, byte* key, int* keySz,
else { else {
ret = XFREAD(key, 1, *keySz, f); ret = XFREAD(key, 1, *keySz, f);
if (ret >= 0) { if (ret >= 0) {
*keySz = ret; if (ret == *keySz) {
ret = 0; printf("Key read in is larger than buffer\n");
XFCLOSE(f); XFCLOSE(f);
return -1;
}
else {
*keySz = ret;
ret = 0;
XFCLOSE(f);
}
} }
} }
@ -142,9 +155,16 @@ static int ReadKeyAndCert(char* keyFile, char* certFile, byte* key, int* keySz,
else { else {
ret = XFREAD(cert, 1, *certSz, f); ret = XFREAD(cert, 1, *certSz, f);
if (ret >= 0) { if (ret >= 0) {
*certSz = ret; if (ret == *certSz) {
ret = 0; printf("Cert read in is larger than buffer\n");
XFCLOSE(f); XFCLOSE(f);
return -1;
}
else {
*certSz = ret;
ret = 0;
XFCLOSE(f);
}
} }
} }
@ -173,6 +193,11 @@ int main(int argc, char** argv)
return -1; return -1;
} }
if (wolfSSL_Init() != WOLFSSL_SUCCESS) {
printf("Failure to initialize wolfSSL library\n");
return -1;
}
ret = ReadKeyAndCert(argv[1], argv[2], key, &keySz, cert, &certSz); ret = ReadKeyAndCert(argv[1], argv[2], key, &keySz, cert, &certSz);
if (ret == 0) if (ret == 0)
ret = Create(smime, &smimeSz, key, keySz, cert, certSz, ret = Create(smime, &smimeSz, key, keySz, cert, certSz,
@ -191,6 +216,28 @@ int main(int argc, char** argv)
} }
} }
/* create detached pkcs7 smime bundle */
printf("\n");
smimeSz = 3072;
memset(smime, 0, smimeSz);
if (ret == 0)
ret = Create(smime, &smimeSz, key, keySz, cert, certSz,
content, contentSz, PKCS7_DETACHED);
if (ret == 0) {
FILE* f;
printf("Generated SMIME : ");
for (i = 0; i < smimeSz; i++)
printf("%02X", smime[i]);
printf("\n");
printf("output to file ./detached-smime-created.p7s\n");
f = fopen("./detached-smime-created.p7s", "wb");
if (f != NULL) {
fwrite(smime, 1, smimeSz, f);
fclose(f);
}
}
wolfSSL_Cleanup();
return ret; return ret;
} }
#else #else