diff options
author | Anton Samokhvalov <pg83@yandex.ru> | 2022-02-10 16:45:15 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:15 +0300 |
commit | 72cb13b4aff9bc9cf22e49251bc8fd143f82538f (patch) | |
tree | da2c34829458c7d4e74bdfbdf85dff449e9e7fb8 /library/cpp/string_utils/base64 | |
parent | 778e51ba091dc39e7b7fcab2b9cf4dbedfb6f2b5 (diff) | |
download | ydb-72cb13b4aff9bc9cf22e49251bc8fd143f82538f.tar.gz |
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/string_utils/base64')
-rw-r--r-- | library/cpp/string_utils/base64/base64.cpp | 66 | ||||
-rw-r--r-- | library/cpp/string_utils/base64/base64.h | 58 | ||||
-rw-r--r-- | library/cpp/string_utils/base64/base64_ut.cpp | 20 |
3 files changed, 72 insertions, 72 deletions
diff --git a/library/cpp/string_utils/base64/base64.cpp b/library/cpp/string_utils/base64/base64.cpp index 05c201f0de..08533d2b47 100644 --- a/library/cpp/string_utils/base64/base64.cpp +++ b/library/cpp/string_utils/base64/base64.cpp @@ -1,5 +1,5 @@ -#include "base64.h" - +#include "base64.h" + #include <contrib/libs/base64/avx2/libbase64.h> #include <contrib/libs/base64/ssse3/libbase64.h> #include <contrib/libs/base64/neon32/libbase64.h> @@ -7,10 +7,10 @@ #include <contrib/libs/base64/plain32/libbase64.h> #include <contrib/libs/base64/plain64/libbase64.h> -#include <util/generic/yexception.h> +#include <util/generic/yexception.h> #include <util/system/cpu_id.h> #include <util/system/platform.h> - + #include <cstdlib> namespace { @@ -71,7 +71,7 @@ namespace { } } -static const char base64_etab_std[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +static const char base64_etab_std[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static const char base64_bkw[] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', // 0..15 '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', // 16..31 @@ -93,7 +93,7 @@ static const char base64_bkw[] = { static_assert(Y_ARRAY_SIZE(base64_bkw) == 256, "wrong size"); // Base64 for url encoding, RFC3548 -static const char base64_etab_url[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; +static const char base64_etab_url[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; static inline unsigned char GetBase64EncodedIndex0(unsigned char octet0) { return (octet0 >> 2); @@ -111,13 +111,13 @@ static inline unsigned char GetBase64EncodedIndex3(unsigned char octet2) { return (octet2 & 0x3f); } -template <bool urlVersion> -static inline char* Base64EncodeImpl(char* outstr, const unsigned char* instr, size_t len) { +template <bool urlVersion> +static inline char* Base64EncodeImpl(char* outstr, const unsigned char* instr, size_t len) { const char* const base64_etab = (urlVersion ? base64_etab_url : base64_etab_std); const char pad = (urlVersion ? ',' : '='); - size_t idx = 0; - + size_t idx = 0; + while (idx + 2 < len) { *outstr++ = base64_etab[GetBase64EncodedIndex0(instr[idx])]; *outstr++ = base64_etab[GetBase64EncodedIndex1(instr[idx], instr[idx + 1])]; @@ -136,44 +136,44 @@ static inline char* Base64EncodeImpl(char* outstr, const unsigned char* instr, s } *outstr++ = pad; } - *outstr = 0; - + *outstr = 0; + return outstr; } static char* Base64EncodePlain(char* outstr, const unsigned char* instr, size_t len) { - return Base64EncodeImpl<false>(outstr, instr, len); + return Base64EncodeImpl<false>(outstr, instr, len); } -char* Base64EncodeUrl(char* outstr, const unsigned char* instr, size_t len) { - return Base64EncodeImpl<true>(outstr, instr, len); +char* Base64EncodeUrl(char* outstr, const unsigned char* instr, size_t len) { + return Base64EncodeImpl<true>(outstr, instr, len); } -inline void uudecode_1(char* dst, unsigned char* src) { +inline void uudecode_1(char* dst, unsigned char* src) { dst[0] = char((base64_bkw[src[0]] << 2) | (base64_bkw[src[1]] >> 4)); dst[1] = char((base64_bkw[src[1]] << 4) | (base64_bkw[src[2]] >> 2)); dst[2] = char((base64_bkw[src[2]] << 6) | base64_bkw[src[3]]); } static size_t Base64DecodePlain(void* dst, const char* b, const char* e) { - size_t n = 0; - while (b < e) { - uudecode_1((char*)dst + n, (unsigned char*)b); - - b += 4; - n += 3; - } - + size_t n = 0; + while (b < e) { + uudecode_1((char*)dst + n, (unsigned char*)b); + + b += 4; + n += 3; + } + if (n > 0) { - if (b[-1] == ',' || b[-1] == '=') { + if (b[-1] == ',' || b[-1] == '=') { n--; - - if (b[-2] == ',' || b[-2] == '=') { + + if (b[-2] == ',' || b[-2] == '=') { n--; - } + } } } - + return n; } @@ -189,9 +189,9 @@ static const char base64_bkw_strict[] = "\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"; size_t Base64StrictDecode(void* out, const char* b, const char* e) { - char* dst = (char*)out; - const unsigned char* src = (unsigned char*)b; - const unsigned char* const end = (unsigned char*)e; + char* dst = (char*)out; + const unsigned char* src = (unsigned char*)b; + const unsigned char* const end = (unsigned char*)e; Y_ENSURE(!((e - b) % 4), "incorrect input length for base64 decode"); @@ -228,7 +228,7 @@ size_t Base64StrictDecode(void* out, const char* b, const char* e) { } } - return dst - (char*)out; + return dst - (char*)out; } size_t Base64Decode(void* dst, const char* b, const char* e) { diff --git a/library/cpp/string_utils/base64/base64.h b/library/cpp/string_utils/base64/base64.h index f778a6425a..2f59572c51 100644 --- a/library/cpp/string_utils/base64/base64.h +++ b/library/cpp/string_utils/base64/base64.h @@ -1,15 +1,15 @@ #pragma once - + #include <util/system/defaults.h> -#include <util/generic/strbuf.h> +#include <util/generic/strbuf.h> #include <util/generic/string.h> - + /* @return Size of the buffer required to decode Base64 encoded data of size `len`. */ constexpr size_t Base64DecodeBufSize(const size_t len) noexcept { return (len + 3) / 4 * 3; -} - +} + /* Decode Base64 encoded data. Can decode both regular Base64 and Base64URL encoded data. Can decode * only valid Base64[URL] data, behaviour for invalid data is unspecified. * @@ -21,12 +21,12 @@ constexpr size_t Base64DecodeBufSize(const size_t len) noexcept { * * @return Return number of bytes decoded. */ -size_t Base64Decode(void* dst, const char* b, const char* e); - +size_t Base64Decode(void* dst, const char* b, const char* e); + inline TStringBuf Base64Decode(const TStringBuf src, void* dst) { - return TStringBuf((const char*)dst, Base64Decode(dst, src.begin(), src.end())); -} - + return TStringBuf((const char*)dst, Base64Decode(dst, src.begin(), src.end())); +} + inline void Base64Decode(const TStringBuf src, TString& dst) { dst.ReserveAndResize(Base64DecodeBufSize(src.size())); dst.resize(Base64Decode(src, dst.begin()).size()); @@ -36,9 +36,9 @@ inline void Base64Decode(const TStringBuf src, TString& dst) { inline TString Base64Decode(const TStringBuf s) { TString ret; Base64Decode(s, ret); - return ret; -} - + return ret; +} + /// /// @brief Decodes Base64 string with strict verification /// of invalid symbols, also tries to decode Base64 string with padding @@ -64,7 +64,7 @@ size_t Base64StrictDecode(void* dst, const char* b, const char* e); /// @return Returns dst wrapped into TStringBuf. /// inline TStringBuf Base64StrictDecode(const TStringBuf src, void* dst) { - return TStringBuf((const char*)dst, Base64StrictDecode(dst, src.begin(), src.end())); + return TStringBuf((const char*)dst, Base64StrictDecode(dst, src.begin(), src.end())); } /// @@ -91,22 +91,22 @@ inline TString Base64StrictDecode(const TStringBuf src) { /// Works with strings which length is not divisible by 4. TString Base64DecodeUneven(const TStringBuf s); -//encode +//encode constexpr size_t Base64EncodeBufSize(const size_t len) noexcept { return (len + 2) / 3 * 4 + 1; -} - -char* Base64Encode(char* outstr, const unsigned char* instr, size_t len); -char* Base64EncodeUrl(char* outstr, const unsigned char* instr, size_t len); - +} + +char* Base64Encode(char* outstr, const unsigned char* instr, size_t len); +char* Base64EncodeUrl(char* outstr, const unsigned char* instr, size_t len); + inline TStringBuf Base64Encode(const TStringBuf src, void* tmp) { return TStringBuf((const char*)tmp, Base64Encode((char*)tmp, (const unsigned char*)src.data(), src.size())); -} - +} + inline TStringBuf Base64EncodeUrl(const TStringBuf src, void* tmp) { return TStringBuf((const char*)tmp, Base64EncodeUrl((char*)tmp, (const unsigned char*)src.data(), src.size())); -} - +} + inline void Base64Encode(const TStringBuf src, TString& dst) { dst.ReserveAndResize(Base64EncodeBufSize(src.size())); dst.resize(Base64Encode(src, dst.begin()).size()); @@ -120,11 +120,11 @@ inline void Base64EncodeUrl(const TStringBuf src, TString& dst) { inline TString Base64Encode(const TStringBuf s) { TString ret; Base64Encode(s, ret); - return ret; -} - + return ret; +} + inline TString Base64EncodeUrl(const TStringBuf s) { TString ret; Base64EncodeUrl(s, ret); - return ret; -} + return ret; +} diff --git a/library/cpp/string_utils/base64/base64_ut.cpp b/library/cpp/string_utils/base64/base64_ut.cpp index bcc1e65879..16eb9c1bf2 100644 --- a/library/cpp/string_utils/base64/base64_ut.cpp +++ b/library/cpp/string_utils/base64/base64_ut.cpp @@ -1,5 +1,5 @@ -#include "base64.h" - +#include "base64.h" + #include <contrib/libs/base64/avx2/libbase64.h> #include <contrib/libs/base64/neon32/libbase64.h> #include <contrib/libs/base64/neon64/libbase64.h> @@ -197,11 +197,11 @@ static void TestEncodeStrictDecodeIntoString(const TString& plain, const TString Y_UNIT_TEST_SUITE(TBase64) { Y_UNIT_TEST(TestEncode) { - UNIT_ASSERT_VALUES_EQUAL(Base64Encode("12z"), "MTJ6"); - UNIT_ASSERT_VALUES_EQUAL(Base64Encode("123"), "MTIz"); - UNIT_ASSERT_VALUES_EQUAL(Base64Encode("12"), "MTI="); - UNIT_ASSERT_VALUES_EQUAL(Base64Encode("1"), "MQ=="); - } + UNIT_ASSERT_VALUES_EQUAL(Base64Encode("12z"), "MTJ6"); + UNIT_ASSERT_VALUES_EQUAL(Base64Encode("123"), "MTIz"); + UNIT_ASSERT_VALUES_EQUAL(Base64Encode("12"), "MTI="); + UNIT_ASSERT_VALUES_EQUAL(Base64Encode("1"), "MQ=="); + } Y_UNIT_TEST(TestIntoString) { { @@ -248,7 +248,7 @@ Y_UNIT_TEST_SUITE(TBase64) { UNIT_ASSERT_VALUES_EQUAL(Base64Decode(""), ""); UNIT_ASSERT_VALUES_EQUAL(Base64StrictDecode(""), ""); - UNIT_ASSERT_VALUES_EQUAL(Base64Decode("MTI="), "12"); + UNIT_ASSERT_VALUES_EQUAL(Base64Decode("MTI="), "12"); UNIT_ASSERT_VALUES_EQUAL(Base64StrictDecode("MTI="), "12"); UNIT_ASSERT_VALUES_EQUAL(Base64Decode("QQ=="), "A"); @@ -265,7 +265,7 @@ Y_UNIT_TEST_SUITE(TBase64) { UNIT_ASSERT_EXCEPTION(Base64StrictDecode("aHh=="), yexception); UNIT_ASSERT_EXCEPTION(Base64StrictDecode("\1\1\1\2"), yexception); - } + } Y_UNIT_TEST(TestDecodeUneven) { UNIT_ASSERT_VALUES_EQUAL(Base64DecodeUneven(""), ""); @@ -494,4 +494,4 @@ Y_UNIT_TEST_SUITE(TBase64) { const auto xDec = Base64Decode("SG93IGRvIEkgY29udmVydCBiZXR3ZWVuIGJpZy1lbmRpYW4gYW5kIGxpdHRsZS1lbmRpYW4gdmFsdWVzIGluIEMrKz9hYQ,,"); UNIT_ASSERT_VALUES_EQUAL(x, xDec); } -} +} |