code wiki / (root) / nx_u384.nx

nx_u384.nx

buildroot/runtime/nx_u384.nx

8197 B241 linesdepth 2pulls 2 transitivereach 551 importersview sourcekind tool
docsdependenciesstructsconstsfunctions

about

nx_u384.nx -- 384-bit unsigned big-int big-int (12 × 32-bit limbs). Mirrors nx_u256.nx structure exactly with limb count 12 instead of 8. Needed for ECDSA P-384 (task #67) -- the curve has 384-bit field elements and scalars. Real public chains (example.com etc.) use P-384 keys on intermediate + root certs. Layout: 12 i64 slots, each holding one 32-bit limb in low bits. Limb 0 is least-significant; limb 11 is most-significant. Byte serialization: u384_load_be / u384_store_be use 48-byte big-endian (DER) layout: bytes[0] is MSB, bytes[47] is LSB. API (mirrors u256 1:1): u384_alloc() -> *i64 (12-limb zeroed buffer) u384_zero(out) u384_one(out) u384_copy(out, src) u384_load_be(out, bytes) bytes is 48 BE octets u384_store_be(bytes, src) u384_add_with_carry(out, a, b) -> final carry-out 0|1 u384_sub_with_borrow(out, a, b) -> final borrow-out 0|1 u384_cmp(a, b) -> -1 | 0 | +1 u384_is_zero(a) -> 0 | 1 u384_eq(a, b) -> 0 | 1 license_tier: INDEPENDENT_REDERIVE genealogy_id: international-research-sources/nist/sec1_v2_appendix_b + nist/fips_186_5 lineage_id: nishi_u384_q10

dependencies 1 imports · 28 importers

nx_syscalls.nx nx_u384.nx nx_ecdsa_p384.nx nx_ecdsa_p384_bisect_test.nx nx_ecdsa_p384_real_bisect_test.nx nx_ecdsa_p384_test.nx nx_ecdsa_sig_der_384.nx nx_p384_ecdh.nx nx_p384_field.nx nx_p384_field_inv.nx nx_p384_field_inv_test.nx nx_p384_field_mul.nx

diagram shows first 10 each side; +0 more imports, +18 more importers in the complete lists below.

imports: nx_syscalls.nx

imported by: nx_ecdsa_p384.nxnx_ecdsa_p384_bisect_test.nxnx_ecdsa_p384_real_bisect_test.nxnx_ecdsa_p384_test.nxnx_ecdsa_sig_der_384.nxnx_p384_ecdh.nxnx_p384_field.nxnx_p384_field_inv.nxnx_p384_field_inv_test.nxnx_p384_field_mul.nxnx_p384_field_mul_fast.nxnx_p384_field_mul_fast_gate.nxnx_p384_field_mul_test.nxnx_p384_field_test.nxnx_p384_modn.nxnx_p384_modn_test.nxnx_p384_point.nxnx_p384_point_add.nxnx_p384_point_test.nxnx_p384_scalar_mul.nxnx_p384_scalar_mul_test.nxnx_tls13_client_verify_cv.nxnx_u384_mul.nxnx_u384_test.nxnx_x509_chain_verify.nxnx_x509_pubkey_ec.nxnx_x509_verify_ecdsa_p384.nxnx_x509_verify_under_issuer.nx

structs

none

consts

38const NX_U384_LIMBS: i64 = 12
39const NX_U384_BYTES: i64 = 48
40const NX_U384_LIMB_BITS: i64 = 32
41const NX_U384_LIMB_MASK: i64 = 0xFFFFFFFF
49const NX_U384_SCRATCH_BLOCK: i64 = 1048576 // 1 MiB per block
50const NX_U384_SCRATCH_MAXBLOCKS: i64 = 8192 // 8 GiB ceiling (pathological-leak backstop only)

functions

55func nx_u384_scratch_init() -> i64
68func nx_u384_scratch(n: i64) -> *u8
99func nx_u384_scratch_save() -> i64 { nx_u384_scratch_init(); return NX_U384_SCRATCH_CUR }
100func nx_u384_scratch_restore(mark: i64) -> i64 { NX_U384_SCRATCH_CUR = mark; return 0 }
102func u384_alloc() -> *i64
114func u384_free(p: *i64) -> i64
118func u384_zero(out: *i64) -> i64
127func u384_one(out: *i64) -> i64
133func u384_copy(out: *i64, src: *i64) -> i64
146func u384_load_be(out: *i64, bytes: *u8) -> i64
161func u384_store_be(bytes: *u8, src: *i64) -> i64
176func u384_add_with_carry(out: *i64, a: *i64, b: *i64) -> i64
188func u384_sub_with_borrow(out: *i64, a: *i64, b: *i64) -> i64
205func u384_cmp(a: *i64, b: *i64) -> i64
217func u384_is_zero(a: *i64) -> i64
228func u384_eq(a: *i64, b: *i64) -> i64
239func main() -> i64