fiat_crypto/
secp256k1_dettman_64.rs

1//! Autogenerated: 'src/ExtractionOCaml/dettman_multiplication' --lang Rust --inline secp256k1_dettman 64 5 48 2 '2^256 - 4294968273' mul square
2//! curve description: secp256k1_dettman
3//! machine_wordsize = 64 (from "64")
4//! requested operations: mul, square
5//! n = 5 (from "5")
6//! last_limb_width = 48 (from "48")
7//! last_reduction = 2 (from "2")
8//! s-c = 2^256 - [(1, 4294968273)] (from "2^256 - 4294968273")
9//! inbounds_multiplier: None (from "")
10//!
11//! Computed values:
12//!
13//!
14
15#![allow(unused_parens)]
16#![allow(non_camel_case_types)]
17
18
19
20/// The function fiat_secp256k1_dettman_mul multiplies two field elements.
21///
22/// Postconditions:
23///   eval out1 mod 115792089237316195423570985008687907853269984665640564039457584007908834671663 = (eval arg1 * eval arg2) mod 115792089237316195423570985008687907853269984665640564039457584007908834671663
24///
25/// Input Bounds:
26///   arg1: [[0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1fffffffffffe]]
27///   arg2: [[0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1fffffffffffe]]
28/// Output Bounds:
29///   out1: [[0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x17fffffffffff]]
30#[inline]
31pub fn fiat_secp256k1_dettman_mul(out1: &mut [u64; 5], arg1: &[u64; 5], arg2: &[u64; 5]) {
32  let x1: u128 = (((arg1[4]) as u128) * ((arg2[4]) as u128));
33  let x2: u64 = ((x1 >> 64) as u64);
34  let x3: u64 = ((x1 & (0xffffffffffffffff as u128)) as u64);
35  let x4: u128 = (((((arg1[0]) as u128) * ((arg2[3]) as u128)) + ((((arg1[1]) as u128) * ((arg2[2]) as u128)) + ((((arg1[2]) as u128) * ((arg2[1]) as u128)) + (((arg1[3]) as u128) * ((arg2[0]) as u128))))) + ((x3 as u128) * (0x1000003d10 as u128)));
36  let x5: u64 = ((x4 >> 52) as u64);
37  let x6: u64 = ((x4 & (0xfffffffffffff as u128)) as u64);
38  let x7: u128 = (((x5 as u128) + ((((arg1[0]) as u128) * ((arg2[4]) as u128)) + ((((arg1[1]) as u128) * ((arg2[3]) as u128)) + ((((arg1[2]) as u128) * ((arg2[2]) as u128)) + ((((arg1[3]) as u128) * ((arg2[1]) as u128)) + (((arg1[4]) as u128) * ((arg2[0]) as u128))))))) + ((x2 as u128) * (0x1000003d10000 as u128)));
39  let x8: u64 = ((x7 >> 52) as u64);
40  let x9: u64 = ((x7 & (0xfffffffffffff as u128)) as u64);
41  let x10: u128 = ((x8 as u128) + ((((arg1[1]) as u128) * ((arg2[4]) as u128)) + ((((arg1[2]) as u128) * ((arg2[3]) as u128)) + ((((arg1[3]) as u128) * ((arg2[2]) as u128)) + (((arg1[4]) as u128) * ((arg2[1]) as u128))))));
42  let x11: u64 = ((x10 >> 52) as u64);
43  let x12: u64 = ((x10 & (0xfffffffffffff as u128)) as u64);
44  let x13: u64 = (x9 >> 48);
45  let x14: u64 = (x9 & 0xffffffffffff);
46  let x15: u128 = ((((arg1[0]) as u128) * ((arg2[0]) as u128)) + (((x13 + (x12 << 4)) as u128) * (0x1000003d1 as u128)));
47  let x16: u64 = ((x15 >> 52) as u64);
48  let x17: u64 = ((x15 & (0xfffffffffffff as u128)) as u64);
49  let x18: u128 = ((x11 as u128) + ((((arg1[2]) as u128) * ((arg2[4]) as u128)) + ((((arg1[3]) as u128) * ((arg2[3]) as u128)) + (((arg1[4]) as u128) * ((arg2[2]) as u128)))));
50  let x19: u64 = ((x18 >> 52) as u64);
51  let x20: u64 = ((x18 & (0xfffffffffffff as u128)) as u64);
52  let x21: u128 = (((x16 as u128) + ((((arg1[0]) as u128) * ((arg2[1]) as u128)) + (((arg1[1]) as u128) * ((arg2[0]) as u128)))) + ((x20 as u128) * (0x1000003d10 as u128)));
53  let x22: u64 = ((x21 >> 52) as u64);
54  let x23: u64 = ((x21 & (0xfffffffffffff as u128)) as u64);
55  let x24: u128 = ((x19 as u128) + ((((arg1[3]) as u128) * ((arg2[4]) as u128)) + (((arg1[4]) as u128) * ((arg2[3]) as u128))));
56  let x25: u64 = ((x24 >> 64) as u64);
57  let x26: u64 = ((x24 & (0xffffffffffffffff as u128)) as u64);
58  let x27: u128 = (((x22 as u128) + ((((arg1[0]) as u128) * ((arg2[2]) as u128)) + ((((arg1[1]) as u128) * ((arg2[1]) as u128)) + (((arg1[2]) as u128) * ((arg2[0]) as u128))))) + ((x26 as u128) * (0x1000003d10 as u128)));
59  let x28: u64 = ((x27 >> 52) as u64);
60  let x29: u64 = ((x27 & (0xfffffffffffff as u128)) as u64);
61  let x30: u128 = (((x28 + x6) as u128) + ((x25 as u128) * (0x1000003d10000 as u128)));
62  let x31: u64 = ((x30 >> 52) as u64);
63  let x32: u64 = ((x30 & (0xfffffffffffff as u128)) as u64);
64  let x33: u64 = (x31 + x14);
65  out1[0] = x17;
66  out1[1] = x23;
67  out1[2] = x29;
68  out1[3] = x32;
69  out1[4] = x33;
70}
71
72/// The function fiat_secp256k1_dettman_square squares a field element.
73///
74/// Postconditions:
75///   eval out1 mod 115792089237316195423570985008687907853269984665640564039457584007908834671663 = (eval arg1 * eval arg1) mod 115792089237316195423570985008687907853269984665640564039457584007908834671663
76///
77/// Input Bounds:
78///   arg1: [[0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1fffffffffffe]]
79/// Output Bounds:
80///   out1: [[0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x1ffffffffffffe], [0x0 ~> 0x17fffffffffff]]
81#[inline]
82pub fn fiat_secp256k1_dettman_square(out1: &mut [u64; 5], arg1: &[u64; 5]) {
83  let x1: u64 = ((arg1[3]) * 0x2);
84  let x2: u64 = ((arg1[2]) * 0x2);
85  let x3: u64 = ((arg1[1]) * 0x2);
86  let x4: u64 = ((arg1[0]) * 0x2);
87  let x5: u128 = (((arg1[4]) as u128) * ((arg1[4]) as u128));
88  let x6: u64 = ((x5 >> 64) as u64);
89  let x7: u64 = ((x5 & (0xffffffffffffffff as u128)) as u64);
90  let x8: u128 = ((((x4 as u128) * ((arg1[3]) as u128)) + ((x3 as u128) * ((arg1[2]) as u128))) + ((x7 as u128) * (0x1000003d10 as u128)));
91  let x9: u64 = ((x8 >> 52) as u64);
92  let x10: u64 = ((x8 & (0xfffffffffffff as u128)) as u64);
93  let x11: u128 = (((x9 as u128) + (((x4 as u128) * ((arg1[4]) as u128)) + (((x3 as u128) * ((arg1[3]) as u128)) + (((arg1[2]) as u128) * ((arg1[2]) as u128))))) + ((x6 as u128) * (0x1000003d10000 as u128)));
94  let x12: u64 = ((x11 >> 52) as u64);
95  let x13: u64 = ((x11 & (0xfffffffffffff as u128)) as u64);
96  let x14: u128 = ((x12 as u128) + (((x3 as u128) * ((arg1[4]) as u128)) + ((x2 as u128) * ((arg1[3]) as u128))));
97  let x15: u64 = ((x14 >> 52) as u64);
98  let x16: u64 = ((x14 & (0xfffffffffffff as u128)) as u64);
99  let x17: u64 = (x13 >> 48);
100  let x18: u64 = (x13 & 0xffffffffffff);
101  let x19: u128 = ((((arg1[0]) as u128) * ((arg1[0]) as u128)) + (((x17 + (x16 << 4)) as u128) * (0x1000003d1 as u128)));
102  let x20: u64 = ((x19 >> 52) as u64);
103  let x21: u64 = ((x19 & (0xfffffffffffff as u128)) as u64);
104  let x22: u128 = ((x15 as u128) + (((x2 as u128) * ((arg1[4]) as u128)) + (((arg1[3]) as u128) * ((arg1[3]) as u128))));
105  let x23: u64 = ((x22 >> 52) as u64);
106  let x24: u64 = ((x22 & (0xfffffffffffff as u128)) as u64);
107  let x25: u128 = (((x20 as u128) + ((x4 as u128) * ((arg1[1]) as u128))) + ((x24 as u128) * (0x1000003d10 as u128)));
108  let x26: u64 = ((x25 >> 52) as u64);
109  let x27: u64 = ((x25 & (0xfffffffffffff as u128)) as u64);
110  let x28: u128 = ((x23 as u128) + ((x1 as u128) * ((arg1[4]) as u128)));
111  let x29: u64 = ((x28 >> 64) as u64);
112  let x30: u64 = ((x28 & (0xffffffffffffffff as u128)) as u64);
113  let x31: u128 = (((x26 as u128) + (((x4 as u128) * ((arg1[2]) as u128)) + (((arg1[1]) as u128) * ((arg1[1]) as u128)))) + ((x30 as u128) * (0x1000003d10 as u128)));
114  let x32: u64 = ((x31 >> 52) as u64);
115  let x33: u64 = ((x31 & (0xfffffffffffff as u128)) as u64);
116  let x34: u128 = (((x32 + x10) as u128) + ((x29 as u128) * (0x1000003d10000 as u128)));
117  let x35: u64 = ((x34 >> 52) as u64);
118  let x36: u64 = ((x34 & (0xfffffffffffff as u128)) as u64);
119  let x37: u64 = (x35 + x18);
120  out1[0] = x21;
121  out1[1] = x27;
122  out1[2] = x33;
123  out1[3] = x36;
124  out1[4] = x37;
125}