2
* Ascii to Base64 conversion as described in RFC1421.
4
* Copyright 2006 Willy Tarreau <w@1wt.eu>
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version
9
* 2 of the License, or (at your option) any later version.
13
#include <common/base64.h>
14
#include <common/config.h>
16
const char base64tab[64]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
18
/* Encodes <ilen> bytes from <in> to <out> for at most <olen> chars (including
19
* the trailing zero). Returns the number of bytes written. No check is made
20
* for <in> or <out> to be NULL. Returns negative value if <olen> is too short
21
* to accept <ilen>. 4 output bytes are produced for 1 to 3 input bytes.
23
int a2base64(char *in, int ilen, char *out, int olen)
27
convlen = ((ilen + 2) / 3) * 4;
32
/* we don't need to check olen anymore */
34
out[0] = base64tab[(((unsigned char)in[0]) >> 2)];
35
out[1] = base64tab[(((unsigned char)in[0] & 0x03) << 4) | (((unsigned char)in[1]) >> 4)];
36
out[2] = base64tab[(((unsigned char)in[1] & 0x0F) << 2) | (((unsigned char)in[2]) >> 6)];
37
out[3] = base64tab[(((unsigned char)in[2] & 0x3F))];
45
out[0] = base64tab[((unsigned char)in[0]) >> 2];
47
out[1] = base64tab[((unsigned char)in[0] & 0x03) << 4];
50
out[1] = base64tab[(((unsigned char)in[0] & 0x03) << 4) |
51
(((unsigned char)in[1]) >> 4)];
52
out[2] = base64tab[((unsigned char)in[1] & 0x0F) << 2];