From 5054e65a8e37c122ee249765f01ee0ece223ec5d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 4 Jun 2013 14:17:54 +0000 Subject: base64 functions moved to the proper module git-svn-id: http://svn.miranda-ng.org/main/trunk@4883 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/mir_core/http.cpp | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ src/mir_core/utils.cpp | 100 ------------------------------------------------ 2 files changed, 101 insertions(+), 100 deletions(-) (limited to 'src') diff --git a/src/mir_core/http.cpp b/src/mir_core/http.cpp index da01fe11d8..03c6f9b91f 100644 --- a/src/mir_core/http.cpp +++ b/src/mir_core/http.cpp @@ -56,3 +56,104 @@ MIR_CORE_DLL(char*) mir_urlEncode(const char *szUrl) *d = '\0'; return szOutput; } + +///////////////////////////////////////////////////////////////////////////////////////// + +static char cb64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +MIR_CORE_DLL(char*) mir_base64_encode(const BYTE *input, unsigned inputLen) +{ + if (input == NULL) + return NULL; + + BYTE chr[3]; + + size_t length = inputLen; + size_t nLength = 4 * ((length + 2) / 3) + 1; + + char *output = (char *)mir_alloc(nLength); + char *p = output; + + for (size_t i=0; i < length; ) + { + chr[0] = input[i++]; + chr[1] = input[i++]; + chr[2] = input[i++]; + + *p++ = cb64[ chr[0] >> 2 ]; + *p++ = cb64[ ((chr[0] & 0x03) << 4) | (chr[1] >> 4) ]; + BYTE b2 = ((chr[1] & 0x0F) << 2) | (chr[2] >> 6), + b3 = chr[2] & 0x3F; + + if (i - 2 >= length) { *p++ = '='; *p++ = '='; } + else if (i - 1 >= length) { *p++ = cb64[b2]; *p++ = '='; } + else { *p++ = cb64[b2]; *p++ = cb64[b3]; } + } + + *p = 0; + + return output; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +static int Base64DecodeTable[] = +{ + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, + 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, + 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, + -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, + 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1 +}; + +MIR_CORE_DLL(void*) mir_base64_decode(const char *input, unsigned *outputLen) +{ + if (input == NULL) + return NULL; + + size_t i = 0; + BYTE chr[3], enc[4]; + + size_t length = strlen(input); + size_t nLength = (length / 4) * 3; + + char *output = (char *)mir_alloc(nLength+1); + char *p = output; + + while (i < length) + { + enc[0] = Base64DecodeTable[input[i++]]; + enc[1] = Base64DecodeTable[input[i++]]; + enc[2] = Base64DecodeTable[input[i++]]; + enc[3] = Base64DecodeTable[input[i++]]; + + if (enc[0] == -1 || enc[1] == -1) break; + + chr[0] = (enc[0] << 2) | (enc[1] >> 4); + chr[1] = ((enc[1] & 15) << 4) | (enc[2] >> 2); + chr[2] = ((enc[2] & 3) << 6) | enc[3]; + + *p++ = chr[0]; + + if (enc[2] != -1) *p++ = chr[1]; + if (enc[3] != -1) *p++ = chr[2]; + } + + *p = 0; + + if (outputLen != NULL) + *outputLen = (unsigned)nLength; + + return output; +} diff --git a/src/mir_core/utils.cpp b/src/mir_core/utils.cpp index be9022188f..21c9e8dfd5 100644 --- a/src/mir_core/utils.cpp +++ b/src/mir_core/utils.cpp @@ -212,103 +212,3 @@ MIR_CORE_DLL(int) wildcmpiw(const WCHAR *name, const WCHAR *mask) if (*mask != '?' && _qtoupper(*mask) != _qtoupper(*name)) name -= (size_t)(mask - last) - 1, mask = last; } } - -///////////////////////////////////////////////////////////////////////////////////////// - -MIR_CORE_DLL(char*) mir_base64_encode(const BYTE *input, unsigned inputLen) -{ - if (input == NULL) - return NULL; - - BYTE chr[3]; - static char cb64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - size_t length = inputLen; - size_t nLength = 4 * ((length + 2) / 3) + 1; - - char *output = (char *)mir_alloc(nLength); - char *p = output; - - for (size_t i=0; i < length; ) - { - chr[0] = input[i++]; - chr[1] = input[i++]; - chr[2] = input[i++]; - - *p++ = cb64[ chr[0] >> 2 ]; - *p++ = cb64[ ((chr[0] & 0x03) << 4) | (chr[1] >> 4) ]; - BYTE b2 = ((chr[1] & 0x0F) << 2) | (chr[2] >> 6), - b3 = chr[2] & 0x3F; - - if (i - 2 >= length) { *p++ = '='; *p++ = '='; } - else if (i - 1 >= length) { *p++ = cb64[b2]; *p++ = '='; } - else { *p++ = cb64[b2]; *p++ = cb64[b3]; } - } - - *p = 0; - - return output; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -static int Base64DecodeTable[] = -{ - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, - 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, - 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, - -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, - 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, - -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1 -}; - -MIR_CORE_DLL(void*) mir_base64_decode(const char *input, unsigned *outputLen) -{ - if (input == NULL) - return NULL; - - size_t i = 0; - BYTE chr[3], enc[4]; - - size_t length = strlen(input); - size_t nLength = (length / 4) * 3; - - char *output = (char *)mir_alloc(nLength+1); - char *p = output; - - while (i < length) - { - enc[0] = Base64DecodeTable[input[i++]]; - enc[1] = Base64DecodeTable[input[i++]]; - enc[2] = Base64DecodeTable[input[i++]]; - enc[3] = Base64DecodeTable[input[i++]]; - - if (enc[0] == -1 || enc[1] == -1) break; - - chr[0] = (enc[0] << 2) | (enc[1] >> 4); - chr[1] = ((enc[1] & 15) << 4) | (enc[2] >> 2); - chr[2] = ((enc[2] & 3) << 6) | enc[3]; - - *p++ = chr[0]; - - if (enc[2] != -1) *p++ = chr[1]; - if (enc[3] != -1) *p++ = chr[2]; - } - - *p = 0; - - if (outputLen != NULL) - *outputLen = (unsigned)nLength; - - return output; -} -- cgit v1.2.3