light_hasher/
bigint.rs

1use num_bigint::BigUint;
2
3use crate::HasherError;
4
5/// Converts the given [`num_bigint::BigUint`](num_bigint::BigUint) into a little-endian
6/// byte array.
7pub fn bigint_to_le_bytes_array<const BYTES_SIZE: usize>(
8    bigint: &BigUint,
9) -> Result<[u8; BYTES_SIZE], HasherError> {
10    let mut array = [0u8; BYTES_SIZE];
11    let bytes = bigint.to_bytes_le();
12
13    if bytes.len() > BYTES_SIZE {
14        return Err(HasherError::InvalidInputLength(BYTES_SIZE, bytes.len()));
15    }
16
17    array[..bytes.len()].copy_from_slice(bytes.as_slice());
18    Ok(array)
19}
20
21/// Converts the given [`ark_ff::BigUint`](ark_ff::BigUint) into a big-endian
22/// byte array.
23pub fn bigint_to_be_bytes_array<const BYTES_SIZE: usize>(
24    bigint: &BigUint,
25) -> Result<[u8; BYTES_SIZE], HasherError> {
26    let mut array = [0u8; BYTES_SIZE];
27    let bytes = bigint.to_bytes_be();
28
29    if bytes.len() > BYTES_SIZE {
30        return Err(HasherError::InvalidInputLength(BYTES_SIZE, bytes.len()));
31    }
32
33    let start_pos = BYTES_SIZE - bytes.len();
34    array[start_pos..].copy_from_slice(bytes.as_slice());
35    Ok(array)
36}