diff options
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/base64.c | 57 | ||||
-rw-r--r-- | src/base64.h | 29 | ||||
-rw-r--r-- | src/basicauth.c | 36 |
4 files changed, 88 insertions, 35 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 60fda2c..565eb4d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -48,6 +48,7 @@ tinyproxy_SOURCES = \ vector.c vector.h \ upstream.c upstream.h \ basicauth.c basicauth.h \ + base64.c base64.h \ connect-ports.c connect-ports.h EXTRA_tinyproxy_SOURCES = filter.c filter.h \ diff --git a/src/base64.c b/src/base64.c new file mode 100644 index 0000000..cc9b6ae --- /dev/null +++ b/src/base64.c @@ -0,0 +1,57 @@ +/* tinyproxy - A fast light-weight HTTP proxy + * this file Copyright (C) 2016-2018 rofl0r + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "base64.h" + +static const char base64_tbl[64] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +/* + rofl0r's base64 impl (taken from libulz) + takes count bytes from src, writing base64 encoded string into dst. + dst needs to be at least BASE64ENC_BYTES(count) + 1 bytes in size. + the string in dst will be zero-terminated. + */ +void base64enc(char *dst, const void* src, size_t count) +{ + unsigned const char *s = src; + char* d = dst; + while(count) { + int i = 0, n = *s << 16; + s++; + count--; + if(count) { + n |= *s << 8; + s++; + count--; + i++; + } + if(count) { + n |= *s; + s++; + count--; + i++; + } + *d++ = base64_tbl[(n >> 18) & 0x3f]; + *d++ = base64_tbl[(n >> 12) & 0x3f]; + *d++ = i ? base64_tbl[(n >> 6) & 0x3f] : '='; + *d++ = i == 2 ? base64_tbl[n & 0x3f] : '='; + } + *d = 0; +} + diff --git a/src/base64.h b/src/base64.h new file mode 100644 index 0000000..4465b9e --- /dev/null +++ b/src/base64.h @@ -0,0 +1,29 @@ +/* tinyproxy - A fast light-weight HTTP proxy + * this file Copyright (C) 2016-2018 rofl0r + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef TINYPROXY_BASE64_H +#define TINYPROXY_BASE64_H + +#include <stddef.h> + +/* calculates number of bytes base64-encoded stream of N bytes will take. */ +#define BASE64ENC_BYTES(N) (((N+2)/3)*4) +void base64enc(char *dst, const void* src, size_t count); + +#endif + diff --git a/src/basicauth.c b/src/basicauth.c index ddc6e6e..4360a1a 100644 --- a/src/basicauth.c +++ b/src/basicauth.c @@ -24,41 +24,7 @@ #include "html-error.h" #include "log.h" #include "conf.h" - -/* calculates number of bytes base64-encoded stream of N bytes will take. */ -#define BASE64ENC_BYTES(N) (((N+2)/3)*4) - -static const char base64_tbl[64] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -/* my own base64 impl (taken from libulz) */ -static void base64enc(char *dst, const void* src, size_t count) -{ - unsigned const char *s = src; - char* d = dst; - while(count) { - int i = 0, n = *s << 16; - s++; - count--; - if(count) { - n |= *s << 8; - s++; - count--; - i++; - } - if(count) { - n |= *s; - s++; - count--; - i++; - } - *d++ = base64_tbl[(n >> 18) & 0x3f]; - *d++ = base64_tbl[(n >> 12) & 0x3f]; - *d++ = i ? base64_tbl[(n >> 6) & 0x3f] : '='; - *d++ = i == 2 ? base64_tbl[n & 0x3f] : '='; - } - *d = 0; -} +#include "base64.h" /* * Add entry to the basicauth list |