pub fn negate_256_be(bytes: &[u8; 32]) -> [u8; 32] {
let mut result = [0u8; 32];
let mut carry = 1u16;
for i in 0..32 {
let idx = 31 - i;
let inverted = !bytes[idx];
let sum = inverted as u16 + carry;
result[idx] = sum as u8;
carry = sum >> 8;
}
result
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_negate_256_be() {
let mut one = [0u8; 32];
one[31] = 1; let neg = negate_256_be(&one);
assert!(neg.iter().all(|&b| b == 0xFF));
}
}