int main(int argc, char** argv) { int encryptedSz, decryptedSz; byte encrypted[1024]; byte decrypted[1024]; #ifdef DEBUG_WOLFSSL wolfSSL_Debugging_ON(); #endif encryptedSz = encryptedData_encrypt(encrypted, sizeof(encrypted)); if (encryptedSz < 0) return -1; #ifdef DEBUG_WOLFSSL printf("EncryptedData DER (%d bytes):\n", encryptedSz); WOLFSSL_BUFFER(encrypted, encryptedSz); #endif decryptedSz = encryptedData_decrypt(encrypted, encryptedSz, decrypted, sizeof(decrypted)); if (decryptedSz < 0) return -1; #ifdef DEBUG_WOLFSSL printf("DecryptedData DER (%d bytes):\n", decryptedSz); WOLFSSL_BUFFER(decrypted, decryptedSz); #endif (void)argc; (void)argv; return 0; }
static int signedData_verify(byte* in, word32 inSz, byte* cert, word32 certSz, byte* key, word32 keySz, byte* out, word32 outSz, int devId) { int ret; PKCS7* pkcs7; pkcs7 = wc_PKCS7_New(NULL, devId); if (pkcs7 == NULL) return -1; /* decode signedData, returns size */ ret = wc_PKCS7_VerifySignedData(pkcs7, in, inSz); if (ret < 0 || (pkcs7->contentSz != sizeof(data)) || (XMEMCMP(pkcs7->content, data, pkcs7->contentSz) != 0)) { printf("ERROR: Failed to verify SignedData bundle, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); return -1; } else { printf("Successfully verified SignedData bundle.\n"); #ifdef DEBUG_WOLFSSL printf("Decoded content (%d bytes):\n", pkcs7->contentSz); WOLFSSL_BUFFER(pkcs7->content, pkcs7->contentSz); #endif } wc_PKCS7_Free(pkcs7); return ret; }
static int signedData_sign_attrs(byte* cert, word32 certSz, byte* key, word32 keySz, byte* out, word32 outSz) { int ret; PKCS7* pkcs7; static byte messageTypeOid[] = { 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01, 0x09, 0x02 }; static byte messageType[] = { 0x13, 2, '1', '9' }; PKCS7Attrib attribs[] = { { messageTypeOid, sizeof(messageTypeOid), messageType, sizeof(messageType) } }; /* init PKCS7 */ pkcs7 = wc_PKCS7_New(NULL, INVALID_DEVID); if (pkcs7 == NULL) return -1; ret = wc_PKCS7_InitWithCert(pkcs7, cert, certSz); if (ret != 0) { printf("ERROR: wc_PKCS7_InitWithCert() failed, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); return -1; } /* encode Signed FirmwarePkgData */ ret = wc_PKCS7_EncodeSignedFPD(pkcs7, key, keySz, RSAk, SHA256h, (byte*)data, sizeof(data), attribs, sizeof(attribs)/sizeof(PKCS7Attrib), out, outSz); if (ret <= 0) { printf("ERROR: wc_PKCS7_EncodeSignedFirmwarePkgData() failed, " "ret = %d\n", ret); wc_PKCS7_Free(pkcs7); return -1; } else { printf("Successfully encoded Signed FirmwarePkgData bundle (%s)\n", encodedFileAttrs); #ifdef DEBUG_WOLFSSL printf("Encoded DER (%d bytes):\n", ret); WOLFSSL_BUFFER(out, ret); #endif if (write_file_buffer(encodedFileAttrs, out, ret) != 0) { printf("ERROR: error writing encoded to output file\n"); return -1; } } wc_PKCS7_Free(pkcs7); return ret; }
int main(int argc, char** argv) { int ret; int encryptedSz, decryptedSz; word32 certSz, keySz; byte cert[2048]; byte key[2048]; byte encrypted[1024]; byte decrypted[1024]; #ifdef DEBUG_WOLFSSL wolfSSL_Debugging_ON(); #endif certSz = sizeof(cert); keySz = sizeof(key); ret = load_certs(cert, &certSz, key, &keySz); if (ret != 0) return -1; encryptedSz = authEnvelopedData_encrypt(cert, certSz, key, keySz, encrypted, sizeof(encrypted)); if (encryptedSz < 0) return -1; #ifdef DEBUG_WOLFSSL printf("AuthEnvelopedData DER (%d byte):\n", encryptedSz); WOLFSSL_BUFFER(encrypted, encryptedSz); #endif decryptedSz = authEnvelopedData_decrypt(encrypted, encryptedSz, cert, certSz, key, keySz, decrypted, sizeof(decrypted)); if (decryptedSz < 0) return -1; #ifdef DEBUG_WOLFSSL printf("Decrypted content (%d byte):\n", decryptedSz); WOLFSSL_BUFFER(decrypted, decryptedSz); #endif (void)argc; (void)argv; return 0; }
int main(int argc, char** argv) { int rc = 0; PKCS7 pkcs7; XFILE derFile; byte* derBuf = NULL; word32 derSz = 0; (void)argc; (void)argv; #ifdef DEBUG_WOLFSSL wolfSSL_Debugging_ON(); #endif /* load DER PKCS7 */ derFile = fopen("signed.p7s", "rb"); if (derFile) { fseek(derFile, 0, SEEK_END); derSz = (int)ftell(derFile); rewind(derFile); derBuf = (byte*)XMALLOC(derSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (derBuf == NULL) { rc = MEMORY_E; goto exit; } rc = (int)fread(derBuf, 1, derSz, derFile); fclose(derFile); if (rc != derSz) { printf("Failed to read der file!\n"); return -1; } } printf("Der %d\n", derSz); WOLFSSL_BUFFER(derBuf, derSz); /* Test verify */ rc = wc_PKCS7_Init(&pkcs7, NULL, INVALID_DEVID); if (rc != 0) goto exit; rc = wc_PKCS7_InitWithCert(&pkcs7, NULL, 0); if (rc != 0) goto exit; rc = wc_PKCS7_VerifySignedData(&pkcs7, derBuf, derSz); if (rc != 0) goto exit; printf("PKCS7 Verify Success\n"); exit: if (rc != 0) printf("RC=%d\n", rc); wc_PKCS7_Free(&pkcs7); XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); return rc; }
static int signedData_verify(byte* in, word32 inSz, byte* cert, word32 certSz, byte* key, word32 keySz, byte* out, word32 outSz) { int ret; PKCS7* pkcs7; pkcs7 = wc_PKCS7_New(NULL, INVALID_DEVID); if (pkcs7 == NULL) return -1; /* decode signedData, returns size */ ret = wc_PKCS7_VerifySignedData(pkcs7, in, inSz); if (ret < 0) { printf("ERROR: Failed to verify SignedData bundle, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); return -1; } /* decode inner compressedData */ ret = wc_PKCS7_DecodeCompressedData(pkcs7, pkcs7->content, pkcs7->contentSz, out, outSz); if (ret < 0) { printf("ERROR: failed to decode inner CompressedData, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); return -1; } /* compare decoded to expected */ if ((ret != sizeof(data)) || XMEMCMP(data, out, ret)) { printf("Extracted FirmwarePkgData data does not match expected!\n"); wc_PKCS7_Free(pkcs7); return -1; } else { printf("Successfully extracted and verified bundle contents\n"); #ifdef DEBUG_WOLFSSL printf("Decoded content (%d bytes):\n", ret); WOLFSSL_BUFFER(out, ret); #endif } wc_PKCS7_Free(pkcs7); return ret; }
static int signedData_sign_noattrs(byte* cert, word32 certSz, byte* privateKey, word32 privateKeySz, byte* out, word32 outSz) { int ret; PKCS7* pkcs7; /* init PKCS7 */ pkcs7 = wc_PKCS7_New(NULL, INVALID_DEVID); if (pkcs7 == NULL) return -1; ret = wc_PKCS7_InitWithCert(pkcs7, cert, certSz); if (ret != 0) { printf("ERROR: wc_PKCS7_InitWithCert() failed, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); return -1; } /* encode Signed Compressed FirmwarePkgData */ ret = wc_PKCS7_EncodeSignedCompressedFPD(pkcs7, privateKey, privateKeySz, RSAk, SHA256h, (byte*)data, sizeof(data), NULL, 0, out, outSz); if (ret <= 0) { printf("ERROR: wc_PKCS7_EncodeSignedCompressedFPD() failed, " "ret = %d\n", ret); wc_PKCS7_Free(pkcs7); return -1; } else { printf("Successfully encoded Signed Compressed FirmwarePkgData (%s)\n", encodedFileNoAttrs); #ifdef DEBUG_WOLFSSL printf("Encoded DER (%d bytes):\n", ret); WOLFSSL_BUFFER(out, ret); #endif if (write_file_buffer(encodedFileNoAttrs, out, ret) != 0) { printf("ERROR: error writing encoded to output file\n"); return -1; } } wc_PKCS7_Free(pkcs7); return ret; }
void WOLFSSL_BUFFER(const byte* buffer, word32 length) { #define LINE_LEN 16 if (loggingEnabled) { word32 i; char line[80]; if (!buffer) { wolfssl_log(INFO_LOG, "\tNULL"); return; } sprintf(line, "\t"); for (i = 0; i < LINE_LEN; i++) { if (i < length) sprintf(line + 1 + i * 3,"%02x ", buffer[i]); else sprintf(line + 1 + i * 3, " "); } sprintf(line + 1 + LINE_LEN * 3, "| "); for (i = 0; i < LINE_LEN; i++) if (i < length) sprintf(line + 3 + LINE_LEN * 3 + i, "%c", 31 < buffer[i] && buffer[i] < 127 ? buffer[i] : '.'); wolfssl_log(INFO_LOG, line); if (length > LINE_LEN) WOLFSSL_BUFFER(buffer + LINE_LEN, length - LINE_LEN); } }
static int signedData_sign_noattrs(byte* cert, word32 certSz, byte* key, word32 keySz, byte* out, word32 outSz, int devId) { int ret; PKCS7* pkcs7; WC_RNG rng; /* init rng */ ret = wc_InitRng(&rng); if (ret != 0) { printf("ERROR: wc_InitRng() failed, ret = %d\n", ret); return -1; } /* init PKCS7 */ pkcs7 = wc_PKCS7_New(NULL, devId); if (pkcs7 == NULL) { wc_FreeRng(&rng); return -1; } ret = wc_PKCS7_InitWithCert(pkcs7, cert, certSz); if (ret != 0) { printf("ERROR: wc_PKCS7_InitWithCert() failed, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); wc_FreeRng(&rng); return -1; } pkcs7->rng = &rng; pkcs7->content = (byte*)data; pkcs7->contentSz = sizeof(data); pkcs7->contentOID = DATA; pkcs7->hashOID = SHA256h; pkcs7->encryptOID = RSAk; pkcs7->privateKey = key; pkcs7->privateKeySz = keySz; pkcs7->signedAttribs = NULL; pkcs7->signedAttribsSz = 0; /* encode signedData, returns size */ ret = wc_PKCS7_EncodeSignedData(pkcs7, out, outSz); if (ret <= 0) { printf("ERROR: wc_PKCS7_EncodeSignedData() failed, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); wc_FreeRng(&rng); return -1; } else { printf("Successfully encoded SignedData bundle (%s)\n", encodedFileNoAttrs); #ifdef DEBUG_WOLFSSL printf("Encoded DER (%d bytes):\n", ret); WOLFSSL_BUFFER(out, ret); #endif if (write_file_buffer(encodedFileNoAttrs, out, ret) != 0) { printf("ERROR: error writing encoded to output file\n"); return -1; } } wc_PKCS7_Free(pkcs7); wc_FreeRng(&rng); return ret; }
static int signedData_sign_attrs(byte* cert, word32 certSz, byte* key, word32 keySz, byte* out, word32 outSz, int devId) { int ret; PKCS7* pkcs7; WC_RNG rng; static byte messageTypeOid[] = { 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01, 0x09, 0x02 }; static byte messageType[] = { 0x13, 2, '1', '9' }; PKCS7Attrib attribs[] = { { messageTypeOid, sizeof(messageTypeOid), messageType, sizeof(messageType) } }; /* init rng */ ret = wc_InitRng(&rng); if (ret != 0) { printf("ERROR: wc_InitRng() failed, ret = %d\n", ret); return -1; } /* init PKCS7 */ pkcs7 = wc_PKCS7_New(NULL, devId); if (pkcs7 == NULL) { wc_FreeRng(&rng); return -1; } ret = wc_PKCS7_InitWithCert(pkcs7, cert, certSz); if (ret != 0) { printf("ERROR: wc_PKCS7_InitWithCert() failed, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); wc_FreeRng(&rng); return -1; } pkcs7->rng = &rng; pkcs7->content = (byte*)data; pkcs7->contentSz = sizeof(data); pkcs7->contentOID = DATA; pkcs7->hashOID = SHA256h; pkcs7->encryptOID = RSAk; pkcs7->privateKey = key; pkcs7->privateKeySz = keySz; pkcs7->signedAttribs = attribs; pkcs7->signedAttribsSz = sizeof(attribs)/sizeof(PKCS7Attrib); /* encode signedData, returns size */ ret = wc_PKCS7_EncodeSignedData(pkcs7, out, outSz); if (ret <= 0) { printf("ERROR: wc_PKCS7_EncodeSignedData() failed, ret = %d\n", ret); wc_PKCS7_Free(pkcs7); wc_FreeRng(&rng); return -1; } else { printf("Successfully encoded SignedData bundle (%s)\n", encodedFileAttrs); #ifdef DEBUG_WOLFSSL printf("Encoded DER (%d bytes):\n", ret); WOLFSSL_BUFFER(out, ret); #endif if (write_file_buffer(encodedFileAttrs, out, ret) != 0) { printf("ERROR: error writing encoded to output file\n"); return -1; } } wc_PKCS7_Free(pkcs7); wc_FreeRng(&rng); return ret; }