LCOV - code coverage report
Current view: top level - ballet/fiat-crypto - curve25519_64.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 705 782 90.2 %
Date: 2026-07-08 05:20:36 Functions: 63 390 16.2 %

          Line data    Source code
       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  2335796416 : static __inline__ uint64_t fiat_25519_value_barrier_u64(uint64_t a) {
      43  2335796416 :   __asm__("" : "+r"(a) : /* no inputs */);
      44  2335796416 :   return a;
      45  2335796416 : }
      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    11221590 : 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    11221590 :   uint64_t x1;
      68    11221590 :   uint64_t x2;
      69    11221590 :   fiat_25519_uint1 x3;
      70    11221590 :   x1 = ((arg1 + arg2) + arg3);
      71    11221590 :   x2 = (x1 & UINT64_C(0x7ffffffffffff));
      72    11221590 :   x3 = (fiat_25519_uint1)(x1 >> 51);
      73    11221590 :   *out1 = x2;
      74    11221590 :   *out2 = x3;
      75    11221590 : }
      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    11221590 : 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    11221590 :   int64_t x1;
      94    11221590 :   fiat_25519_int1 x2;
      95    11221590 :   uint64_t x3;
      96    11221590 :   x1 = ((int64_t)((int64_t)arg2 - (int64_t)arg1) - (int64_t)arg3);
      97    11221590 :   x2 = (fiat_25519_int1)(x1 >> 51);
      98    11221590 :   x3 = ((uint64_t)x1 & UINT64_C(0x7ffffffffffff));
      99    11221590 :   *out1 = x3;
     100    11221590 :   *out2 = (fiat_25519_uint1)(0x0 - x2);
     101    11221590 : }
     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  1167898208 : static FIAT_25519_FIAT_INLINE void fiat_25519_cmovznz_u64(uint64_t* out1, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) {
     117  1167898208 :   fiat_25519_uint1 x1;
     118  1167898208 :   uint64_t x2;
     119  1167898208 :   uint64_t x3;
     120  1167898208 :   x1 = (!(!arg1));
     121  1167898208 :   x2 = ((uint64_t)(fiat_25519_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff));
     122  1167898208 :   x3 = ((fiat_25519_value_barrier_u64(x2) & arg3) | (fiat_25519_value_barrier_u64((~x2)) & arg2));
     123  1167898208 :   *out1 = x3;
     124  1167898208 : }
     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   196170699 : 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   196170699 :   fiat_25519_uint128 x1;
     135   196170699 :   fiat_25519_uint128 x2;
     136   196170699 :   fiat_25519_uint128 x3;
     137   196170699 :   fiat_25519_uint128 x4;
     138   196170699 :   fiat_25519_uint128 x5;
     139   196170699 :   fiat_25519_uint128 x6;
     140   196170699 :   fiat_25519_uint128 x7;
     141   196170699 :   fiat_25519_uint128 x8;
     142   196170699 :   fiat_25519_uint128 x9;
     143   196170699 :   fiat_25519_uint128 x10;
     144   196170699 :   fiat_25519_uint128 x11;
     145   196170699 :   fiat_25519_uint128 x12;
     146   196170699 :   fiat_25519_uint128 x13;
     147   196170699 :   fiat_25519_uint128 x14;
     148   196170699 :   fiat_25519_uint128 x15;
     149   196170699 :   fiat_25519_uint128 x16;
     150   196170699 :   fiat_25519_uint128 x17;
     151   196170699 :   fiat_25519_uint128 x18;
     152   196170699 :   fiat_25519_uint128 x19;
     153   196170699 :   fiat_25519_uint128 x20;
     154   196170699 :   fiat_25519_uint128 x21;
     155   196170699 :   fiat_25519_uint128 x22;
     156   196170699 :   fiat_25519_uint128 x23;
     157   196170699 :   fiat_25519_uint128 x24;
     158   196170699 :   fiat_25519_uint128 x25;
     159   196170699 :   fiat_25519_uint128 x26;
     160   196170699 :   uint64_t x27;
     161   196170699 :   uint64_t x28;
     162   196170699 :   fiat_25519_uint128 x29;
     163   196170699 :   fiat_25519_uint128 x30;
     164   196170699 :   fiat_25519_uint128 x31;
     165   196170699 :   fiat_25519_uint128 x32;
     166   196170699 :   fiat_25519_uint128 x33;
     167   196170699 :   uint64_t x34;
     168   196170699 :   uint64_t x35;
     169   196170699 :   fiat_25519_uint128 x36;
     170   196170699 :   uint64_t x37;
     171   196170699 :   uint64_t x38;
     172   196170699 :   fiat_25519_uint128 x39;
     173   196170699 :   uint64_t x40;
     174   196170699 :   uint64_t x41;
     175   196170699 :   fiat_25519_uint128 x42;
     176   196170699 :   uint64_t x43;
     177   196170699 :   uint64_t x44;
     178   196170699 :   uint64_t x45;
     179   196170699 :   uint64_t x46;
     180   196170699 :   uint64_t x47;
     181   196170699 :   uint64_t x48;
     182   196170699 :   uint64_t x49;
     183   196170699 :   fiat_25519_uint1 x50;
     184   196170699 :   uint64_t x51;
     185   196170699 :   uint64_t x52;
     186   196170699 :   x1 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[4]) * UINT8_C(0x13)));
     187   196170699 :   x2 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[3]) * UINT8_C(0x13)));
     188   196170699 :   x3 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[2]) * UINT8_C(0x13)));
     189   196170699 :   x4 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[1]) * UINT8_C(0x13)));
     190   196170699 :   x5 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[4]) * UINT8_C(0x13)));
     191   196170699 :   x6 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[3]) * UINT8_C(0x13)));
     192   196170699 :   x7 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[2]) * UINT8_C(0x13)));
     193   196170699 :   x8 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[4]) * UINT8_C(0x13)));
     194   196170699 :   x9 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[3]) * UINT8_C(0x13)));
     195   196170699 :   x10 = ((fiat_25519_uint128)(arg1[1]) * ((arg2[4]) * UINT8_C(0x13)));
     196   196170699 :   x11 = ((fiat_25519_uint128)(arg1[4]) * (arg2[0]));
     197   196170699 :   x12 = ((fiat_25519_uint128)(arg1[3]) * (arg2[1]));
     198   196170699 :   x13 = ((fiat_25519_uint128)(arg1[3]) * (arg2[0]));
     199   196170699 :   x14 = ((fiat_25519_uint128)(arg1[2]) * (arg2[2]));
     200   196170699 :   x15 = ((fiat_25519_uint128)(arg1[2]) * (arg2[1]));
     201   196170699 :   x16 = ((fiat_25519_uint128)(arg1[2]) * (arg2[0]));
     202   196170699 :   x17 = ((fiat_25519_uint128)(arg1[1]) * (arg2[3]));
     203   196170699 :   x18 = ((fiat_25519_uint128)(arg1[1]) * (arg2[2]));
     204   196170699 :   x19 = ((fiat_25519_uint128)(arg1[1]) * (arg2[1]));
     205   196170699 :   x20 = ((fiat_25519_uint128)(arg1[1]) * (arg2[0]));
     206   196170699 :   x21 = ((fiat_25519_uint128)(arg1[0]) * (arg2[4]));
     207   196170699 :   x22 = ((fiat_25519_uint128)(arg1[0]) * (arg2[3]));
     208   196170699 :   x23 = ((fiat_25519_uint128)(arg1[0]) * (arg2[2]));
     209   196170699 :   x24 = ((fiat_25519_uint128)(arg1[0]) * (arg2[1]));
     210   196170699 :   x25 = ((fiat_25519_uint128)(arg1[0]) * (arg2[0]));
     211   196170699 :   x26 = (x25 + (x10 + (x9 + (x7 + x4))));
     212   196170699 :   x27 = (uint64_t)(x26 >> 51);
     213   196170699 :   x28 = (uint64_t)(x26 & UINT64_C(0x7ffffffffffff));
     214   196170699 :   x29 = (x21 + (x17 + (x14 + (x12 + x11))));
     215   196170699 :   x30 = (x22 + (x18 + (x15 + (x13 + x1))));
     216   196170699 :   x31 = (x23 + (x19 + (x16 + (x5 + x2))));
     217   196170699 :   x32 = (x24 + (x20 + (x8 + (x6 + x3))));
     218   196170699 :   x33 = (x27 + x32);
     219   196170699 :   x34 = (uint64_t)(x33 >> 51);
     220   196170699 :   x35 = (uint64_t)(x33 & UINT64_C(0x7ffffffffffff));
     221   196170699 :   x36 = (x34 + x31);
     222   196170699 :   x37 = (uint64_t)(x36 >> 51);
     223   196170699 :   x38 = (uint64_t)(x36 & UINT64_C(0x7ffffffffffff));
     224   196170699 :   x39 = (x37 + x30);
     225   196170699 :   x40 = (uint64_t)(x39 >> 51);
     226   196170699 :   x41 = (uint64_t)(x39 & UINT64_C(0x7ffffffffffff));
     227   196170699 :   x42 = (x40 + x29);
     228   196170699 :   x43 = (uint64_t)(x42 >> 51);
     229   196170699 :   x44 = (uint64_t)(x42 & UINT64_C(0x7ffffffffffff));
     230   196170699 :   x45 = (x43 * UINT8_C(0x13));
     231   196170699 :   x46 = (x28 + x45);
     232   196170699 :   x47 = (x46 >> 51);
     233   196170699 :   x48 = (x46 & UINT64_C(0x7ffffffffffff));
     234   196170699 :   x49 = (x47 + x35);
     235   196170699 :   x50 = (fiat_25519_uint1)(x49 >> 51);
     236   196170699 :   x51 = (x49 & UINT64_C(0x7ffffffffffff));
     237   196170699 :   x52 = (x50 + x38);
     238   196170699 :   out1[0] = x48;
     239   196170699 :   out1[1] = x51;
     240   196170699 :   out1[2] = x52;
     241   196170699 :   out1[3] = x41;
     242   196170699 :   out1[4] = x44;
     243   196170699 : }
     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   194821586 : static FIAT_25519_FIAT_INLINE void fiat_25519_carry_square(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) {
     253   194821586 :   uint64_t x1;
     254   194821586 :   uint64_t x2;
     255   194821586 :   uint64_t x3;
     256   194821586 :   uint64_t x4;
     257   194821586 :   uint64_t x5;
     258   194821586 :   uint64_t x6;
     259   194821586 :   uint64_t x7;
     260   194821586 :   uint64_t x8;
     261   194821586 :   fiat_25519_uint128 x9;
     262   194821586 :   fiat_25519_uint128 x10;
     263   194821586 :   fiat_25519_uint128 x11;
     264   194821586 :   fiat_25519_uint128 x12;
     265   194821586 :   fiat_25519_uint128 x13;
     266   194821586 :   fiat_25519_uint128 x14;
     267   194821586 :   fiat_25519_uint128 x15;
     268   194821586 :   fiat_25519_uint128 x16;
     269   194821586 :   fiat_25519_uint128 x17;
     270   194821586 :   fiat_25519_uint128 x18;
     271   194821586 :   fiat_25519_uint128 x19;
     272   194821586 :   fiat_25519_uint128 x20;
     273   194821586 :   fiat_25519_uint128 x21;
     274   194821586 :   fiat_25519_uint128 x22;
     275   194821586 :   fiat_25519_uint128 x23;
     276   194821586 :   fiat_25519_uint128 x24;
     277   194821586 :   uint64_t x25;
     278   194821586 :   uint64_t x26;
     279   194821586 :   fiat_25519_uint128 x27;
     280   194821586 :   fiat_25519_uint128 x28;
     281   194821586 :   fiat_25519_uint128 x29;
     282   194821586 :   fiat_25519_uint128 x30;
     283   194821586 :   fiat_25519_uint128 x31;
     284   194821586 :   uint64_t x32;
     285   194821586 :   uint64_t x33;
     286   194821586 :   fiat_25519_uint128 x34;
     287   194821586 :   uint64_t x35;
     288   194821586 :   uint64_t x36;
     289   194821586 :   fiat_25519_uint128 x37;
     290   194821586 :   uint64_t x38;
     291   194821586 :   uint64_t x39;
     292   194821586 :   fiat_25519_uint128 x40;
     293   194821586 :   uint64_t x41;
     294   194821586 :   uint64_t x42;
     295   194821586 :   uint64_t x43;
     296   194821586 :   uint64_t x44;
     297   194821586 :   uint64_t x45;
     298   194821586 :   uint64_t x46;
     299   194821586 :   uint64_t x47;
     300   194821586 :   fiat_25519_uint1 x48;
     301   194821586 :   uint64_t x49;
     302   194821586 :   uint64_t x50;
     303   194821586 :   x1 = ((arg1[4]) * UINT8_C(0x13));
     304   194821586 :   x2 = (x1 * 0x2);
     305   194821586 :   x3 = ((arg1[4]) * 0x2);
     306   194821586 :   x4 = ((arg1[3]) * UINT8_C(0x13));
     307   194821586 :   x5 = (x4 * 0x2);
     308   194821586 :   x6 = ((arg1[3]) * 0x2);
     309   194821586 :   x7 = ((arg1[2]) * 0x2);
     310   194821586 :   x8 = ((arg1[1]) * 0x2);
     311   194821586 :   x9 = ((fiat_25519_uint128)(arg1[4]) * x1);
     312   194821586 :   x10 = ((fiat_25519_uint128)(arg1[3]) * x2);
     313   194821586 :   x11 = ((fiat_25519_uint128)(arg1[3]) * x4);
     314   194821586 :   x12 = ((fiat_25519_uint128)(arg1[2]) * x2);
     315   194821586 :   x13 = ((fiat_25519_uint128)(arg1[2]) * x5);
     316   194821586 :   x14 = ((fiat_25519_uint128)(arg1[2]) * (arg1[2]));
     317   194821586 :   x15 = ((fiat_25519_uint128)(arg1[1]) * x2);
     318   194821586 :   x16 = ((fiat_25519_uint128)(arg1[1]) * x6);
     319   194821586 :   x17 = ((fiat_25519_uint128)(arg1[1]) * x7);
     320   194821586 :   x18 = ((fiat_25519_uint128)(arg1[1]) * (arg1[1]));
     321   194821586 :   x19 = ((fiat_25519_uint128)(arg1[0]) * x3);
     322   194821586 :   x20 = ((fiat_25519_uint128)(arg1[0]) * x6);
     323   194821586 :   x21 = ((fiat_25519_uint128)(arg1[0]) * x7);
     324   194821586 :   x22 = ((fiat_25519_uint128)(arg1[0]) * x8);
     325   194821586 :   x23 = ((fiat_25519_uint128)(arg1[0]) * (arg1[0]));
     326   194821586 :   x24 = (x23 + (x15 + x13));
     327   194821586 :   x25 = (uint64_t)(x24 >> 51);
     328   194821586 :   x26 = (uint64_t)(x24 & UINT64_C(0x7ffffffffffff));
     329   194821586 :   x27 = (x19 + (x16 + x14));
     330   194821586 :   x28 = (x20 + (x17 + x9));
     331   194821586 :   x29 = (x21 + (x18 + x10));
     332   194821586 :   x30 = (x22 + (x12 + x11));
     333   194821586 :   x31 = (x25 + x30);
     334   194821586 :   x32 = (uint64_t)(x31 >> 51);
     335   194821586 :   x33 = (uint64_t)(x31 & UINT64_C(0x7ffffffffffff));
     336   194821586 :   x34 = (x32 + x29);
     337   194821586 :   x35 = (uint64_t)(x34 >> 51);
     338   194821586 :   x36 = (uint64_t)(x34 & UINT64_C(0x7ffffffffffff));
     339   194821586 :   x37 = (x35 + x28);
     340   194821586 :   x38 = (uint64_t)(x37 >> 51);
     341   194821586 :   x39 = (uint64_t)(x37 & UINT64_C(0x7ffffffffffff));
     342   194821586 :   x40 = (x38 + x27);
     343   194821586 :   x41 = (uint64_t)(x40 >> 51);
     344   194821586 :   x42 = (uint64_t)(x40 & UINT64_C(0x7ffffffffffff));
     345   194821586 :   x43 = (x41 * UINT8_C(0x13));
     346   194821586 :   x44 = (x26 + x43);
     347   194821586 :   x45 = (x44 >> 51);
     348   194821586 :   x46 = (x44 & UINT64_C(0x7ffffffffffff));
     349   194821586 :   x47 = (x45 + x33);
     350   194821586 :   x48 = (fiat_25519_uint1)(x47 >> 51);
     351   194821586 :   x49 = (x47 & UINT64_C(0x7ffffffffffff));
     352   194821586 :   x50 = (x48 + x36);
     353   194821586 :   out1[0] = x46;
     354   194821586 :   out1[1] = x49;
     355   194821586 :   out1[2] = x50;
     356   194821586 :   out1[3] = x39;
     357   194821586 :   out1[4] = x42;
     358   194821586 : }
     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    40071695 : static FIAT_25519_FIAT_INLINE void fiat_25519_carry(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) {
     368    40071695 :   uint64_t x1;
     369    40071695 :   uint64_t x2;
     370    40071695 :   uint64_t x3;
     371    40071695 :   uint64_t x4;
     372    40071695 :   uint64_t x5;
     373    40071695 :   uint64_t x6;
     374    40071695 :   uint64_t x7;
     375    40071695 :   uint64_t x8;
     376    40071695 :   uint64_t x9;
     377    40071695 :   uint64_t x10;
     378    40071695 :   uint64_t x11;
     379    40071695 :   uint64_t x12;
     380    40071695 :   x1 = (arg1[0]);
     381    40071695 :   x2 = ((x1 >> 51) + (arg1[1]));
     382    40071695 :   x3 = ((x2 >> 51) + (arg1[2]));
     383    40071695 :   x4 = ((x3 >> 51) + (arg1[3]));
     384    40071695 :   x5 = ((x4 >> 51) + (arg1[4]));
     385    40071695 :   x6 = ((x1 & UINT64_C(0x7ffffffffffff)) + ((x5 >> 51) * UINT8_C(0x13)));
     386    40071695 :   x7 = ((fiat_25519_uint1)(x6 >> 51) + (x2 & UINT64_C(0x7ffffffffffff)));
     387    40071695 :   x8 = (x6 & UINT64_C(0x7ffffffffffff));
     388    40071695 :   x9 = (x7 & UINT64_C(0x7ffffffffffff));
     389    40071695 :   x10 = ((fiat_25519_uint1)(x7 >> 51) + (x3 & UINT64_C(0x7ffffffffffff)));
     390    40071695 :   x11 = (x4 & UINT64_C(0x7ffffffffffff));
     391    40071695 :   x12 = (x5 & UINT64_C(0x7ffffffffffff));
     392    40071695 :   out1[0] = x8;
     393    40071695 :   out1[1] = x9;
     394    40071695 :   out1[2] = x10;
     395    40071695 :   out1[3] = x11;
     396    40071695 :   out1[4] = x12;
     397    40071695 : }
     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   120515044 : 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   120515044 :   uint64_t x1;
     408   120515044 :   uint64_t x2;
     409   120515044 :   uint64_t x3;
     410   120515044 :   uint64_t x4;
     411   120515044 :   uint64_t x5;
     412   120515044 :   x1 = ((arg1[0]) + (arg2[0]));
     413   120515044 :   x2 = ((arg1[1]) + (arg2[1]));
     414   120515044 :   x3 = ((arg1[2]) + (arg2[2]));
     415   120515044 :   x4 = ((arg1[3]) + (arg2[3]));
     416   120515044 :   x5 = ((arg1[4]) + (arg2[4]));
     417   120515044 :   out1[0] = x1;
     418   120515044 :   out1[1] = x2;
     419   120515044 :   out1[2] = x3;
     420   120515044 :   out1[3] = x4;
     421   120515044 :   out1[4] = x5;
     422   120515044 : }
     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    84741865 : 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    84741865 :   uint64_t x1;
     433    84741865 :   uint64_t x2;
     434    84741865 :   uint64_t x3;
     435    84741865 :   uint64_t x4;
     436    84741865 :   uint64_t x5;
     437    84741865 :   x1 = ((UINT64_C(0xfffffffffffda) + (arg1[0])) - (arg2[0]));
     438    84741865 :   x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1]));
     439    84741865 :   x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2]));
     440    84741865 :   x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3]));
     441    84741865 :   x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4]));
     442    84741865 :   out1[0] = x1;
     443    84741865 :   out1[1] = x2;
     444    84741865 :   out1[2] = x3;
     445    84741865 :   out1[3] = x4;
     446    84741865 :   out1[4] = x5;
     447    84741865 : }
     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    10413469 : static FIAT_25519_FIAT_INLINE void fiat_25519_opp(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1) {
     457    10413469 :   uint64_t x1;
     458    10413469 :   uint64_t x2;
     459    10413469 :   uint64_t x3;
     460    10413469 :   uint64_t x4;
     461    10413469 :   uint64_t x5;
     462    10413469 :   x1 = (UINT64_C(0xfffffffffffda) - (arg1[0]));
     463    10413469 :   x2 = (UINT64_C(0xffffffffffffe) - (arg1[1]));
     464    10413469 :   x3 = (UINT64_C(0xffffffffffffe) - (arg1[2]));
     465    10413469 :   x4 = (UINT64_C(0xffffffffffffe) - (arg1[3]));
     466    10413469 :   x5 = (UINT64_C(0xffffffffffffe) - (arg1[4]));
     467    10413469 :   out1[0] = x1;
     468    10413469 :   out1[1] = x2;
     469    10413469 :   out1[2] = x3;
     470    10413469 :   out1[3] = x4;
     471    10413469 :   out1[4] = x5;
     472    10413469 : }
     473             : 
     474             : /*
     475             :  * The function fiat_25519_selectznz is a multi-limb conditional select.
     476             :  *
     477             :  * Postconditions:
     478             :  *   out1 = (if arg1 = 0 then arg2 else 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   233130778 : 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   233130778 :   uint64_t x1;
     489   233130778 :   uint64_t x2;
     490   233130778 :   uint64_t x3;
     491   233130778 :   uint64_t x4;
     492   233130778 :   uint64_t x5;
     493   233130778 :   fiat_25519_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0]));
     494   233130778 :   fiat_25519_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1]));
     495   233130778 :   fiat_25519_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2]));
     496   233130778 :   fiat_25519_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3]));
     497   233130778 :   fiat_25519_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4]));
     498   233130778 :   out1[0] = x1;
     499   233130778 :   out1[1] = x2;
     500   233130778 :   out1[2] = x3;
     501   233130778 :   out1[3] = x4;
     502   233130778 :   out1[4] = x5;
     503   233130778 : }
     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     2244318 : static FIAT_25519_FIAT_INLINE void fiat_25519_to_bytes(uint8_t out1[32], const fiat_25519_tight_field_element arg1) {
     515     2244318 :   uint64_t x1;
     516     2244318 :   fiat_25519_uint1 x2;
     517     2244318 :   uint64_t x3;
     518     2244318 :   fiat_25519_uint1 x4;
     519     2244318 :   uint64_t x5;
     520     2244318 :   fiat_25519_uint1 x6;
     521     2244318 :   uint64_t x7;
     522     2244318 :   fiat_25519_uint1 x8;
     523     2244318 :   uint64_t x9;
     524     2244318 :   fiat_25519_uint1 x10;
     525     2244318 :   uint64_t x11;
     526     2244318 :   uint64_t x12;
     527     2244318 :   fiat_25519_uint1 x13;
     528     2244318 :   uint64_t x14;
     529     2244318 :   fiat_25519_uint1 x15;
     530     2244318 :   uint64_t x16;
     531     2244318 :   fiat_25519_uint1 x17;
     532     2244318 :   uint64_t x18;
     533     2244318 :   fiat_25519_uint1 x19;
     534     2244318 :   uint64_t x20;
     535     2244318 :   fiat_25519_uint1 x21;
     536     2244318 :   uint64_t x22;
     537     2244318 :   uint64_t x23;
     538     2244318 :   uint64_t x24;
     539     2244318 :   uint64_t x25;
     540     2244318 :   uint8_t x26;
     541     2244318 :   uint64_t x27;
     542     2244318 :   uint8_t x28;
     543     2244318 :   uint64_t x29;
     544     2244318 :   uint8_t x30;
     545     2244318 :   uint64_t x31;
     546     2244318 :   uint8_t x32;
     547     2244318 :   uint64_t x33;
     548     2244318 :   uint8_t x34;
     549     2244318 :   uint64_t x35;
     550     2244318 :   uint8_t x36;
     551     2244318 :   uint8_t x37;
     552     2244318 :   uint64_t x38;
     553     2244318 :   uint8_t x39;
     554     2244318 :   uint64_t x40;
     555     2244318 :   uint8_t x41;
     556     2244318 :   uint64_t x42;
     557     2244318 :   uint8_t x43;
     558     2244318 :   uint64_t x44;
     559     2244318 :   uint8_t x45;
     560     2244318 :   uint64_t x46;
     561     2244318 :   uint8_t x47;
     562     2244318 :   uint64_t x48;
     563     2244318 :   uint8_t x49;
     564     2244318 :   uint8_t x50;
     565     2244318 :   uint64_t x51;
     566     2244318 :   uint8_t x52;
     567     2244318 :   uint64_t x53;
     568     2244318 :   uint8_t x54;
     569     2244318 :   uint64_t x55;
     570     2244318 :   uint8_t x56;
     571     2244318 :   uint64_t x57;
     572     2244318 :   uint8_t x58;
     573     2244318 :   uint64_t x59;
     574     2244318 :   uint8_t x60;
     575     2244318 :   uint64_t x61;
     576     2244318 :   uint8_t x62;
     577     2244318 :   uint64_t x63;
     578     2244318 :   uint8_t x64;
     579     2244318 :   fiat_25519_uint1 x65;
     580     2244318 :   uint64_t x66;
     581     2244318 :   uint8_t x67;
     582     2244318 :   uint64_t x68;
     583     2244318 :   uint8_t x69;
     584     2244318 :   uint64_t x70;
     585     2244318 :   uint8_t x71;
     586     2244318 :   uint64_t x72;
     587     2244318 :   uint8_t x73;
     588     2244318 :   uint64_t x74;
     589     2244318 :   uint8_t x75;
     590     2244318 :   uint64_t x76;
     591     2244318 :   uint8_t x77;
     592     2244318 :   uint8_t x78;
     593     2244318 :   uint64_t x79;
     594     2244318 :   uint8_t x80;
     595     2244318 :   uint64_t x81;
     596     2244318 :   uint8_t x82;
     597     2244318 :   uint64_t x83;
     598     2244318 :   uint8_t x84;
     599     2244318 :   uint64_t x85;
     600     2244318 :   uint8_t x86;
     601     2244318 :   uint64_t x87;
     602     2244318 :   uint8_t x88;
     603     2244318 :   uint64_t x89;
     604     2244318 :   uint8_t x90;
     605     2244318 :   uint8_t x91;
     606     2244318 :   fiat_25519_subborrowx_u51(&x1, &x2, 0x0, (arg1[0]), UINT64_C(0x7ffffffffffed));
     607     2244318 :   fiat_25519_subborrowx_u51(&x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff));
     608     2244318 :   fiat_25519_subborrowx_u51(&x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff));
     609     2244318 :   fiat_25519_subborrowx_u51(&x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff));
     610     2244318 :   fiat_25519_subborrowx_u51(&x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff));
     611     2244318 :   fiat_25519_cmovznz_u64(&x11, x10, 0x0, UINT64_C(0xffffffffffffffff));
     612     2244318 :   fiat_25519_addcarryx_u51(&x12, &x13, 0x0, x1, (x11 & UINT64_C(0x7ffffffffffed)));
     613     2244318 :   fiat_25519_addcarryx_u51(&x14, &x15, x13, x3, (x11 & UINT64_C(0x7ffffffffffff)));
     614     2244318 :   fiat_25519_addcarryx_u51(&x16, &x17, x15, x5, (x11 & UINT64_C(0x7ffffffffffff)));
     615     2244318 :   fiat_25519_addcarryx_u51(&x18, &x19, x17, x7, (x11 & UINT64_C(0x7ffffffffffff)));
     616     2244318 :   fiat_25519_addcarryx_u51(&x20, &x21, x19, x9, (x11 & UINT64_C(0x7ffffffffffff)));
     617     2244318 :   x22 = (x20 << 4);
     618     2244318 :   x23 = (x18 * (uint64_t)0x2);
     619     2244318 :   x24 = (x16 << 6);
     620     2244318 :   x25 = (x14 << 3);
     621     2244318 :   x26 = (uint8_t)(x12 & UINT8_C(0xff));
     622     2244318 :   x27 = (x12 >> 8);
     623     2244318 :   x28 = (uint8_t)(x27 & UINT8_C(0xff));
     624     2244318 :   x29 = (x27 >> 8);
     625     2244318 :   x30 = (uint8_t)(x29 & UINT8_C(0xff));
     626     2244318 :   x31 = (x29 >> 8);
     627     2244318 :   x32 = (uint8_t)(x31 & UINT8_C(0xff));
     628     2244318 :   x33 = (x31 >> 8);
     629     2244318 :   x34 = (uint8_t)(x33 & UINT8_C(0xff));
     630     2244318 :   x35 = (x33 >> 8);
     631     2244318 :   x36 = (uint8_t)(x35 & UINT8_C(0xff));
     632     2244318 :   x37 = (uint8_t)(x35 >> 8);
     633     2244318 :   x38 = (x25 + (uint64_t)x37);
     634     2244318 :   x39 = (uint8_t)(x38 & UINT8_C(0xff));
     635     2244318 :   x40 = (x38 >> 8);
     636     2244318 :   x41 = (uint8_t)(x40 & UINT8_C(0xff));
     637     2244318 :   x42 = (x40 >> 8);
     638     2244318 :   x43 = (uint8_t)(x42 & UINT8_C(0xff));
     639     2244318 :   x44 = (x42 >> 8);
     640     2244318 :   x45 = (uint8_t)(x44 & UINT8_C(0xff));
     641     2244318 :   x46 = (x44 >> 8);
     642     2244318 :   x47 = (uint8_t)(x46 & UINT8_C(0xff));
     643     2244318 :   x48 = (x46 >> 8);
     644     2244318 :   x49 = (uint8_t)(x48 & UINT8_C(0xff));
     645     2244318 :   x50 = (uint8_t)(x48 >> 8);
     646     2244318 :   x51 = (x24 + (uint64_t)x50);
     647     2244318 :   x52 = (uint8_t)(x51 & UINT8_C(0xff));
     648     2244318 :   x53 = (x51 >> 8);
     649     2244318 :   x54 = (uint8_t)(x53 & UINT8_C(0xff));
     650     2244318 :   x55 = (x53 >> 8);
     651     2244318 :   x56 = (uint8_t)(x55 & UINT8_C(0xff));
     652     2244318 :   x57 = (x55 >> 8);
     653     2244318 :   x58 = (uint8_t)(x57 & UINT8_C(0xff));
     654     2244318 :   x59 = (x57 >> 8);
     655     2244318 :   x60 = (uint8_t)(x59 & UINT8_C(0xff));
     656     2244318 :   x61 = (x59 >> 8);
     657     2244318 :   x62 = (uint8_t)(x61 & UINT8_C(0xff));
     658     2244318 :   x63 = (x61 >> 8);
     659     2244318 :   x64 = (uint8_t)(x63 & UINT8_C(0xff));
     660     2244318 :   x65 = (fiat_25519_uint1)(x63 >> 8);
     661     2244318 :   x66 = (x23 + (uint64_t)x65);
     662     2244318 :   x67 = (uint8_t)(x66 & UINT8_C(0xff));
     663     2244318 :   x68 = (x66 >> 8);
     664     2244318 :   x69 = (uint8_t)(x68 & UINT8_C(0xff));
     665     2244318 :   x70 = (x68 >> 8);
     666     2244318 :   x71 = (uint8_t)(x70 & UINT8_C(0xff));
     667     2244318 :   x72 = (x70 >> 8);
     668     2244318 :   x73 = (uint8_t)(x72 & UINT8_C(0xff));
     669     2244318 :   x74 = (x72 >> 8);
     670     2244318 :   x75 = (uint8_t)(x74 & UINT8_C(0xff));
     671     2244318 :   x76 = (x74 >> 8);
     672     2244318 :   x77 = (uint8_t)(x76 & UINT8_C(0xff));
     673     2244318 :   x78 = (uint8_t)(x76 >> 8);
     674     2244318 :   x79 = (x22 + (uint64_t)x78);
     675     2244318 :   x80 = (uint8_t)(x79 & UINT8_C(0xff));
     676     2244318 :   x81 = (x79 >> 8);
     677     2244318 :   x82 = (uint8_t)(x81 & UINT8_C(0xff));
     678     2244318 :   x83 = (x81 >> 8);
     679     2244318 :   x84 = (uint8_t)(x83 & UINT8_C(0xff));
     680     2244318 :   x85 = (x83 >> 8);
     681     2244318 :   x86 = (uint8_t)(x85 & UINT8_C(0xff));
     682     2244318 :   x87 = (x85 >> 8);
     683     2244318 :   x88 = (uint8_t)(x87 & UINT8_C(0xff));
     684     2244318 :   x89 = (x87 >> 8);
     685     2244318 :   x90 = (uint8_t)(x89 & UINT8_C(0xff));
     686     2244318 :   x91 = (uint8_t)(x89 >> 8);
     687     2244318 :   out1[0] = x26;
     688     2244318 :   out1[1] = x28;
     689     2244318 :   out1[2] = x30;
     690     2244318 :   out1[3] = x32;
     691     2244318 :   out1[4] = x34;
     692     2244318 :   out1[5] = x36;
     693     2244318 :   out1[6] = x39;
     694     2244318 :   out1[7] = x41;
     695     2244318 :   out1[8] = x43;
     696     2244318 :   out1[9] = x45;
     697     2244318 :   out1[10] = x47;
     698     2244318 :   out1[11] = x49;
     699     2244318 :   out1[12] = x52;
     700     2244318 :   out1[13] = x54;
     701     2244318 :   out1[14] = x56;
     702     2244318 :   out1[15] = x58;
     703     2244318 :   out1[16] = x60;
     704     2244318 :   out1[17] = x62;
     705     2244318 :   out1[18] = x64;
     706     2244318 :   out1[19] = x67;
     707     2244318 :   out1[20] = x69;
     708     2244318 :   out1[21] = x71;
     709     2244318 :   out1[22] = x73;
     710     2244318 :   out1[23] = x75;
     711     2244318 :   out1[24] = x77;
     712     2244318 :   out1[25] = x80;
     713     2244318 :   out1[26] = x82;
     714     2244318 :   out1[27] = x84;
     715     2244318 :   out1[28] = x86;
     716     2244318 :   out1[29] = x88;
     717     2244318 :   out1[30] = x90;
     718     2244318 :   out1[31] = x91;
     719     2244318 : }
     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      285860 : static FIAT_25519_FIAT_INLINE void fiat_25519_from_bytes(fiat_25519_tight_field_element out1, const uint8_t arg1[32]) {
     731      285860 :   uint64_t x1;
     732      285860 :   uint64_t x2;
     733      285860 :   uint64_t x3;
     734      285860 :   uint64_t x4;
     735      285860 :   uint64_t x5;
     736      285860 :   uint64_t x6;
     737      285860 :   uint64_t x7;
     738      285860 :   uint64_t x8;
     739      285860 :   uint64_t x9;
     740      285860 :   uint64_t x10;
     741      285860 :   uint64_t x11;
     742      285860 :   uint64_t x12;
     743      285860 :   uint64_t x13;
     744      285860 :   uint64_t x14;
     745      285860 :   uint64_t x15;
     746      285860 :   uint64_t x16;
     747      285860 :   uint64_t x17;
     748      285860 :   uint64_t x18;
     749      285860 :   uint64_t x19;
     750      285860 :   uint64_t x20;
     751      285860 :   uint64_t x21;
     752      285860 :   uint64_t x22;
     753      285860 :   uint64_t x23;
     754      285860 :   uint64_t x24;
     755      285860 :   uint64_t x25;
     756      285860 :   uint64_t x26;
     757      285860 :   uint64_t x27;
     758      285860 :   uint64_t x28;
     759      285860 :   uint64_t x29;
     760      285860 :   uint64_t x30;
     761      285860 :   uint64_t x31;
     762      285860 :   uint8_t x32;
     763      285860 :   uint64_t x33;
     764      285860 :   uint64_t x34;
     765      285860 :   uint64_t x35;
     766      285860 :   uint64_t x36;
     767      285860 :   uint64_t x37;
     768      285860 :   uint64_t x38;
     769      285860 :   uint64_t x39;
     770      285860 :   uint8_t x40;
     771      285860 :   uint64_t x41;
     772      285860 :   uint64_t x42;
     773      285860 :   uint64_t x43;
     774      285860 :   uint64_t x44;
     775      285860 :   uint64_t x45;
     776      285860 :   uint64_t x46;
     777      285860 :   uint64_t x47;
     778      285860 :   uint8_t x48;
     779      285860 :   uint64_t x49;
     780      285860 :   uint64_t x50;
     781      285860 :   uint64_t x51;
     782      285860 :   uint64_t x52;
     783      285860 :   uint64_t x53;
     784      285860 :   uint64_t x54;
     785      285860 :   uint64_t x55;
     786      285860 :   uint64_t x56;
     787      285860 :   uint8_t x57;
     788      285860 :   uint64_t x58;
     789      285860 :   uint64_t x59;
     790      285860 :   uint64_t x60;
     791      285860 :   uint64_t x61;
     792      285860 :   uint64_t x62;
     793      285860 :   uint64_t x63;
     794      285860 :   uint64_t x64;
     795      285860 :   uint8_t x65;
     796      285860 :   uint64_t x66;
     797      285860 :   uint64_t x67;
     798      285860 :   uint64_t x68;
     799      285860 :   uint64_t x69;
     800      285860 :   uint64_t x70;
     801      285860 :   uint64_t x71;
     802      285860 :   x1 = ((uint64_t)(arg1[31] & 0x7F) << 44);
     803      285860 :   x2 = ((uint64_t)(arg1[30]) << 36);
     804      285860 :   x3 = ((uint64_t)(arg1[29]) << 28);
     805      285860 :   x4 = ((uint64_t)(arg1[28]) << 20);
     806      285860 :   x5 = ((uint64_t)(arg1[27]) << 12);
     807      285860 :   x6 = ((uint64_t)(arg1[26]) << 4);
     808      285860 :   x7 = ((uint64_t)(arg1[25]) << 47);
     809      285860 :   x8 = ((uint64_t)(arg1[24]) << 39);
     810      285860 :   x9 = ((uint64_t)(arg1[23]) << 31);
     811      285860 :   x10 = ((uint64_t)(arg1[22]) << 23);
     812      285860 :   x11 = ((uint64_t)(arg1[21]) << 15);
     813      285860 :   x12 = ((uint64_t)(arg1[20]) << 7);
     814      285860 :   x13 = ((uint64_t)(arg1[19]) << 50);
     815      285860 :   x14 = ((uint64_t)(arg1[18]) << 42);
     816      285860 :   x15 = ((uint64_t)(arg1[17]) << 34);
     817      285860 :   x16 = ((uint64_t)(arg1[16]) << 26);
     818      285860 :   x17 = ((uint64_t)(arg1[15]) << 18);
     819      285860 :   x18 = ((uint64_t)(arg1[14]) << 10);
     820      285860 :   x19 = ((uint64_t)(arg1[13]) << 2);
     821      285860 :   x20 = ((uint64_t)(arg1[12]) << 45);
     822      285860 :   x21 = ((uint64_t)(arg1[11]) << 37);
     823      285860 :   x22 = ((uint64_t)(arg1[10]) << 29);
     824      285860 :   x23 = ((uint64_t)(arg1[9]) << 21);
     825      285860 :   x24 = ((uint64_t)(arg1[8]) << 13);
     826      285860 :   x25 = ((uint64_t)(arg1[7]) << 5);
     827      285860 :   x26 = ((uint64_t)(arg1[6]) << 48);
     828      285860 :   x27 = ((uint64_t)(arg1[5]) << 40);
     829      285860 :   x28 = ((uint64_t)(arg1[4]) << 32);
     830      285860 :   x29 = ((uint64_t)(arg1[3]) << 24);
     831      285860 :   x30 = ((uint64_t)(arg1[2]) << 16);
     832      285860 :   x31 = ((uint64_t)(arg1[1]) << 8);
     833      285860 :   x32 = (arg1[0]);
     834      285860 :   x33 = (x31 + (uint64_t)x32);
     835      285860 :   x34 = (x30 + x33);
     836      285860 :   x35 = (x29 + x34);
     837      285860 :   x36 = (x28 + x35);
     838      285860 :   x37 = (x27 + x36);
     839      285860 :   x38 = (x26 + x37);
     840      285860 :   x39 = (x38 & UINT64_C(0x7ffffffffffff));
     841      285860 :   x40 = (uint8_t)(x38 >> 51);
     842      285860 :   x41 = (x25 + (uint64_t)x40);
     843      285860 :   x42 = (x24 + x41);
     844      285860 :   x43 = (x23 + x42);
     845      285860 :   x44 = (x22 + x43);
     846      285860 :   x45 = (x21 + x44);
     847      285860 :   x46 = (x20 + x45);
     848      285860 :   x47 = (x46 & UINT64_C(0x7ffffffffffff));
     849      285860 :   x48 = (uint8_t)(x46 >> 51);
     850      285860 :   x49 = (x19 + (uint64_t)x48);
     851      285860 :   x50 = (x18 + x49);
     852      285860 :   x51 = (x17 + x50);
     853      285860 :   x52 = (x16 + x51);
     854      285860 :   x53 = (x15 + x52);
     855      285860 :   x54 = (x14 + x53);
     856      285860 :   x55 = (x13 + x54);
     857      285860 :   x56 = (x55 & UINT64_C(0x7ffffffffffff));
     858      285860 :   x57 = (uint8_t)(x55 >> 51);
     859      285860 :   x58 = (x12 + (uint64_t)x57);
     860      285860 :   x59 = (x11 + x58);
     861      285860 :   x60 = (x10 + x59);
     862      285860 :   x61 = (x9 + x60);
     863      285860 :   x62 = (x8 + x61);
     864      285860 :   x63 = (x7 + x62);
     865      285860 :   x64 = (x63 & UINT64_C(0x7ffffffffffff));
     866      285860 :   x65 = (uint8_t)(x63 >> 51);
     867      285860 :   x66 = (x6 + (uint64_t)x65);
     868      285860 :   x67 = (x5 + x66);
     869      285860 :   x68 = (x4 + x67);
     870      285860 :   x69 = (x3 + x68);
     871      285860 :   x70 = (x2 + x69);
     872      285860 :   x71 = (x1 + x70);
     873      285860 :   out1[0] = x39;
     874      285860 :   out1[1] = x47;
     875      285860 :   out1[2] = x56;
     876      285860 :   out1[3] = x64;
     877      285860 :   out1[4] = x71;
     878      285860 : }
     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             :   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 : }

Generated by: LCOV version 1.14