mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 20:24: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
|
#ifndef NO_DES3
|
||||||
/* WOLFSSL_SUCCESS on ok */
|
/* 0 on ok */
|
||||||
int wolfSSL_DES_key_sched(WOLFSSL_const_DES_cblock* key,
|
int wolfSSL_DES_key_sched(WOLFSSL_const_DES_cblock* key,
|
||||||
WOLFSSL_DES_key_schedule* schedule)
|
WOLFSSL_DES_key_schedule* schedule)
|
||||||
{
|
{
|
||||||
WOLFSSL_ENTER("DES_key_sched");
|
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) {
|
if (dataSz < 0) {
|
||||||
sz = (int)XSTRLEN(data);
|
sz = (int)XSTRLEN((const char*)data);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sz = dataSz;
|
sz = dataSz;
|
||||||
@@ -17884,7 +17891,7 @@ int wolfSSL_DES_set_key_checked(WOLFSSL_const_DES_cblock* myDes,
|
|||||||
|
|
||||||
/* check odd parity */
|
/* check odd parity */
|
||||||
for (i = 0; i < sz; i++) {
|
for (i = 0; i < sz; i++) {
|
||||||
unsigned char c = *((unsigned char*)key + i);
|
unsigned char c = *((unsigned char*)myDes + i);
|
||||||
if (((c & 0x01) ^
|
if (((c & 0x01) ^
|
||||||
((c >> 1) & 0x01) ^
|
((c >> 1) & 0x01) ^
|
||||||
((c >> 2) & 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");
|
WOLFSSL_MSG("Weak key found");
|
||||||
return -2;
|
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);
|
DES_set_key(&myDes, &key);
|
||||||
|
|
||||||
/* check, check of odd parity */
|
/* check, check of odd parity */
|
||||||
XMEMSET(key, 4, sizeof(DES_key_schedule)); key[0] = 3; /*set even parity*/
|
XMEMSET(myDes, 4, sizeof(const_DES_cblock)); myDes[0] = 3; /*set even parity*/
|
||||||
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
XMEMSET(key, 5, sizeof(DES_key_schedule));
|
||||||
AssertIntEQ(DES_set_key_checked(&myDes, &key), -1);
|
AssertIntEQ(DES_set_key_checked(&myDes, &key), -1);
|
||||||
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
||||||
|
|
||||||
/* set odd parity for success case */
|
/* set odd parity for success case */
|
||||||
key[0] = 4;
|
myDes[0] = 4;
|
||||||
AssertIntEQ(DES_set_key_checked(&myDes, &key), 0);
|
AssertIntEQ(DES_set_key_checked(&myDes, &key), 0);
|
||||||
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
||||||
AssertIntEQ(key[i], myDes[i]);
|
AssertIntEQ(key[i], myDes[i]);
|
||||||
}
|
}
|
||||||
|
AssertIntEQ(DES_is_weak_key(&myDes), 0);
|
||||||
|
|
||||||
/* check weak key */
|
/* check weak key */
|
||||||
XMEMSET(key, 1, sizeof(DES_key_schedule));
|
XMEMSET(myDes, 1, sizeof(const_DES_cblock));
|
||||||
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
XMEMSET(key, 5, sizeof(DES_key_schedule));
|
||||||
AssertIntEQ(DES_set_key_checked(&myDes, &key), -2);
|
AssertIntEQ(DES_set_key_checked(&myDes, &key), -2);
|
||||||
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
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++) {
|
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
||||||
AssertIntEQ(key[i], myDes[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);
|
printf(resultFmt, passed);
|
||||||
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_DES3) */
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_DES3) */
|
||||||
|
@@ -4197,9 +4197,42 @@ int des3_test(void)
|
|||||||
if (XMEMCMP(cipher, verify3, sizeof(cipher)))
|
if (XMEMCMP(cipher, verify3, sizeof(cipher)))
|
||||||
return -3907;
|
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(&enc);
|
||||||
wc_Des3Free(&dec);
|
wc_Des3Free(&dec);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_ASYNC_CRYPT
|
||||||
|
wc_Des3AsyncFree(&enc);
|
||||||
|
wc_Des3AsyncFree(&dec);
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* NO_DES */
|
#endif /* NO_DES */
|
||||||
|
Reference in New Issue
Block a user