| 41 | } |
| 42 | |
| 43 | void *__IPDecodeFromBase64(const char *src, long len , void *_dst) { |
| 44 | u8 *dst; |
| 45 | int i; |
| 46 | u8 *p; |
| 47 | |
| 48 | dst = _dst; |
| 49 | p = dst; |
| 50 | for (i = 0; i < len; i += 4) { |
| 51 | int n0; |
| 52 | int n1; |
| 53 | int n2; |
| 54 | int n3; |
| 55 | n0 = strchr(Base64, src[i+0]) - Base64; |
| 56 | n1 = strchr(Base64, src[i+1]) - Base64; |
| 57 | *p++ = (n0 << 2) | (n1 >> 4) & 0x3; |
| 58 | |
| 59 | if (src[i+2] == '=') break; |
| 60 | |
| 61 | n2 = strchr(Base64, src[i+2]) - Base64; |
| 62 | *p++ = ((n1 << 4) & 0xff) | (n2 >> 2) & 0xf; |
| 63 | |
| 64 | if (src[i+3] == '=') break; |
| 65 | |
| 66 | n3 = strchr(Base64, src[i+3]) - Base64; |
| 67 | *p++ = ((n2 << 6) & 0xff) | (n3 & 0x3f); |
| 68 | } |
| 69 | return p; |
| 70 | } |