in pir.cpp [153:177]
void coeffs_to_bytes(uint32_t limit, const Plaintext &coeffs, uint8_t *output, uint32_t size_out) {
uint32_t room = 8;
uint32_t j = 0;
uint8_t *target = output;
for (uint32_t i = 0; i < coeffs.coeff_count(); i++) {
uint64_t src = coeffs[i];
uint32_t rest = limit;
while (rest && j < size_out) {
uint32_t shift = rest;
if (room < rest) {
shift = room;
}
target[j] = target[j] << shift;
target[j] = target[j] | (src >> (limit - shift));
src = src << shift;
room -= shift;
rest -= shift;
if (room == 0) {
j++;
room = 8;
}
}
}
}