Add in-place support for DES_ede3_cbc_encrypt

This commit is contained in:
Juliusz Sosinowicz
2023-04-05 15:50:51 +02:00
parent ffcc66bb53
commit 171c217ae5
2 changed files with 14 additions and 8 deletions

View File

@ -19880,6 +19880,10 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
else {
if (wc_Des3_SetKey(&des, key, (const byte*)ivec,
DES_DECRYPTION) == 0) {
if(lb_sz)
XMEMCPY(ivec, input+sz-lb_sz, DES_BLOCK_SIZE);
else
XMEMCPY(ivec, input+(blk-1)*DES_BLOCK_SIZE, DES_BLOCK_SIZE);
ret = wc_Des3_CbcDecrypt(&des, output, input, (word32)blk*DES_BLOCK_SIZE);
#if defined(WOLFSSL_ASYNC_CRYPT)
ret = wc_AsyncWait(ret, &des.asyncDev, WC_ASYNC_FLAG_NONE);
@ -19892,10 +19896,6 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
#endif
(void)ret; /* ignore return codes for processing */
XMEMCPY(output+sz-lb_sz, lastblock, lb_sz);
XMEMCPY(ivec, input+sz-lb_sz, DES_BLOCK_SIZE);
}
else {
XMEMCPY(ivec, input+(blk-1)*DES_BLOCK_SIZE, DES_BLOCK_SIZE);
}
}
}

View File

@ -7471,6 +7471,7 @@ WOLFSSL_TEST_SUBROUTINE int des3_test(void)
DES_key_schedule ks2;
DES_key_schedule ks3;
DES_cblock iv4;
byte tmp[sizeof(vector)];
XMEMCPY(ks1, key3, sizeof(DES_key_schedule));
XMEMCPY(ks2, key3 + 8, sizeof(DES_key_schedule));
@ -7479,17 +7480,22 @@ WOLFSSL_TEST_SUBROUTINE int des3_test(void)
XMEMSET(plain, 0, sizeof(plain));
XMEMSET(cipher, 0, sizeof(cipher));
/* Test in-place encrypt/decrypt */
XMEMCPY(tmp, vector, sizeof(vector));
/* Use i as the splitter */
XMEMCPY(iv4, iv3, sizeof(DES_cblock));
DES_ede3_cbc_encrypt(vector, cipher, (long)i, &ks1, &ks2, &ks3,
DES_ede3_cbc_encrypt(tmp, tmp, (long)i, &ks1, &ks2, &ks3,
&iv4, DES_ENCRYPT);
DES_ede3_cbc_encrypt(vector + i, cipher + i, (long)(sizeof(vector) - i),
DES_ede3_cbc_encrypt(tmp + i, tmp + i, (long)(sizeof(vector) - i),
&ks1, &ks2, &ks3, &iv4, DES_ENCRYPT);
XMEMCPY(cipher, tmp, sizeof(cipher));
XMEMCPY(iv4, iv3, sizeof(DES_cblock));
DES_ede3_cbc_encrypt(cipher, plain, (long)i, &ks1, &ks2, &ks3,
DES_ede3_cbc_encrypt(tmp, tmp, (long)i, &ks1, &ks2, &ks3,
&iv4, DES_DECRYPT);
DES_ede3_cbc_encrypt(cipher + i, plain + i, (long)(sizeof(cipher) - i),
DES_ede3_cbc_encrypt(tmp + i, tmp + i, (long)(sizeof(cipher) - i),
&ks1, &ks2, &ks3, &iv4, DES_DECRYPT);
XMEMCPY(plain, tmp, sizeof(plain));
if (XMEMCMP(plain, vector, sizeof(plain)))
return WC_TEST_RET_ENC_NC;