| /***************************************************************************** |
| * _ _ ____ _ |
| * 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 ---- */ |