diff --git a/wolfcrypt/src/aes.c b/wolfcrypt/src/aes.c index a8c3035ff5..07eca61801 100644 --- a/wolfcrypt/src/aes.c +++ b/wolfcrypt/src/aes.c @@ -13567,8 +13567,8 @@ int wc_AesCcmEncrypt_ex(Aes* aes, byte* out, const byte* in, word32 sz, #endif static Aes* _AesNew_common(void* heap, int devId, int *result_code, - int aesInitType, const void* aesInitData, - int aesInitDataLen) + int aesInitType, unsigned char* id, + int idLen, const char* label) { int ret; Aes* aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_AES); @@ -13579,16 +13579,29 @@ static Aes* _AesNew_common(void* heap, int devId, int *result_code, switch (aesInitType) { #ifdef WOLF_PRIVATE_KEY_ID case AES_NEW_INIT_ID: - ret = wc_AesInit_Id(aes, (unsigned char*)(uintptr_t)aesInitData, - aesInitDataLen, heap, devId); + if (id == NULL || idLen == 0 || label != NULL) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_AesInit_Id(aes, id, idLen, heap, devId); + } break; case AES_NEW_INIT_LABEL: - ret = wc_AesInit_Label(aes, (const char*)aesInitData, - heap, devId); + if (label == NULL || id != NULL || idLen != 0) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_AesInit_Label(aes, label, heap, devId); + } break; #endif default: - ret = wc_AesInit(aes, heap, devId); + if (id != NULL || idLen != 0 || label != NULL) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_AesInit(aes, heap, devId); + } break; } if (ret != 0) { @@ -13597,8 +13610,9 @@ static Aes* _AesNew_common(void* heap, int devId, int *result_code, } } (void)aesInitType; - (void)aesInitData; - (void)aesInitDataLen; + (void)id; + (void)idLen; + (void)label; if (result_code != NULL) { *result_code = ret; @@ -13610,7 +13624,7 @@ static Aes* _AesNew_common(void* heap, int devId, int *result_code, Aes* wc_AesNew(void* heap, int devId, int *result_code) { return _AesNew_common(heap, devId, result_code, - AES_NEW_INIT_PLAIN, NULL, 0); + AES_NEW_INIT_PLAIN, NULL, 0, NULL); } #ifdef WOLF_PRIVATE_KEY_ID @@ -13618,14 +13632,14 @@ Aes* wc_AesNew_Id(unsigned char* id, int len, void* heap, int devId, int *result_code) { return _AesNew_common(heap, devId, result_code, - AES_NEW_INIT_ID, id, len); + AES_NEW_INIT_ID, id, len, NULL); } Aes* wc_AesNew_Label(const char* label, void* heap, int devId, int *result_code) { return _AesNew_common(heap, devId, result_code, - AES_NEW_INIT_LABEL, label, 0); + AES_NEW_INIT_LABEL, NULL, 0, label); } #endif /* WOLF_PRIVATE_KEY_ID */ diff --git a/wolfcrypt/src/cmac.c b/wolfcrypt/src/cmac.c index 7af409c993..6ffb93ad49 100644 --- a/wolfcrypt/src/cmac.c +++ b/wolfcrypt/src/cmac.c @@ -106,8 +106,8 @@ void ShiftAndXorRb(byte* out, byte* in) static int _InitCmac_common(Cmac* cmac, const byte* key, word32 keySz, int type, void* unused, void* heap, int devId, - int aesInitType, const void* aesInitData, - int aesInitDataLen) + int aesInitType, unsigned char* id, int idLen, + const char* label) { int ret = 0; #if defined(WOLFSSL_SE050) && defined(WOLFSSL_SE050_CRYPT) @@ -128,23 +128,24 @@ static int _InitCmac_common(Cmac* cmac, const byte* key, word32 keySz, * inspect them to determine the hardware key slot. */ #ifdef WOLF_PRIVATE_KEY_ID cmac->aesInitType = aesInitType; - if (aesInitType == CMAC_AES_INIT_ID && aesInitData != NULL && - aesInitDataLen > 0 && - aesInitDataLen <= (int)sizeof(cmac->id)) { - XMEMCPY(cmac->id, aesInitData, (word32)aesInitDataLen); - cmac->idLen = aesInitDataLen; + if (aesInitType == CMAC_AES_INIT_ID && id != NULL && + idLen > 0 && + idLen <= (int)sizeof(cmac->id)) { + XMEMCPY(cmac->id, id, (word32)idLen); + cmac->idLen = idLen; } - else if (aesInitType == CMAC_AES_INIT_LABEL && aesInitData != NULL) { - int labelLen = (int)XSTRLEN((const char*)aesInitData); + else if (aesInitType == CMAC_AES_INIT_LABEL && label != NULL) { + int labelLen = (int)XSTRLEN(label); if (labelLen > 0 && labelLen < (int)sizeof(cmac->label)) { - XMEMCPY(cmac->label, aesInitData, (word32)labelLen); + XMEMCPY(cmac->label, label, (word32)labelLen); cmac->labelLen = labelLen; } } #endif (void)aesInitType; - (void)aesInitData; - (void)aesInitDataLen; + (void)id; + (void)idLen; + (void)label; #ifdef WOLF_CRYPTO_CB /* Set devId regardless of value (invalid or not) */ @@ -178,16 +179,29 @@ static int _InitCmac_common(Cmac* cmac, const byte* key, word32 keySz, switch (aesInitType) { #ifdef WOLF_PRIVATE_KEY_ID case CMAC_AES_INIT_ID: - ret = wc_AesInit_Id(&cmac->aes, (unsigned char*)(uintptr_t)aesInitData, - aesInitDataLen, heap, devId); + if (id == NULL || idLen == 0 || label != NULL) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_AesInit_Id(&cmac->aes, id, idLen, heap, devId); + } break; case CMAC_AES_INIT_LABEL: - ret = wc_AesInit_Label(&cmac->aes, (const char*)aesInitData, - heap, devId); + if (label == NULL || id != NULL || idLen != 0) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_AesInit_Label(&cmac->aes, label, heap, devId); + } break; #endif default: - ret = wc_AesInit(&cmac->aes, heap, devId); + if (id != NULL || idLen != 0 || label != NULL) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_AesInit(&cmac->aes, heap, devId); + } break; } if (ret != 0) { @@ -238,7 +252,7 @@ int wc_InitCmac_ex(Cmac* cmac, const byte* key, word32 keySz, int type, void* unused, void* heap, int devId) { return _InitCmac_common(cmac, key, keySz, type, unused, heap, devId, - CMAC_AES_INIT_PLAIN, NULL, 0); + CMAC_AES_INIT_PLAIN, NULL, 0, NULL); } @@ -261,7 +275,7 @@ int wc_InitCmac_Id(Cmac* cmac, const byte* key, word32 keySz, void* heap, int devId) { return _InitCmac_common(cmac, key, keySz, type, unused, heap, devId, - CMAC_AES_INIT_ID, id, len); + CMAC_AES_INIT_ID, id, len, NULL); } @@ -271,7 +285,7 @@ int wc_InitCmac_Label(Cmac* cmac, const byte* key, word32 keySz, void* heap, int devId) { return _InitCmac_common(cmac, key, keySz, type, unused, heap, devId, - CMAC_AES_INIT_LABEL, label, 0); + CMAC_AES_INIT_LABEL, NULL, 0, label); } #endif /* WOLF_PRIVATE_KEY_ID */ diff --git a/wolfcrypt/src/rsa.c b/wolfcrypt/src/rsa.c index 0a3d9201e0..4bd5062596 100644 --- a/wolfcrypt/src/rsa.c +++ b/wolfcrypt/src/rsa.c @@ -192,8 +192,8 @@ static void wc_RsaCleanup(RsaKey* key) #endif static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code, - int rsaInitType, const void* rsaInitData, - int rsaInitDataLen) + int rsaInitType, unsigned char* id, + int idLen, const char* label) { int ret; RsaKey* key = (RsaKey*)XMALLOC(sizeof(RsaKey), heap, DYNAMIC_TYPE_RSA); @@ -204,16 +204,29 @@ static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code, switch (rsaInitType) { #ifdef WOLF_PRIVATE_KEY_ID case RSA_NEW_INIT_ID: - ret = wc_InitRsaKey_Id(key, (unsigned char*)(uintptr_t)rsaInitData, - rsaInitDataLen, heap, devId); + if (id == NULL || idLen == 0 || label != NULL) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_InitRsaKey_Id(key, id, idLen, heap, devId); + } break; case RSA_NEW_INIT_LABEL: - ret = wc_InitRsaKey_Label(key, (const char*)rsaInitData, - heap, devId); + if (label == NULL || id != NULL || idLen != 0) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_InitRsaKey_Label(key, label, heap, devId); + } break; #endif default: - ret = wc_InitRsaKey_ex(key, heap, devId); + if (id != NULL || idLen != 0 || label != NULL) { + ret = BAD_FUNC_ARG; + } + else { + ret = wc_InitRsaKey_ex(key, heap, devId); + } break; } if (ret != 0) { @@ -222,8 +235,9 @@ static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code, } } (void)rsaInitType; - (void)rsaInitData; - (void)rsaInitDataLen; + (void)id; + (void)idLen; + (void)label; if (result_code != NULL) { *result_code = ret; @@ -235,7 +249,7 @@ static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code, RsaKey* wc_NewRsaKey(void* heap, int devId, int *result_code) { return _NewRsaKey_common(heap, devId, result_code, - RSA_NEW_INIT_PLAIN, NULL, 0); + RSA_NEW_INIT_PLAIN, NULL, 0, NULL); } #ifdef WOLF_PRIVATE_KEY_ID @@ -243,14 +257,14 @@ RsaKey* wc_NewRsaKey_Id(unsigned char* id, int len, void* heap, int devId, int *result_code) { return _NewRsaKey_common(heap, devId, result_code, - RSA_NEW_INIT_ID, id, len); + RSA_NEW_INIT_ID, id, len, NULL); } RsaKey* wc_NewRsaKey_Label(const char* label, void* heap, int devId, int *result_code) { return _NewRsaKey_common(heap, devId, result_code, - RSA_NEW_INIT_LABEL, label, 0); + RSA_NEW_INIT_LABEL, NULL, 0, label); } #endif /* WOLF_PRIVATE_KEY_ID */