aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/string_utils/base64
diff options
context:
space:
mode:
authorAnton Samokhvalov <pg83@yandex.ru>2022-02-10 16:45:17 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:17 +0300
commitd3a398281c6fd1d3672036cb2d63f842d2cb28c5 (patch)
treedd4bd3ca0f36b817e96812825ffaf10d645803f2 /library/cpp/string_utils/base64
parent72cb13b4aff9bc9cf22e49251bc8fd143f82538f (diff)
downloadydb-d3a398281c6fd1d3672036cb2d63f842d2cb28c5.tar.gz
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/string_utils/base64')
-rw-r--r--library/cpp/string_utils/base64/base64.cpp66
-rw-r--r--library/cpp/string_utils/base64/base64.h58
-rw-r--r--library/cpp/string_utils/base64/base64_ut.cpp20
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 08533d2b47..05c201f0de 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 2f59572c51..f778a6425a 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 16eb9c1bf2..bcc1e65879 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);
}
-}
+}