| 94 | } |
| 95 | |
| 96 | pub fn read_u32_le(mut witness: Vec<Vec<u8>>) -> Vec<u32> { |
| 97 | assert_eq!(witness.len() as u32, Self::N_LIMBS); |
| 98 | |
| 99 | witness.reverse(); |
| 100 | |
| 101 | let mut bits: Vec<bool> = vec![]; |
| 102 | for element in witness.iter() { |
| 103 | let limb = read_scriptint(element).unwrap(); |
| 104 | for i in 0..LIMB_SIZE { |
| 105 | bits.push((limb & (1 << i)) != 0); |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | bits.resize(N_BITS as usize, false); |
| 110 | |
| 111 | let mut u32s = vec![]; |
| 112 | |
| 113 | for chunk in bits.chunks(32) { |
| 114 | let mut chunk_vec = chunk.to_vec(); |
| 115 | chunk_vec.resize(32, false); |
| 116 | |
| 117 | let mut elem = 0u32; |
| 118 | for (i, chunk_i) in chunk_vec.into_iter().enumerate() { |
| 119 | if chunk_i { |
| 120 | elem += 1 << i; |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | u32s.push(elem); |
| 125 | } |
| 126 | |
| 127 | u32s |
| 128 | } |
| 129 | |
| 130 | pub fn push_u64_le(v: &[u64]) -> Script { |
| 131 | let v = v |