#![allow(dead_code, deprecated, unused_variables, unused_mut)] fn quadratic_mul(a: [u8; N], b: [u8; N]) -> [u8; N] { let mut out = [0; N]; for j in 0..N { let mut carry = 0; for i in 0..(N - j) { (out[j + i], carry) = u8::carrying_mul_add(a[i], b[j], out[j + i], carry); } } out } fn main() { assert_eq!(quadratic_mul([0xFF; 3], [0xFF; 3]), [1, 0, 0]); assert_eq!(u32::wrapping_mul(0x9e3779b9, 0x7f4a7c15), 0xcffc982d); assert_eq!( quadratic_mul(u32::to_le_bytes(0x9e3779b9), u32::to_le_bytes(0x7f4a7c15)), u32::to_le_bytes(0xcffc982d) ); }