98 size_t bytes_absorbed = 0;
99 auto absorb = [&](std::span<const uint8_t> bytes) {
103 sink.insert(sink.end(), bytes.begin(), bytes.end());
105 bytes_absorbed += bytes.size();
109 auto encode_string_and_absorb = [&](std::span<const uint8_t> bytes) {
115 auto absorb_padding = [&](
size_t padding_bytes) {
116 for(
size_t i = 0; i < padding_bytes; ++i) {
117 const uint8_t zero_byte = 0;
118 absorb({&zero_byte, 1});
125 (encode_string_and_absorb(byte_strings), ...);
126 absorb_padding(padding_mod - (bytes_absorbed % padding_mod));
128 return bytes_absorbed;