Rework char to hex conversion 02/157402/2
authorIgor Kotrasinski <i.kotrasinsk@partner.samsung.com>
Tue, 24 Oct 2017 09:41:51 +0000 (11:41 +0200)
committerLukasz Kostyra <l.kostyra@samsung.com>
Tue, 24 Oct 2017 10:43:01 +0000 (12:43 +0200)
Remove unnecessary 22-case switch.

Change-Id: Id9b07c7893b498642032bee24edd5a7d857718aa
Signed-off-by: Igor Kotrasinski <i.kotrasinsk@partner.samsung.com>
ssflib/dep/cryptocore/source/base/cc_bignum.c

index 3d4a1b6..185b03c 100644 (file)
@@ -2875,102 +2875,22 @@ int    SDRM_HEX2BN(cc_u8* pbSrc, SDRM_BIG_NUM *BN_Dst)
        {
                for(j = (BN_Dst->Length * SDRM_SIZE_BLOCK) - (i * SDRM_SIZE_BLOCK) - SDRM_SIZE_BLOCK; j < (BN_Dst->Length * SDRM_SIZE_BLOCK) - (i * SDRM_SIZE_BLOCK) ; j++)
                {
-                       switch(bufferHex[j])
-                       {
-                               case '0':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       //BN_Dst->pData[i] |= 0x0; Unnecessary
-                                       break;
-                               case '1':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x1;
-                                       break;
-                               case '2':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x2;
-                                       break;
-                               case '3':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x3;
-                                       break;
-                               case '4':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x4;
-                                       break;
-                               case '5':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x5;
-                                       break;
-                               case '6':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x6;
-                                       break;
-                               case '7':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x7;
-                                       break;
-                               case '8':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x8;
-                                       break;
-                               case '9':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0x9;
-                                       break;
-                               case 'a':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xa;
-                                       break;
-                               case 'A':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xa;
-                                       break;
-                               case 'b':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xb;
-                                       break;
-                               case 'B':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xb;
-                                       break;
-                               case 'c':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xc;
-                                       break;
-                               case 'C':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xc;
-                                       break;
-                               case 'd':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xd;
-                                       break;
-                               case 'D':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xd;
-                                       break;
-                               case 'e':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xe;
-                                       break;
-                               case 'E':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xe;
-                                       break;
-                               case 'f':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xf;
-                                       break;
-                               case 'F':
-                                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
-                                       BN_Dst->pData[i] |= 0xf;
-                                       break;
-                               default:
-                               {
-                                       free(bufferHex);
-                                       return CRYPTO_INVALID_ARGUMENT;
-                               }
+                       char c = bufferHex[j];
+                       int c_int;
+
+                       if (c >= '0' && c <= '9') {
+                               c_int = c - '0';
+                       } else if (c >= 'a' && c <= 'f') {
+                               c_int = c - 'a' + 10;
+                       } else if (c >= 'A' && c <= 'F') {
+                               c_int = c - 'A' + 10;
+                       } else {
+                               free(bufferHex);
+                               return CRYPTO_INVALID_ARGUMENT;
                        }
+
+                       BN_Dst->pData[i] = BN_Dst->pData[i] << 4;
+                       BN_Dst->pData[i] |= c_int;
                }
        }