tests for added DES functions and fix check on DES key

This commit is contained in:
Jacob Barthelmeh
2017-01-04 11:50:30 -07:00
parent cf6f4718e8
commit 7da0f50457
3 changed files with 63 additions and 11 deletions

View File

@@ -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;
}

View File

@@ -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) */

View File

@@ -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 */