diff --git a/common/base64.c b/common/base64.c index 75db1a4698f3..687e6847118d 100644 --- a/common/base64.c +++ b/common/base64.c @@ -14,3 +14,12 @@ char *b64_encode(const tal_t *ctx, const void *data, size_t len) str[enclen] = '\0'; return str; } + +u8 *b64_decode(const tal_t *ctx, const char *str, size_t len) +{ + size_t dlen = base64_decoded_length(len); + u8 *ret = tal_arr(ctx, u8, dlen); + if (base64_decode((char *)ret, dlen, str, len) < 0) + return tal_free(ret); + return ret; +} diff --git a/common/base64.h b/common/base64.h index f963541dba17..2c2b4d4a3de4 100644 --- a/common/base64.h +++ b/common/base64.h @@ -5,5 +5,6 @@ #include char *b64_encode(const tal_t *ctx, const void *data, size_t len); +u8 *b64_decode(const tal_t *ctx, const char *str, size_t len); #endif /* LIGHTNING_COMMON_BASE64_H */ diff --git a/tests/fuzz/corpora/fuzz-base32-64/67ff224ec0481fc9bdda71d7f40b1ca036c25075 b/tests/fuzz/corpora/fuzz-base32-64/67ff224ec0481fc9bdda71d7f40b1ca036c25075 new file mode 100644 index 000000000000..0532956ff803 Binary files /dev/null and b/tests/fuzz/corpora/fuzz-base32-64/67ff224ec0481fc9bdda71d7f40b1ca036c25075 differ diff --git a/tests/fuzz/corpora/fuzz-base32-64/74b7c3466e230ac05bd1f67743ac495eaf4bbbf7 b/tests/fuzz/corpora/fuzz-base32-64/74b7c3466e230ac05bd1f67743ac495eaf4bbbf7 new file mode 100644 index 000000000000..72bb7501a606 Binary files /dev/null and b/tests/fuzz/corpora/fuzz-base32-64/74b7c3466e230ac05bd1f67743ac495eaf4bbbf7 differ diff --git a/tests/fuzz/corpora/fuzz-base32-64/98f233373861251dc7427728aa8a4a737eda4143 b/tests/fuzz/corpora/fuzz-base32-64/98f233373861251dc7427728aa8a4a737eda4143 new file mode 100644 index 000000000000..3f75fb645401 Binary files /dev/null and b/tests/fuzz/corpora/fuzz-base32-64/98f233373861251dc7427728aa8a4a737eda4143 differ diff --git a/tests/fuzz/corpora/fuzz-base32-64/be38e7950432cb8668a08ebe00793b508a25341d b/tests/fuzz/corpora/fuzz-base32-64/be38e7950432cb8668a08ebe00793b508a25341d new file mode 100644 index 000000000000..04f647326931 Binary files /dev/null and b/tests/fuzz/corpora/fuzz-base32-64/be38e7950432cb8668a08ebe00793b508a25341d differ diff --git a/tests/fuzz/fuzz-base32-64.c b/tests/fuzz/fuzz-base32-64.c index 9dbec2e8fb4a..de30f96dae0b 100644 --- a/tests/fuzz/fuzz-base32-64.c +++ b/tests/fuzz/fuzz-base32-64.c @@ -21,5 +21,8 @@ void run(const uint8_t *data, size_t size) tal_free(decoded); encoded = b64_encode(NULL, data, size); + decoded = b64_decode(NULL, encoded, strlen(encoded)); + assert(memcmp(decoded, data, size) == 0); tal_free(encoded); + tal_free(decoded); }