From c466e3c078ee40d8921925e7819ba9017a9d3f36 Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Fri, 7 Apr 2017 11:21:32 +0900 Subject: [PATCH 1/8] Implements wolfSSL_DES_ecb_encrypt function. --- src/ssl.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 2d5fb50a5..238c5fa4a 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15796,11 +15796,21 @@ void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock* myDes) void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, WOLFSSL_DES_cblock* desb, WOLFSSL_DES_key_schedule* key, int len) { - (void)desa; - (void)desb; - (void)key; - (void)len; - WOLFSSL_STUB("wolfSSL_DES_ecb_encrypt"); +#ifdef WOLFSSL_DES_ECB + WOLFSSL_ENTER("wolfSSL_DES_ecb_encrypt"); + + Des3 enc; + if (desa == NULL || key == NULL){ + WOLFSSL_MSG("Bad argument passed to wolfSSL_DES_ecb_encrypt"); + } else { + if (wc_Des3_SetKey(&enc, (const byte*) key, (const byte*) NULL, DES_ENCRYPTION) != 0){ + WOLFSSL_MSG("wc_Des3_SetKey return error."); + } + if (wc_Des3_EcbEncrypt(&enc, (byte*) desb, (const byte*) desa, len) != 0){ + WOLFSSL_MSG("wc_Des3_EcbEncrpyt return error."); + } + } +#endif } #endif /* NO_DES3 */ From b19cf2cfb88c518a3a05d5bc4f303610cde83dfe Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Sat, 8 Apr 2017 17:03:58 +0900 Subject: [PATCH 2/8] Add test_wolfSSL_DES_ecb_encrypt() --- src/ssl.c | 6 +++--- tests/api.c | 29 ++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 238c5fa4a..b03d7dc49 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15794,7 +15794,7 @@ void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock* myDes) void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, - WOLFSSL_DES_cblock* desb, WOLFSSL_DES_key_schedule* key, int len) + WOLFSSL_DES_cblock* desb, WOLFSSL_DES_key_schedule* key, int dir) { #ifdef WOLFSSL_DES_ECB WOLFSSL_ENTER("wolfSSL_DES_ecb_encrypt"); @@ -15803,10 +15803,10 @@ void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, if (desa == NULL || key == NULL){ WOLFSSL_MSG("Bad argument passed to wolfSSL_DES_ecb_encrypt"); } else { - if (wc_Des3_SetKey(&enc, (const byte*) key, (const byte*) NULL, DES_ENCRYPTION) != 0){ + if (wc_Des3_SetKey(&enc, (const byte*) key, (const byte*) NULL, dir) != 0){ WOLFSSL_MSG("wc_Des3_SetKey return error."); } - if (wc_Des3_EcbEncrypt(&enc, (byte*) desb, (const byte*) desa, len) != 0){ + if (wc_Des3_EcbEncrypt(&enc, (byte*) desb, (const byte*) desa, sizeof(desb)) != 0){ WOLFSSL_MSG("wc_Des3_EcbEncrpyt return error."); } } diff --git a/tests/api.c b/tests/api.c index 7fb55c6e1..c9f7221c1 100644 --- a/tests/api.c +++ b/tests/api.c @@ -3028,7 +3028,34 @@ static void test_wolfSSL_BIO(void) #endif } +static void test_wolfSSL_DES_ecb_encrypt(void) +{ + #if defined(OPENSSL_EXTRA) && !defined(NO_DES3) + WOLFSSL_DES_cblock input1,input2,output1,output2,back1,back2; + WOLFSSL_DES_key_schedule key; + memcpy(key,"12345678",sizeof(WOLFSSL_DES_key_schedule)); + memcpy(input1, "Iamhuman",sizeof(WOLFSSL_DES_cblock)); + memcpy(input2, "Whoisit?",sizeof(WOLFSSL_DES_cblock)); + memset(output1, 0, sizeof(WOLFSSL_DES_cblock)); + memset(output2, 0, sizeof(WOLFSSL_DES_cblock)); + memset(back1, 0, sizeof(WOLFSSL_DES_cblock)); + memset(back2, 0, sizeof(WOLFSSL_DES_cblock)); + + wolfSSL_DES_ecb_encrypt(&input1,&output1,&key,DES_ENCRYPT); + wolfSSL_DES_ecb_encrypt(&input2,&output2,&key,DES_ENCRYPT); + + // Decrypt messages + int ret1 = 0; + int ret2 = 0; + wolfSSL_DES_ecb_encrypt(&output1,&back1,&key,DES_DECRYPT); + ret1 = memcmp((unsigned char *) back1,(unsigned char *) input1,sizeof(WOLFSSL_DES_cblock)); + AssertIntEQ(ret1,0); + wolfSSL_DES_ecb_encrypt(&output2,&back2,&key,DES_DECRYPT); + ret2 = memcmp((unsigned char *) back2,(unsigned char *) input2,sizeof(WOLFSSL_DES_cblock)); + AssertIntEQ(ret2,0); + #endif +} /*----------------------------------------------------------------------------* | wolfCrypt ASN *----------------------------------------------------------------------------*/ @@ -3133,7 +3160,7 @@ void ApiTest(void) test_wolfSSL_set_options(); test_wolfSSL_PEM_read_bio(); test_wolfSSL_BIO(); - + test_wolfSSL_DES_ecb_encrypt(); AssertIntEQ(test_wolfSSL_Cleanup(), SSL_SUCCESS); /* wolfCrypt ASN tests */ From 27c6625bfecd497d1bff70d499ac8afefe31e3ed Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Mon, 10 Apr 2017 14:44:48 +0900 Subject: [PATCH 3/8] Fix #ifdef in WolfSSL_DES_ecb_encrypt and test_WolfSSL_DES_ecb_encrypt. --- src/ssl.c | 4 ++-- tests/api.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index b03d7dc49..392b91b3d 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15793,10 +15793,10 @@ void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock* myDes) } +#ifdef WOLFSSL_DES_ECB void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, WOLFSSL_DES_cblock* desb, WOLFSSL_DES_key_schedule* key, int dir) { -#ifdef WOLFSSL_DES_ECB WOLFSSL_ENTER("wolfSSL_DES_ecb_encrypt"); Des3 enc; @@ -15810,8 +15810,8 @@ void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, WOLFSSL_MSG("wc_Des3_EcbEncrpyt return error."); } } -#endif } +#endif #endif /* NO_DES3 */ diff --git a/tests/api.c b/tests/api.c index c9f7221c1..a7a55e670 100644 --- a/tests/api.c +++ b/tests/api.c @@ -3030,7 +3030,7 @@ static void test_wolfSSL_BIO(void) static void test_wolfSSL_DES_ecb_encrypt(void) { - #if defined(OPENSSL_EXTRA) && !defined(NO_DES3) + #if defined(OPENSSL_EXTRA) && !defined(NO_DES3) && defined(WOLFSSL_DES_ECB) WOLFSSL_DES_cblock input1,input2,output1,output2,back1,back2; WOLFSSL_DES_key_schedule key; From 97c22c88d821a5351641d444030b808d6f3e27ab Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Mon, 10 Apr 2017 15:37:47 +0900 Subject: [PATCH 4/8] Add test result message for test_wolfSSL_DES_ecb_encrypt(). --- tests/api.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/api.c b/tests/api.c index a7a55e670..49eec92d4 100644 --- a/tests/api.c +++ b/tests/api.c @@ -3034,6 +3034,8 @@ static void test_wolfSSL_DES_ecb_encrypt(void) WOLFSSL_DES_cblock input1,input2,output1,output2,back1,back2; WOLFSSL_DES_key_schedule key; + printf(testingFmt, "wolfSSL_DES_ecb_encrypt()"); + memcpy(key,"12345678",sizeof(WOLFSSL_DES_key_schedule)); memcpy(input1, "Iamhuman",sizeof(WOLFSSL_DES_cblock)); memcpy(input2, "Whoisit?",sizeof(WOLFSSL_DES_cblock)); @@ -3054,6 +3056,8 @@ static void test_wolfSSL_DES_ecb_encrypt(void) wolfSSL_DES_ecb_encrypt(&output2,&back2,&key,DES_DECRYPT); ret2 = memcmp((unsigned char *) back2,(unsigned char *) input2,sizeof(WOLFSSL_DES_cblock)); AssertIntEQ(ret2,0); + + printf(resultFmt, passed); #endif } /*----------------------------------------------------------------------------* From dccff615d5f90d89979e7d3e13a7c6ccfe5beb52 Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Mon, 10 Apr 2017 16:19:44 +0900 Subject: [PATCH 5/8] Add wolfSSL_DES_ecb_encrypt() encrypt/decrypt parameter check. --- src/ssl.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 392b91b3d..7bc974918 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15800,10 +15800,16 @@ void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, WOLFSSL_ENTER("wolfSSL_DES_ecb_encrypt"); Des3 enc; - if (desa == NULL || key == NULL){ + if (desa == NULL || key == NULL || desb == NULL || (dir != DES_ENCRYPT && dir != DES_DECRYPT)){ WOLFSSL_MSG("Bad argument passed to wolfSSL_DES_ecb_encrypt"); } else { - if (wc_Des3_SetKey(&enc, (const byte*) key, (const byte*) NULL, dir) != 0){ + int cdir; + if (dir == DES_ENCRYPT){ + cdir = DES_ENCRYPTION; + }else if (dir == DES_DECRYPT){ + cdir = DES_DECRYPTION; + } + if (wc_Des3_SetKey(&enc, (const byte*) key, (const byte*) NULL, cdir) != 0){ WOLFSSL_MSG("wc_Des3_SetKey return error."); } if (wc_Des3_EcbEncrypt(&enc, (byte*) desb, (const byte*) desa, sizeof(desb)) != 0){ From d399b51ba8c1bbc265c349b25b4e8e129d34c304 Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Tue, 11 Apr 2017 23:49:10 +0900 Subject: [PATCH 6/8] Fix WolfSSL_DES_ecb_encrypt(). --- src/ssl.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 7bc974918..4af136dee 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15795,27 +15795,27 @@ void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock* myDes) #ifdef WOLFSSL_DES_ECB void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, - WOLFSSL_DES_cblock* desb, WOLFSSL_DES_key_schedule* key, int dir) + WOLFSSL_DES_cblock* desb, WOLFSSL_DES_key_schedule* key, int enc) { WOLFSSL_ENTER("wolfSSL_DES_ecb_encrypt"); - Des3 enc; - if (desa == NULL || key == NULL || desb == NULL || (dir != DES_ENCRYPT && dir != DES_DECRYPT)){ + Des3 myDes; + if (desa == NULL || key == NULL || desb == NULL || (enc != DES_ENCRYPT && enc != DES_DECRYPT)){ WOLFSSL_MSG("Bad argument passed to wolfSSL_DES_ecb_encrypt"); } else { - int cdir; - if (dir == DES_ENCRYPT){ - cdir = DES_ENCRYPTION; - }else if (dir == DES_DECRYPT){ - cdir = DES_DECRYPTION; - } - if (wc_Des3_SetKey(&enc, (const byte*) key, (const byte*) NULL, cdir) != 0){ + if (wc_Des3_SetKey(&myDes, (const byte*) key, (const byte*) NULL, enc) != 0){ WOLFSSL_MSG("wc_Des3_SetKey return error."); } - if (wc_Des3_EcbEncrypt(&enc, (byte*) desb, (const byte*) desa, sizeof(desb)) != 0){ - WOLFSSL_MSG("wc_Des3_EcbEncrpyt return error."); - } - } + if (enc){ + if (wc_Des3_EcbEncrypt(&myDes, (byte*) desb, (const byte*) desa, sizeof(desa)) != 0){ + WOLFSSL_MSG("wc_Des3_EcbEncrpyt return error."); + } + } else { + if (wc_Des3_EcbDecrypt(&myDes, (byte*) desb, (const byte*) desa, sizeof(desa)) != 0){ + WOLFSSL_MSG("wc_Des3_EcbDecrpyt return error."); + } + } + } } #endif From 0cebc2172c5721d74f27b778bedaeea51d4015bb Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Wed, 12 Apr 2017 00:03:35 +0900 Subject: [PATCH 7/8] Fix WolfSSL_DES_ecb_encrypt(). --- src/ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ssl.c b/src/ssl.c index 4af136dee..f9833f368 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15803,7 +15803,7 @@ void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, if (desa == NULL || key == NULL || desb == NULL || (enc != DES_ENCRYPT && enc != DES_DECRYPT)){ WOLFSSL_MSG("Bad argument passed to wolfSSL_DES_ecb_encrypt"); } else { - if (wc_Des3_SetKey(&myDes, (const byte*) key, (const byte*) NULL, enc) != 0){ + if (wc_Des3_SetKey(&myDes, (const byte*) key, (const byte*) NULL, !enc) != 0){ WOLFSSL_MSG("wc_Des3_SetKey return error."); } if (enc){ From fe215c4a579e4f943f8234d9b619a8bfeefafe33 Mon Sep 17 00:00:00 2001 From: Go Hosohara Date: Thu, 13 Apr 2017 12:31:52 +0900 Subject: [PATCH 8/8] Fix DES_ecb_encrypt function in terms of reviewing point. --- src/ssl.c | 39 ++++++++++++++++++++++++--------------- tests/api.c | 17 +++++++++-------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index f9833f368..0b4c2565a 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15794,28 +15794,37 @@ void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock* myDes) #ifdef WOLFSSL_DES_ECB +/* Encrpyt or decrypt input message desa with key and get output in desb. + * if enc is DES_ENCRYPT,input message is encrypted or + * if enc is DES_DECRYPT,input message is decrypted. + * */ void wolfSSL_DES_ecb_encrypt(WOLFSSL_DES_cblock* desa, WOLFSSL_DES_cblock* desb, WOLFSSL_DES_key_schedule* key, int enc) { WOLFSSL_ENTER("wolfSSL_DES_ecb_encrypt"); - Des3 myDes; - if (desa == NULL || key == NULL || desb == NULL || (enc != DES_ENCRYPT && enc != DES_DECRYPT)){ + Des myDes; + if (desa == NULL || key == NULL || desb == NULL || + (enc != DES_ENCRYPT && enc != DES_DECRYPT)) { WOLFSSL_MSG("Bad argument passed to wolfSSL_DES_ecb_encrypt"); } else { - if (wc_Des3_SetKey(&myDes, (const byte*) key, (const byte*) NULL, !enc) != 0){ - WOLFSSL_MSG("wc_Des3_SetKey return error."); - } - if (enc){ - if (wc_Des3_EcbEncrypt(&myDes, (byte*) desb, (const byte*) desa, sizeof(desa)) != 0){ - WOLFSSL_MSG("wc_Des3_EcbEncrpyt return error."); - } - } else { - if (wc_Des3_EcbDecrypt(&myDes, (byte*) desb, (const byte*) desa, sizeof(desa)) != 0){ - WOLFSSL_MSG("wc_Des3_EcbDecrpyt return error."); - } - } - } + if (wc_Des_SetKey(&myDes, (const byte*) key, + (const byte*) NULL, !enc) != 0) { + WOLFSSL_MSG("wc_Des_SetKey return error."); + return; + } + if (enc){ + if (wc_Des_EcbEncrypt(&myDes, (byte*) desb, + (const byte*) desa, sizeof(desa)) != 0){ + WOLFSSL_MSG("wc_Des_EcbEncrpyt return error."); + } + } else { + if (wc_Des_EcbDecrypt(&myDes, (byte*) desb, + (const byte*) desa, sizeof(desa)) != 0){ + WOLFSSL_MSG("wc_Des_EcbDecrpyt return error."); + } + } + } } #endif diff --git a/tests/api.c b/tests/api.c index 49eec92d4..e22898583 100644 --- a/tests/api.c +++ b/tests/api.c @@ -3036,18 +3036,19 @@ static void test_wolfSSL_DES_ecb_encrypt(void) printf(testingFmt, "wolfSSL_DES_ecb_encrypt()"); - memcpy(key,"12345678",sizeof(WOLFSSL_DES_key_schedule)); - memcpy(input1, "Iamhuman",sizeof(WOLFSSL_DES_cblock)); - memcpy(input2, "Whoisit?",sizeof(WOLFSSL_DES_cblock)); - memset(output1, 0, sizeof(WOLFSSL_DES_cblock)); - memset(output2, 0, sizeof(WOLFSSL_DES_cblock)); - memset(back1, 0, sizeof(WOLFSSL_DES_cblock)); - memset(back2, 0, sizeof(WOLFSSL_DES_cblock)); + XMEMCPY(key,"12345678",sizeof(WOLFSSL_DES_key_schedule)); + XMEMCPY(input1, "Iamhuman",sizeof(WOLFSSL_DES_cblock)); + XMEMCPY(input2, "Whoisit?",sizeof(WOLFSSL_DES_cblock)); + XMEMSET(output1, 0, sizeof(WOLFSSL_DES_cblock)); + XMEMSET(output2, 0, sizeof(WOLFSSL_DES_cblock)); + XMEMSET(back1, 0, sizeof(WOLFSSL_DES_cblock)); + XMEMSET(back2, 0, sizeof(WOLFSSL_DES_cblock)); + /* Encrypt messages */ wolfSSL_DES_ecb_encrypt(&input1,&output1,&key,DES_ENCRYPT); wolfSSL_DES_ecb_encrypt(&input2,&output2,&key,DES_ENCRYPT); - // Decrypt messages + /* Decrypt messages */ int ret1 = 0; int ret2 = 0; wolfSSL_DES_ecb_encrypt(&output1,&back1,&key,DES_DECRYPT);