Coverage Report

Created: 2024-11-21 06:47

/src/boringssl/third_party/fiat/curve25519_64.h
Line
Count
Source (jump to first uncovered line)
1
/* Autogenerated: 'src/ExtractionOCaml/unsaturated_solinas' --inline --static --use-value-barrier 25519 64 '(auto)' '2^255 - 19' carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes relax carry_scmul121666 */
2
/* curve description: 25519 */
3
/* machine_wordsize = 64 (from "64") */
4
/* requested operations: carry_mul, carry_square, carry, add, sub, opp, selectznz, to_bytes, from_bytes, relax, carry_scmul121666 */
5
/* n = 5 (from "(auto)") */
6
/* s-c = 2^255 - [(1, 19)] (from "2^255 - 19") */
7
/* tight_bounds_multiplier = 1 (from "") */
8
/*  */
9
/* Computed values: */
10
/*   carry_chain = [0, 1, 2, 3, 4, 0, 1] */
11
/*   eval z = z[0] + (z[1] << 51) + (z[2] << 102) + (z[3] << 153) + (z[4] << 204) */
12
/*   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) */
13
/*   balance = [0xfffffffffffda, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe] */
14
15
#include <stdint.h>
16
typedef unsigned char fiat_25519_uint1;
17
typedef signed char fiat_25519_int1;
18
#if defined(__GNUC__) || defined(__clang__)
19
#  define FIAT_25519_FIAT_EXTENSION __extension__
20
#  define FIAT_25519_FIAT_INLINE __inline__
21
#else
22
#  define FIAT_25519_FIAT_EXTENSION
23
#  define FIAT_25519_FIAT_INLINE
24
#endif
25
26
FIAT_25519_FIAT_EXTENSION typedef signed __int128 fiat_25519_int128;
27
FIAT_25519_FIAT_EXTENSION typedef unsigned __int128 fiat_25519_uint128;
28
29
/* The type fiat_25519_loose_field_element is a field element with loose bounds. */
30
/* Bounds: [[0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */
31
typedef uint64_t fiat_25519_loose_field_element[5];
32
33
/* The type fiat_25519_tight_field_element is a field element with tight bounds. */
34
/* Bounds: [[0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */
35
typedef uint64_t fiat_25519_tight_field_element[5];
36
37
#if (-1 & 3) != 3
38
#error "This code only works on a two's complement system"
39
#endif
40
41
#if !defined(FIAT_25519_NO_ASM) && (defined(__GNUC__) || defined(__clang__))
42
0
static __inline__ uint64_t fiat_25519_value_barrier_u64(uint64_t a) {
43
0
  __asm__("" : "+r"(a) : /* no inputs */);
44
0
  return a;
45
0
}
46
#else
47
#  define fiat_25519_value_barrier_u64(x) (x)
48
#endif
49
50
51
/*
52
 * The function fiat_25519_addcarryx_u51 is an addition with carry.
53
 *
54
 * Postconditions:
55
 *   out1 = (arg1 + arg2 + arg3) mod 2^51
56
 *   out2 = ⌊(arg1 + arg2 + arg3) / 2^51⌋
57
 *
58
 * Input Bounds:
59
 *   arg1: [0x0 ~> 0x1]
60
 *   arg2: [0x0 ~> 0x7ffffffffffff]
61
 *   arg3: [0x0 ~> 0x7ffffffffffff]
62
 * Output Bounds:
63
 *   out1: [0x0 ~> 0x7ffffffffffff]
64
 *   out2: [0x0 ~> 0x1]
65
 */
66
0
static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u51(uint64_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) {
67
0
  uint64_t x1;
68
0
  uint64_t x2;
69
0
  fiat_25519_uint1 x3;
70
0
  x1 = ((arg1 + arg2) + arg3);
71
0
  x2 = (x1 & UINT64_C(0x7ffffffffffff));
72
0
  x3 = (fiat_25519_uint1)(x1 >> 51);
73
0
  *out1 = x2;
74
0
  *out2 = x3;
75
0
}
76
77
/*
78
 * The function fiat_25519_subborrowx_u51 is a subtraction with borrow.
79
 *
80
 * Postconditions:
81
 *   out1 = (-arg1 + arg2 + -arg3) mod 2^51
82
 *   out2 = -⌊(-arg1 + arg2 + -arg3) / 2^51⌋
83
 *
84
 * Input Bounds:
85
 *   arg1: [0x0 ~> 0x1]
86
 *   arg2: [0x0 ~> 0x7ffffffffffff]
87
 *   arg3: [0x0 ~> 0x7ffffffffffff]
88
 * Output Bounds:
89
 *   out1: [0x0 ~> 0x7ffffffffffff]
90
 *   out2: [0x0 ~> 0x1]
91
 */
92
0
static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u51(uint64_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) {
93
0
  int64_t x1;
94
0
  fiat_25519_int1 x2;
95
0
  uint64_t x3;
96
0
  x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3);
97
0
  x2 = (fiat_25519_int1)(x1 >> 51);
98
0
  x3 = (x1 & UINT64_C(0x7ffffffffffff));
99
0
  *out1 = x3;
100
0
  *out2 = (fiat_25519_uint1)(0x0 - x2);
101
0
}
102
103
/*
104
 * The function fiat_25519_cmovznz_u64 is a single-word conditional move.
105
 *
106
 * Postconditions:
107
 *   out1 = (if arg1 = 0 then arg2 else arg3)
108
 *
109
 * Input Bounds:
110
 *   arg1: [0x0 ~> 0x1]
111
 *   arg2: [0x0 ~> 0xffffffffffffffff]
112
 *   arg3: [0x0 ~> 0xffffffffffffffff]
113
 * Output Bounds:
114
 *   out1: [0x0 ~> 0xffffffffffffffff]
115
 */
116
0
static FIAT_25519_FIAT_INLINE void fiat_25519_cmovznz_u64(uint64_t* out1, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) {
117
0
  fiat_25519_uint1 x1;
118
0
  uint64_t x2;
119
0
  uint64_t x3;
120
0
  x1 = (!(!arg1));
121
0
  x2 = ((fiat_25519_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff));
122
0
  x3 = ((fiat_25519_value_barrier_u64(x2) & arg3) | (fiat_25519_value_barrier_u64((~x2)) & arg2));
123
0
  *out1 = x3;
124
0
}
125
126
/*
127
 * The function fiat_25519_carry_mul multiplies two field elements and reduces the result.
128
 *
129
 * Postconditions:
130
 *   eval out1 mod m = (eval arg1 * eval arg2) mod m
131
 *
132
 */
133
0
static FIAT_25519_FIAT_INLINE void fiat_25519_carry_mul(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1, const fiat_25519_loose_field_element arg2) {
134
0
  fiat_25519_uint128 x1;
135
0
  fiat_25519_uint128 x2;
136
0
  fiat_25519_uint128 x3;
137
0
  fiat_25519_uint128 x4;
138
0
  fiat_25519_uint128 x5;
139
0
  fiat_25519_uint128 x6;
140
0
  fiat_25519_uint128 x7;
141
0
  fiat_25519_uint128 x8;
142
0
  fiat_25519_uint128 x9;
143
0
  fiat_25519_uint128 x10;
144
0
  fiat_25519_uint128 x11;
145
0
  fiat_25519_uint128 x12;
146
0
  fiat_25519_uint128 x13;
147
0
  fiat_25519_uint128 x14;
148
0
  fiat_25519_uint128 x15;
149
0
  fiat_25519_uint128 x16;
150
0
  fiat_25519_uint128 x17;
151
0
  fiat_25519_uint128 x18;
152
0
  fiat_25519_uint128 x19;
153
0
  fiat_25519_uint128 x20;
154
0
  fiat_25519_uint128 x21;
155
0
  fiat_25519_uint128 x22;
156
0
  fiat_25519_uint128 x23;
157
0
  fiat_25519_uint128 x24;
158
0
  fiat_25519_uint128 x25;
159
0
  fiat_25519_uint128 x26;
160
0
  uint64_t x27;
161
0
  uint64_t x28;
162
0
  fiat_25519_uint128 x29;
163
0
  fiat_25519_uint128 x30;
164
0
  fiat_25519_uint128 x31;
165
0
  fiat_25519_uint128 x32;
166
0
  fiat_25519_uint128 x33;
167
0
  uint64_t x34;
168
0
  uint64_t x35;
169
0
  fiat_25519_uint128 x36;
170
0
  uint64_t x37;
171
0
  uint64_t x38;
172
0
  fiat_25519_uint128 x39;
173
0
  uint64_t x40;
174
0
  uint64_t x41;
175
0
  fiat_25519_uint128 x42;
176
0
  uint64_t x43;
177
0
  uint64_t x44;
178
0
  uint64_t x45;
179
0
  uint64_t x46;
180
0
  uint64_t x47;
181
0
  uint64_t x48;
182
0
  uint64_t x49;
183
0
  fiat_25519_uint1 x50;
184
0
  uint64_t x51;
185
0
  uint64_t x52;
186
0
  x1 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[4]) * UINT8_C(0x13)));
187
0
  x2 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[3]) * UINT8_C(0x13)));
188
0
  x3 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[2]) * UINT8_C(0x13)));
189
0
  x4 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[1]) * UINT8_C(0x13)));
190
0
  x5 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[4]) * UINT8_C(0x13)));
191
0
  x6 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[3]) * UINT8_C(0x13)));
192
0
  x7 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[2]) * UINT8_C(0x13)));
193
0
  x8 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[4]) * UINT8_C(0x13)));
194
0
  x9 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[3]) * UINT8_C(0x13)));
195
0
  x10 = ((fiat_25519_uint128)(arg1[1]) * ((arg2[4]) * UINT8_C(0x13)));
196
0
  x11 = ((fiat_25519_uint128)(arg1[4]) * (arg2[0]));
197
0
  x12 = ((fiat_25519_uint128)(arg1[3]) * (arg2[1]));
198
0
  x13 = ((fiat_25519_uint128)(arg1[3]) * (arg2[0]));
199
0
  x14 = ((fiat_25519_uint128)(arg1[2]) * (arg2[2]));
200
0
  x15 = ((fiat_25519_uint128)(arg1[2]) * (arg2[1]));
201
0
  x16 = ((fiat_25519_uint128)(arg1[2]) * (arg2[0]));
202
0
  x17 = ((fiat_25519_uint128)(arg1[1]) * (arg2[3]));
203
0
  x18 = ((fiat_25519_uint128)(arg1[1]) * (arg2[2]));
204
0
  x19 = ((fiat_25519_uint128)(arg1[1]) * (arg2[1]));
205
0
  x20 = ((fiat_25519_uint128)(arg1[1]) * (arg2[0]));
206
0
  x21 = ((fiat_25519_uint128)(arg1[0]) * (arg2[4]));
207
0
  x22 = ((fiat_25519_uint128)(arg1[0]) * (arg2[3]));
208
0
  x23 = ((fiat_25519_uint128)(arg1[0]) * (arg2[2]));
209
0
  x24 = ((fiat_25519_uint128)(arg1[0]) * (arg2[1]));
210
0
  x25 = ((fiat_25519_uint128)(arg1[0]) * (arg2[0]));
211
0
  x26 = (x25 + (x10 + (x9 + (x7 + x4))));
212
0
  x27 = (uint64_t)(x26 >> 51);
213
0
  x28 = (uint64_t)(x26 & UINT64_C(0x7ffffffffffff));
214
0
  x29 = (x21 + (x17 + (x14 + (x12 + x11))));
215
0
  x30 = (x22 + (x18 + (x15 + (x13 + x1))));
216
0
  x31 = (x23 + (x19 + (x16 + (x5 + x2))));
217
0
  x32 = (x24 + (x20 + (x8 + (x6 + x3))));
218
0
  x33 = (x27 + x32);
219
0
  x34 = (uint64_t)(x33 >> 51);
220
0
  x35 = (uint64_t)(x33 & UINT64_C(0x7ffffffffffff));
221
0
  x36 = (x34 + x31);
222
0
  x37 = (uint64_t)(x36 >> 51);
223
0
  x38 = (uint64_t)(x36 & UINT64_C(0x7ffffffffffff));
224
0
  x39 = (x37 + x30);
225
0
  x40 = (uint64_t)(x39 >> 51);
226
0
  x41 = (uint64_t)(x39 & UINT64_C(0x7ffffffffffff));
227
0
  x42 = (x40 + x29);
228
0
  x43 = (uint64_t)(x42 >> 51);
229
0
  x44 = (uint64_t)(x42 & UINT64_C(0x7ffffffffffff));
230
0
  x45 = (x43 * UINT8_C(0x13));
231
0
  x46 = (x28 + x45);
232
0
  x47 = (x46 >> 51);
233
0
  x48 = (x46 & UINT64_C(0x7ffffffffffff));
234
0
  x49 = (x47 + x35);
235
0
  x50 = (fiat_25519_uint1)(x49 >> 51);
236
0
  x51 = (x49 & UINT64_C(0x7ffffffffffff));
237
0
  x52 = (x50 + x38);
238
0
  out1[0] = x48;
239
0
  out1[1] = x51;
240
0
  out1[2] = x52;
241
0
  out1[3] = x41;
242
0
  out1[4] = x44;
243
0
}
244
245
/*
246
 * The function fiat_25519_carry_square squares a field element and reduces the result.
247
 *
248
 * Postconditions:
249
 *   eval out1 mod m = (eval arg1 * eval arg1) mod m
250
 *
251
 */
252
0
static FIAT_25519_FIAT_INLINE void fiat_25519_carry_square(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) {
253
0
  uint64_t x1;
254
0
  uint64_t x2;
255
0
  uint64_t x3;
256
0
  uint64_t x4;
257
0
  uint64_t x5;
258
0
  uint64_t x6;
259
0
  uint64_t x7;
260
0
  uint64_t x8;
261
0
  fiat_25519_uint128 x9;
262
0
  fiat_25519_uint128 x10;
263
0
  fiat_25519_uint128 x11;
264
0
  fiat_25519_uint128 x12;
265
0
  fiat_25519_uint128 x13;
266
0
  fiat_25519_uint128 x14;
267
0
  fiat_25519_uint128 x15;
268
0
  fiat_25519_uint128 x16;
269
0
  fiat_25519_uint128 x17;
270
0
  fiat_25519_uint128 x18;
271
0
  fiat_25519_uint128 x19;
272
0
  fiat_25519_uint128 x20;
273
0
  fiat_25519_uint128 x21;
274
0
  fiat_25519_uint128 x22;
275
0
  fiat_25519_uint128 x23;
276
0
  fiat_25519_uint128 x24;
277
0
  uint64_t x25;
278
0
  uint64_t x26;
279
0
  fiat_25519_uint128 x27;
280
0
  fiat_25519_uint128 x28;
281
0
  fiat_25519_uint128 x29;
282
0
  fiat_25519_uint128 x30;
283
0
  fiat_25519_uint128 x31;
284
0
  uint64_t x32;
285
0
  uint64_t x33;
286
0
  fiat_25519_uint128 x34;
287
0
  uint64_t x35;
288
0
  uint64_t x36;
289
0
  fiat_25519_uint128 x37;
290
0
  uint64_t x38;
291
0
  uint64_t x39;
292
0
  fiat_25519_uint128 x40;
293
0
  uint64_t x41;
294
0
  uint64_t x42;
295
0
  uint64_t x43;
296
0
  uint64_t x44;
297
0
  uint64_t x45;
298
0
  uint64_t x46;
299
0
  uint64_t x47;
300
0
  fiat_25519_uint1 x48;
301
0
  uint64_t x49;
302
0
  uint64_t x50;
303
0
  x1 = ((arg1[4]) * UINT8_C(0x13));
304
0
  x2 = (x1 * 0x2);
305
0
  x3 = ((arg1[4]) * 0x2);
306
0
  x4 = ((arg1[3]) * UINT8_C(0x13));
307
0
  x5 = (x4 * 0x2);
308
0
  x6 = ((arg1[3]) * 0x2);
309
0
  x7 = ((arg1[2]) * 0x2);
310
0
  x8 = ((arg1[1]) * 0x2);
311
0
  x9 = ((fiat_25519_uint128)(arg1[4]) * x1);
312
0
  x10 = ((fiat_25519_uint128)(arg1[3]) * x2);
313
0
  x11 = ((fiat_25519_uint128)(arg1[3]) * x4);
314
0
  x12 = ((fiat_25519_uint128)(arg1[2]) * x2);
315
0
  x13 = ((fiat_25519_uint128)(arg1[2]) * x5);
316
0
  x14 = ((fiat_25519_uint128)(arg1[2]) * (arg1[2]));
317
0
  x15 = ((fiat_25519_uint128)(arg1[1]) * x2);
318
0
  x16 = ((fiat_25519_uint128)(arg1[1]) * x6);
319
0
  x17 = ((fiat_25519_uint128)(arg1[1]) * x7);
320
0
  x18 = ((fiat_25519_uint128)(arg1[1]) * (arg1[1]));
321
0
  x19 = ((fiat_25519_uint128)(arg1[0]) * x3);
322
0
  x20 = ((fiat_25519_uint128)(arg1[0]) * x6);
323
0
  x21 = ((fiat_25519_uint128)(arg1[0]) * x7);
324
0
  x22 = ((fiat_25519_uint128)(arg1[0]) * x8);
325
0
  x23 = ((fiat_25519_uint128)(arg1[0]) * (arg1[0]));
326
0
  x24 = (x23 + (x15 + x13));
327
0
  x25 = (uint64_t)(x24 >> 51);
328
0
  x26 = (uint64_t)(x24 & UINT64_C(0x7ffffffffffff));
329
0
  x27 = (x19 + (x16 + x14));
330
0
  x28 = (x20 + (x17 + x9));
331
0
  x29 = (x21 + (x18 + x10));
332
0
  x30 = (x22 + (x12 + x11));
333
0
  x31 = (x25 + x30);
334
0
  x32 = (uint64_t)(x31 >> 51);
335
0
  x33 = (uint64_t)(x31 & UINT64_C(0x7ffffffffffff));
336
0
  x34 = (x32 + x29);
337
0
  x35 = (uint64_t)(x34 >> 51);
338
0
  x36 = (uint64_t)(x34 & UINT64_C(0x7ffffffffffff));
339
0
  x37 = (x35 + x28);
340
0
  x38 = (uint64_t)(x37 >> 51);
341
0
  x39 = (uint64_t)(x37 & UINT64_C(0x7ffffffffffff));
342
0
  x40 = (x38 + x27);
343
0
  x41 = (uint64_t)(x40 >> 51);
344
0
  x42 = (uint64_t)(x40 & UINT64_C(0x7ffffffffffff));
345
0
  x43 = (x41 * UINT8_C(0x13));
346
0
  x44 = (x26 + x43);
347
0
  x45 = (x44 >> 51);
348
0
  x46 = (x44 & UINT64_C(0x7ffffffffffff));
349
0
  x47 = (x45 + x33);
350
0
  x48 = (fiat_25519_uint1)(x47 >> 51);
351
0
  x49 = (x47 & UINT64_C(0x7ffffffffffff));
352
0
  x50 = (x48 + x36);
353
0
  out1[0] = x46;
354
0
  out1[1] = x49;
355
0
  out1[2] = x50;
356
0
  out1[3] = x39;
357
0
  out1[4] = x42;
358
0
}
359
360
/*
361
 * The function fiat_25519_carry reduces a field element.
362
 *
363
 * Postconditions:
364
 *   eval out1 mod m = eval arg1 mod m
365
 *
366
 */
367
0
static FIAT_25519_FIAT_INLINE void fiat_25519_carry(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) {
368
0
  uint64_t x1;
369
0
  uint64_t x2;
370
0
  uint64_t x3;
371
0
  uint64_t x4;
372
0
  uint64_t x5;
373
0
  uint64_t x6;
374
0
  uint64_t x7;
375
0
  uint64_t x8;
376
0
  uint64_t x9;
377
0
  uint64_t x10;
378
0
  uint64_t x11;
379
0
  uint64_t x12;
380
0
  x1 = (arg1[0]);
381
0
  x2 = ((x1 >> 51) + (arg1[1]));
382
0
  x3 = ((x2 >> 51) + (arg1[2]));
383
0
  x4 = ((x3 >> 51) + (arg1[3]));
384
0
  x5 = ((x4 >> 51) + (arg1[4]));
385
0
  x6 = ((x1 & UINT64_C(0x7ffffffffffff)) + ((x5 >> 51) * UINT8_C(0x13)));
386
0
  x7 = ((fiat_25519_uint1)(x6 >> 51) + (x2 & UINT64_C(0x7ffffffffffff)));
387
0
  x8 = (x6 & UINT64_C(0x7ffffffffffff));
388
0
  x9 = (x7 & UINT64_C(0x7ffffffffffff));
389
0
  x10 = ((fiat_25519_uint1)(x7 >> 51) + (x3 & UINT64_C(0x7ffffffffffff)));
390
0
  x11 = (x4 & UINT64_C(0x7ffffffffffff));
391
0
  x12 = (x5 & UINT64_C(0x7ffffffffffff));
392
0
  out1[0] = x8;
393
0
  out1[1] = x9;
394
0
  out1[2] = x10;
395
0
  out1[3] = x11;
396
0
  out1[4] = x12;
397
0
}
398
399
/*
400
 * The function fiat_25519_add adds two field elements.
401
 *
402
 * Postconditions:
403
 *   eval out1 mod m = (eval arg1 + eval arg2) mod m
404
 *
405
 */
406
0
static FIAT_25519_FIAT_INLINE void fiat_25519_add(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element arg2) {
407
0
  uint64_t x1;
408
0
  uint64_t x2;
409
0
  uint64_t x3;
410
0
  uint64_t x4;
411
0
  uint64_t x5;
412
0
  x1 = ((arg1[0]) + (arg2[0]));
413
0
  x2 = ((arg1[1]) + (arg2[1]));
414
0
  x3 = ((arg1[2]) + (arg2[2]));
415
0
  x4 = ((arg1[3]) + (arg2[3]));
416
0
  x5 = ((arg1[4]) + (arg2[4]));
417
0
  out1[0] = x1;
418
0
  out1[1] = x2;
419
0
  out1[2] = x3;
420
0
  out1[3] = x4;
421
0
  out1[4] = x5;
422
0
}
423
424
/*
425
 * The function fiat_25519_sub subtracts two field elements.
426
 *
427
 * Postconditions:
428
 *   eval out1 mod m = (eval arg1 - eval arg2) mod m
429
 *
430
 */
431
0
static FIAT_25519_FIAT_INLINE void fiat_25519_sub(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element arg2) {
432
0
  uint64_t x1;
433
0
  uint64_t x2;
434
0
  uint64_t x3;
435
0
  uint64_t x4;
436
0
  uint64_t x5;
437
0
  x1 = ((UINT64_C(0xfffffffffffda) + (arg1[0])) - (arg2[0]));
438
0
  x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1]));
439
0
  x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2]));
440
0
  x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3]));
441
0
  x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4]));
442
0
  out1[0] = x1;
443
0
  out1[1] = x2;
444
0
  out1[2] = x3;
445
0
  out1[3] = x4;
446
0
  out1[4] = x5;
447
0
}
448
449
/*
450
 * The function fiat_25519_opp negates a field element.
451
 *
452
 * Postconditions:
453
 *   eval out1 mod m = -eval arg1 mod m
454
 *
455
 */
456
0
static FIAT_25519_FIAT_INLINE void fiat_25519_opp(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1) {
457
0
  uint64_t x1;
458
0
  uint64_t x2;
459
0
  uint64_t x3;
460
0
  uint64_t x4;
461
0
  uint64_t x5;
462
0
  x1 = (UINT64_C(0xfffffffffffda) - (arg1[0]));
463
0
  x2 = (UINT64_C(0xffffffffffffe) - (arg1[1]));
464
0
  x3 = (UINT64_C(0xffffffffffffe) - (arg1[2]));
465
0
  x4 = (UINT64_C(0xffffffffffffe) - (arg1[3]));
466
0
  x5 = (UINT64_C(0xffffffffffffe) - (arg1[4]));
467
0
  out1[0] = x1;
468
0
  out1[1] = x2;
469
0
  out1[2] = x3;
470
0
  out1[3] = x4;
471
0
  out1[4] = x5;
472
0
}
473
474
/*
475
 * The function fiat_25519_selectznz is a multi-limb conditional select.
476
 *
477
 * Postconditions:
478
 *   eval out1 = (if arg1 = 0 then eval arg2 else eval arg3)
479
 *
480
 * Input Bounds:
481
 *   arg1: [0x0 ~> 0x1]
482
 *   arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
483
 *   arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
484
 * Output Bounds:
485
 *   out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]
486
 */
487
0
static FIAT_25519_FIAT_INLINE void fiat_25519_selectznz(uint64_t out1[5], fiat_25519_uint1 arg1, const uint64_t arg2[5], const uint64_t arg3[5]) {
488
0
  uint64_t x1;
489
0
  uint64_t x2;
490
0
  uint64_t x3;
491
0
  uint64_t x4;
492
0
  uint64_t x5;
493
0
  fiat_25519_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0]));
494
0
  fiat_25519_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1]));
495
0
  fiat_25519_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2]));
496
0
  fiat_25519_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3]));
497
0
  fiat_25519_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4]));
498
0
  out1[0] = x1;
499
0
  out1[1] = x2;
500
0
  out1[2] = x3;
501
0
  out1[3] = x4;
502
0
  out1[4] = x5;
503
0
}
504
505
/*
506
 * The function fiat_25519_to_bytes serializes a field element to bytes in little-endian order.
507
 *
508
 * Postconditions:
509
 *   out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31]
510
 *
511
 * Output Bounds:
512
 *   out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]]
513
 */
514
0
static FIAT_25519_FIAT_INLINE void fiat_25519_to_bytes(uint8_t out1[32], const fiat_25519_tight_field_element arg1) {
515
0
  uint64_t x1;
516
0
  fiat_25519_uint1 x2;
517
0
  uint64_t x3;
518
0
  fiat_25519_uint1 x4;
519
0
  uint64_t x5;
520
0
  fiat_25519_uint1 x6;
521
0
  uint64_t x7;
522
0
  fiat_25519_uint1 x8;
523
0
  uint64_t x9;
524
0
  fiat_25519_uint1 x10;
525
0
  uint64_t x11;
526
0
  uint64_t x12;
527
0
  fiat_25519_uint1 x13;
528
0
  uint64_t x14;
529
0
  fiat_25519_uint1 x15;
530
0
  uint64_t x16;
531
0
  fiat_25519_uint1 x17;
532
0
  uint64_t x18;
533
0
  fiat_25519_uint1 x19;
534
0
  uint64_t x20;
535
0
  fiat_25519_uint1 x21;
536
0
  uint64_t x22;
537
0
  uint64_t x23;
538
0
  uint64_t x24;
539
0
  uint64_t x25;
540
0
  uint8_t x26;
541
0
  uint64_t x27;
542
0
  uint8_t x28;
543
0
  uint64_t x29;
544
0
  uint8_t x30;
545
0
  uint64_t x31;
546
0
  uint8_t x32;
547
0
  uint64_t x33;
548
0
  uint8_t x34;
549
0
  uint64_t x35;
550
0
  uint8_t x36;
551
0
  uint8_t x37;
552
0
  uint64_t x38;
553
0
  uint8_t x39;
554
0
  uint64_t x40;
555
0
  uint8_t x41;
556
0
  uint64_t x42;
557
0
  uint8_t x43;
558
0
  uint64_t x44;
559
0
  uint8_t x45;
560
0
  uint64_t x46;
561
0
  uint8_t x47;
562
0
  uint64_t x48;
563
0
  uint8_t x49;
564
0
  uint8_t x50;
565
0
  uint64_t x51;
566
0
  uint8_t x52;
567
0
  uint64_t x53;
568
0
  uint8_t x54;
569
0
  uint64_t x55;
570
0
  uint8_t x56;
571
0
  uint64_t x57;
572
0
  uint8_t x58;
573
0
  uint64_t x59;
574
0
  uint8_t x60;
575
0
  uint64_t x61;
576
0
  uint8_t x62;
577
0
  uint64_t x63;
578
0
  uint8_t x64;
579
0
  fiat_25519_uint1 x65;
580
0
  uint64_t x66;
581
0
  uint8_t x67;
582
0
  uint64_t x68;
583
0
  uint8_t x69;
584
0
  uint64_t x70;
585
0
  uint8_t x71;
586
0
  uint64_t x72;
587
0
  uint8_t x73;
588
0
  uint64_t x74;
589
0
  uint8_t x75;
590
0
  uint64_t x76;
591
0
  uint8_t x77;
592
0
  uint8_t x78;
593
0
  uint64_t x79;
594
0
  uint8_t x80;
595
0
  uint64_t x81;
596
0
  uint8_t x82;
597
0
  uint64_t x83;
598
0
  uint8_t x84;
599
0
  uint64_t x85;
600
0
  uint8_t x86;
601
0
  uint64_t x87;
602
0
  uint8_t x88;
603
0
  uint64_t x89;
604
0
  uint8_t x90;
605
0
  uint8_t x91;
606
0
  fiat_25519_subborrowx_u51(&x1, &x2, 0x0, (arg1[0]), UINT64_C(0x7ffffffffffed));
607
0
  fiat_25519_subborrowx_u51(&x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff));
608
0
  fiat_25519_subborrowx_u51(&x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff));
609
0
  fiat_25519_subborrowx_u51(&x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff));
610
0
  fiat_25519_subborrowx_u51(&x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff));
611
0
  fiat_25519_cmovznz_u64(&x11, x10, 0x0, UINT64_C(0xffffffffffffffff));
612
0
  fiat_25519_addcarryx_u51(&x12, &x13, 0x0, x1, (x11 & UINT64_C(0x7ffffffffffed)));
613
0
  fiat_25519_addcarryx_u51(&x14, &x15, x13, x3, (x11 & UINT64_C(0x7ffffffffffff)));
614
0
  fiat_25519_addcarryx_u51(&x16, &x17, x15, x5, (x11 & UINT64_C(0x7ffffffffffff)));
615
0
  fiat_25519_addcarryx_u51(&x18, &x19, x17, x7, (x11 & UINT64_C(0x7ffffffffffff)));
616
0
  fiat_25519_addcarryx_u51(&x20, &x21, x19, x9, (x11 & UINT64_C(0x7ffffffffffff)));
617
0
  x22 = (x20 << 4);
618
0
  x23 = (x18 * (uint64_t)0x2);
619
0
  x24 = (x16 << 6);
620
0
  x25 = (x14 << 3);
621
0
  x26 = (uint8_t)(x12 & UINT8_C(0xff));
622
0
  x27 = (x12 >> 8);
623
0
  x28 = (uint8_t)(x27 & UINT8_C(0xff));
624
0
  x29 = (x27 >> 8);
625
0
  x30 = (uint8_t)(x29 & UINT8_C(0xff));
626
0
  x31 = (x29 >> 8);
627
0
  x32 = (uint8_t)(x31 & UINT8_C(0xff));
628
0
  x33 = (x31 >> 8);
629
0
  x34 = (uint8_t)(x33 & UINT8_C(0xff));
630
0
  x35 = (x33 >> 8);
631
0
  x36 = (uint8_t)(x35 & UINT8_C(0xff));
632
0
  x37 = (uint8_t)(x35 >> 8);
633
0
  x38 = (x25 + (uint64_t)x37);
634
0
  x39 = (uint8_t)(x38 & UINT8_C(0xff));
635
0
  x40 = (x38 >> 8);
636
0
  x41 = (uint8_t)(x40 & UINT8_C(0xff));
637
0
  x42 = (x40 >> 8);
638
0
  x43 = (uint8_t)(x42 & UINT8_C(0xff));
639
0
  x44 = (x42 >> 8);
640
0
  x45 = (uint8_t)(x44 & UINT8_C(0xff));
641
0
  x46 = (x44 >> 8);
642
0
  x47 = (uint8_t)(x46 & UINT8_C(0xff));
643
0
  x48 = (x46 >> 8);
644
0
  x49 = (uint8_t)(x48 & UINT8_C(0xff));
645
0
  x50 = (uint8_t)(x48 >> 8);
646
0
  x51 = (x24 + (uint64_t)x50);
647
0
  x52 = (uint8_t)(x51 & UINT8_C(0xff));
648
0
  x53 = (x51 >> 8);
649
0
  x54 = (uint8_t)(x53 & UINT8_C(0xff));
650
0
  x55 = (x53 >> 8);
651
0
  x56 = (uint8_t)(x55 & UINT8_C(0xff));
652
0
  x57 = (x55 >> 8);
653
0
  x58 = (uint8_t)(x57 & UINT8_C(0xff));
654
0
  x59 = (x57 >> 8);
655
0
  x60 = (uint8_t)(x59 & UINT8_C(0xff));
656
0
  x61 = (x59 >> 8);
657
0
  x62 = (uint8_t)(x61 & UINT8_C(0xff));
658
0
  x63 = (x61 >> 8);
659
0
  x64 = (uint8_t)(x63 & UINT8_C(0xff));
660
0
  x65 = (fiat_25519_uint1)(x63 >> 8);
661
0
  x66 = (x23 + (uint64_t)x65);
662
0
  x67 = (uint8_t)(x66 & UINT8_C(0xff));
663
0
  x68 = (x66 >> 8);
664
0
  x69 = (uint8_t)(x68 & UINT8_C(0xff));
665
0
  x70 = (x68 >> 8);
666
0
  x71 = (uint8_t)(x70 & UINT8_C(0xff));
667
0
  x72 = (x70 >> 8);
668
0
  x73 = (uint8_t)(x72 & UINT8_C(0xff));
669
0
  x74 = (x72 >> 8);
670
0
  x75 = (uint8_t)(x74 & UINT8_C(0xff));
671
0
  x76 = (x74 >> 8);
672
0
  x77 = (uint8_t)(x76 & UINT8_C(0xff));
673
0
  x78 = (uint8_t)(x76 >> 8);
674
0
  x79 = (x22 + (uint64_t)x78);
675
0
  x80 = (uint8_t)(x79 & UINT8_C(0xff));
676
0
  x81 = (x79 >> 8);
677
0
  x82 = (uint8_t)(x81 & UINT8_C(0xff));
678
0
  x83 = (x81 >> 8);
679
0
  x84 = (uint8_t)(x83 & UINT8_C(0xff));
680
0
  x85 = (x83 >> 8);
681
0
  x86 = (uint8_t)(x85 & UINT8_C(0xff));
682
0
  x87 = (x85 >> 8);
683
0
  x88 = (uint8_t)(x87 & UINT8_C(0xff));
684
0
  x89 = (x87 >> 8);
685
0
  x90 = (uint8_t)(x89 & UINT8_C(0xff));
686
0
  x91 = (uint8_t)(x89 >> 8);
687
0
  out1[0] = x26;
688
0
  out1[1] = x28;
689
0
  out1[2] = x30;
690
0
  out1[3] = x32;
691
0
  out1[4] = x34;
692
0
  out1[5] = x36;
693
0
  out1[6] = x39;
694
0
  out1[7] = x41;
695
0
  out1[8] = x43;
696
0
  out1[9] = x45;
697
0
  out1[10] = x47;
698
0
  out1[11] = x49;
699
0
  out1[12] = x52;
700
0
  out1[13] = x54;
701
0
  out1[14] = x56;
702
0
  out1[15] = x58;
703
0
  out1[16] = x60;
704
0
  out1[17] = x62;
705
0
  out1[18] = x64;
706
0
  out1[19] = x67;
707
0
  out1[20] = x69;
708
0
  out1[21] = x71;
709
0
  out1[22] = x73;
710
0
  out1[23] = x75;
711
0
  out1[24] = x77;
712
0
  out1[25] = x80;
713
0
  out1[26] = x82;
714
0
  out1[27] = x84;
715
0
  out1[28] = x86;
716
0
  out1[29] = x88;
717
0
  out1[30] = x90;
718
0
  out1[31] = x91;
719
0
}
720
721
/*
722
 * The function fiat_25519_from_bytes deserializes a field element from bytes in little-endian order.
723
 *
724
 * Postconditions:
725
 *   eval out1 mod m = bytes_eval arg1 mod m
726
 *
727
 * Input Bounds:
728
 *   arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]]
729
 */
730
0
static FIAT_25519_FIAT_INLINE void fiat_25519_from_bytes(fiat_25519_tight_field_element out1, const uint8_t arg1[32]) {
731
0
  uint64_t x1;
732
0
  uint64_t x2;
733
0
  uint64_t x3;
734
0
  uint64_t x4;
735
0
  uint64_t x5;
736
0
  uint64_t x6;
737
0
  uint64_t x7;
738
0
  uint64_t x8;
739
0
  uint64_t x9;
740
0
  uint64_t x10;
741
0
  uint64_t x11;
742
0
  uint64_t x12;
743
0
  uint64_t x13;
744
0
  uint64_t x14;
745
0
  uint64_t x15;
746
0
  uint64_t x16;
747
0
  uint64_t x17;
748
0
  uint64_t x18;
749
0
  uint64_t x19;
750
0
  uint64_t x20;
751
0
  uint64_t x21;
752
0
  uint64_t x22;
753
0
  uint64_t x23;
754
0
  uint64_t x24;
755
0
  uint64_t x25;
756
0
  uint64_t x26;
757
0
  uint64_t x27;
758
0
  uint64_t x28;
759
0
  uint64_t x29;
760
0
  uint64_t x30;
761
0
  uint64_t x31;
762
0
  uint8_t x32;
763
0
  uint64_t x33;
764
0
  uint64_t x34;
765
0
  uint64_t x35;
766
0
  uint64_t x36;
767
0
  uint64_t x37;
768
0
  uint64_t x38;
769
0
  uint64_t x39;
770
0
  uint8_t x40;
771
0
  uint64_t x41;
772
0
  uint64_t x42;
773
0
  uint64_t x43;
774
0
  uint64_t x44;
775
0
  uint64_t x45;
776
0
  uint64_t x46;
777
0
  uint64_t x47;
778
0
  uint8_t x48;
779
0
  uint64_t x49;
780
0
  uint64_t x50;
781
0
  uint64_t x51;
782
0
  uint64_t x52;
783
0
  uint64_t x53;
784
0
  uint64_t x54;
785
0
  uint64_t x55;
786
0
  uint64_t x56;
787
0
  uint8_t x57;
788
0
  uint64_t x58;
789
0
  uint64_t x59;
790
0
  uint64_t x60;
791
0
  uint64_t x61;
792
0
  uint64_t x62;
793
0
  uint64_t x63;
794
0
  uint64_t x64;
795
0
  uint8_t x65;
796
0
  uint64_t x66;
797
0
  uint64_t x67;
798
0
  uint64_t x68;
799
0
  uint64_t x69;
800
0
  uint64_t x70;
801
0
  uint64_t x71;
802
0
  x1 = ((uint64_t)(arg1[31]) << 44);
803
0
  x2 = ((uint64_t)(arg1[30]) << 36);
804
0
  x3 = ((uint64_t)(arg1[29]) << 28);
805
0
  x4 = ((uint64_t)(arg1[28]) << 20);
806
0
  x5 = ((uint64_t)(arg1[27]) << 12);
807
0
  x6 = ((uint64_t)(arg1[26]) << 4);
808
0
  x7 = ((uint64_t)(arg1[25]) << 47);
809
0
  x8 = ((uint64_t)(arg1[24]) << 39);
810
0
  x9 = ((uint64_t)(arg1[23]) << 31);
811
0
  x10 = ((uint64_t)(arg1[22]) << 23);
812
0
  x11 = ((uint64_t)(arg1[21]) << 15);
813
0
  x12 = ((uint64_t)(arg1[20]) << 7);
814
0
  x13 = ((uint64_t)(arg1[19]) << 50);
815
0
  x14 = ((uint64_t)(arg1[18]) << 42);
816
0
  x15 = ((uint64_t)(arg1[17]) << 34);
817
0
  x16 = ((uint64_t)(arg1[16]) << 26);
818
0
  x17 = ((uint64_t)(arg1[15]) << 18);
819
0
  x18 = ((uint64_t)(arg1[14]) << 10);
820
0
  x19 = ((uint64_t)(arg1[13]) << 2);
821
0
  x20 = ((uint64_t)(arg1[12]) << 45);
822
0
  x21 = ((uint64_t)(arg1[11]) << 37);
823
0
  x22 = ((uint64_t)(arg1[10]) << 29);
824
0
  x23 = ((uint64_t)(arg1[9]) << 21);
825
0
  x24 = ((uint64_t)(arg1[8]) << 13);
826
0
  x25 = ((uint64_t)(arg1[7]) << 5);
827
0
  x26 = ((uint64_t)(arg1[6]) << 48);
828
0
  x27 = ((uint64_t)(arg1[5]) << 40);
829
0
  x28 = ((uint64_t)(arg1[4]) << 32);
830
0
  x29 = ((uint64_t)(arg1[3]) << 24);
831
0
  x30 = ((uint64_t)(arg1[2]) << 16);
832
0
  x31 = ((uint64_t)(arg1[1]) << 8);
833
0
  x32 = (arg1[0]);
834
0
  x33 = (x31 + (uint64_t)x32);
835
0
  x34 = (x30 + x33);
836
0
  x35 = (x29 + x34);
837
0
  x36 = (x28 + x35);
838
0
  x37 = (x27 + x36);
839
0
  x38 = (x26 + x37);
840
0
  x39 = (x38 & UINT64_C(0x7ffffffffffff));
841
0
  x40 = (uint8_t)(x38 >> 51);
842
0
  x41 = (x25 + (uint64_t)x40);
843
0
  x42 = (x24 + x41);
844
0
  x43 = (x23 + x42);
845
0
  x44 = (x22 + x43);
846
0
  x45 = (x21 + x44);
847
0
  x46 = (x20 + x45);
848
0
  x47 = (x46 & UINT64_C(0x7ffffffffffff));
849
0
  x48 = (uint8_t)(x46 >> 51);
850
0
  x49 = (x19 + (uint64_t)x48);
851
0
  x50 = (x18 + x49);
852
0
  x51 = (x17 + x50);
853
0
  x52 = (x16 + x51);
854
0
  x53 = (x15 + x52);
855
0
  x54 = (x14 + x53);
856
0
  x55 = (x13 + x54);
857
0
  x56 = (x55 & UINT64_C(0x7ffffffffffff));
858
0
  x57 = (uint8_t)(x55 >> 51);
859
0
  x58 = (x12 + (uint64_t)x57);
860
0
  x59 = (x11 + x58);
861
0
  x60 = (x10 + x59);
862
0
  x61 = (x9 + x60);
863
0
  x62 = (x8 + x61);
864
0
  x63 = (x7 + x62);
865
0
  x64 = (x63 & UINT64_C(0x7ffffffffffff));
866
0
  x65 = (uint8_t)(x63 >> 51);
867
0
  x66 = (x6 + (uint64_t)x65);
868
0
  x67 = (x5 + x66);
869
0
  x68 = (x4 + x67);
870
0
  x69 = (x3 + x68);
871
0
  x70 = (x2 + x69);
872
0
  x71 = (x1 + x70);
873
0
  out1[0] = x39;
874
0
  out1[1] = x47;
875
0
  out1[2] = x56;
876
0
  out1[3] = x64;
877
0
  out1[4] = x71;
878
0
}
879
880
/*
881
 * The function fiat_25519_relax is the identity function converting from tight field elements to loose field elements.
882
 *
883
 * Postconditions:
884
 *   out1 = arg1
885
 *
886
 */
887
0
static FIAT_25519_FIAT_INLINE void fiat_25519_relax(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1) {
888
0
  uint64_t x1;
889
0
  uint64_t x2;
890
0
  uint64_t x3;
891
0
  uint64_t x4;
892
0
  uint64_t x5;
893
0
  x1 = (arg1[0]);
894
0
  x2 = (arg1[1]);
895
0
  x3 = (arg1[2]);
896
0
  x4 = (arg1[3]);
897
0
  x5 = (arg1[4]);
898
0
  out1[0] = x1;
899
0
  out1[1] = x2;
900
0
  out1[2] = x3;
901
0
  out1[3] = x4;
902
0
  out1[4] = x5;
903
0
}
904
905
/*
906
 * The function fiat_25519_carry_scmul_121666 multiplies a field element by 121666 and reduces the result.
907
 *
908
 * Postconditions:
909
 *   eval out1 mod m = (121666 * eval arg1) mod m
910
 *
911
 */
912
0
static FIAT_25519_FIAT_INLINE void fiat_25519_carry_scmul_121666(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) {
913
0
  fiat_25519_uint128 x1;
914
0
  fiat_25519_uint128 x2;
915
0
  fiat_25519_uint128 x3;
916
0
  fiat_25519_uint128 x4;
917
0
  fiat_25519_uint128 x5;
918
0
  uint64_t x6;
919
0
  uint64_t x7;
920
0
  fiat_25519_uint128 x8;
921
0
  uint64_t x9;
922
0
  uint64_t x10;
923
0
  fiat_25519_uint128 x11;
924
0
  uint64_t x12;
925
0
  uint64_t x13;
926
0
  fiat_25519_uint128 x14;
927
0
  uint64_t x15;
928
0
  uint64_t x16;
929
0
  fiat_25519_uint128 x17;
930
0
  uint64_t x18;
931
0
  uint64_t x19;
932
0
  uint64_t x20;
933
0
  uint64_t x21;
934
0
  fiat_25519_uint1 x22;
935
0
  uint64_t x23;
936
0
  uint64_t x24;
937
0
  fiat_25519_uint1 x25;
938
0
  uint64_t x26;
939
0
  uint64_t x27;
940
0
  x1 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[4]));
941
0
  x2 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[3]));
942
0
  x3 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[2]));
943
0
  x4 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[1]));
944
0
  x5 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[0]));
945
0
  x6 = (uint64_t)(x5 >> 51);
946
0
  x7 = (uint64_t)(x5 & UINT64_C(0x7ffffffffffff));
947
0
  x8 = (x6 + x4);
948
0
  x9 = (uint64_t)(x8 >> 51);
949
0
  x10 = (uint64_t)(x8 & UINT64_C(0x7ffffffffffff));
950
0
  x11 = (x9 + x3);
951
0
  x12 = (uint64_t)(x11 >> 51);
952
0
  x13 = (uint64_t)(x11 & UINT64_C(0x7ffffffffffff));
953
0
  x14 = (x12 + x2);
954
0
  x15 = (uint64_t)(x14 >> 51);
955
0
  x16 = (uint64_t)(x14 & UINT64_C(0x7ffffffffffff));
956
0
  x17 = (x15 + x1);
957
0
  x18 = (uint64_t)(x17 >> 51);
958
0
  x19 = (uint64_t)(x17 & UINT64_C(0x7ffffffffffff));
959
0
  x20 = (x18 * UINT8_C(0x13));
960
0
  x21 = (x7 + x20);
961
0
  x22 = (fiat_25519_uint1)(x21 >> 51);
962
0
  x23 = (x21 & UINT64_C(0x7ffffffffffff));
963
0
  x24 = (x22 + x10);
964
0
  x25 = (fiat_25519_uint1)(x24 >> 51);
965
0
  x26 = (x24 & UINT64_C(0x7ffffffffffff));
966
0
  x27 = (x25 + x13);
967
0
  out1[0] = x23;
968
0
  out1[1] = x26;
969
0
  out1[2] = x27;
970
0
  out1[3] = x16;
971
0
  out1[4] = x19;
972
0
}