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,
47#define PW_BASE64_MAX_DECODED_SIZE(base64_size_bytes) \
48 (((base64_size_bytes % 4) == 0) ? ((size_t)base64_size_bytes) / 4 * 3 : 0)
54size_t pw_Base64Decode(
const char* base64,
55 size_t base64_size_bytes,
59bool pw_Base64IsValidChar(
char base64_char);
65bool pw_Base64IsValid(
const char* base64_data,
size_t base64_size);
74#include "pw_span/span.h"
90 return PW_BASE64_ENCODED_SIZE(binary_size_bytes);
110 pw_Base64Encode(binary.data(), binary.size_bytes(), output);
139template <
size_t kMaxBinaryDataSizeBytes>
157 return PW_BASE64_MAX_DECODED_SIZE(base64_size_bytes);
168 if ((valid_base64.size() % 4) != 0 || valid_base64.empty()) {
171 const size_t max_bytes = valid_base64.size() / 4 * 3;
173 if (valid_base64[valid_base64.size() - 2] ==
'=') {
175 }
else if (valid_base64[valid_base64.size() - 1] ==
'=') {
178 return max_bytes - padding;
197inline size_t Decode(std::string_view base64,
void* output) {
198 return pw_Base64Decode(base64.data(), base64.size(), output);
211 static_assert(
sizeof(T) ==
sizeof(
char));
212 buffer.resize(
Decode(buffer, buffer.data()));
220 return pw_Base64IsValid(base64.data(), base64.size());
227inline bool IsValidChar(
char base64) {
return pw_Base64IsValidChar(base64); }
pw::InlineBasicString is a fixed-capacity version of std::basic_string. In brief:
Definition: string.h:68
Definition: span_impl.h:235
size_t Decode(std::string_view base64, void *output)
Definition: base64.h:197
bool IsValid(std::string_view base64)
Definition: base64.h:219
constexpr size_t DecodedSize(std::string_view valid_base64)
Definition: base64.h:167
bool IsValidChar(char base64)
Definition: base64.h:227
constexpr size_t EncodedSize(size_t binary_size_bytes)
Definition: base64.h:89
void Encode(span< const std::byte > binary, char *output)
Definition: base64.h:109
constexpr size_t MaxDecodedSize(size_t base64_size_bytes)
Definition: base64.h:156
void DecodeInPlace(InlineBasicString< T > &buffer)
Decodes a pw::InlineString<> in place.
Definition: base64.h:210
Base64 encoding, decoding, and validating library.
Definition: base64.h:78
pw::InlineBasicString and pw::InlineString are safer alternatives to std::basic_string and std::strin...