Hex Decode
| 93 | |
| 94 | // Hex Decode |
| 95 | void HexDecoder::Decode() |
| 96 | { |
| 97 | word32 bytes = coded_.size(); |
| 98 | decoded_.New(bytes / 2); |
| 99 | |
| 100 | word32 i(0); |
| 101 | |
| 102 | while (bytes) { |
| 103 | byte b = coded_.next() - 0x30; // 0 starts at 0x30 |
| 104 | byte b2 = coded_.next() - 0x30; |
| 105 | |
| 106 | // sanity checks |
| 107 | if (b >= sizeof(hexDecode)/sizeof(hexDecode[0])) { |
| 108 | coded_.SetError(PEM_E); |
| 109 | return; |
| 110 | } |
| 111 | if (b2 >= sizeof(hexDecode)/sizeof(hexDecode[0])) { |
| 112 | coded_.SetError(PEM_E); |
| 113 | return; |
| 114 | } |
| 115 | |
| 116 | b = hexDecode[b]; |
| 117 | b2 = hexDecode[b2]; |
| 118 | |
| 119 | decoded_[i++] = (b << 4) | b2; |
| 120 | bytes -= 2; |
| 121 | } |
| 122 | |
| 123 | coded_.reset(decoded_); |
| 124 | } |
| 125 | |
| 126 | |
| 127 | // Base 64 Encode |