nx_p384_modn.nx
buildroot/runtime/nx_p384_modn.nx
about
nx_p384_modn.nx -- NIST P-384 scalar arithmetic mod n.
n = 0xffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973
(FIPS 186-5 D.1.2.4 -- order of the P-384 base point G).
Mirror of nx_p256_modn.nx on the 12-limb / 384-bit path.
Same shape -- add / sub / neg / reduce / mul / sq / inv, all
mod n. Bit-by-bit shift-and-subtract reduction for mul (mirror
of p384_field_mul approach -- portable, no Solinas).
API:
p384_modn_load_n(out)
p384_modn_load_n_minus_2(out)
p384_modn_zero / one / copy / eq (wrappers over u384_*)
p384_modn_add(r, a, b) r = (a + b) mod n
p384_modn_sub(r, a, b) r = (a - b) mod n
p384_modn_neg(r, a) r = (-a) mod n
p384_modn_reduce(r, a) r = a mod n (single-subtract)
p384_modn_mul(out_12, a, b) out = (a * b) mod n
p384_modn_sq(out, a) out = (a * a) mod n
p384_modn_inv(out, a) out = a^(-1) mod n (Fermat)
license_tier: INDEPENDENT_REDERIVE
genealogy_id: international-research-sources/nist/fips_186_5
lineage_id: nishi_p384_modn_q10
dependencies 3 imports · 5 importers
imports: nx_syscalls.nxnx_u384.nxnx_u384_mul.nx
imported by: nx_ecdsa_p384.nxnx_ecdsa_p384_bisect_test.nxnx_p384_ecdh.nxnx_p384_modn_test.nxnx_p384_scalar_mul_test.nx
structs
| none |
consts
| none |
functions
| 40 | func p384_modn_load_n(out: *i64) -> i64 |
| 57 | func p384_modn_load_n_minus_2(out: *i64) -> i64 called by 1: p384_modn_inv |
| 73 | func p384_modn_zero(out: *i64) -> i64 { return u384_zero(out) } calls 1: u384_zero |
| 74 | func p384_modn_one(out: *i64) -> i64 { return u384_one(out) } |
| 75 | func p384_modn_copy(out: *i64, src: *i64) -> i64 { return u384_copy(out, src) } calls 1: u384_copy |
| 76 | func p384_modn_eq(a: *i64, b: *i64) -> i64 { return u384_eq(a, b) } |
| 79 | func p384_modn_add(r: *i64, a: *i64, b: *i64) -> i64 called by 1: main calls 5: u384_allocp384_modn_load_nu384_add_with_carryu384_sub_with_borrowu384_copy |
| 95 | func p384_modn_sub(r: *i64, a: *i64, b: *i64) -> i64 |
| 105 | func p384_modn_neg(r: *i64, a: *i64) -> i64 |
| 118 | func p384_modn_reduce(r: *i64, a: *i64) -> i64 |
| 129 | func u384_wide_shr_1_inplace(buf: *i64) -> i64 called by 1: p384_modn_mul |
| 142 | func u384_wide_sub_inplace(a: *i64, b: *i64) -> i64 called by 1: p384_modn_mul |
| 160 | func p384_modn_mul(out_12: *i64, a: *i64, b: *i64) -> i64 |
| 191 | func p384_modn_sq(out: *i64, a: *i64) -> i64 |
| 195 | func p384_modn_bit_at(limbs: *i64, bit_pos: i64) -> i64 called by 1: p384_modn_inv |
| 203 | func p384_modn_inv(out: *i64, a: *i64) -> i64 |
| 225 | func main() -> i64 |