30#define PW_BASE64_ENCODED_SIZE(binary_size_bytes) \
31 (((size_t)binary_size_bytes + 2) / 3 * 4)
38void pw_Base64Encode(
const void* binary_data,
39 const size_t binary_size_bytes,
45#define PW_BASE64_MAX_DECODED_SIZE(base64_size_bytes) \
46 (((size_t)base64_size_bytes) / 4 * 3)
52size_t pw_Base64Decode(
const char* base64,
53 size_t base64_size_bytes,
57bool pw_Base64IsValidChar(
char base64_char);
63bool pw_Base64IsValid(
const char* base64_data,
size_t base64_size);
72#include "pw_span/span.h"
84constexpr size_t EncodedSize(
size_t binary_size_bytes) {
85 return PW_BASE64_ENCODED_SIZE(binary_size_bytes);
104inline void Encode(span<const std::byte> binary,
char* output) {
105 pw_Base64Encode(binary.data(), binary.size_bytes(), output);
120size_t Encode(span<const std::byte> binary, span<char> output_buffer);
129void Encode(span<const std::byte> binary, InlineString<>& output);
134template <
size_t kMaxBinaryDataSizeBytes>
135inline InlineString<EncodedSize(kMaxBinaryDataSizeBytes)> Encode(
136 span<const std::byte> binary) {
137 InlineString<EncodedSize(kMaxBinaryDataSizeBytes)> output;
138 Encode(binary, output);
153constexpr size_t MaxDecodedSize(
size_t base64_size_bytes) {
154 return PW_BASE64_MAX_DECODED_SIZE(base64_size_bytes);
173inline size_t Decode(std::string_view base64,
void* output) {
174 return pw_Base64Decode(base64.data(), base64.size(), output);
182size_t Decode(std::string_view base64, span<std::byte> output_buffer);
186inline void DecodeInPlace(InlineBasicString<T>& buffer) {
187 static_assert(
sizeof(T) ==
sizeof(
char));
188 buffer.resize(Decode(buffer, buffer.data()));
195inline bool IsValid(std::string_view base64) {
196 return pw_Base64IsValid(base64.data(), base64.size());
203inline bool IsValidChar(
char base64) {
return pw_Base64IsValidChar(base64); }
InlineBasicString< char, kCapacity > InlineString
pw::InlineString is an alias of pw::InlineBasicString<char> and is equivalent to std::string.
Definition: string.h:568
pw::InlineBasicString and pw::InlineString are safer alternatives to std::basic_string and std::strin...