api
x25519.ch
Declarations in x25519.ch
1 declarationstls
Declarations
Public only
tls#
Publicnamespace
namespace tls
Uses direct 32-bit limb arithmetic over GF(2^255 - 19).
fe_set_small#
Publicfunction
func fe_set_small(f : *u32, val : u32) : void
Set to value (only small values work, up to 2^31)
fe_decode#
Publicfunction
func fe_decode(f : *u32, data : *u8) : void
─── Decode 32-byte little-endian to 8 limbs ─────────────────────────
fe_encode#
Publicfunction
func fe_encode(data : *u8, f : *u32) : void
─── Encode 8 limbs to 32-byte little-endian ─────────────────────────
fe_cmp#
function
func fe_cmp(a : *u32, b : *u32) : int
─── Compare two field elements (return -1, 0, or 1) ─────────────────
fe_ccopy#
function
func fe_ccopy(dst : *u32, src : *u32, mask : u32) : void
─── Conditional copy (constant-time) ──────────────────────────────
fe_carry#
function
func fe_carry(f : *u64) : void
─── Carry propagation (full reduction) ─────────────────────────────
fe_strong_reduce#
function
func fe_strong_reduce(f : *u32) : void
─── Conditional subtraction of p ──────────────────────────────────
fe_add#
Publicfunction
func fe_add(c : *u32, a : *u32, b : *u32) : void
─── Addition mod p (fully reduced) ────────────────────────────────
fe_debug_print#
function
func fe_debug_print(msg : *char, f : *u32) : void
fe_sub#
Publicfunction
func fe_sub(c : *u32, a : *u32, b : *u32) : void
─── Subtraction mod p (fully reduced) ─────────────────────────────
mul32#
function
func mul32(r_lo : *u64, r_hi : *u64, x : u32, y : u32) : void
─── 32x32 → 64-bit multiplication ──────────────────────────────────
fe_mul#
Publicfunction
func fe_mul(c : *u32, a : *u32, b : *u32) : void
─── Multiplication mod p ──────────────────────────────────────────
fe_sq#
function
func fe_sq(c : *u32, a : *u32) : void
─── Square (just calls fe_mul for correctness) ─────────────────────
fe_zero_u64_arr#
function
func fe_zero_u64_arr(arr : *u64, n : size_t) : void
─── Helper: zero u64 array ─────────────────────────────────────────
fe_inv#
function
func fe_inv(c : *u32, a : *u32) : void
─── Modular inverse using Fermat's little theorem ──────────────────
fe_cswap#
function
func fe_cswap(a : *u32, b : *u32, sw : u32) : void
─── Conditional swap (constant-time using XOR mask) ───────────────
x25519_clamp_scalar#
Publicfunction
func x25519_clamp_scalar(scalar : *u8) : void
Clamp scalar per RFC 7748 Section 5
x25519_ladder#
Publicfunction
func x25519_ladder(out : *u8, scalar : *u8, u : *u8) : void
─── Montgomery Ladder ──────────────────────────────────────────────
x25519_generate_keypair#
Publicfunction
func x25519_generate_keypair(priv : *u8, pub : *u8) : int
Generate an x25519 keypair