mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-01 03:34:39 +02:00
tests for added DES functions and fix check on DES key
This commit is contained in:
19
src/ssl.c
19
src/ssl.c
@@ -13865,13 +13865,20 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
|
||||
|
||||
|
||||
#ifndef NO_DES3
|
||||
/* WOLFSSL_SUCCESS on ok */
|
||||
/* 0 on ok */
|
||||
int wolfSSL_DES_key_sched(WOLFSSL_const_DES_cblock* key,
|
||||
WOLFSSL_DES_key_schedule* schedule)
|
||||
{
|
||||
WOLFSSL_ENTER("DES_key_sched");
|
||||
XMEMCPY(schedule, key, sizeof(const_DES_cblock));
|
||||
return WOLFSSL_SUCCESS;
|
||||
|
||||
if (key == NULL || schedule == NULL) {
|
||||
WOLFSSL_MSG("Null argument passed in");
|
||||
}
|
||||
else {
|
||||
XMEMCPY(schedule, key, sizeof(const_DES_cblock));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -14620,7 +14627,7 @@ static void ExternalFreeX509(WOLFSSL_X509* x509)
|
||||
}
|
||||
|
||||
if (dataSz < 0) {
|
||||
sz = (int)XSTRLEN(data);
|
||||
sz = (int)XSTRLEN((const char*)data);
|
||||
}
|
||||
else {
|
||||
sz = dataSz;
|
||||
@@ -17884,7 +17891,7 @@ int wolfSSL_DES_set_key_checked(WOLFSSL_const_DES_cblock* myDes,
|
||||
|
||||
/* check odd parity */
|
||||
for (i = 0; i < sz; i++) {
|
||||
unsigned char c = *((unsigned char*)key + i);
|
||||
unsigned char c = *((unsigned char*)myDes + i);
|
||||
if (((c & 0x01) ^
|
||||
((c >> 1) & 0x01) ^
|
||||
((c >> 2) & 0x01) ^
|
||||
@@ -17898,7 +17905,7 @@ int wolfSSL_DES_set_key_checked(WOLFSSL_const_DES_cblock* myDes,
|
||||
}
|
||||
}
|
||||
|
||||
if (wolfSSL_DES_is_weak_key(key) == 1) {
|
||||
if (wolfSSL_DES_is_weak_key(myDes) == 1) {
|
||||
WOLFSSL_MSG("Weak key found");
|
||||
return -2;
|
||||
}
|
||||
|
22
tests/api.c
22
tests/api.c
@@ -13092,21 +13092,22 @@ static void test_wolfSSL_DES(void)
|
||||
DES_set_key(&myDes, &key);
|
||||
|
||||
/* check, check of odd parity */
|
||||
XMEMSET(key, 4, sizeof(DES_key_schedule)); key[0] = 3; /*set even parity*/
|
||||
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
||||
XMEMSET(myDes, 4, sizeof(const_DES_cblock)); myDes[0] = 3; /*set even parity*/
|
||||
XMEMSET(key, 5, sizeof(DES_key_schedule));
|
||||
AssertIntEQ(DES_set_key_checked(&myDes, &key), -1);
|
||||
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
||||
|
||||
/* set odd parity for success case */
|
||||
key[0] = 4;
|
||||
myDes[0] = 4;
|
||||
AssertIntEQ(DES_set_key_checked(&myDes, &key), 0);
|
||||
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
||||
AssertIntEQ(key[i], myDes[i]);
|
||||
}
|
||||
AssertIntEQ(DES_is_weak_key(&myDes), 0);
|
||||
|
||||
/* check weak key */
|
||||
XMEMSET(key, 1, sizeof(DES_key_schedule));
|
||||
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
||||
XMEMSET(myDes, 1, sizeof(const_DES_cblock));
|
||||
XMEMSET(key, 5, sizeof(DES_key_schedule));
|
||||
AssertIntEQ(DES_set_key_checked(&myDes, &key), -2);
|
||||
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
||||
|
||||
@@ -13116,6 +13117,17 @@ static void test_wolfSSL_DES(void)
|
||||
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
||||
AssertIntEQ(key[i], myDes[i]);
|
||||
}
|
||||
AssertIntEQ(DES_is_weak_key(&myDes), 1);
|
||||
|
||||
/* check DES_key_sched API */
|
||||
XMEMSET(key, 1, sizeof(DES_key_schedule));
|
||||
AssertIntEQ(DES_key_sched(&myDes, NULL), 0);
|
||||
AssertIntEQ(DES_key_sched(NULL, &key), 0);
|
||||
AssertIntEQ(DES_key_sched(&myDes, &key), 0);
|
||||
/* compare arrays, should be the same */
|
||||
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
||||
AssertIntEQ(key[i], myDes[i]);
|
||||
}
|
||||
|
||||
printf(resultFmt, passed);
|
||||
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_DES3) */
|
||||
|
@@ -4197,9 +4197,42 @@ int des3_test(void)
|
||||
if (XMEMCMP(cipher, verify3, sizeof(cipher)))
|
||||
return -3907;
|
||||
|
||||
#if defined(OPENSSL_EXTRA) && !defined(WOLFCRYPT_ONLY)
|
||||
/* test the same vectors with using compatibility layer */
|
||||
{
|
||||
DES_key_schedule ks1;
|
||||
DES_key_schedule ks2;
|
||||
DES_key_schedule ks3;
|
||||
DES_cblock iv4;
|
||||
|
||||
XMEMCPY(ks1, key3, sizeof(DES_key_schedule));
|
||||
XMEMCPY(ks2, key3 + 8, sizeof(DES_key_schedule));
|
||||
XMEMCPY(ks3, key3 + 16, sizeof(DES_key_schedule));
|
||||
XMEMCPY(iv4, iv3, sizeof(DES_cblock));
|
||||
|
||||
XMEMSET(plain, 0, sizeof(plain));
|
||||
XMEMSET(cipher, 0, sizeof(cipher));
|
||||
|
||||
DES_ede3_cbc_encrypt(vector, cipher, sizeof(vector), &ks1, &ks2, &ks3,
|
||||
&iv4, DES_ENCRYPT);
|
||||
DES_ede3_cbc_encrypt(cipher, plain, sizeof(cipher), &ks1, &ks2, &ks3,
|
||||
&iv4, DES_DECRYPT);
|
||||
|
||||
if (XMEMCMP(plain, vector, sizeof(plain)))
|
||||
return -37;
|
||||
|
||||
if (XMEMCMP(cipher, verify3, sizeof(cipher)))
|
||||
return -38;
|
||||
}
|
||||
#endif /* OPENSSL_EXTRA */
|
||||
|
||||
wc_Des3Free(&enc);
|
||||
wc_Des3Free(&dec);
|
||||
|
||||
#ifdef WOLFSSL_ASYNC_CRYPT
|
||||
wc_Des3AsyncFree(&enc);
|
||||
wc_Des3AsyncFree(&dec);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif /* NO_DES */
|
||||
|
Reference in New Issue
Block a user