import "../../casts/u32_to_bits";
import "../bool/pack256";

// pack 256 big-endian bits into one field element
// Note: This is not a injective operation as `p` is smaller than `2**256 - 1 for bn128
// For example, `[0, 0,..., 0]` and `bits(p)` both point to `0`
def main(u32[8] input) -> field {
    bool[256] bits = [
        ...u32_to_bits(input[0]),
        ...u32_to_bits(input[1]),
        ...u32_to_bits(input[2]),
        ...u32_to_bits(input[3]),
        ...u32_to_bits(input[4]),
        ...u32_to_bits(input[5]),
        ...u32_to_bits(input[6]),
        ...u32_to_bits(input[7])
    ];
    return pack256(bits);
}
