forked from wolfSSL/wolfssl
Fixes for RSA TSIP RSA Sign/Verify. Tested on RX72N EnvisionKit. Added THREADX threading support.
``` Start wolf tsip crypt Test simple crypt test by using TSIP sha_test() passed sha256_test() passed tsip_aes_cbc_test() passed tsip_aes256_test() passed tsip_rsa_test(2048) passed tsip_rsa_SignVerify_test(2048) passed End wolf tsip crypt Test ```
This commit is contained in:
@ -523,7 +523,7 @@ static void tskAes256_Gcm_Test(void *pvParam)
|
|||||||
#endif /* FREERTOS */
|
#endif /* FREERTOS */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WOLFSSL_AES_128)
|
#if defined(WOLFSSL_AES_128) && defined(HAVE_AESGCM)
|
||||||
|
|
||||||
static int tsip_aesgcm128_test(int prnt, tsip_aes_key_index_t* aes128_key)
|
static int tsip_aesgcm128_test(int prnt, tsip_aes_key_index_t* aes128_key)
|
||||||
{
|
{
|
||||||
@ -805,6 +805,7 @@ static int tsip_rsa_SignVerify_test(int prnt, int keySize)
|
|||||||
const char inStr2[] = TEST_STRING2;
|
const char inStr2[] = TEST_STRING2;
|
||||||
const word32 inLen = (word32)TEST_STRING_SZ;
|
const word32 inLen = (word32)TEST_STRING_SZ;
|
||||||
const word32 outSz = RSA_TEST_BYTES;
|
const word32 outSz = RSA_TEST_BYTES;
|
||||||
|
word32 signSz = 0;
|
||||||
byte *in = NULL;
|
byte *in = NULL;
|
||||||
byte *in2 = NULL;
|
byte *in2 = NULL;
|
||||||
byte *out= NULL;
|
byte *out= NULL;
|
||||||
@ -848,15 +849,16 @@ static int tsip_rsa_SignVerify_test(int prnt, int keySize)
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
signSz = ret;
|
||||||
|
|
||||||
/* this should fail */
|
/* this should fail */
|
||||||
ret = wc_RsaSSL_Verify(in2, inLen, out, keySize/8, key);
|
ret = wc_RsaSSL_Verify(out, signSz, in2, inLen, key);
|
||||||
if (ret != SIG_VERIFY_E) {
|
if (ret != SIG_VERIFY_E) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
/* this should succeed */
|
/* this should succeed */
|
||||||
ret = wc_RsaSSL_Verify(in, inLen, out, keySize/8, key);
|
ret = wc_RsaSSL_Verify(out, signSz, in, inLen, key);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
@ -1223,6 +1225,7 @@ int tsip_crypt_test(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_AESGCM
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
|
|
||||||
ret = tsip_aesgcm128_test(1, &g_user_aes128_key_index1);
|
ret = tsip_aesgcm128_test(1, &g_user_aes128_key_index1);
|
||||||
@ -1234,8 +1237,10 @@ int tsip_crypt_test(void)
|
|||||||
ret = tsip_aesgcm256_test(1, &g_user_aes256_key_index1);
|
ret = tsip_aesgcm256_test(1, &g_user_aes256_key_index1);
|
||||||
|
|
||||||
}
|
}
|
||||||
#if defined(WOLFSSL_KEY_GEN) && \
|
#endif
|
||||||
defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
|
|
||||||
|
#if defined(WOLFSSL_KEY_GEN) && \
|
||||||
|
defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
Clr_CallbackCtx(&userContext);
|
Clr_CallbackCtx(&userContext);
|
||||||
@ -1248,20 +1253,21 @@ int tsip_crypt_test(void)
|
|||||||
|
|
||||||
#if RSA_MIN_SIZE <= 1024
|
#if RSA_MIN_SIZE <= 1024
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
userContext.wrappedKeyType = TSIP_KEY_TYPE_RSA1024;
|
userContext.wrappedKeyType = TSIP_KEY_TYPE_RSA1024;
|
||||||
printf(" tsip_rsa_test(1024)");
|
printf(" tsip_rsa_test(1024)");
|
||||||
ret = tsip_rsa_test(1, 1024);
|
ret = tsip_rsa_test(1, 1024);
|
||||||
RESULT_STR(ret)
|
RESULT_STR(ret)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
userContext.wrappedKeyType = TSIP_KEY_TYPE_RSA2048;
|
userContext.wrappedKeyType = TSIP_KEY_TYPE_RSA2048;
|
||||||
printf(" tsip_rsa_test(2048)");
|
printf(" tsip_rsa_test(2048)");
|
||||||
ret = tsip_rsa_test(1, 2048);
|
ret = tsip_rsa_test(1, 2048);
|
||||||
RESULT_STR(ret)
|
RESULT_STR(ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if RSA_MIN_SIZE <= 1024
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
printf(" tsip_rsa_SignVerify_test(1024)");
|
printf(" tsip_rsa_SignVerify_test(1024)");
|
||||||
|
|
||||||
@ -1274,6 +1280,7 @@ int tsip_crypt_test(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Clr_CallbackCtx(&userContext);
|
Clr_CallbackCtx(&userContext);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
printf(" tsip_rsa_SignVerify_test(2048)");
|
printf(" tsip_rsa_SignVerify_test(2048)");
|
||||||
@ -1287,12 +1294,11 @@ int tsip_crypt_test(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Clr_CallbackCtx(&userContext);
|
Clr_CallbackCtx(&userContext);
|
||||||
#endif
|
#endif /* WOLFSSL_KEY_GEN && WOLFSSL_RENESAS_TSIP_CRYPTONLY */
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,6 +279,16 @@ static int Renesas_cmn_CryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
if (info->pk.type == WC_PK_TYPE_RSA_GET_SIZE) {
|
||||||
|
if (cbInfo->wrappedKeyType == TSIP_KEY_TYPE_RSA2048) {
|
||||||
|
*info->pk.rsa_get_size.keySize = 256;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
else if (cbInfo->wrappedKeyType == TSIP_KEY_TYPE_RSA1024) {
|
||||||
|
*info->pk.rsa_get_size.keySize = 128;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif /* !NO_RSA */
|
#endif /* !NO_RSA */
|
||||||
#if defined(HAVE_ECC)
|
#if defined(HAVE_ECC)
|
||||||
#if defined(WOLFSSL_RENESAS_TSIP_TLS)
|
#if defined(WOLFSSL_RENESAS_TSIP_TLS)
|
||||||
|
@ -234,7 +234,7 @@ int wc_tsip_RsaFunction(wc_CryptoInfo* info, TsipUserCtx* tuc)
|
|||||||
plain.pdata = (uint8_t*)info->pk.rsa.in;
|
plain.pdata = (uint8_t*)info->pk.rsa.in;
|
||||||
plain.data_length = info->pk.rsa.inLen;
|
plain.data_length = info->pk.rsa.inLen;
|
||||||
cipher.pdata = (uint8_t*)info->pk.rsa.out;
|
cipher.pdata = (uint8_t*)info->pk.rsa.out;
|
||||||
cipher.data_length = info->pk.rsa.outLen;
|
cipher.data_length = *(info->pk.rsa.outLen);
|
||||||
|
|
||||||
if (keySize == TSIP_KEY_TYPE_RSA1024) {
|
if (keySize == TSIP_KEY_TYPE_RSA1024) {
|
||||||
ret = R_TSIP_RsaesPkcs1024Encrypt(&plain, &cipher,
|
ret = R_TSIP_RsaesPkcs1024Encrypt(&plain, &cipher,
|
||||||
@ -250,13 +250,13 @@ int wc_tsip_RsaFunction(wc_CryptoInfo* info, TsipUserCtx* tuc)
|
|||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
info->pk.rsa.outLen = cipher.data_length;
|
*(info->pk.rsa.outLen) = cipher.data_length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (type == RSA_PRIVATE_DECRYPT || type == RSA_PRIVATE_ENCRYPT)
|
else if (type == RSA_PRIVATE_DECRYPT || type == RSA_PRIVATE_ENCRYPT)
|
||||||
{
|
{
|
||||||
plain.pdata = (uint8_t*)info->pk.rsa.out;
|
plain.pdata = (uint8_t*)info->pk.rsa.out;
|
||||||
plain.data_length = info->pk.rsa.outLen;
|
plain.data_length = *(info->pk.rsa.outLen);
|
||||||
cipher.pdata = (uint8_t*)info->pk.rsa.in;
|
cipher.pdata = (uint8_t*)info->pk.rsa.in;
|
||||||
cipher.data_length = info->pk.rsa.inLen;
|
cipher.data_length = info->pk.rsa.inLen;
|
||||||
|
|
||||||
@ -274,7 +274,7 @@ int wc_tsip_RsaFunction(wc_CryptoInfo* info, TsipUserCtx* tuc)
|
|||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
info->pk.rsa.outLen = plain.data_length;
|
*(info->pk.rsa.outLen) = plain.data_length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tsip_hw_unlock();
|
tsip_hw_unlock();
|
||||||
@ -314,13 +314,13 @@ int wc_tsip_RsaVerifyPkcs(wc_CryptoInfo* info, TsipUserCtx* tuc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tsip_RsakeyImport(tuc) == 0) {
|
if (tsip_RsakeyImport(tuc) == 0) {
|
||||||
hashData.pdata = (uint8_t*)info->pk.rsa.in;
|
hashData.pdata = (uint8_t*)info->pk.rsa.out;
|
||||||
hashData.data_length = info->pk.rsa.inLen;
|
hashData.data_length = *(info->pk.rsa.outLen);
|
||||||
hashData.data_type =
|
hashData.data_type =
|
||||||
tuc->keyflgs_crypt.bits.message_type;/* message 0, hash 1 */
|
tuc->keyflgs_crypt.bits.message_type;/* message 0, hash 1 */
|
||||||
|
|
||||||
sigData.pdata = (uint8_t*)info->pk.rsa.out;
|
sigData.pdata = (uint8_t*)info->pk.rsa.in;
|
||||||
sigData.data_length = info->pk.rsa.outLen;
|
sigData.data_length = info->pk.rsa.inLen;
|
||||||
|
|
||||||
if ((ret = tsip_hw_lock()) == 0) {
|
if ((ret = tsip_hw_lock()) == 0) {
|
||||||
switch (tuc->wrappedKeyType) {
|
switch (tuc->wrappedKeyType) {
|
||||||
|
@ -1497,6 +1497,10 @@ typedef struct w64wrapper {
|
|||||||
#if !defined(__MINGW32__)
|
#if !defined(__MINGW32__)
|
||||||
#define WOLFSSL_THREAD_NO_JOIN __cdecl
|
#define WOLFSSL_THREAD_NO_JOIN __cdecl
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(THREADX)
|
||||||
|
typedef unsigned int THREAD_RETURN;
|
||||||
|
typedef TX_THREAD THREAD_TYPE;
|
||||||
|
#define WOLFSSL_THREAD
|
||||||
#else
|
#else
|
||||||
typedef unsigned int THREAD_RETURN;
|
typedef unsigned int THREAD_RETURN;
|
||||||
typedef size_t THREAD_TYPE;
|
typedef size_t THREAD_TYPE;
|
||||||
|
Reference in New Issue
Block a user