diff --git a/src/ssl.c b/src/ssl.c index ee97bc1b4..e62d3d867 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -20392,7 +20392,7 @@ void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock* myDes) for (i = 0; i < sz; i++) { unsigned char c = *((unsigned char*)myDes + i); - if (((c & 0x01) ^ + if (( ((c >> 1) & 0x01) ^ ((c >> 2) & 0x01) ^ ((c >> 3) & 0x01) ^ @@ -20401,7 +20401,7 @@ void wolfSSL_DES_set_odd_parity(WOLFSSL_DES_cblock* myDes) ((c >> 6) & 0x01) ^ ((c >> 7) & 0x01)) != 1) { WOLFSSL_MSG("Setting odd parity bit"); - *((unsigned char*)myDes + i) = *((unsigned char*)myDes + i) | 0x80; + *((unsigned char*)myDes + i) = *((unsigned char*)myDes + i) | 0x01; } } } diff --git a/tests/api.c b/tests/api.c index c763c6706..b53d719a3 100644 --- a/tests/api.c +++ b/tests/api.c @@ -13501,13 +13501,14 @@ static void test_wolfSSL_DES(void) DES_set_key(&myDes, &key); /* check, check of odd parity */ - XMEMSET(myDes, 4, sizeof(const_DES_cblock)); myDes[0] = 3; /*set even parity*/ + XMEMSET(myDes, 4, sizeof(const_DES_cblock)); myDes[0] = 6; /*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 */ DES_set_odd_parity(&myDes); + printf("%02x %02x %02x %02x", myDes[0], myDes[1], myDes[2], myDes[3]); AssertIntEQ(DES_set_key_checked(&myDes, &key), 0); for (i = 0; i < sizeof(DES_key_schedule); i++) { AssertIntEQ(key[i], myDes[i]);