-#include "b64decode.h"
-
-#define UNDEF_CH -2
-
-char s64table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-int charmap[257];
-int *pcharmap;
-
-void b64decodeinit()
-{
- int i;
- char ch;
-
- pcharmap= charmap + 1;
-
- for (i = 0; i <= 255; i++)
- pcharmap[i] = UNDEF_CH;
-
- for (i = 0; i < 64; i++) {
- ch = s64table[i];
- if (pcharmap[ch] == UNDEF_CH)
- pcharmap[ch] = i;
- }
-}
-
-int b64decode(char *s, char *dest)
-{\r
- int k,k2,i;\r
-\r
- i=0;\r
- while (*s!='\0') {\r
- /* byte #1 */\r
- if ((*s=='=') || ((k=pcharmap[(unsigned char) (*(s++))])<0))\r
- return -1;\r
-\r
- /* byte #2 */\r
- if ((*s=='=') || ((k2=pcharmap[(unsigned char) (*(s++))])<0))\r
- return -1;\r
- else\r
- dest[i++] = (k<<2) + (k2>>4);\r
-\r
- /* byte #3 */\r
- if (*s=='=')\r
- s++;\r
- else\r
- if ((k=pcharmap[(unsigned char) (*(s++))])<0)\r
- return -1;\r
- else\r
- dest[i++] = (k2<<4) + (k>>2);\r
-\r
- /* byte #4 */\r
- if (*s=='=')\r
- s++;\r
- else\r
- if ((k2=pcharmap[(unsigned char) (*(s++))])<0)\r
- -1;\r
- else\r
- dest[i++] = (k<<6) + (k2);\r
- }\r
-\r
- return i;\r
-}