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