From ae40cf1a8e16462a8b9dfd076d440bc8ec796c2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Wed, 10 Apr 2024 13:20:50 +0200 Subject: [PATCH] test: Add padding tests for Base32/Base64 --- src/test/base32_tests.cpp | 25 +++++++++++++++++++++---- src/test/base64_tests.cpp | 21 +++++++++++++++++---- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/test/base32_tests.cpp b/src/test/base32_tests.cpp index be3b0c2d1f3..e4605bca13f 100644 --- a/src/test/base32_tests.cpp +++ b/src/test/base32_tests.cpp @@ -29,11 +29,28 @@ BOOST_AUTO_TEST_CASE(base32_testvectors) BOOST_CHECK_MESSAGE(std::ranges::equal(*dec, vstrIn[i]), vstrOut[i]); } + BOOST_CHECK(!DecodeBase32("AWSX3VPPinvalid")); // invalid size + BOOST_CHECK( DecodeBase32("AWSX3VPP")); // valid + // Decoding strings with embedded NUL characters should fail - BOOST_CHECK(!DecodeBase32("invalid\0"s)); // correct size, invalid due to \0 - BOOST_CHECK(DecodeBase32("AWSX3VPP"s)); // valid - BOOST_CHECK(!DecodeBase32("AWSX3VPP\0invalid"s)); // correct size, invalid due to \0 - BOOST_CHECK(!DecodeBase32("AWSX3VPPinvalid"s)); // invalid size + BOOST_CHECK(!DecodeBase32("invalid\0"sv)); // correct size, invalid due to \0 + BOOST_CHECK(!DecodeBase32("AWSX3VPP\0invalid"sv)); // correct size, invalid due to \0 +} + +BOOST_AUTO_TEST_CASE(base32_padding) +{ + // Is valid without padding + BOOST_CHECK_EQUAL(EncodeBase32("fooba"), "mzxw6ytb"); + + // Valid size + BOOST_CHECK(!DecodeBase32("========")); + BOOST_CHECK(!DecodeBase32("a=======")); + BOOST_CHECK( DecodeBase32("aa======")); + BOOST_CHECK(!DecodeBase32("aaa=====")); + BOOST_CHECK( DecodeBase32("aaaa====")); + BOOST_CHECK( DecodeBase32("aaaaa===")); + BOOST_CHECK(!DecodeBase32("aaaaaa==")); + BOOST_CHECK( DecodeBase32("aaaaaaa=")); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/base64_tests.cpp b/src/test/base64_tests.cpp index b9d0d2b2412..d505caabbe7 100644 --- a/src/test/base64_tests.cpp +++ b/src/test/base64_tests.cpp @@ -36,11 +36,24 @@ BOOST_AUTO_TEST_CASE(base64_testvectors) BOOST_CHECK_EQUAL(EncodeBase64(in_s), out_exp); } + BOOST_CHECK(DecodeBase64("nQB/pZw=")); // valid + // Decoding strings with embedded NUL characters should fail - BOOST_CHECK(!DecodeBase64("invalid\0"s)); - BOOST_CHECK(DecodeBase64("nQB/pZw="s)); - BOOST_CHECK(!DecodeBase64("nQB/pZw=\0invalid"s)); - BOOST_CHECK(!DecodeBase64("nQB/pZw=invalid\0"s)); + BOOST_CHECK(!DecodeBase64("invalid\0"sv)); // correct size, invalid due to \0 + BOOST_CHECK(!DecodeBase64("nQB/pZw=\0invalid"sv)); + BOOST_CHECK(!DecodeBase64("nQB/pZw=invalid\0"sv)); // invalid, padding only allowed at the end +} + +BOOST_AUTO_TEST_CASE(base64_padding) +{ + // Is valid without padding + BOOST_CHECK_EQUAL(EncodeBase64("foobar"), "Zm9vYmFy"); + + // Valid size + BOOST_CHECK(!DecodeBase64("====")); + BOOST_CHECK(!DecodeBase64("a===")); + BOOST_CHECK( DecodeBase64("YQ==")); + BOOST_CHECK( DecodeBase64("YWE=")); } BOOST_AUTO_TEST_SUITE_END()