21 static std::vector<uint8_t>
raw_from_b64(
const std::string_view& b64_string)
23 const auto*
const data =
24 reinterpret_cast<const uint8_t*
>(b64_string.data());
25 const auto size = b64_string.size();
42 int max_size = EVP_DECODE_LENGTH(size);
43 unsigned char output[max_size];
44 memset(output,
'\0', max_size);
48 int rc = EVP_DecodeUpdate(ctx, output, &chunk_len, data, size);
52 throw std::invalid_argument(fmt::format(
53 "OSSL: Could not decode update from base64 string: {} [{} bytes out "
54 "of {}, chunk_len = {}]",
60 encoded_len = chunk_len;
62 rc = EVP_DecodeFinal(ctx, output + chunk_len, &chunk_len);
66 throw std::logic_error(fmt::format(
67 "OSSL: Could not decode final from base64 string: {} [{} bytes out "
68 "of {}, chunk_len = {}]",
74 encoded_len += chunk_len;
76 std::vector<uint8_t> ret(output, output + encoded_len);
98 int max_size = EVP_ENCODE_LENGTH(size);
99 unsigned char output[max_size];
100 memset(output,
'\0', max_size);
104 int rc = EVP_EncodeUpdate(ctx, output, &chunk_len, data, size);
108 throw std::logic_error(fmt::format(
109 "OSSL: Could not encode update to base64 string: {} [{} bytes out of "
110 "{}, chunk_len = {}]",
118 EVP_EncodeFinal(ctx, output + chunk_len, &chunk_len);
119 auto err = ERR_get_error();
123 throw std::logic_error(fmt::format(
124 "OSSL: Could not encode final to base64 string: {} [{} bytes out of "
125 "{}, chunk_len = {}]",
133 std::string ret =
reinterpret_cast<const char*
>(output);
135 ret.erase(std::remove(ret.begin(), ret.end(),
'\n'), ret.end());