diff --git a/.gitignore b/.gitignore index d3e7dbe..6d36a06 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,8 @@ src/lex.c # Binaries src/*.o +src/utils/*.o +src/utils/*/*.o src/*.a src/bip src/bipmkpw diff --git a/AUTHORS b/AUTHORS index affc47e..6fd819b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -10,4 +10,6 @@ Thanks to our marketting and management team: ack|, ato, blackmore, lafouine, Gaston & gromit Crypto shamelessly stolen from Christophe 'sexy' Devine. -Credits to Jouni Malinen for base64 library (http://web.mit.edu/freebsd/head/contrib/wpa/src/utils/) + +Credits to Jouni Malinen for base64 library: +Source: http://w1.fi/cgit/hostap/commit/src/utils/base64.c diff --git a/src/irc.c b/src/irc.c index dc57c7d..2cf1075 100644 --- a/src/irc.c +++ b/src/irc.c @@ -2174,7 +2174,8 @@ static int irc_server_sasl_authenticate(struct link_server *ircs) memcpy(raw_str + u_len + 1, sasl_username, u_len); raw_str[u_len * 2 + 1] = '\0'; memcpy(raw_str + u_len * 2 + 2, sasl_password, p_len); - enc_str = base64_encode(raw_str, raw_len, &enc_len); + enc_str = base64_encode_no_lf(raw_str, raw_len, &enc_len); + free(raw_str); mylog(LOG_DEBUG, "[%s] Base64 encoded SASL auth token (len %d): %s", LINK(ircs)->name, enc_len, enc_str); diff --git a/src/utils/base64.c b/src/utils/base64.c index 982be3e..95f3141 100644 --- a/src/utils/base64.c +++ b/src/utils/base64.c @@ -1,32 +1,28 @@ /* * Base64 encoding/decoding (RFC1341) * Copyright (c) 2005-2019, Jouni Malinen - * Copyright (c) 2022 Loïc Gomez - * - * Source: http://w1.fi/cgit/hostap/commit/src/utils/base64.c - * Last synchronization date: 2022-03-18 - * (c7e6dbdad8ee043a9d7f856502196dbeb65cb4ac hostap commit was then used) * * This software may be distributed under the terms of the BSD license. * See README for more details. */ -#include +#include "includes.h" #include -#include -#include + +#include "utils/common.h" +#include "os.h" #include "base64.h" static const char base64_table[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -#define BASE64_PAD 1 -#define BASE64_LF 2 +#define BASE64_PAD BIT(0) +#define BASE64_LF BIT(1) -static char *base64_gen_encode(const unsigned char *src, size_t len, - size_t *out_len, const char *table, int add_pad) +static char * base64_gen_encode(const unsigned char *src, size_t len, + size_t *out_len, const char *table, int add_pad) { char *out, *pos; const unsigned char *end, *in; @@ -38,10 +34,10 @@ static char *base64_gen_encode(const unsigned char *src, size_t len, olen = len * 4 / 3 + 4; /* 3-byte blocks to 4-byte */ if (add_pad & BASE64_LF) olen += olen / 72; /* line feeds */ - olen++; /* nul termination */ + olen++; /* nul termination */ if (olen < len) return NULL; /* integer overflow */ - out = malloc(olen); + out = os_malloc(olen); if (out == NULL) return NULL; @@ -69,8 +65,8 @@ static char *base64_gen_encode(const unsigned char *src, size_t len, if (add_pad & BASE64_PAD) *pos++ = '='; } else { - *pos++ = table[(((in[0] & 0x03) << 4) | (in[1] >> 4)) - & 0x3f]; + *pos++ = table[(((in[0] & 0x03) << 4) | + (in[1] >> 4)) & 0x3f]; *pos++ = table[((in[1] & 0x0f) << 2) & 0x3f]; } if (add_pad & BASE64_PAD) @@ -87,8 +83,9 @@ static char *base64_gen_encode(const unsigned char *src, size_t len, return out; } + /** - * base64_encode - Base64 encode without line feeds + * base64_encode - Base64 encode * @src: Data to be encoded * @len: Length of the data to be encoded * @out_len: Pointer to output length variable, or %NULL if not used @@ -99,7 +96,9 @@ static char *base64_gen_encode(const unsigned char *src, size_t len, * nul terminated to make it easier to use as a C string. The nul terminator is * not included in out_len. */ -char *base64_encode(const void *src, size_t len, size_t *out_len) +char * base64_encode_no_lf(const void *src, size_t len, size_t *out_len) { return base64_gen_encode(src, len, out_len, base64_table, BASE64_PAD); } + + diff --git a/src/utils/base64.h b/src/utils/base64.h index 9523d3d..b35846e 100644 --- a/src/utils/base64.h +++ b/src/utils/base64.h @@ -1,7 +1,6 @@ /* * Base64 encoding/decoding (RFC1341) * Copyright (c) 2005, Jouni Malinen - * Copyright (c) 2022 Loïc Gomez * * This software may be distributed under the terms of the BSD license. * See README for more details. @@ -10,6 +9,7 @@ #ifndef BASE64_H #define BASE64_H -char *base64_encode(const void *src, size_t len, size_t *out_len); +char * base64_encode_no_lf(const void *src, size_t len, size_t *out_len); #endif /* BASE64_H */ + diff --git a/src/utils/includes.h b/src/utils/includes.h new file mode 100644 index 0000000..14cc8f4 --- /dev/null +++ b/src/utils/includes.h @@ -0,0 +1,4 @@ +#include +#include +#include +#include diff --git a/src/utils/os.h b/src/utils/os.h new file mode 100644 index 0000000..a741159 --- /dev/null +++ b/src/utils/os.h @@ -0,0 +1,3 @@ +#ifndef os_malloc +#define os_malloc(s) malloc((s)) +#endif diff --git a/src/utils/utils/common.h b/src/utils/utils/common.h new file mode 100644 index 0000000..6398d3b --- /dev/null +++ b/src/utils/utils/common.h @@ -0,0 +1,3 @@ +#ifndef BIT +#define BIT(x) (int)(1U << (x)) +#endif