From f1214dbfb5fd35574e00b824d5c9482776ded621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gomez?= Date: Mon, 19 Feb 2024 15:19:13 +0900 Subject: [PATCH] Update base64 lib to latest version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * be as close as possible to the original code (except for extra src/b64/utils sub-directory) * use new base64_encode_no_lf() function with no line returns * fix irc_server_sasl_authenticate(): add missing free(raw_str) * add a lastsync status file in src/b64 for tracking Signed-off-by: Loïc Gomez --- AUTHORS | 4 +++- src/b64/base64.c | 33 +++++++++++++++------------------ src/b64/base64.h | 3 +-- src/b64/base64.lastsync | 7 +++++++ src/b64/common.h | 3 +++ src/b64/includes.h | 4 ++++ src/b64/os.h | 3 +++ src/irc.c | 3 ++- 8 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 src/b64/base64.lastsync create mode 100644 src/b64/common.h create mode 100644 src/b64/includes.h create mode 100644 src/b64/os.h 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/b64/base64.c b/src/b64/base64.c index 982be3e..3419e3f 100644 --- a/src/b64/base64.c +++ b/src/b64/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 "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,7 @@ 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/b64/base64.h b/src/b64/base64.h index 9523d3d..b3c0454 100644 --- a/src/b64/base64.h +++ b/src/b64/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,6 @@ #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/b64/base64.lastsync b/src/b64/base64.lastsync new file mode 100644 index 0000000..4e926be --- /dev/null +++ b/src/b64/base64.lastsync @@ -0,0 +1,7 @@ +Last sync for base64 lib: +- by: Kyoshiro on 2024-02-19 +- url: http://w1.fi/cgit/hostap/commit/src/utils/base64.c +- commit-id: c7e6dbdad8ee043a9d7f856502196dbeb65cb4ac +- commit-date: Mon Jun 15 20:18:12 2020 +0300 +- base64.h: d545b2931ca2206a265226049d90882a527236f0 +- base64.c: 0d121c1989cac9349949b2cd3611f49a1ef2820f diff --git a/src/b64/common.h b/src/b64/common.h new file mode 100644 index 0000000..6398d3b --- /dev/null +++ b/src/b64/common.h @@ -0,0 +1,3 @@ +#ifndef BIT +#define BIT(x) (int)(1U << (x)) +#endif diff --git a/src/b64/includes.h b/src/b64/includes.h new file mode 100644 index 0000000..14cc8f4 --- /dev/null +++ b/src/b64/includes.h @@ -0,0 +1,4 @@ +#include +#include +#include +#include diff --git a/src/b64/os.h b/src/b64/os.h new file mode 100644 index 0000000..a741159 --- /dev/null +++ b/src/b64/os.h @@ -0,0 +1,3 @@ +#ifndef os_malloc +#define os_malloc(s) malloc((s)) +#endif diff --git a/src/irc.c b/src/irc.c index 82ed6d1..b7efa6d 100644 --- a/src/irc.c +++ b/src/irc.c @@ -2190,7 +2190,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);