From 7da0f5045748122204d26a25821d32e5ac1b2c02 Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Wed, 4 Jan 2017 11:50:30 -0700 Subject: [PATCH] tests for added DES functions and fix check on DES key --- src/ssl.c | 19 +++++++++++++------ tests/api.c | 22 +++++++++++++++++----- wolfcrypt/test/test.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index e5bb736e4..20c907af1 100644 --- a/src/ssl.c +++ b/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; } diff --git a/tests/api.c b/tests/api.c index 0da8ee695..f0f2ef7c4 100644 --- a/tests/api.c +++ b/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) */ diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index bcf9dcd2d..d3d51c4bf 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -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 */