code wiki / (root) / nx_p384_field_test.nx

nx_p384_field_test.nx source

↩ module page · 77 lines · 2128 B

1// nx_p384_field_test.nx -- KAT for P-384 field add/sub/neg. 2// 3// Verifies: 4// - p loads correctly (12 limbs as documented) 5// - 0 + 0 = 0 6// - 1 + (p - 1) = 0 (mod p) 7// - (p - 1) + (p - 1) = p - 2 (mod p) 8// - (p - 1) - 1 = p - 2 9// - 0 - 1 = p - 1 10// - -0 = 0 11// - -1 = p - 1 12// 13// expect_exit: 0 14// license_tier: ORIGINAL 15 16import "nx_syscalls.nx" 17import "nx_u384.nx" 18import "nx_p384_field.nx" 19 20func main() -> i64 { 21 let p: *i64 = u384_alloc() 22 p384_field_load_p(p) 23 24 // Verify each limb of p 25 if p[0] != 0xFFFFFFFF { return 1 } 26 if p[1] != 0 { return 2 } 27 if p[2] != 0 { return 3 } 28 if p[3] != 0xFFFFFFFF { return 4 } 29 if p[4] != 0xFFFFFFFE { return 5 } 30 if p[5] != 0xFFFFFFFF { return 6 } 31 if p[11] != 0xFFFFFFFF { return 7 } 32 33 let one_v: *i64 = u384_alloc() 34 u384_one(one_v) 35 let zero_v: *i64 = u384_alloc() 36 let p_minus_1: *i64 = u384_alloc() 37 u384_sub_with_borrow(p_minus_1, p, one_v) 38 39 // ---- Test: 0 + 0 = 0 ---- 40 let r: *i64 = u384_alloc() 41 p384_field_add(r, zero_v, zero_v) 42 if u384_is_zero(r) != 1 { return 10 } 43 44 // ---- Test: 1 + (p-1) = 0 (mod p) ---- 45 p384_field_add(r, one_v, p_minus_1) 46 if u384_is_zero(r) != 1 { return 11 } 47 48 // ---- Test: (p-1) + (p-1) = p - 2 (mod p) ---- 49 let p_minus_2: *i64 = u384_alloc() 50 let two: *i64 = u384_alloc() 51 two[0] = 2 52 u384_sub_with_borrow(p_minus_2, p, two) 53 p384_field_add(r, p_minus_1, p_minus_1) 54 if u384_eq(r, p_minus_2) != 1 { return 12 } 55 56 // ---- Test: (p-1) - 1 = p - 2 ---- 57 p384_field_sub(r, p_minus_1, one_v) 58 if u384_eq(r, p_minus_2) != 1 { return 20 } 59 60 // ---- Test: 0 - 1 = p - 1 ---- 61 p384_field_sub(r, zero_v, one_v) 62 if u384_eq(r, p_minus_1) != 1 { return 21 } 63 64 // ---- Test: -0 = 0 ---- 65 p384_field_neg(r, zero_v) 66 if u384_is_zero(r) != 1 { return 30 } 67 68 // ---- Test: -1 = p - 1 ---- 69 p384_field_neg(r, one_v) 70 if u384_eq(r, p_minus_1) != 1 { return 31 } 71 72 // ---- Test: -(p-1) = 1 ---- 73 p384_field_neg(r, p_minus_1) 74 if u384_eq(r, one_v) != 1 { return 32 } 75 76 return 0 77}