diff options
author | Daniel Stenberg <daniel@haxx.se> | 1999-12-29 14:20:26 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 1999-12-29 14:20:26 +0000 |
commit | ae1912cb0d494b48d514d937826c9fe83ec96c4d (patch) | |
tree | 3b027d577182fc74bade646227f729eac461d0d2 /lib/base64.c | |
download | curl-ae1912cb0d494b48d514d937826c9fe83ec96c4d.tar.gz |
Initial revision
Diffstat (limited to 'lib/base64.c')
-rw-r--r-- | lib/base64.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/lib/base64.c b/lib/base64.c new file mode 100644 index 000000000..8758af1ef --- /dev/null +++ b/lib/base64.c @@ -0,0 +1,94 @@ +/***************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Curl. + * + * The Initial Developer of the Original Code is Daniel Stenberg. + * + * Portions created by the Initial Developer are Copyright (C) 1998. + * All Rights Reserved. + * + * ------------------------------------------------------------ + * Main author: + * - Daniel Stenberg <Daniel.Stenberg@haxx.nu> + * + * http://curl.haxx.nu + * + * $Source$ + * $Revision$ + * $Date$ + * $Author$ + * $State$ + * $Locker$ + * + * ------------------------------------------------------------ + ****************************************************************************/ + +#include <stdio.h> + +/* ---- Base64 Encoding --- */ +static char table64[]= + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +void base64Encode(char *intext, char *output) +{ + unsigned char ibuf[3]; + unsigned char obuf[4]; + int i; + int inputparts; + + while(*intext) { + for (i = inputparts = 0; i < 3; i++) { + if(*intext) { + inputparts++; + ibuf[i] = *intext; + intext++; + } + else + ibuf[i] = 0; + } + + obuf [0] = (ibuf [0] & 0xFC) >> 2; + obuf [1] = ((ibuf [0] & 0x03) << 4) | ((ibuf [1] & 0xF0) >> 4); + obuf [2] = ((ibuf [1] & 0x0F) << 2) | ((ibuf [2] & 0xC0) >> 6); + obuf [3] = ibuf [2] & 0x3F; + + switch(inputparts) { + case 1: /* only one byte read */ + sprintf(output, "%c%c==", + table64[obuf[0]], + table64[obuf[1]]); + break; + case 2: /* two bytes read */ + sprintf(output, "%c%c%c=", + table64[obuf[0]], + table64[obuf[1]], + table64[obuf[2]]); + break; + default: + sprintf(output, "%c%c%c%c", + table64[obuf[0]], + table64[obuf[1]], + table64[obuf[2]], + table64[obuf[3]] ); + break; + } + output += 4; + } + *output=0; +} +/* ---- End of Base64 Encoding ---- */ |