[][src]Module fiat_crypto::p256_32

Autogenerated: src/ExtractionOCaml/word_by_word_montgomery --lang=Rust p256 '2^256 - 2^224 + 2^192 + 2^96 - 1' 32 mul square add sub opp from_montgomery to_montgomery nonzero selectznz to_bytes from_bytes curve description: p256 requested operations: mul, square, add, sub, opp, from_montgomery, to_montgomery, nonzero, selectznz, to_bytes, from_bytes m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") machine_wordsize = 32 (from "32")

NOTE: In addition to the bounds specified above each function, all functions synthesized for this Montgomery arithmetic require the input to be strictly less than the prime modulus (m), and also require the input to be in the unique saturated representation. All functions also ensure that these two properties are true of return values.

Computed values: eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248)

Functions

fiat_p256_mul

The function fiat_p256_mul multiplies two field elements in the Montgomery domain. Preconditions: 0 ≤ eval arg1 < m 0 ≤ eval arg2 < m Postconditions: eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m 0 ≤ eval out1 < m

fiat_p256_square

The function fiat_p256_square squares a field element in the Montgomery domain. Preconditions: 0 ≤ eval arg1 < m Postconditions: eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m 0 ≤ eval out1 < m

fiat_p256_add

The function fiat_p256_add adds two field elements in the Montgomery domain. Preconditions: 0 ≤ eval arg1 < m 0 ≤ eval arg2 < m Postconditions: eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m 0 ≤ eval out1 < m

fiat_p256_sub

The function fiat_p256_sub subtracts two field elements in the Montgomery domain. Preconditions: 0 ≤ eval arg1 < m 0 ≤ eval arg2 < m Postconditions: eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m 0 ≤ eval out1 < m

fiat_p256_opp

The function fiat_p256_opp negates a field element in the Montgomery domain. Preconditions: 0 ≤ eval arg1 < m Postconditions: eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m 0 ≤ eval out1 < m

fiat_p256_from_montgomery

The function fiat_p256_from_montgomery translates a field element out of the Montgomery domain. Preconditions: 0 ≤ eval arg1 < m Postconditions: eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^8) mod m 0 ≤ eval out1 < m

fiat_p256_to_montgomery

The function fiat_p256_to_montgomery translates a field element into the Montgomery domain. Preconditions: 0 ≤ eval arg1 < m Postconditions: eval (from_montgomery out1) mod m = eval arg1 mod m 0 ≤ eval out1 < m

fiat_p256_nonzero

The function fiat_p256_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. Preconditions: 0 ≤ eval arg1 < m Postconditions: out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0

fiat_p256_selectznz

The function fiat_p256_selectznz is a multi-limb conditional select. Postconditions: eval out1 = (if arg1 = 0 then eval arg2 else eval arg3)

fiat_p256_to_bytes

The function fiat_p256_to_bytes serializes a field element in the Montgomery domain to bytes in little-endian order. Preconditions: 0 ≤ eval arg1 < m Postconditions: out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31]

fiat_p256_from_bytes

The function fiat_p256_from_bytes deserializes a field element in the Montgomery domain from bytes in little-endian order. Preconditions: 0 ≤ bytes_eval arg1 < m Postconditions: eval out1 mod m = bytes_eval arg1 mod m 0 ≤ eval out1 < m

fiat_p256_addcarryx_u32

The function fiat_p256_addcarryx_u32 is an addition with carry. Postconditions: out1 = (arg1 + arg2 + arg3) mod 2^32 out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋

fiat_p256_cmovznz_u32

The function fiat_p256_cmovznz_u32 is a single-word conditional move. Postconditions: out1 = (if arg1 = 0 then arg2 else arg3)

fiat_p256_mulx_u32

The function fiat_p256_mulx_u32 is a multiplication, returning the full double-width result. Postconditions: out1 = (arg1 * arg2) mod 2^32 out2 = ⌊arg1 * arg2 / 2^32⌋

fiat_p256_subborrowx_u32

The function fiat_p256_subborrowx_u32 is a subtraction with borrow. Postconditions: out1 = (-arg1 + arg2 + -arg3) mod 2^32 out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋

Type Definitions

fiat_p256_i1
fiat_p256_i2
fiat_p256_u1
fiat_p256_u2