Home | History | Annotate | Line # | Download | only in dist
      1 /*	$NetBSD: libcrux_internal.h,v 1.3 2026/09/21 23:01:54 christos Exp $	*/
      2 /*  $OpenBSD: libcrux_internal.h,v 1.1 2026/06/14 03:59:34 djm Exp $ */
      3 
      4 /* Extracted from libcrux revision c46481ce3cd1cc8315e90db114581d8c992c3d7d */
      5 
      6 /*
      7  * MIT License
      8  *
      9  * Copyright (c) 2024 Cryspen
     10  *
     11  * Permission is hereby granted, free of charge, to any person obtaining a copy
     12  * of this software and associated documentation files (the "Software"), to deal
     13  * in the Software without restriction, including without limitation the rights
     14  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     15  * copies of the Software, and to permit persons to whom the Software is
     16  * furnished to do so, subject to the following conditions:
     17  *
     18  * The above copyright notice and this permission notice shall be included in all
     19  * copies or substantial portions of the Software.
     20  *
     21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     24  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     26  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     27  * SOFTWARE.
     28  */
     29 
     30 #if !defined(__GNUC__) || (__GNUC__ < 2)
     31 # define __attribute__(x)
     32 #endif
     33 #define KRML_MUSTINLINE inline
     34 #define KRML_NOINLINE __attribute__((noinline, unused))
     35 #define KRML_HOST_EPRINTF(...)
     36 #define KRML_HOST_EXIT(x) fatal_f("internal error")
     37 #define KRML_UNION_CONSTRUCTOR(T)
     38 
     39 static inline void
     40 store64_le(uint8_t dst[8], uint64_t src)
     41 {
     42 	dst[0] = src & 0xff;
     43 	dst[1] = (src >> 8) & 0xff;
     44 	dst[2] = (src >> 16) & 0xff;
     45 	dst[3] = (src >> 24) & 0xff;
     46 	dst[4] = (src >> 32) & 0xff;
     47 	dst[5] = (src >> 40) & 0xff;
     48 	dst[6] = (src >> 48) & 0xff;
     49 	dst[7] = (src >> 56) & 0xff;
     50 }
     51 
     52 static inline void
     53 store32_le(uint8_t dst[4], uint32_t src)
     54 {
     55 	dst[0] = src & 0xff;
     56 	dst[1] = (src >> 8) & 0xff;
     57 	dst[2] = (src >> 16) & 0xff;
     58 	dst[3] = (src >> 24) & 0xff;
     59 }
     60 
     61 static inline void
     62 store16_le(uint8_t dst[2], uint16_t src)
     63 {
     64 	dst[0] = src & 0xff;
     65 	dst[1] = (src >> 8) & 0xff;
     66 }
     67 
     68 static inline void
     69 store32_be(uint8_t dst[4], uint32_t src)
     70 {
     71 	dst[0] = (src >> 24) & 0xff;
     72 	dst[1] = (src >> 16) & 0xff;
     73 	dst[2] = (src >> 8) & 0xff;
     74 	dst[3] = src & 0xff;
     75 }
     76 
     77 static inline uint64_t
     78 load64_le(uint8_t src[8])
     79 {
     80 	return (uint64_t)(src[0]) |
     81 	    ((uint64_t)(src[1]) << 8) |
     82 	    ((uint64_t)(src[2]) << 16) |
     83 	    ((uint64_t)(src[3]) << 24) |
     84 	    ((uint64_t)(src[4]) << 32) |
     85 	    ((uint64_t)(src[5]) << 40) |
     86 	    ((uint64_t)(src[6]) << 48) |
     87 	    ((uint64_t)(src[7]) << 56);
     88 }
     89 
     90 static inline uint32_t
     91 load32_le(uint8_t src[4])
     92 {
     93 	return (uint32_t)(src[0]) |
     94 	    ((uint32_t)(src[1]) << 8) |
     95 	    ((uint32_t)(src[2]) << 16) |
     96 	    ((uint32_t)(src[3]) << 24);
     97 }
     98 
     99 static inline uint16_t
    100 load16_le(uint8_t src[4])
    101 {
    102 	return (uint16_t)(src[0]) |
    103 	    ((uint16_t)(src[1]) << 8);
    104 }
    105 
    106 #ifdef MISSING_BUILTIN_POPCOUNT
    107 static inline unsigned int
    108 __builtin_popcount(unsigned int num)
    109 {
    110   const int v[16] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
    111   return v[num & 0xf] + v[(num >> 4) & 0xf];
    112 }
    113 #endif
    114 
    115 /* from libcrux/combined_extraction/generated/eurydice_glue.h */
    116 #pragma once
    117 
    118 
    119 #ifdef _MSC_VER
    120 // For __popcnt
    121 #endif
    122 
    123 
    124 // C++ HELPERS
    125 
    126 #if defined(__cplusplus)
    127 
    128 #ifndef KRML_HOST_EPRINTF
    129 #define KRML_HOST_EPRINTF(...) fprintf(stderr, __VA_ARGS__)
    130 #endif
    131 
    132 
    133 #ifndef __cpp_lib_type_identity
    134 template <class T>
    135 struct type_identity {
    136   using type = T;
    137 };
    138 
    139 template <class T>
    140 using type_identity_t = typename type_identity<T>::type;
    141 #else
    142 using std::type_identity_t;
    143 #endif
    144 
    145 #define KRML_UNION_CONSTRUCTOR(T)                              \
    146   template <typename V>                                        \
    147   constexpr T(int t, V U::*m, type_identity_t<V> v) : tag(t) { \
    148     val.*m = std::move(v);                                     \
    149   }                                                            \
    150   T() = default;
    151 
    152 #endif
    153 
    154 // GENERAL-PURPOSE STUFF
    155 
    156 #define LowStar_Ignore_ignore(e, t, _ret_t) ((void)e)
    157 
    158 #define EURYDICE_ASSERT(test, msg)                                            \
    159   do {                                                                        \
    160     if (!(test)) {                                                            \
    161       fprintf(stderr, "assertion \"%s\" failed: file \"%s\", line %d\n", msg, \
    162               __FILE__, __LINE__);                                            \
    163       exit(255);                                                              \
    164     }                                                                         \
    165   } while (0)
    166 
    167 // SIZEOF, ALIGNOF
    168 
    169 #define Eurydice_sizeof(t) sizeof(t)
    170 
    171 #define Eurydice_alignof(t) alignof(t)
    172 
    173 // SLICES, ARRAYS, ETC.
    174 
    175 // For convenience, we give these common slice types, below, a distinguished
    176 // status and rather than emit them in the client code, we skip their
    177 // code-generation in Cleanup3.ml and write them by hand here. This makes it
    178 // easy to write interop code that brings those definitions in scope.
    179 
    180 // &[u8]
    181 typedef struct Eurydice_borrow_slice_u8_s {
    182   const uint8_t *ptr;
    183   size_t meta;
    184 } Eurydice_borrow_slice_u8;
    185 
    186 // &[u16]
    187 typedef struct Eurydice_borrow_slice_i16_s {
    188   const int16_t *ptr;
    189   size_t meta;
    190 } Eurydice_borrow_slice_i16;
    191 
    192 // &mut [u8]
    193 typedef struct Eurydice_mut_borrow_slice_u8_s {
    194   uint8_t *ptr;
    195   size_t meta;
    196 } Eurydice_mut_borrow_slice_u8;
    197 
    198 // &mut [u16]
    199 typedef struct Eurydice_mut_borrow_slice_i16_s {
    200   int16_t *ptr;
    201   size_t meta;
    202 } Eurydice_mut_borrow_slice_i16;
    203 
    204 #if defined(__cplusplus)
    205 #define KRML_CLITERAL(type) type
    206 #else
    207 #define KRML_CLITERAL(type) (type)
    208 #endif
    209 
    210 #if defined(__cplusplus) && defined(__cpp_designated_initializers) || \
    211     !(defined(__cplusplus))
    212 #define EURYDICE_CFIELD(X) X
    213 #else
    214 #define EURYDICE_CFIELD(X)
    215 #endif
    216 
    217 #define Eurydice_array_repeat(dst, len, init, t) \
    218   ERROR "should've been desugared"
    219 
    220 // Copy a slice with memcopy
    221 #define Eurydice_slice_copy(dst, src, t) \
    222   memcpy(dst.ptr, src.ptr, dst.meta * sizeof(t))
    223 
    224 #define core_array___T__N___as_slice(len_, ptr_, t, ret_t)   \
    225   (KRML_CLITERAL(ret_t){EURYDICE_CFIELD(.ptr =)(ptr_)->data, \
    226                         EURYDICE_CFIELD(.meta =) len_})
    227 
    228 #define core_array__core__clone__Clone_for__T__N___clone(len, src, elem_type, \
    229                                                          _ret_t)              \
    230   (*(src))
    231 #define TryFromSliceError uint8_t
    232 #define core_array_TryFromSliceError uint8_t
    233 
    234 // Distinguished support for some PartialEq trait implementations
    235 //
    236 // core::cmp::PartialEq<@Array<U, N>> for @Array<T, N>
    237 #define Eurydice_array_eq(sz, a1, a2, t) \
    238   (memcmp((a1)->data, (a2)->data, sz * sizeof(t)) == 0)
    239 // core::cmp::PartialEq<&0 (@Slice<U>)> for @Array<T, N>
    240 #define Eurydice_array_eq_slice_shared(sz, a1, s2, t, _) \
    241   (memcmp((a1)->data, (s2)->ptr, sz * sizeof(t)) == 0)
    242 #define Eurydice_array_eq_slice_mut(sz, a1, s2, t, _) \
    243   Eurydice_array_eq_slice_shared(sz, a1, s2, t, _)
    244 
    245 // DEPRECATED -- should no longer be generated
    246 #define core_array_equality__core__cmp__PartialEq__Array_U__N___for__Array_T__N___eq( \
    247     sz, a1, a2, t, _, _ret_t)                                                         \
    248   Eurydice_array_eq(sz, a1, a2, t)
    249 #define core_array_equality__core__cmp__PartialEq__0___Slice_U____for__Array_T__N___eq( \
    250     sz, a1, a2, t, _, _ret_t)                                                           \
    251   Eurydice_array_eq(sz, a1, ((a2)->ptr), t)
    252 #define core_cmp_impls__core__cmp__PartialEq__0_mut__B___for__1_mut__A___eq( \
    253     _m0, _m1, src1, src2, _0, _1, T)                                         \
    254   Eurydice_slice_eq(src1, src2, _, _, T, _)
    255 
    256 #define Eurydice_slice_split_at(slice, mid, element_type, ret_t)        \
    257   KRML_CLITERAL(ret_t) {                                                \
    258     EURYDICE_CFIELD(.fst =){EURYDICE_CFIELD(.ptr =)((slice).ptr),       \
    259                             EURYDICE_CFIELD(.meta =) mid},              \
    260         EURYDICE_CFIELD(.snd =) {                                       \
    261       EURYDICE_CFIELD(.ptr =)                                           \
    262       ((slice).ptr + mid), EURYDICE_CFIELD(.meta =)((slice).meta - mid) \
    263     }                                                                   \
    264   }
    265 
    266 #define Eurydice_slice_split_at_mut(slice, mid, element_type, ret_t)    \
    267   KRML_CLITERAL(ret_t) {                                                \
    268     EURYDICE_CFIELD(.fst =){EURYDICE_CFIELD(.ptr =)((slice).ptr),       \
    269                             EURYDICE_CFIELD(.meta =) mid},              \
    270         EURYDICE_CFIELD(.snd =) {                                       \
    271       EURYDICE_CFIELD(.ptr =)                                           \
    272       ((slice).ptr + mid), EURYDICE_CFIELD(.meta =)((slice).meta - mid) \
    273     }                                                                   \
    274   }
    275 
    276 // Conversion of slice to an array, rewritten (by Eurydice) to name the
    277 // destination array, since arrays are not values in C.
    278 // N.B.: see note in karamel/lib/Inlining.ml if you change this.
    279 
    280 #define Eurydice_slice_to_ref_array2(len_, src, arr_ptr, t_ptr, t_arr, t_err, \
    281                                      t_res)                                   \
    282   (src.meta >= len_                                                           \
    283        ? ((t_res){.tag = core_result_Ok, .val = {.case_Ok = arr_ptr}})        \
    284        : ((t_res){.tag = core_result_Err, .val = {.case_Err = 0}}))
    285 
    286 // CORE STUFF (conversions, endianness, ...)
    287 
    288 // We slap extern "C" on declarations that intend to implement a prototype
    289 // generated by Eurydice, because Eurydice prototypes are always emitted within
    290 // an extern "C" block, UNLESS you use -fcxx17-compat, in which case, you must
    291 // pass -DKRML_CXX17_COMPAT="" to your C++ compiler.
    292 #if defined(__cplusplus) && !defined(KRML_CXX17_COMPAT)
    293 extern "C" {
    294 #endif
    295 
    296 #define core_hint_black_box(X, _0, _1) (X)
    297 
    298 // [ u8; 2 ]
    299 typedef struct Eurydice_array_u8x2_s {
    300   uint8_t data[2];
    301 } Eurydice_array_u8x2;
    302 
    303 // [ u8; 4 ]
    304 typedef struct Eurydice_array_u8x4_s {
    305   uint8_t data[4];
    306 } Eurydice_array_u8x4;
    307 
    308 // [ u8; 8 ]
    309 typedef struct Eurydice_array_u8x8_s {
    310   uint8_t data[8];
    311 } Eurydice_array_u8x8;
    312 
    313 static inline uint16_t core_num__u16__from_le_bytes(Eurydice_array_u8x2 buf) {
    314   return load16_le(buf.data);
    315 }
    316 
    317 static inline Eurydice_array_u8x4 core_num__u32__to_be_bytes(uint32_t src) {
    318   // TODO: why not store32_be?
    319   Eurydice_array_u8x4 a;
    320   uint32_t x = htobe32(src);
    321   memcpy(a.data, &x, 4);
    322   return a;
    323 }
    324 
    325 static inline Eurydice_array_u8x4 core_num__u32__to_le_bytes(uint32_t src) {
    326   Eurydice_array_u8x4 a;
    327   store32_le(a.data, src);
    328   return a;
    329 }
    330 
    331 static inline uint32_t core_num__u32__from_le_bytes(Eurydice_array_u8x4 buf) {
    332   return load32_le(buf.data);
    333 }
    334 
    335 static inline Eurydice_array_u8x8 core_num__u64__to_le_bytes(uint64_t v) {
    336   Eurydice_array_u8x8 a;
    337   store64_le(a.data, v);
    338   return a;
    339 }
    340 
    341 static inline uint64_t core_num__u64__from_le_bytes(Eurydice_array_u8x8 buf) {
    342   return load64_le(buf.data);
    343 }
    344 
    345 static inline int64_t core_convert_num__core__convert__From_i32__for_i64__from(
    346     int32_t x) {
    347   return x;
    348 }
    349 
    350 static inline uint64_t core_convert_num__core__convert__From_u8__for_u64__from(
    351     uint8_t x) {
    352   return x;
    353 }
    354 
    355 static inline uint64_t core_convert_num__core__convert__From_u16__for_u64__from(
    356     uint16_t x) {
    357   return x;
    358 }
    359 
    360 static inline size_t core_convert_num__core__convert__From_u16__for_usize__from(
    361     uint16_t x) {
    362   return x;
    363 }
    364 
    365 static inline uint32_t core_num__u8__count_ones(uint8_t x0) {
    366 #ifdef _MSC_VER
    367   return __popcnt(x0);
    368 #else
    369   return __builtin_popcount(x0);
    370 #endif
    371 }
    372 
    373 static inline uint32_t core_num__u32__count_ones(uint32_t x0) {
    374 #ifdef _MSC_VER
    375   return __popcnt(x0);
    376 #else
    377   return __builtin_popcount(x0);
    378 #endif
    379 }
    380 
    381 static inline uint32_t core_num__i32__count_ones(int32_t x0) {
    382 #ifdef _MSC_VER
    383   return __popcnt(x0);
    384 #else
    385   return __builtin_popcount(x0);
    386 #endif
    387 }
    388 
    389 static inline size_t core_cmp_impls__core__cmp__Ord_for_usize__min(size_t a,
    390                                                                    size_t b) {
    391   if (a <= b)
    392     return a;
    393   else
    394     return b;
    395 }
    396 
    397 // unsigned overflow wraparound semantics in C
    398 static inline uint8_t core_num__u8__wrapping_sub(uint8_t x, uint8_t y) {
    399   return x - y;
    400 }
    401 static inline uint8_t core_num__u8__wrapping_add(uint8_t x, uint8_t y) {
    402   return x + y;
    403 }
    404 static inline uint8_t core_num__u8__wrapping_mul(uint8_t x, uint8_t y) {
    405   return x * y;
    406 }
    407 static inline uint16_t core_num__u16__wrapping_sub(uint16_t x, uint16_t y) {
    408   return x - y;
    409 }
    410 static inline uint16_t core_num__u16__wrapping_add(uint16_t x, uint16_t y) {
    411   return x + y;
    412 }
    413 static inline uint16_t core_num__u16__wrapping_mul(uint16_t x, uint16_t y) {
    414   return x * y;
    415 }
    416 static inline uint32_t core_num__u32__wrapping_sub(uint32_t x, uint32_t y) {
    417   return x - y;
    418 }
    419 static inline uint32_t core_num__u32__wrapping_add(uint32_t x, uint32_t y) {
    420   return x + y;
    421 }
    422 static inline uint32_t core_num__u32__wrapping_mul(uint32_t x, uint32_t y) {
    423   return x * y;
    424 }
    425 static inline uint64_t core_num__u64__wrapping_sub(uint64_t x, uint64_t y) {
    426   return x - y;
    427 }
    428 static inline uint64_t core_num__u64__wrapping_add(uint64_t x, uint64_t y) {
    429   return x + y;
    430 }
    431 static inline uint64_t core_num__u64__wrapping_mul(uint64_t x, uint64_t y) {
    432   return x * y;
    433 }
    434 static inline size_t core_num__usize__wrapping_sub(size_t x, size_t y) {
    435   return x - y;
    436 }
    437 static inline size_t core_num__usize__wrapping_add(size_t x, size_t y) {
    438   return x + y;
    439 }
    440 static inline size_t core_num__usize__wrapping_mul(size_t x, size_t y) {
    441   return x * y;
    442 }
    443 
    444 static inline int8_t core_num__i8__wrapping_add(int8_t x, int8_t y) {
    445   return (int8_t)((uint8_t)x + (uint8_t)y);
    446 }
    447 static inline int8_t core_num__i8__wrapping_sub(int8_t x, int8_t y) {
    448   return (int8_t)((uint8_t)x - (uint8_t)y);
    449 }
    450 static inline int8_t core_num__i8__wrapping_mul(int8_t x, int8_t y) {
    451   return (int8_t)((uint8_t)x * (uint8_t)y);
    452 }
    453 static inline int16_t core_num__i16__wrapping_add(int16_t x, int16_t y) {
    454   return (int16_t)((uint16_t)x + (uint16_t)y);
    455 }
    456 static inline int16_t core_num__i16__wrapping_sub(int16_t x, int16_t y) {
    457   return (int16_t)((uint16_t)x - (uint16_t)y);
    458 }
    459 static inline int16_t core_num__i16__wrapping_mul(int16_t x, int16_t y) {
    460   return (int16_t)((uint16_t)x * (uint16_t)y);
    461 }
    462 static inline int32_t core_num__i32__wrapping_add(int32_t x, int32_t y) {
    463   return (int32_t)((uint32_t)x + (uint32_t)y);
    464 }
    465 static inline int32_t core_num__i32__wrapping_sub(int32_t x, int32_t y) {
    466   return (int32_t)((uint32_t)x - (uint32_t)y);
    467 }
    468 static inline int32_t core_num__i32__wrapping_mul(int32_t x, int32_t y) {
    469   return (int32_t)((uint32_t)x * (uint32_t)y);
    470 }
    471 static inline int64_t core_num__i64__wrapping_add(int64_t x, int64_t y) {
    472   return (int64_t)((uint64_t)x + (uint64_t)y);
    473 }
    474 static inline int64_t core_num__i64__wrapping_sub(int64_t x, int64_t y) {
    475   return (int64_t)((uint64_t)x - (uint64_t)y);
    476 }
    477 static inline int64_t core_num__i64__wrapping_mul(int64_t x, int64_t y) {
    478   return (int64_t)((uint64_t)x * (uint64_t)y);
    479 }
    480 static inline int8_t core_num__i8__wrapping_neg(int8_t x) {
    481   return (int8_t)(-(uint8_t)x);
    482 }
    483 static inline int16_t core_num__i16__wrapping_neg(int16_t x) {
    484   return (int16_t)(-(uint16_t)x);
    485 }
    486 static inline int32_t core_num__i32__wrapping_neg(int32_t x) {
    487   return (int32_t)(-(uint32_t)x);
    488 }
    489 static inline int64_t core_num__i64__wrapping_neg(int64_t x) {
    490   return (int64_t)(-(uint64_t)x);
    491 }
    492 
    493 static inline uint64_t core_num__u64__rotate_left(uint64_t x0, uint32_t x1) {
    494   return (x0 << x1) | (x0 >> ((-x1) & 63));
    495 }
    496 
    497 static inline void core_ops_arith__i32__add_assign(int32_t *x0, int32_t *x1) {
    498   *x0 = *x0 + *x1;
    499 }
    500 
    501 static inline uint8_t Eurydice_bitand_pv_u8(const uint8_t *p, uint8_t v) {
    502   return (*p) & v;
    503 }
    504 static inline uint8_t Eurydice_shr_pv_u8(const uint8_t *p, int32_t v) {
    505   return (*p) >> v;
    506 }
    507 static inline uint32_t Eurydice_min_u32(uint32_t x, uint32_t y) {
    508   return x < y ? x : y;
    509 }
    510 
    511 static inline uint8_t
    512 core_ops_bit__core__ops__bit__BitAnd_u8__u8__for__0__u8___bitand(
    513     const uint8_t *x0, uint8_t x1) {
    514   return Eurydice_bitand_pv_u8(x0, x1);
    515 }
    516 
    517 static inline uint8_t
    518 core_ops_bit__core__ops__bit__Shr_i32__u8__for__0__u8___shr(const uint8_t *x0,
    519                                                             int32_t x1) {
    520   return Eurydice_shr_pv_u8(x0, x1);
    521 }
    522 
    523 #define core_num_nonzero_private_NonZeroUsizeInner size_t
    524 static inline core_num_nonzero_private_NonZeroUsizeInner
    525 core_num_nonzero_private___core__clone__Clone_for_core__num__nonzero__private__NonZeroUsizeInner___clone(
    526     core_num_nonzero_private_NonZeroUsizeInner *x0) {
    527   return *x0;
    528 }
    529 
    530 #if defined(__cplusplus) && !defined(KRML_CXX17_COMPAT)
    531 }
    532 #endif
    533 
    534 // ITERATORS
    535 
    536 #define Eurydice_range_iter_next(iter_ptr, t, ret_t)      \
    537   (((iter_ptr)->start >= (iter_ptr)->end)                 \
    538        ? (KRML_CLITERAL(ret_t){EURYDICE_CFIELD(.tag =) 0, \
    539                                EURYDICE_CFIELD(.f0 =) 0}) \
    540        : (KRML_CLITERAL(ret_t){EURYDICE_CFIELD(.tag =) 1, \
    541                                EURYDICE_CFIELD(.f0 =)(iter_ptr)->start++}))
    542 
    543 #define core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next \
    544   Eurydice_range_iter_next
    545 
    546 // See note in karamel/lib/Inlining.ml if you change this
    547 #define Eurydice_into_iter(x, t, _ret_t, _) (x)
    548 #define core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter \
    549   Eurydice_into_iter
    550 
    551 // STRINGS
    552 
    553 typedef char Eurydice_c_char_t;
    554 typedef const Eurydice_c_char_t *Prims_string;
    555 typedef void Eurydice_c_void_t;
    556 
    557 // UNSAFE CODE
    558 
    559 #define core_slice___Slice_T___as_mut_ptr(x, t, _) (x.ptr)
    560 #define core_mem_size_of(t, _) (sizeof(t))
    561 #define core_slice_raw_from_raw_parts_mut(ptr, len, _0, _1) \
    562   (KRML_CLITERAL(Eurydice_slice){(void *)(ptr), len})
    563 #define core_slice_raw_from_raw_parts(ptr, len, _0, _1) \
    564   (KRML_CLITERAL(Eurydice_slice){(void *)(ptr), len})
    565 
    566 // FIXME: add dedicated extraction to extract NonNull<T> as T*
    567 #define core_ptr_non_null_NonNull void *
    568 
    569 // PRINTING
    570 //
    571 // This is temporary. Ultimately we want to be able to extract all of this.
    572 
    573 typedef void *core_fmt_Formatter;
    574 #define core_fmt_rt__core__fmt__rt__Argument__a___new_display(x1, x2, x3, x4) \
    575   NULL
    576 
    577 // BOXES
    578 
    579 #ifndef EURYDICE_MALLOC
    580 #define EURYDICE_MALLOC malloc
    581 #endif
    582 
    583 #ifndef EURYDICE_REALLOC
    584 #define EURYDICE_REALLOC realloc
    585 #endif
    586 
    587 static inline char *malloc_and_init(size_t sz, char *init) {
    588   char *ptr = (char *)EURYDICE_MALLOC(sz);
    589   if (ptr != NULL) memcpy(ptr, init, sz);
    590   return ptr;
    591 }
    592 
    593 #define Eurydice_box_new(init, t, t_dst) \
    594   ((t_dst)(malloc_and_init(sizeof(t), (char *)(&init))))
    595 
    596 // Initializer for array of size zero
    597 #define Eurydice_empty_array(dummy, t, t_dst) ((t_dst){.data = {}})
    598 
    599 #define Eurydice_box_new_array(len, ptr, t, t_dst) \
    600   ((t_dst)(malloc_and_init(len * sizeof(t), (char *)(ptr))))
    601 
    602 // FIXME this needs to handle allocation failure errors, but this seems hard to
    603 // do without evaluating malloc_and_init twice...
    604 #define alloc_boxed__alloc__boxed__Box_T___try_new(init, t, t_ret) \
    605   ((t_ret){.tag = core_result_Ok,                                  \
    606            .f0 = (t *)malloc_and_init(sizeof(t), (char *)(&init))})
    607 
    608 // OPTIONS
    609 
    610 #define core_option__core__option__Option_T__TraitClause_0___is_some( \
    611     x, _of_type, _)                                                   \
    612   x->tag
    613 
    614 /* from libcrux/combined_extraction/generated/combined_core.h */
    615 /*
    616  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
    617  *
    618  * SPDX-License-Identifier: MIT or Apache-2.0
    619  *
    620  * This code was generated with the following revisions:
    621  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
    622  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
    623  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
    624  * F*: unset
    625  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
    626  */
    627 
    628 
    629 #ifndef combined_core_H
    630 #define combined_core_H
    631 
    632 
    633 
    634 #if defined(__cplusplus)
    635 extern "C" {
    636 #endif
    637 
    638 static inline uint32_t core_num__i32__count_ones(int32_t x0);
    639 
    640 static inline uint16_t core_num__u16__wrapping_add(uint16_t x0, uint16_t x1);
    641 
    642 static inline uint64_t core_num__u64__from_le_bytes(Eurydice_array_u8x8 x0);
    643 
    644 static inline uint64_t core_num__u64__rotate_left(uint64_t x0, uint32_t x1);
    645 
    646 static inline Eurydice_array_u8x8 core_num__u64__to_le_bytes(uint64_t x0);
    647 
    648 static inline uint32_t core_num__u8__count_ones(uint8_t x0);
    649 
    650 static inline uint8_t core_num__u8__wrapping_sub(uint8_t x0, uint8_t x1);
    651 
    652 static inline uint8_t
    653 core_ops_bit__core__ops__bit__BitAnd_u8__u8__for__0__u8___bitand(const uint8_t *x0, uint8_t x1);
    654 
    655 static inline uint8_t
    656 core_ops_bit__core__ops__bit__Shr_i32__u8__for__0__u8___shr(const uint8_t *x0, int32_t x1);
    657 
    658 /**
    659 A monomorphic instance of core.ops.range.Range
    660 with types size_t
    661 
    662 */
    663 typedef struct core_ops_range_Range_87_s
    664 {
    665   size_t start;
    666   size_t end;
    667 }
    668 core_ops_range_Range_87;
    669 
    670 /**
    671 A monomorphic instance of Eurydice.slice_subslice_mut
    672 with types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t
    673 
    674 */
    675 static inline Eurydice_mut_borrow_slice_i16
    676 Eurydice_slice_subslice_mut_a6(Eurydice_mut_borrow_slice_i16 s, core_ops_range_Range_87 r)
    677 {
    678   return
    679     (
    680       KRML_CLITERAL(Eurydice_mut_borrow_slice_i16){
    681         .ptr = s.ptr + r.start,
    682         .meta = r.end - r.start
    683       }
    684     );
    685 }
    686 
    687 /**
    688 A monomorphic instance of Eurydice.arr
    689 with types uint8_t
    690 with const generics
    691 - $16size_t
    692 */
    693 typedef struct Eurydice_arr_b2_s { uint8_t data[16U]; } Eurydice_arr_b2;
    694 
    695 /**
    696 A monomorphic instance of Eurydice.arr
    697 with types Eurydice_arr_b2
    698 with const generics
    699 - $256size_t
    700 */
    701 typedef struct Eurydice_arr_87_s { Eurydice_arr_b2 data[256U]; } Eurydice_arr_87;
    702 
    703 /**
    704 A monomorphic instance of Eurydice.arr
    705 with types uint8_t
    706 with const generics
    707 - $24size_t
    708 */
    709 typedef struct Eurydice_arr_94_s { uint8_t data[24U]; } Eurydice_arr_94;
    710 
    711 #define core_result_Ok 0
    712 #define core_result_Err 1
    713 
    714 typedef uint8_t core_result_Result_57_tags;
    715 
    716 /**
    717 A monomorphic instance of core.result.Result
    718 with types Eurydice_arr_94, core_array_TryFromSliceError
    719 
    720 */
    721 typedef struct core_result_Result_57_s
    722 {
    723   core_result_Result_57_tags tag;
    724   union {
    725     Eurydice_arr_94 case_Ok;
    726     core_array_TryFromSliceError case_Err;
    727   }
    728   val;
    729 }
    730 core_result_Result_57;
    731 
    732 /**
    733 This function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}
    734 */
    735 /**
    736 A monomorphic instance of core.result.unwrap_26
    737 with types Eurydice_arr uint8_t[[$24size_t]], core_array_TryFromSliceError
    738 
    739 */
    740 static inline Eurydice_arr_94 core_result_unwrap_26_78(core_result_Result_57 self)
    741 {
    742   if (self.tag == core_result_Ok)
    743   {
    744     return self.val.case_Ok;
    745   }
    746   else
    747   {
    748     KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "unwrap not Ok");
    749     KRML_HOST_EXIT(255U);
    750   }
    751 }
    752 
    753 /**
    754 A monomorphic instance of Eurydice.arr
    755 with types int16_t
    756 with const generics
    757 - $16size_t
    758 */
    759 typedef struct Eurydice_arr_d6_s { int16_t data[16U]; } Eurydice_arr_d6;
    760 
    761 /**
    762 A monomorphic instance of Eurydice.arr
    763 with types uint8_t
    764 with const generics
    765 - $20size_t
    766 */
    767 typedef struct Eurydice_arr_fc_s { uint8_t data[20U]; } Eurydice_arr_fc;
    768 
    769 /**
    770 A monomorphic instance of core.result.Result
    771 with types Eurydice_arr_fc, core_array_TryFromSliceError
    772 
    773 */
    774 typedef struct core_result_Result_83_s
    775 {
    776   core_result_Result_57_tags tag;
    777   union {
    778     Eurydice_arr_fc case_Ok;
    779     core_array_TryFromSliceError case_Err;
    780   }
    781   val;
    782 }
    783 core_result_Result_83;
    784 
    785 /**
    786 This function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}
    787 */
    788 /**
    789 A monomorphic instance of core.result.unwrap_26
    790 with types Eurydice_arr uint8_t[[$20size_t]], core_array_TryFromSliceError
    791 
    792 */
    793 static inline Eurydice_arr_fc core_result_unwrap_26_7d(core_result_Result_83 self)
    794 {
    795   if (self.tag == core_result_Ok)
    796   {
    797     return self.val.case_Ok;
    798   }
    799   else
    800   {
    801     KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "unwrap not Ok");
    802     KRML_HOST_EXIT(255U);
    803   }
    804 }
    805 
    806 /**
    807 A monomorphic instance of Eurydice.arr
    808 with types uint8_t
    809 with const generics
    810 - $1184size_t
    811 */
    812 typedef struct Eurydice_arr_5f_s { uint8_t data[1184U]; } Eurydice_arr_5f;
    813 
    814 /**
    815 A monomorphic instance of Eurydice.array_to_subslice_from_shared
    816 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
    817 with const generics
    818 - N= 1184
    819 */
    820 static inline Eurydice_borrow_slice_u8
    821 Eurydice_array_to_subslice_from_shared_5f2(const Eurydice_arr_5f *a, size_t r)
    822 {
    823   return
    824     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1184U - r });
    825 }
    826 
    827 /**
    828 A monomorphic instance of Eurydice.array_to_subslice_to_shared
    829 with types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t
    830 with const generics
    831 - N= 1184
    832 */
    833 static inline Eurydice_borrow_slice_u8
    834 Eurydice_array_to_subslice_to_shared_210(const Eurydice_arr_5f *a, size_t r)
    835 {
    836   Eurydice_borrow_slice_u8 lit;
    837   lit.ptr = a->data;
    838   lit.meta = r;
    839   return lit;
    840 }
    841 
    842 /**
    843 A monomorphic instance of Eurydice.arr
    844 with types uint8_t
    845 with const generics
    846 - $2400size_t
    847 */
    848 typedef struct Eurydice_arr_7d_s { uint8_t data[2400U]; } Eurydice_arr_7d;
    849 
    850 /**
    851 A monomorphic instance of Eurydice.array_to_subslice_shared
    852 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
    853 with const generics
    854 - N= 2400
    855 */
    856 static inline Eurydice_borrow_slice_u8
    857 Eurydice_array_to_subslice_shared_d48(const Eurydice_arr_7d *a, core_ops_range_Range_87 r)
    858 {
    859   return
    860     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
    861 }
    862 
    863 /**
    864 A monomorphic instance of Eurydice.arr
    865 with types uint8_t
    866 with const generics
    867 - $1152size_t
    868 */
    869 typedef struct Eurydice_arr_0e_s { uint8_t data[1152U]; } Eurydice_arr_0e;
    870 
    871 /**
    872 A monomorphic instance of Eurydice.array_to_slice_shared
    873 with types uint8_t
    874 with const generics
    875 - N= 1152
    876 */
    877 static inline Eurydice_borrow_slice_u8
    878 Eurydice_array_to_slice_shared_f4(const Eurydice_arr_0e *a)
    879 {
    880   Eurydice_borrow_slice_u8 lit;
    881   lit.ptr = a->data;
    882   lit.meta = (size_t)1152U;
    883   return lit;
    884 }
    885 
    886 /**
    887 A monomorphic instance of Eurydice.array_to_subslice_mut
    888 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
    889 with const generics
    890 - N= 2400
    891 */
    892 static inline Eurydice_mut_borrow_slice_u8
    893 Eurydice_array_to_subslice_mut_d417(Eurydice_arr_7d *a, core_ops_range_Range_87 r)
    894 {
    895   return
    896     (
    897       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
    898         .ptr = a->data + r.start,
    899         .meta = r.end - r.start
    900       }
    901     );
    902 }
    903 
    904 /**
    905 A monomorphic instance of Eurydice.array_to_slice_mut
    906 with types uint8_t
    907 with const generics
    908 - N= 1152
    909 */
    910 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f4(Eurydice_arr_0e *a)
    911 {
    912   Eurydice_mut_borrow_slice_u8 lit;
    913   lit.ptr = a->data;
    914   lit.meta = (size_t)1152U;
    915   return lit;
    916 }
    917 
    918 /**
    919 A monomorphic instance of Eurydice.array_to_subslice_from_mut
    920 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
    921 with const generics
    922 - N= 1184
    923 */
    924 static inline Eurydice_mut_borrow_slice_u8
    925 Eurydice_array_to_subslice_from_mut_5f4(Eurydice_arr_5f *a, size_t r)
    926 {
    927   return
    928     (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1184U - r });
    929 }
    930 
    931 /**
    932 A monomorphic instance of Eurydice.array_to_subslice_mut
    933 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
    934 with const generics
    935 - N= 1184
    936 */
    937 static inline Eurydice_mut_borrow_slice_u8
    938 Eurydice_array_to_subslice_mut_d416(Eurydice_arr_5f *a, core_ops_range_Range_87 r)
    939 {
    940   return
    941     (
    942       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
    943         .ptr = a->data + r.start,
    944         .meta = r.end - r.start
    945       }
    946     );
    947 }
    948 
    949 /**
    950 A monomorphic instance of Eurydice.array_to_slice_shared
    951 with types uint8_t
    952 with const generics
    953 - N= 24
    954 */
    955 static inline Eurydice_borrow_slice_u8
    956 Eurydice_array_to_slice_shared_ed(const Eurydice_arr_94 *a)
    957 {
    958   Eurydice_borrow_slice_u8 lit;
    959   lit.ptr = a->data;
    960   lit.meta = (size_t)24U;
    961   return lit;
    962 }
    963 
    964 /**
    965 A monomorphic instance of Eurydice.arr
    966 with types uint8_t
    967 with const generics
    968 - $384size_t
    969 */
    970 typedef struct Eurydice_arr_b20_s { uint8_t data[384U]; } Eurydice_arr_b20;
    971 
    972 /**
    973 A monomorphic instance of Eurydice.array_to_subslice_mut
    974 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
    975 with const generics
    976 - N= 384
    977 */
    978 static inline Eurydice_mut_borrow_slice_u8
    979 Eurydice_array_to_subslice_mut_d415(Eurydice_arr_b20 *a, core_ops_range_Range_87 r)
    980 {
    981   return
    982     (
    983       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
    984         .ptr = a->data + r.start,
    985         .meta = r.end - r.start
    986       }
    987     );
    988 }
    989 
    990 /**
    991 A monomorphic instance of Eurydice.array_to_slice_shared
    992 with types uint8_t
    993 with const generics
    994 - N= 384
    995 */
    996 static inline Eurydice_borrow_slice_u8
    997 Eurydice_array_to_slice_shared_a9(const Eurydice_arr_b20 *a)
    998 {
    999   Eurydice_borrow_slice_u8 lit;
   1000   lit.ptr = a->data;
   1001   lit.meta = (size_t)384U;
   1002   return lit;
   1003 }
   1004 
   1005 /**
   1006 A monomorphic instance of Eurydice.arr
   1007 with types uint8_t
   1008 with const generics
   1009 - $32size_t
   1010 */
   1011 typedef struct Eurydice_arr_ec_s { uint8_t data[32U]; } Eurydice_arr_ec;
   1012 
   1013 /**
   1014 A monomorphic instance of core.result.Result
   1015 with types Eurydice_arr_ec, core_array_TryFromSliceError
   1016 
   1017 */
   1018 typedef struct core_result_Result_07_s
   1019 {
   1020   core_result_Result_57_tags tag;
   1021   union {
   1022     Eurydice_arr_ec case_Ok;
   1023     core_array_TryFromSliceError case_Err;
   1024   }
   1025   val;
   1026 }
   1027 core_result_Result_07;
   1028 
   1029 /**
   1030 This function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}
   1031 */
   1032 /**
   1033 A monomorphic instance of core.result.unwrap_26
   1034 with types Eurydice_arr uint8_t[[$32size_t]], core_array_TryFromSliceError
   1035 
   1036 */
   1037 static inline Eurydice_arr_ec core_result_unwrap_26_39(core_result_Result_07 self)
   1038 {
   1039   if (self.tag == core_result_Ok)
   1040   {
   1041     return self.val.case_Ok;
   1042   }
   1043   else
   1044   {
   1045     KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "unwrap not Ok");
   1046     KRML_HOST_EXIT(255U);
   1047   }
   1048 }
   1049 
   1050 /**
   1051 A monomorphic instance of Eurydice.arr
   1052 with types uint8_t
   1053 with const generics
   1054 - $64size_t
   1055 */
   1056 typedef struct Eurydice_arr_c7_s { uint8_t data[64U]; } Eurydice_arr_c7;
   1057 
   1058 /**
   1059 A monomorphic instance of Eurydice.array_to_subslice_from_shared
   1060 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   1061 with const generics
   1062 - N= 64
   1063 */
   1064 static inline Eurydice_borrow_slice_u8
   1065 Eurydice_array_to_subslice_from_shared_5f1(const Eurydice_arr_c7 *a, size_t r)
   1066 {
   1067   return
   1068     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)64U - r });
   1069 }
   1070 
   1071 /**
   1072 A monomorphic instance of Eurydice.array_to_subslice_shared
   1073 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1074 with const generics
   1075 - N= 64
   1076 */
   1077 static inline Eurydice_borrow_slice_u8
   1078 Eurydice_array_to_subslice_shared_d47(const Eurydice_arr_c7 *a, core_ops_range_Range_87 r)
   1079 {
   1080   return
   1081     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1082 }
   1083 
   1084 /**
   1085 A monomorphic instance of Eurydice.array_to_slice_shared
   1086 with types uint8_t
   1087 with const generics
   1088 - N= 1184
   1089 */
   1090 static inline Eurydice_borrow_slice_u8
   1091 Eurydice_array_to_slice_shared_ff(const Eurydice_arr_5f *a)
   1092 {
   1093   Eurydice_borrow_slice_u8 lit;
   1094   lit.ptr = a->data;
   1095   lit.meta = (size_t)1184U;
   1096   return lit;
   1097 }
   1098 
   1099 /**
   1100 A monomorphic instance of Eurydice.arr
   1101 with types uint8_t
   1102 with const generics
   1103 - $1088size_t
   1104 */
   1105 typedef struct Eurydice_arr_2b_s { uint8_t data[1088U]; } Eurydice_arr_2b;
   1106 
   1107 /**
   1108 A monomorphic instance of Eurydice.array_to_subslice_from_mut
   1109 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   1110 with const generics
   1111 - N= 1088
   1112 */
   1113 static inline Eurydice_mut_borrow_slice_u8
   1114 Eurydice_array_to_subslice_from_mut_5f3(Eurydice_arr_2b *a, size_t r)
   1115 {
   1116   return
   1117     (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1088U - r });
   1118 }
   1119 
   1120 /**
   1121 A monomorphic instance of Eurydice.array_to_subslice_mut
   1122 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1123 with const generics
   1124 - N= 1088
   1125 */
   1126 static inline Eurydice_mut_borrow_slice_u8
   1127 Eurydice_array_to_subslice_mut_d414(Eurydice_arr_2b *a, core_ops_range_Range_87 r)
   1128 {
   1129   return
   1130     (
   1131       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1132         .ptr = a->data + r.start,
   1133         .meta = r.end - r.start
   1134       }
   1135     );
   1136 }
   1137 
   1138 /**
   1139 A monomorphic instance of Eurydice.array_to_slice_shared
   1140 with types uint8_t
   1141 with const generics
   1142 - N= 20
   1143 */
   1144 static inline Eurydice_borrow_slice_u8
   1145 Eurydice_array_to_slice_shared_8f(const Eurydice_arr_fc *a)
   1146 {
   1147   Eurydice_borrow_slice_u8 lit;
   1148   lit.ptr = a->data;
   1149   lit.meta = (size_t)20U;
   1150   return lit;
   1151 }
   1152 
   1153 /**
   1154 A monomorphic instance of Eurydice.arr
   1155 with types uint8_t
   1156 with const generics
   1157 - $320size_t
   1158 */
   1159 typedef struct Eurydice_arr_b0_s { uint8_t data[320U]; } Eurydice_arr_b0;
   1160 
   1161 /**
   1162 A monomorphic instance of Eurydice.array_to_subslice_mut
   1163 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1164 with const generics
   1165 - N= 320
   1166 */
   1167 static inline Eurydice_mut_borrow_slice_u8
   1168 Eurydice_array_to_subslice_mut_d413(Eurydice_arr_b0 *a, core_ops_range_Range_87 r)
   1169 {
   1170   return
   1171     (
   1172       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1173         .ptr = a->data + r.start,
   1174         .meta = r.end - r.start
   1175       }
   1176     );
   1177 }
   1178 
   1179 /**
   1180 A monomorphic instance of Eurydice.array_to_slice_shared
   1181 with types uint8_t
   1182 with const generics
   1183 - N= 320
   1184 */
   1185 static inline Eurydice_borrow_slice_u8
   1186 Eurydice_array_to_slice_shared_56(const Eurydice_arr_b0 *a)
   1187 {
   1188   Eurydice_borrow_slice_u8 lit;
   1189   lit.ptr = a->data;
   1190   lit.meta = (size_t)320U;
   1191   return lit;
   1192 }
   1193 
   1194 /**
   1195 A monomorphic instance of Eurydice.arr
   1196 with types int16_t
   1197 with const generics
   1198 - $256size_t
   1199 */
   1200 typedef struct Eurydice_arr_04_s { int16_t data[256U]; } Eurydice_arr_04;
   1201 
   1202 /**
   1203 A monomorphic instance of Eurydice.array_to_slice_shared
   1204 with types int16_t
   1205 with const generics
   1206 - N= 256
   1207 */
   1208 static inline Eurydice_borrow_slice_i16
   1209 Eurydice_array_to_slice_shared_99(const Eurydice_arr_04 *a)
   1210 {
   1211   Eurydice_borrow_slice_i16 lit;
   1212   lit.ptr = a->data;
   1213   lit.meta = (size_t)256U;
   1214   return lit;
   1215 }
   1216 
   1217 /**
   1218 A monomorphic instance of Eurydice.arr
   1219 with types uint8_t
   1220 with const generics
   1221 - $128size_t
   1222 */
   1223 typedef struct Eurydice_arr_89_s { uint8_t data[128U]; } Eurydice_arr_89;
   1224 
   1225 /**
   1226 A monomorphic instance of Eurydice.arr
   1227 with types Eurydice_arr_89
   1228 with const generics
   1229 - $3size_t
   1230 */
   1231 typedef struct Eurydice_arr_58_s { Eurydice_arr_89 data[3U]; } Eurydice_arr_58;
   1232 
   1233 /**
   1234 A monomorphic instance of Eurydice.arr
   1235 with types uint8_t
   1236 with const generics
   1237 - $33size_t
   1238 */
   1239 typedef struct Eurydice_arr_fa0_s { uint8_t data[33U]; } Eurydice_arr_fa0;
   1240 
   1241 /**
   1242 A monomorphic instance of Eurydice.array_to_slice_shared
   1243 with types uint8_t
   1244 with const generics
   1245 - N= 33
   1246 */
   1247 static inline Eurydice_borrow_slice_u8
   1248 Eurydice_array_to_slice_shared_b5(const Eurydice_arr_fa0 *a)
   1249 {
   1250   Eurydice_borrow_slice_u8 lit;
   1251   lit.ptr = a->data;
   1252   lit.meta = (size_t)33U;
   1253   return lit;
   1254 }
   1255 
   1256 /**
   1257 A monomorphic instance of Eurydice.arr
   1258 with types Eurydice_arr_fa0
   1259 with const generics
   1260 - $3size_t
   1261 */
   1262 typedef struct Eurydice_arr_fd_s { Eurydice_arr_fa0 data[3U]; } Eurydice_arr_fd;
   1263 
   1264 /**
   1265 A monomorphic instance of Eurydice.array_to_subslice_mut
   1266 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1267 with const generics
   1268 - N= 33
   1269 */
   1270 static inline Eurydice_mut_borrow_slice_u8
   1271 Eurydice_array_to_subslice_mut_d412(Eurydice_arr_fa0 *a, core_ops_range_Range_87 r)
   1272 {
   1273   return
   1274     (
   1275       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1276         .ptr = a->data + r.start,
   1277         .meta = r.end - r.start
   1278       }
   1279     );
   1280 }
   1281 
   1282 /**
   1283 A monomorphic instance of Eurydice.arr
   1284 with types int16_t
   1285 with const generics
   1286 - $272size_t
   1287 */
   1288 typedef struct Eurydice_arr_5b_s { int16_t data[272U]; } Eurydice_arr_5b;
   1289 
   1290 /**
   1291 A monomorphic instance of Eurydice.array_to_subslice_shared
   1292 with types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t
   1293 with const generics
   1294 - N= 272
   1295 */
   1296 static inline Eurydice_borrow_slice_i16
   1297 Eurydice_array_to_subslice_shared_e70(const Eurydice_arr_5b *a, core_ops_range_Range_87 r)
   1298 {
   1299   return
   1300     (KRML_CLITERAL(Eurydice_borrow_slice_i16){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1301 }
   1302 
   1303 /**
   1304 A monomorphic instance of Eurydice.arr
   1305 with types uint8_t
   1306 with const generics
   1307 - $168size_t
   1308 */
   1309 typedef struct Eurydice_arr_c5_s { uint8_t data[168U]; } Eurydice_arr_c5;
   1310 
   1311 /**
   1312 A monomorphic instance of Eurydice.array_to_subslice_shared
   1313 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1314 with const generics
   1315 - N= 168
   1316 */
   1317 static inline Eurydice_borrow_slice_u8
   1318 Eurydice_array_to_subslice_shared_d46(const Eurydice_arr_c5 *a, core_ops_range_Range_87 r)
   1319 {
   1320   return
   1321     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1322 }
   1323 
   1324 /**
   1325 A monomorphic instance of Eurydice.arr
   1326 with types Eurydice_arr_c5
   1327 with const generics
   1328 - $3size_t
   1329 */
   1330 typedef struct Eurydice_arr_2c_s { Eurydice_arr_c5 data[3U]; } Eurydice_arr_2c;
   1331 
   1332 /**
   1333 A monomorphic instance of Eurydice.arr
   1334 with types Eurydice_arr_5b
   1335 with const generics
   1336 - $3size_t
   1337 */
   1338 typedef struct Eurydice_arr_b1_s { Eurydice_arr_5b data[3U]; } Eurydice_arr_b1;
   1339 
   1340 /**
   1341 A monomorphic instance of Eurydice.arr
   1342 with types size_t
   1343 with const generics
   1344 - $3size_t
   1345 */
   1346 typedef struct Eurydice_arr_eb_s { size_t data[3U]; } Eurydice_arr_eb;
   1347 
   1348 /**
   1349 A monomorphic instance of Eurydice.array_to_subslice_mut
   1350 with types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t
   1351 with const generics
   1352 - N= 272
   1353 */
   1354 static inline Eurydice_mut_borrow_slice_i16
   1355 Eurydice_array_to_subslice_mut_e7(Eurydice_arr_5b *a, core_ops_range_Range_87 r)
   1356 {
   1357   return
   1358     (
   1359       KRML_CLITERAL(Eurydice_mut_borrow_slice_i16){
   1360         .ptr = a->data + r.start,
   1361         .meta = r.end - r.start
   1362       }
   1363     );
   1364 }
   1365 
   1366 /**
   1367 A monomorphic instance of Eurydice.arr
   1368 with types uint8_t
   1369 with const generics
   1370 - $504size_t
   1371 */
   1372 typedef struct Eurydice_arr_79_s { uint8_t data[504U]; } Eurydice_arr_79;
   1373 
   1374 /**
   1375 A monomorphic instance of Eurydice.array_to_subslice_shared
   1376 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1377 with const generics
   1378 - N= 504
   1379 */
   1380 static inline Eurydice_borrow_slice_u8
   1381 Eurydice_array_to_subslice_shared_d45(const Eurydice_arr_79 *a, core_ops_range_Range_87 r)
   1382 {
   1383   return
   1384     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1385 }
   1386 
   1387 /**
   1388 A monomorphic instance of Eurydice.arr
   1389 with types Eurydice_arr_79
   1390 with const generics
   1391 - $3size_t
   1392 */
   1393 typedef struct Eurydice_arr_7e_s { Eurydice_arr_79 data[3U]; } Eurydice_arr_7e;
   1394 
   1395 /**
   1396 A monomorphic instance of Eurydice.array_to_slice_mut
   1397 with types uint8_t
   1398 with const generics
   1399 - N= 504
   1400 */
   1401 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_48(Eurydice_arr_79 *a)
   1402 {
   1403   Eurydice_mut_borrow_slice_u8 lit;
   1404   lit.ptr = a->data;
   1405   lit.meta = (size_t)504U;
   1406   return lit;
   1407 }
   1408 
   1409 /**
   1410 A monomorphic instance of Eurydice.arr
   1411 with types uint8_t
   1412 with const generics
   1413 - $34size_t
   1414 */
   1415 typedef struct Eurydice_arr_31_s { uint8_t data[34U]; } Eurydice_arr_31;
   1416 
   1417 /**
   1418 A monomorphic instance of Eurydice.arr
   1419 with types Eurydice_arr_31
   1420 with const generics
   1421 - $3size_t
   1422 */
   1423 typedef struct Eurydice_arr_810_s { Eurydice_arr_31 data[3U]; } Eurydice_arr_810;
   1424 
   1425 /**
   1426 A monomorphic instance of Eurydice.slice_subslice_from_shared
   1427 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   1428 
   1429 */
   1430 static inline Eurydice_borrow_slice_u8
   1431 Eurydice_slice_subslice_from_shared_6d(Eurydice_borrow_slice_u8 s, size_t r)
   1432 {
   1433   return (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr + r, .meta = s.meta - r });
   1434 }
   1435 
   1436 /**
   1437 A monomorphic instance of Eurydice.arr
   1438 with types uint8_t
   1439 with const generics
   1440 - $1120size_t
   1441 */
   1442 typedef struct Eurydice_arr_af_s { uint8_t data[1120U]; } Eurydice_arr_af;
   1443 
   1444 /**
   1445 A monomorphic instance of Eurydice.array_to_slice_shared
   1446 with types uint8_t
   1447 with const generics
   1448 - N= 1120
   1449 */
   1450 static inline Eurydice_borrow_slice_u8
   1451 Eurydice_array_to_slice_shared_81(const Eurydice_arr_af *a)
   1452 {
   1453   Eurydice_borrow_slice_u8 lit;
   1454   lit.ptr = a->data;
   1455   lit.meta = (size_t)1120U;
   1456   return lit;
   1457 }
   1458 
   1459 /**
   1460 A monomorphic instance of Eurydice.array_to_slice_shared
   1461 with types uint8_t
   1462 with const generics
   1463 - N= 1088
   1464 */
   1465 static inline Eurydice_borrow_slice_u8
   1466 Eurydice_array_to_slice_shared_06(const Eurydice_arr_2b *a)
   1467 {
   1468   Eurydice_borrow_slice_u8 lit;
   1469   lit.ptr = a->data;
   1470   lit.meta = (size_t)1088U;
   1471   return lit;
   1472 }
   1473 
   1474 /**
   1475 A monomorphic instance of Eurydice.array_to_subslice_from_mut
   1476 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   1477 with const generics
   1478 - N= 1120
   1479 */
   1480 static inline Eurydice_mut_borrow_slice_u8
   1481 Eurydice_array_to_subslice_from_mut_5f2(Eurydice_arr_af *a, size_t r)
   1482 {
   1483   return
   1484     (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1120U - r });
   1485 }
   1486 
   1487 /**
   1488 A monomorphic instance of Eurydice.array_to_subslice_mut
   1489 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1490 with const generics
   1491 - N= 1120
   1492 */
   1493 static inline Eurydice_mut_borrow_slice_u8
   1494 Eurydice_array_to_subslice_mut_d411(Eurydice_arr_af *a, core_ops_range_Range_87 r)
   1495 {
   1496   return
   1497     (
   1498       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1499         .ptr = a->data + r.start,
   1500         .meta = r.end - r.start
   1501       }
   1502     );
   1503 }
   1504 
   1505 /**
   1506 A monomorphic instance of Eurydice.array_to_subslice_from_mut
   1507 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   1508 with const generics
   1509 - N= 64
   1510 */
   1511 static inline Eurydice_mut_borrow_slice_u8
   1512 Eurydice_array_to_subslice_from_mut_5f1(Eurydice_arr_c7 *a, size_t r)
   1513 {
   1514   return
   1515     (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)64U - r });
   1516 }
   1517 
   1518 /**
   1519 A monomorphic instance of Eurydice.array_to_subslice_mut
   1520 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1521 with const generics
   1522 - N= 64
   1523 */
   1524 static inline Eurydice_mut_borrow_slice_u8
   1525 Eurydice_array_to_subslice_mut_d410(Eurydice_arr_c7 *a, core_ops_range_Range_87 r)
   1526 {
   1527   return
   1528     (
   1529       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1530         .ptr = a->data + r.start,
   1531         .meta = r.end - r.start
   1532       }
   1533     );
   1534 }
   1535 
   1536 /**
   1537 A monomorphic instance of Eurydice.array_to_subslice_from_shared
   1538 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   1539 with const generics
   1540 - N= 1088
   1541 */
   1542 static inline Eurydice_borrow_slice_u8
   1543 Eurydice_array_to_subslice_from_shared_5f0(const Eurydice_arr_2b *a, size_t r)
   1544 {
   1545   return
   1546     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1088U - r });
   1547 }
   1548 
   1549 /**
   1550 A monomorphic instance of Eurydice.array_to_subslice_shared
   1551 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1552 with const generics
   1553 - N= 1088
   1554 */
   1555 static inline Eurydice_borrow_slice_u8
   1556 Eurydice_array_to_subslice_shared_d44(const Eurydice_arr_2b *a, core_ops_range_Range_87 r)
   1557 {
   1558   return
   1559     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1560 }
   1561 
   1562 /**
   1563 A monomorphic instance of Eurydice.array_to_slice_shared
   1564 with types uint8_t
   1565 with const generics
   1566 - N= 2400
   1567 */
   1568 static inline Eurydice_borrow_slice_u8
   1569 Eurydice_array_to_slice_shared_51(const Eurydice_arr_7d *a)
   1570 {
   1571   Eurydice_borrow_slice_u8 lit;
   1572   lit.ptr = a->data;
   1573   lit.meta = (size_t)2400U;
   1574   return lit;
   1575 }
   1576 
   1577 typedef struct int16_t_x2_s
   1578 {
   1579   int16_t fst;
   1580   int16_t snd;
   1581 }
   1582 int16_t_x2;
   1583 
   1584 /**
   1585 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   1586 */
   1587 /**
   1588 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   1589 with types Eurydice_arr uint8_t[[$24size_t]]
   1590 
   1591 */
   1592 static KRML_MUSTINLINE Eurydice_arr_94
   1593 libcrux_secrets_int_public_integers_declassify_d8_40(Eurydice_arr_94 self)
   1594 {
   1595   return self;
   1596 }
   1597 
   1598 typedef struct uint8_t_x3_s
   1599 {
   1600   uint8_t fst;
   1601   uint8_t snd;
   1602   uint8_t thd;
   1603 }
   1604 uint8_t_x3;
   1605 
   1606 /**
   1607 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   1608 */
   1609 /**
   1610 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   1611 with types Eurydice_arr uint8_t[[$20size_t]]
   1612 
   1613 */
   1614 static KRML_MUSTINLINE Eurydice_arr_fc
   1615 libcrux_secrets_int_public_integers_declassify_d8_2b(Eurydice_arr_fc self)
   1616 {
   1617   return self;
   1618 }
   1619 
   1620 typedef struct uint8_t_x5_s
   1621 {
   1622   uint8_t fst;
   1623   uint8_t snd;
   1624   uint8_t thd;
   1625   uint8_t f3;
   1626   uint8_t f4;
   1627 }
   1628 uint8_t_x5;
   1629 
   1630 /**
   1631 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   1632 */
   1633 /**
   1634 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   1635 with types Eurydice_arr uint8_t[[$8size_t]]
   1636 
   1637 */
   1638 static KRML_MUSTINLINE Eurydice_array_u8x8
   1639 libcrux_secrets_int_public_integers_declassify_d8_52(Eurydice_array_u8x8 self)
   1640 {
   1641   return self;
   1642 }
   1643 
   1644 typedef struct uint8_t_x4_s
   1645 {
   1646   uint8_t fst;
   1647   uint8_t snd;
   1648   uint8_t thd;
   1649   uint8_t f3;
   1650 }
   1651 uint8_t_x4;
   1652 
   1653 /**
   1654 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   1655 */
   1656 /**
   1657 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   1658 with types Eurydice_arr uint8_t[[$2size_t]]
   1659 
   1660 */
   1661 static KRML_MUSTINLINE Eurydice_array_u8x2
   1662 libcrux_secrets_int_public_integers_declassify_d8_75(Eurydice_array_u8x2 self)
   1663 {
   1664   return self;
   1665 }
   1666 
   1667 /**
   1668 This function found in impl {libcrux_secrets::traits::Classify<T> for T}
   1669 */
   1670 /**
   1671 A monomorphic instance of libcrux_secrets.int.public_integers.classify_27
   1672 with types Eurydice_arr int16_t[[$16size_t]]
   1673 
   1674 */
   1675 static KRML_MUSTINLINE Eurydice_arr_d6
   1676 libcrux_secrets_int_public_integers_classify_27_4b(Eurydice_arr_d6 self)
   1677 {
   1678   return self;
   1679 }
   1680 
   1681 /**
   1682 This function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}
   1683 */
   1684 /**
   1685 A monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d
   1686 with types uint8_t
   1687 
   1688 */
   1689 static KRML_MUSTINLINE Eurydice_borrow_slice_u8
   1690 libcrux_secrets_int_classify_public_classify_ref_6d_90(Eurydice_borrow_slice_u8 self)
   1691 {
   1692   return self;
   1693 }
   1694 
   1695 typedef struct int16_t_x8_s
   1696 {
   1697   int16_t fst;
   1698   int16_t snd;
   1699   int16_t thd;
   1700   int16_t f3;
   1701   int16_t f4;
   1702   int16_t f5;
   1703   int16_t f6;
   1704   int16_t f7;
   1705 }
   1706 int16_t_x8;
   1707 
   1708 /**
   1709 A monomorphic instance of Eurydice.array_to_subslice_shared
   1710 with types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t
   1711 with const generics
   1712 - N= 16
   1713 */
   1714 static inline Eurydice_borrow_slice_i16
   1715 Eurydice_array_to_subslice_shared_e7(const Eurydice_arr_d6 *a, core_ops_range_Range_87 r)
   1716 {
   1717   return
   1718     (KRML_CLITERAL(Eurydice_borrow_slice_i16){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1719 }
   1720 
   1721 /**
   1722 This function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}
   1723 */
   1724 /**
   1725 A monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d
   1726 with types int16_t
   1727 
   1728 */
   1729 static KRML_MUSTINLINE Eurydice_borrow_slice_i16
   1730 libcrux_secrets_int_classify_public_classify_ref_6d_39(Eurydice_borrow_slice_i16 self)
   1731 {
   1732   return self;
   1733 }
   1734 
   1735 /**
   1736 A monomorphic instance of Eurydice.slice_subslice_shared
   1737 with types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t
   1738 
   1739 */
   1740 static inline Eurydice_borrow_slice_i16
   1741 Eurydice_slice_subslice_shared_a6(Eurydice_borrow_slice_i16 s, core_ops_range_Range_87 r)
   1742 {
   1743   return
   1744     (KRML_CLITERAL(Eurydice_borrow_slice_i16){ .ptr = s.ptr + r.start, .meta = r.end - r.start });
   1745 }
   1746 
   1747 /**
   1748 A monomorphic instance of core.result.Result
   1749 with types Eurydice_arr_d6, core_array_TryFromSliceError
   1750 
   1751 */
   1752 typedef struct core_result_Result_ec_s
   1753 {
   1754   core_result_Result_57_tags tag;
   1755   union {
   1756     Eurydice_arr_d6 case_Ok;
   1757     core_array_TryFromSliceError case_Err;
   1758   }
   1759   val;
   1760 }
   1761 core_result_Result_ec;
   1762 
   1763 /**
   1764 This function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}
   1765 */
   1766 /**
   1767 A monomorphic instance of core.result.unwrap_26
   1768 with types Eurydice_arr int16_t[[$16size_t]], core_array_TryFromSliceError
   1769 
   1770 */
   1771 static inline Eurydice_arr_d6 core_result_unwrap_26_d3(core_result_Result_ec self)
   1772 {
   1773   if (self.tag == core_result_Ok)
   1774   {
   1775     return self.val.case_Ok;
   1776   }
   1777   else
   1778   {
   1779     KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "unwrap not Ok");
   1780     KRML_HOST_EXIT(255U);
   1781   }
   1782 }
   1783 
   1784 /**
   1785 A monomorphic instance of Eurydice.arr
   1786 with types int16_t
   1787 with const generics
   1788 - $128size_t
   1789 */
   1790 typedef struct Eurydice_arr_34_s { int16_t data[128U]; } Eurydice_arr_34;
   1791 
   1792 /**
   1793 A monomorphic instance of Eurydice.array_to_subslice_shared
   1794 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1795 with const generics
   1796 - N= 24
   1797 */
   1798 static inline Eurydice_borrow_slice_u8
   1799 Eurydice_array_to_subslice_shared_d43(const Eurydice_arr_94 *a, core_ops_range_Range_87 r)
   1800 {
   1801   return
   1802     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1803 }
   1804 
   1805 /**
   1806 A monomorphic instance of Eurydice.array_to_subslice_mut
   1807 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1808 with const generics
   1809 - N= 24
   1810 */
   1811 static inline Eurydice_mut_borrow_slice_u8
   1812 Eurydice_array_to_subslice_mut_d49(Eurydice_arr_94 *a, core_ops_range_Range_87 r)
   1813 {
   1814   return
   1815     (
   1816       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1817         .ptr = a->data + r.start,
   1818         .meta = r.end - r.start
   1819       }
   1820     );
   1821 }
   1822 
   1823 /**
   1824 A monomorphic instance of Eurydice.array_to_slice_mut
   1825 with types uint8_t
   1826 with const generics
   1827 - N= 16
   1828 */
   1829 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_29(Eurydice_arr_b2 *a)
   1830 {
   1831   Eurydice_mut_borrow_slice_u8 lit;
   1832   lit.ptr = a->data;
   1833   lit.meta = (size_t)16U;
   1834   return lit;
   1835 }
   1836 
   1837 /**
   1838 A monomorphic instance of Eurydice.array_to_subslice_shared
   1839 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1840 with const generics
   1841 - N= 16
   1842 */
   1843 static inline Eurydice_borrow_slice_u8
   1844 Eurydice_array_to_subslice_shared_d42(const Eurydice_arr_b2 *a, core_ops_range_Range_87 r)
   1845 {
   1846   return
   1847     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1848 }
   1849 
   1850 /**
   1851 A monomorphic instance of Eurydice.array_to_subslice_mut
   1852 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1853 with const generics
   1854 - N= 16
   1855 */
   1856 static inline Eurydice_mut_borrow_slice_u8
   1857 Eurydice_array_to_subslice_mut_d48(Eurydice_arr_b2 *a, core_ops_range_Range_87 r)
   1858 {
   1859   return
   1860     (
   1861       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1862         .ptr = a->data + r.start,
   1863         .meta = r.end - r.start
   1864       }
   1865     );
   1866 }
   1867 
   1868 /**
   1869 A monomorphic instance of Eurydice.arr
   1870 with types uint8_t
   1871 with const generics
   1872 - $19size_t
   1873 */
   1874 typedef struct Eurydice_arr_38_s { uint8_t data[19U]; } Eurydice_arr_38;
   1875 
   1876 /**
   1877 A monomorphic instance of Eurydice.array_to_subslice_shared
   1878 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1879 with const generics
   1880 - N= 19
   1881 */
   1882 static inline Eurydice_borrow_slice_u8
   1883 Eurydice_array_to_subslice_shared_d41(const Eurydice_arr_38 *a, core_ops_range_Range_87 r)
   1884 {
   1885   return
   1886     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   1887 }
   1888 
   1889 /**
   1890 A monomorphic instance of Eurydice.array_to_subslice_mut
   1891 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   1892 with const generics
   1893 - N= 19
   1894 */
   1895 static inline Eurydice_mut_borrow_slice_u8
   1896 Eurydice_array_to_subslice_mut_d47(Eurydice_arr_38 *a, core_ops_range_Range_87 r)
   1897 {
   1898   return
   1899     (
   1900       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   1901         .ptr = a->data + r.start,
   1902         .meta = r.end - r.start
   1903       }
   1904     );
   1905 }
   1906 
   1907 /**
   1908 A monomorphic instance of Eurydice.dst_ref_mut
   1909 with types int32_t, size_t
   1910 
   1911 */
   1912 typedef struct Eurydice_dst_ref_mut_83_s
   1913 {
   1914   int32_t *ptr;
   1915   size_t meta;
   1916 }
   1917 Eurydice_dst_ref_mut_83;
   1918 
   1919 /**
   1920 A monomorphic instance of Eurydice.slice_subslice_mut
   1921 with types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t
   1922 
   1923 */
   1924 static inline Eurydice_dst_ref_mut_83
   1925 Eurydice_slice_subslice_mut_47(Eurydice_dst_ref_mut_83 s, core_ops_range_Range_87 r)
   1926 {
   1927   return
   1928     (KRML_CLITERAL(Eurydice_dst_ref_mut_83){ .ptr = s.ptr + r.start, .meta = r.end - r.start });
   1929 }
   1930 
   1931 /**
   1932 A monomorphic instance of Eurydice.array_to_slice_shared
   1933 with types uint8_t
   1934 with const generics
   1935 - N= 16
   1936 */
   1937 static inline Eurydice_borrow_slice_u8
   1938 Eurydice_array_to_slice_shared_29(const Eurydice_arr_b2 *a)
   1939 {
   1940   Eurydice_borrow_slice_u8 lit;
   1941   lit.ptr = a->data;
   1942   lit.meta = (size_t)16U;
   1943   return lit;
   1944 }
   1945 
   1946 /**
   1947 A monomorphic instance of Eurydice.arr
   1948 with types Eurydice_arr_b2
   1949 with const generics
   1950 - $16size_t
   1951 */
   1952 typedef struct Eurydice_arr_a30_s { Eurydice_arr_b2 data[16U]; } Eurydice_arr_a30;
   1953 
   1954 /**
   1955 A monomorphic instance of Eurydice.array_to_subslice_to_mut
   1956 with types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t
   1957 with const generics
   1958 - N= 32
   1959 */
   1960 static inline Eurydice_mut_borrow_slice_u8
   1961 Eurydice_array_to_subslice_to_mut_21(Eurydice_arr_ec *a, size_t r)
   1962 {
   1963   Eurydice_mut_borrow_slice_u8 lit;
   1964   lit.ptr = a->data;
   1965   lit.meta = r;
   1966   return lit;
   1967 }
   1968 
   1969 /**
   1970 A monomorphic instance of Eurydice.arr
   1971 with types uint8_t
   1972 with const generics
   1973 - $4627size_t
   1974 */
   1975 typedef struct Eurydice_arr_93_s { uint8_t data[4627U]; } Eurydice_arr_93;
   1976 
   1977 /**
   1978 A monomorphic instance of Eurydice.array_to_slice_shared
   1979 with types uint8_t
   1980 with const generics
   1981 - N= 4627
   1982 */
   1983 static inline Eurydice_borrow_slice_u8
   1984 Eurydice_array_to_slice_shared_11(const Eurydice_arr_93 *a)
   1985 {
   1986   Eurydice_borrow_slice_u8 lit;
   1987   lit.ptr = a->data;
   1988   lit.meta = (size_t)4627U;
   1989   return lit;
   1990 }
   1991 
   1992 /**
   1993 A monomorphic instance of Eurydice.arr
   1994 with types uint8_t
   1995 with const generics
   1996 - $2592size_t
   1997 */
   1998 typedef struct Eurydice_arr_43_s { uint8_t data[2592U]; } Eurydice_arr_43;
   1999 
   2000 /**
   2001 A monomorphic instance of Eurydice.array_to_slice_shared
   2002 with types uint8_t
   2003 with const generics
   2004 - N= 2592
   2005 */
   2006 static inline Eurydice_borrow_slice_u8
   2007 Eurydice_array_to_slice_shared_fc(const Eurydice_arr_43 *a)
   2008 {
   2009   Eurydice_borrow_slice_u8 lit;
   2010   lit.ptr = a->data;
   2011   lit.meta = (size_t)2592U;
   2012   return lit;
   2013 }
   2014 
   2015 /**
   2016 A monomorphic instance of Eurydice.arr
   2017 with types uint8_t
   2018 with const generics
   2019 - $4896size_t
   2020 */
   2021 typedef struct Eurydice_arr_e2_s { uint8_t data[4896U]; } Eurydice_arr_e2;
   2022 
   2023 /**
   2024 A monomorphic instance of Eurydice.array_to_slice_shared
   2025 with types uint8_t
   2026 with const generics
   2027 - N= 4896
   2028 */
   2029 static inline Eurydice_borrow_slice_u8
   2030 Eurydice_array_to_slice_shared_f7(const Eurydice_arr_e2 *a)
   2031 {
   2032   Eurydice_borrow_slice_u8 lit;
   2033   lit.ptr = a->data;
   2034   lit.meta = (size_t)4896U;
   2035   return lit;
   2036 }
   2037 
   2038 /**
   2039 A monomorphic instance of Eurydice.arr
   2040 with types int32_t
   2041 with const generics
   2042 - $256size_t
   2043 */
   2044 typedef struct Eurydice_arr_6c_s { int32_t data[256U]; } Eurydice_arr_6c;
   2045 
   2046 /**
   2047 A monomorphic instance of Eurydice.arr
   2048 with types Eurydice_arr_6c
   2049 with const generics
   2050 - $8size_t
   2051 */
   2052 typedef struct Eurydice_arr_81_s { Eurydice_arr_6c data[8U]; } Eurydice_arr_81;
   2053 
   2054 #define core_option_None 0
   2055 #define core_option_Some 1
   2056 
   2057 typedef uint8_t core_option_Option_45_tags;
   2058 
   2059 /**
   2060 A monomorphic instance of core.option.Option
   2061 with types Eurydice_arr_81
   2062 
   2063 */
   2064 typedef struct core_option_Option_45_s
   2065 {
   2066   core_option_Option_45_tags tag;
   2067   Eurydice_arr_81 f0;
   2068 }
   2069 core_option_Option_45;
   2070 
   2071 /**
   2072 A monomorphic instance of core.option.Option
   2073 with types Eurydice_arr_c7
   2074 
   2075 */
   2076 typedef struct core_option_Option_b2_s
   2077 {
   2078   core_option_Option_45_tags tag;
   2079   Eurydice_arr_c7 f0;
   2080 }
   2081 core_option_Option_b2;
   2082 
   2083 /**
   2084 A monomorphic instance of Eurydice.array_to_slice_mut
   2085 with types uint8_t
   2086 with const generics
   2087 - N= 4627
   2088 */
   2089 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_11(Eurydice_arr_93 *a)
   2090 {
   2091   Eurydice_mut_borrow_slice_u8 lit;
   2092   lit.ptr = a->data;
   2093   lit.meta = (size_t)4627U;
   2094   return lit;
   2095 }
   2096 
   2097 /**
   2098 A monomorphic instance of Eurydice.dst_ref_shared
   2099 with types Eurydice_arr_6c, size_t
   2100 
   2101 */
   2102 typedef struct Eurydice_dst_ref_shared_20_s
   2103 {
   2104   const Eurydice_arr_6c *ptr;
   2105   size_t meta;
   2106 }
   2107 Eurydice_dst_ref_shared_20;
   2108 
   2109 /**
   2110 A monomorphic instance of Eurydice.array_to_slice_shared
   2111 with types Eurydice_arr int32_t[[$256size_t]]
   2112 with const generics
   2113 - N= 8
   2114 */
   2115 static inline Eurydice_dst_ref_shared_20
   2116 Eurydice_array_to_slice_shared_861(const Eurydice_arr_81 *a)
   2117 {
   2118   Eurydice_dst_ref_shared_20 lit;
   2119   lit.ptr = a->data;
   2120   lit.meta = (size_t)8U;
   2121   return lit;
   2122 }
   2123 
   2124 /**
   2125 A monomorphic instance of Eurydice.dst_ref_mut
   2126 with types Eurydice_arr_6c, size_t
   2127 
   2128 */
   2129 typedef struct Eurydice_dst_ref_mut_20_s
   2130 {
   2131   Eurydice_arr_6c *ptr;
   2132   size_t meta;
   2133 }
   2134 Eurydice_dst_ref_mut_20;
   2135 
   2136 /**
   2137 A monomorphic instance of Eurydice.array_to_slice_mut
   2138 with types Eurydice_arr int32_t[[$256size_t]]
   2139 with const generics
   2140 - N= 8
   2141 */
   2142 static inline Eurydice_dst_ref_mut_20 Eurydice_array_to_slice_mut_861(Eurydice_arr_81 *a)
   2143 {
   2144   Eurydice_dst_ref_mut_20 lit;
   2145   lit.ptr = a->data;
   2146   lit.meta = (size_t)8U;
   2147   return lit;
   2148 }
   2149 
   2150 /**
   2151  Declassify secret memory.
   2152 
   2153  No-op if `valgrind_ct_test` cfg is not enabled.
   2154 */
   2155 /**
   2156 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   2157 with types Eurydice_arr uint8_t[[$64size_t]]
   2158 
   2159 */
   2160 static KRML_MUSTINLINE void
   2161 libcrux_secrets_mem_requests_ct_declassify_56(const Eurydice_arr_c7 *val)
   2162 {
   2163 
   2164 }
   2165 
   2166 /**
   2167 A monomorphic instance of Eurydice.arr
   2168 with types uint8_t
   2169 with const generics
   2170 - $1024size_t
   2171 */
   2172 typedef struct Eurydice_arr_1b_s { uint8_t data[1024U]; } Eurydice_arr_1b;
   2173 
   2174 /**
   2175 A monomorphic instance of Eurydice.array_to_slice_shared
   2176 with types uint8_t
   2177 with const generics
   2178 - N= 1024
   2179 */
   2180 static inline Eurydice_borrow_slice_u8
   2181 Eurydice_array_to_slice_shared_68(const Eurydice_arr_1b *a)
   2182 {
   2183   Eurydice_borrow_slice_u8 lit;
   2184   lit.ptr = a->data;
   2185   lit.meta = (size_t)1024U;
   2186   return lit;
   2187 }
   2188 
   2189 /**
   2190 A monomorphic instance of Eurydice.array_to_slice_mut
   2191 with types uint8_t
   2192 with const generics
   2193 - N= 1024
   2194 */
   2195 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_68(Eurydice_arr_1b *a)
   2196 {
   2197   Eurydice_mut_borrow_slice_u8 lit;
   2198   lit.ptr = a->data;
   2199   lit.meta = (size_t)1024U;
   2200   return lit;
   2201 }
   2202 
   2203 /**
   2204 A monomorphic instance of Eurydice.array_to_slice_mut
   2205 with types uint8_t
   2206 with const generics
   2207 - N= 2592
   2208 */
   2209 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_fc(Eurydice_arr_43 *a)
   2210 {
   2211   Eurydice_mut_borrow_slice_u8 lit;
   2212   lit.ptr = a->data;
   2213   lit.meta = (size_t)2592U;
   2214   return lit;
   2215 }
   2216 
   2217 /**
   2218 A monomorphic instance of Eurydice.array_to_slice_mut
   2219 with types uint8_t
   2220 with const generics
   2221 - N= 4896
   2222 */
   2223 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f7(Eurydice_arr_e2 *a)
   2224 {
   2225   Eurydice_mut_borrow_slice_u8 lit;
   2226   lit.ptr = a->data;
   2227   lit.meta = (size_t)4896U;
   2228   return lit;
   2229 }
   2230 
   2231 /**
   2232 A monomorphic instance of Eurydice.arr
   2233 with types uint8_t
   2234 with const generics
   2235 - $3309size_t
   2236 */
   2237 typedef struct Eurydice_arr_0c_s { uint8_t data[3309U]; } Eurydice_arr_0c;
   2238 
   2239 /**
   2240 A monomorphic instance of Eurydice.array_to_slice_shared
   2241 with types uint8_t
   2242 with const generics
   2243 - N= 3309
   2244 */
   2245 static inline Eurydice_borrow_slice_u8
   2246 Eurydice_array_to_slice_shared_6b(const Eurydice_arr_0c *a)
   2247 {
   2248   Eurydice_borrow_slice_u8 lit;
   2249   lit.ptr = a->data;
   2250   lit.meta = (size_t)3309U;
   2251   return lit;
   2252 }
   2253 
   2254 /**
   2255 A monomorphic instance of Eurydice.arr
   2256 with types uint8_t
   2257 with const generics
   2258 - $1952size_t
   2259 */
   2260 typedef struct Eurydice_arr_29_s { uint8_t data[1952U]; } Eurydice_arr_29;
   2261 
   2262 /**
   2263 A monomorphic instance of Eurydice.array_to_slice_shared
   2264 with types uint8_t
   2265 with const generics
   2266 - N= 1952
   2267 */
   2268 static inline Eurydice_borrow_slice_u8
   2269 Eurydice_array_to_slice_shared_37(const Eurydice_arr_29 *a)
   2270 {
   2271   Eurydice_borrow_slice_u8 lit;
   2272   lit.ptr = a->data;
   2273   lit.meta = (size_t)1952U;
   2274   return lit;
   2275 }
   2276 
   2277 /**
   2278 A monomorphic instance of Eurydice.arr
   2279 with types uint8_t
   2280 with const generics
   2281 - $4032size_t
   2282 */
   2283 typedef struct Eurydice_arr_24_s { uint8_t data[4032U]; } Eurydice_arr_24;
   2284 
   2285 /**
   2286 A monomorphic instance of Eurydice.array_to_slice_shared
   2287 with types uint8_t
   2288 with const generics
   2289 - N= 4032
   2290 */
   2291 static inline Eurydice_borrow_slice_u8
   2292 Eurydice_array_to_slice_shared_98(const Eurydice_arr_24 *a)
   2293 {
   2294   Eurydice_borrow_slice_u8 lit;
   2295   lit.ptr = a->data;
   2296   lit.meta = (size_t)4032U;
   2297   return lit;
   2298 }
   2299 
   2300 /**
   2301 A monomorphic instance of Eurydice.arr
   2302 with types Eurydice_arr_6c
   2303 with const generics
   2304 - $6size_t
   2305 */
   2306 typedef struct Eurydice_arr_5d0_s { Eurydice_arr_6c data[6U]; } Eurydice_arr_5d0;
   2307 
   2308 /**
   2309 A monomorphic instance of core.option.Option
   2310 with types Eurydice_arr_5d0
   2311 
   2312 */
   2313 typedef struct core_option_Option_05_s
   2314 {
   2315   core_option_Option_45_tags tag;
   2316   Eurydice_arr_5d0 f0;
   2317 }
   2318 core_option_Option_05;
   2319 
   2320 /**
   2321 A monomorphic instance of Eurydice.arr
   2322 with types uint8_t
   2323 with const generics
   2324 - $48size_t
   2325 */
   2326 typedef struct Eurydice_arr_65_s { uint8_t data[48U]; } Eurydice_arr_65;
   2327 
   2328 /**
   2329 A monomorphic instance of core.option.Option
   2330 with types Eurydice_arr_65
   2331 
   2332 */
   2333 typedef struct core_option_Option_81_s
   2334 {
   2335   core_option_Option_45_tags tag;
   2336   Eurydice_arr_65 f0;
   2337 }
   2338 core_option_Option_81;
   2339 
   2340 /**
   2341 A monomorphic instance of Eurydice.array_to_slice_mut
   2342 with types uint8_t
   2343 with const generics
   2344 - N= 3309
   2345 */
   2346 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_6b(Eurydice_arr_0c *a)
   2347 {
   2348   Eurydice_mut_borrow_slice_u8 lit;
   2349   lit.ptr = a->data;
   2350   lit.meta = (size_t)3309U;
   2351   return lit;
   2352 }
   2353 
   2354 /**
   2355 A monomorphic instance of Eurydice.array_to_slice_shared
   2356 with types Eurydice_arr int32_t[[$256size_t]]
   2357 with const generics
   2358 - N= 6
   2359 */
   2360 static inline Eurydice_dst_ref_shared_20
   2361 Eurydice_array_to_slice_shared_860(const Eurydice_arr_5d0 *a)
   2362 {
   2363   Eurydice_dst_ref_shared_20 lit;
   2364   lit.ptr = a->data;
   2365   lit.meta = (size_t)6U;
   2366   return lit;
   2367 }
   2368 
   2369 /**
   2370 A monomorphic instance of Eurydice.array_to_slice_mut
   2371 with types Eurydice_arr int32_t[[$256size_t]]
   2372 with const generics
   2373 - N= 6
   2374 */
   2375 static inline Eurydice_dst_ref_mut_20 Eurydice_array_to_slice_mut_860(Eurydice_arr_5d0 *a)
   2376 {
   2377   Eurydice_dst_ref_mut_20 lit;
   2378   lit.ptr = a->data;
   2379   lit.meta = (size_t)6U;
   2380   return lit;
   2381 }
   2382 
   2383 /**
   2384 A monomorphic instance of Eurydice.array_to_slice_shared
   2385 with types uint8_t
   2386 with const generics
   2387 - N= 48
   2388 */
   2389 static inline Eurydice_borrow_slice_u8
   2390 Eurydice_array_to_slice_shared_9f0(const Eurydice_arr_65 *a)
   2391 {
   2392   Eurydice_borrow_slice_u8 lit;
   2393   lit.ptr = a->data;
   2394   lit.meta = (size_t)48U;
   2395   return lit;
   2396 }
   2397 
   2398 /**
   2399  Declassify secret memory.
   2400 
   2401  No-op if `valgrind_ct_test` cfg is not enabled.
   2402 */
   2403 /**
   2404 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   2405 with types Eurydice_arr uint8_t[[$48size_t]]
   2406 
   2407 */
   2408 static KRML_MUSTINLINE void
   2409 libcrux_secrets_mem_requests_ct_declassify_69(const Eurydice_arr_65 *val)
   2410 {
   2411 
   2412 }
   2413 
   2414 /**
   2415 A monomorphic instance of Eurydice.array_to_slice_mut
   2416 with types uint8_t
   2417 with const generics
   2418 - N= 1952
   2419 */
   2420 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_37(Eurydice_arr_29 *a)
   2421 {
   2422   Eurydice_mut_borrow_slice_u8 lit;
   2423   lit.ptr = a->data;
   2424   lit.meta = (size_t)1952U;
   2425   return lit;
   2426 }
   2427 
   2428 /**
   2429 A monomorphic instance of Eurydice.array_to_slice_mut
   2430 with types uint8_t
   2431 with const generics
   2432 - N= 4032
   2433 */
   2434 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_98(Eurydice_arr_24 *a)
   2435 {
   2436   Eurydice_mut_borrow_slice_u8 lit;
   2437   lit.ptr = a->data;
   2438   lit.meta = (size_t)4032U;
   2439   return lit;
   2440 }
   2441 
   2442 /**
   2443 A monomorphic instance of Eurydice.arr
   2444 with types uint8_t
   2445 with const generics
   2446 - $2420size_t
   2447 */
   2448 typedef struct Eurydice_arr_85_s { uint8_t data[2420U]; } Eurydice_arr_85;
   2449 
   2450 /**
   2451 A monomorphic instance of Eurydice.array_to_slice_shared
   2452 with types uint8_t
   2453 with const generics
   2454 - N= 2420
   2455 */
   2456 static inline Eurydice_borrow_slice_u8
   2457 Eurydice_array_to_slice_shared_0d(const Eurydice_arr_85 *a)
   2458 {
   2459   Eurydice_borrow_slice_u8 lit;
   2460   lit.ptr = a->data;
   2461   lit.meta = (size_t)2420U;
   2462   return lit;
   2463 }
   2464 
   2465 /**
   2466 A monomorphic instance of Eurydice.arr
   2467 with types uint8_t
   2468 with const generics
   2469 - $1312size_t
   2470 */
   2471 typedef struct Eurydice_arr_02_s { uint8_t data[1312U]; } Eurydice_arr_02;
   2472 
   2473 /**
   2474 A monomorphic instance of Eurydice.array_to_slice_shared
   2475 with types uint8_t
   2476 with const generics
   2477 - N= 1312
   2478 */
   2479 static inline Eurydice_borrow_slice_u8
   2480 Eurydice_array_to_slice_shared_9f(const Eurydice_arr_02 *a)
   2481 {
   2482   Eurydice_borrow_slice_u8 lit;
   2483   lit.ptr = a->data;
   2484   lit.meta = (size_t)1312U;
   2485   return lit;
   2486 }
   2487 
   2488 /**
   2489 A monomorphic instance of Eurydice.arr
   2490 with types uint8_t
   2491 with const generics
   2492 - $2560size_t
   2493 */
   2494 typedef struct Eurydice_arr_10_s { uint8_t data[2560U]; } Eurydice_arr_10;
   2495 
   2496 /**
   2497 A monomorphic instance of Eurydice.array_to_slice_shared
   2498 with types uint8_t
   2499 with const generics
   2500 - N= 2560
   2501 */
   2502 static inline Eurydice_borrow_slice_u8
   2503 Eurydice_array_to_slice_shared_34(const Eurydice_arr_10 *a)
   2504 {
   2505   Eurydice_borrow_slice_u8 lit;
   2506   lit.ptr = a->data;
   2507   lit.meta = (size_t)2560U;
   2508   return lit;
   2509 }
   2510 
   2511 /**
   2512 A monomorphic instance of Eurydice.arr
   2513 with types Eurydice_arr_6c
   2514 with const generics
   2515 - $4size_t
   2516 */
   2517 typedef struct Eurydice_arr_b7_s { Eurydice_arr_6c data[4U]; } Eurydice_arr_b7;
   2518 
   2519 /**
   2520 A monomorphic instance of core.option.Option
   2521 with types Eurydice_arr_b7
   2522 
   2523 */
   2524 typedef struct core_option_Option_51_s
   2525 {
   2526   core_option_Option_45_tags tag;
   2527   Eurydice_arr_b7 f0;
   2528 }
   2529 core_option_Option_51;
   2530 
   2531 /**
   2532 A monomorphic instance of core.option.Option
   2533 with types Eurydice_arr_ec
   2534 
   2535 */
   2536 typedef struct core_option_Option_14_s
   2537 {
   2538   core_option_Option_45_tags tag;
   2539   Eurydice_arr_ec f0;
   2540 }
   2541 core_option_Option_14;
   2542 
   2543 /**
   2544 A monomorphic instance of Eurydice.array_to_slice_mut
   2545 with types uint8_t
   2546 with const generics
   2547 - N= 2420
   2548 */
   2549 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_0d(Eurydice_arr_85 *a)
   2550 {
   2551   Eurydice_mut_borrow_slice_u8 lit;
   2552   lit.ptr = a->data;
   2553   lit.meta = (size_t)2420U;
   2554   return lit;
   2555 }
   2556 
   2557 /**
   2558 A monomorphic instance of Eurydice.array_to_slice_shared
   2559 with types Eurydice_arr int32_t[[$256size_t]]
   2560 with const generics
   2561 - N= 4
   2562 */
   2563 static inline Eurydice_dst_ref_shared_20
   2564 Eurydice_array_to_slice_shared_86(const Eurydice_arr_b7 *a)
   2565 {
   2566   Eurydice_dst_ref_shared_20 lit;
   2567   lit.ptr = a->data;
   2568   lit.meta = (size_t)4U;
   2569   return lit;
   2570 }
   2571 
   2572 /**
   2573 A monomorphic instance of Eurydice.array_to_slice_mut
   2574 with types Eurydice_arr int32_t[[$256size_t]]
   2575 with const generics
   2576 - N= 4
   2577 */
   2578 static inline Eurydice_dst_ref_mut_20 Eurydice_array_to_slice_mut_86(Eurydice_arr_b7 *a)
   2579 {
   2580   Eurydice_dst_ref_mut_20 lit;
   2581   lit.ptr = a->data;
   2582   lit.meta = (size_t)4U;
   2583   return lit;
   2584 }
   2585 
   2586 /**
   2587 A monomorphic instance of Eurydice.array_to_subslice_mut
   2588 with types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t
   2589 with const generics
   2590 - N= 256
   2591 */
   2592 static inline Eurydice_dst_ref_mut_83
   2593 Eurydice_array_to_subslice_mut_44(Eurydice_arr_6c *a, core_ops_range_Range_87 r)
   2594 {
   2595   return
   2596     (KRML_CLITERAL(Eurydice_dst_ref_mut_83){ .ptr = a->data + r.start, .meta = r.end - r.start });
   2597 }
   2598 
   2599 /**
   2600 A monomorphic instance of Eurydice.dst_ref_shared
   2601 with types int32_t, size_t
   2602 
   2603 */
   2604 typedef struct Eurydice_dst_ref_shared_83_s
   2605 {
   2606   const int32_t *ptr;
   2607   size_t meta;
   2608 }
   2609 Eurydice_dst_ref_shared_83;
   2610 
   2611 /**
   2612 A monomorphic instance of Eurydice.array_to_slice_shared
   2613 with types int32_t
   2614 with const generics
   2615 - N= 256
   2616 */
   2617 static inline Eurydice_dst_ref_shared_83
   2618 Eurydice_array_to_slice_shared_af(const Eurydice_arr_6c *a)
   2619 {
   2620   Eurydice_dst_ref_shared_83 lit;
   2621   lit.ptr = a->data;
   2622   lit.meta = (size_t)256U;
   2623   return lit;
   2624 }
   2625 
   2626 /**
   2627 A monomorphic instance of Eurydice.arr
   2628 with types uint8_t
   2629 with const generics
   2630 - $136size_t
   2631 */
   2632 typedef struct Eurydice_arr_ff_s { uint8_t data[136U]; } Eurydice_arr_ff;
   2633 
   2634 /**
   2635 A monomorphic instance of Eurydice.array_to_subslice_from_shared
   2636 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   2637 with const generics
   2638 - N= 136
   2639 */
   2640 static inline Eurydice_borrow_slice_u8
   2641 Eurydice_array_to_subslice_from_shared_5f(const Eurydice_arr_ff *a, size_t r)
   2642 {
   2643   return
   2644     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)136U - r });
   2645 }
   2646 
   2647 /**
   2648 A monomorphic instance of Eurydice.array_to_subslice_shared
   2649 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   2650 with const generics
   2651 - N= 136
   2652 */
   2653 static inline Eurydice_borrow_slice_u8
   2654 Eurydice_array_to_subslice_shared_d40(const Eurydice_arr_ff *a, core_ops_range_Range_87 r)
   2655 {
   2656   return
   2657     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   2658 }
   2659 
   2660 /**
   2661  Declassify secret memory.
   2662 
   2663  No-op if `valgrind_ct_test` cfg is not enabled.
   2664 */
   2665 /**
   2666 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   2667 with types Eurydice_arr uint8_t[[$32size_t]]
   2668 
   2669 */
   2670 static KRML_MUSTINLINE void
   2671 libcrux_secrets_mem_requests_ct_declassify_4b(const Eurydice_arr_ec *val)
   2672 {
   2673 
   2674 }
   2675 
   2676 /**
   2677 A monomorphic instance of Eurydice.arr
   2678 with types uint8_t
   2679 with const generics
   2680 - $768size_t
   2681 */
   2682 typedef struct Eurydice_arr_d2_s { uint8_t data[768U]; } Eurydice_arr_d2;
   2683 
   2684 /**
   2685 A monomorphic instance of Eurydice.array_to_slice_shared
   2686 with types uint8_t
   2687 with const generics
   2688 - N= 768
   2689 */
   2690 static inline Eurydice_borrow_slice_u8
   2691 Eurydice_array_to_slice_shared_27(const Eurydice_arr_d2 *a)
   2692 {
   2693   Eurydice_borrow_slice_u8 lit;
   2694   lit.ptr = a->data;
   2695   lit.meta = (size_t)768U;
   2696   return lit;
   2697 }
   2698 
   2699 /**
   2700 A monomorphic instance of Eurydice.array_to_slice_mut
   2701 with types uint8_t
   2702 with const generics
   2703 - N= 768
   2704 */
   2705 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_27(Eurydice_arr_d2 *a)
   2706 {
   2707   Eurydice_mut_borrow_slice_u8 lit;
   2708   lit.ptr = a->data;
   2709   lit.meta = (size_t)768U;
   2710   return lit;
   2711 }
   2712 
   2713 /**
   2714 A monomorphic instance of Eurydice.arr
   2715 with types uint8_t
   2716 with const generics
   2717 - $640size_t
   2718 */
   2719 typedef struct Eurydice_arr_20_s { uint8_t data[640U]; } Eurydice_arr_20;
   2720 
   2721 /**
   2722 A monomorphic instance of Eurydice.array_to_slice_shared
   2723 with types uint8_t
   2724 with const generics
   2725 - N= 640
   2726 */
   2727 static inline Eurydice_borrow_slice_u8
   2728 Eurydice_array_to_slice_shared_4f(const Eurydice_arr_20 *a)
   2729 {
   2730   Eurydice_borrow_slice_u8 lit;
   2731   lit.ptr = a->data;
   2732   lit.meta = (size_t)640U;
   2733   return lit;
   2734 }
   2735 
   2736 /**
   2737 A monomorphic instance of Eurydice.array_to_slice_mut
   2738 with types uint8_t
   2739 with const generics
   2740 - N= 640
   2741 */
   2742 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_4f(Eurydice_arr_20 *a)
   2743 {
   2744   Eurydice_mut_borrow_slice_u8 lit;
   2745   lit.ptr = a->data;
   2746   lit.meta = (size_t)640U;
   2747   return lit;
   2748 }
   2749 
   2750 /**
   2751 A monomorphic instance of Eurydice.arr
   2752 with types uint8_t
   2753 with const generics
   2754 - $576size_t
   2755 */
   2756 typedef struct Eurydice_arr_220_s { uint8_t data[576U]; } Eurydice_arr_220;
   2757 
   2758 /**
   2759 A monomorphic instance of Eurydice.array_to_slice_shared
   2760 with types uint8_t
   2761 with const generics
   2762 - N= 576
   2763 */
   2764 static inline Eurydice_borrow_slice_u8
   2765 Eurydice_array_to_slice_shared_8a(const Eurydice_arr_220 *a)
   2766 {
   2767   Eurydice_borrow_slice_u8 lit;
   2768   lit.ptr = a->data;
   2769   lit.meta = (size_t)576U;
   2770   return lit;
   2771 }
   2772 
   2773 /**
   2774 A monomorphic instance of Eurydice.array_to_slice_mut
   2775 with types uint8_t
   2776 with const generics
   2777 - N= 576
   2778 */
   2779 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_8a(Eurydice_arr_220 *a)
   2780 {
   2781   Eurydice_mut_borrow_slice_u8 lit;
   2782   lit.ptr = a->data;
   2783   lit.meta = (size_t)576U;
   2784   return lit;
   2785 }
   2786 
   2787 /**
   2788 A monomorphic instance of Eurydice.arr
   2789 with types uint8_t
   2790 with const generics
   2791 - $11size_t
   2792 */
   2793 typedef struct Eurydice_arr_c9_s { uint8_t data[11U]; } Eurydice_arr_c9;
   2794 
   2795 /**
   2796 A monomorphic instance of Eurydice.array_to_slice_shared
   2797 with types uint8_t
   2798 with const generics
   2799 - N= 11
   2800 */
   2801 static inline Eurydice_borrow_slice_u8
   2802 Eurydice_array_to_slice_shared_2f(const Eurydice_arr_c9 *a)
   2803 {
   2804   Eurydice_borrow_slice_u8 lit;
   2805   lit.ptr = a->data;
   2806   lit.meta = (size_t)11U;
   2807   return lit;
   2808 }
   2809 
   2810 /**
   2811 A monomorphic instance of Eurydice.arr
   2812 with types uint8_t
   2813 with const generics
   2814 - $1size_t
   2815 */
   2816 typedef struct Eurydice_arr_82_s { uint8_t data[1U]; } Eurydice_arr_82;
   2817 
   2818 /**
   2819 A monomorphic instance of Eurydice.array_to_slice_shared
   2820 with types uint8_t
   2821 with const generics
   2822 - N= 1
   2823 */
   2824 static inline Eurydice_borrow_slice_u8
   2825 Eurydice_array_to_slice_shared_79(const Eurydice_arr_82 *a)
   2826 {
   2827   Eurydice_borrow_slice_u8 lit;
   2828   lit.ptr = a->data;
   2829   lit.meta = (size_t)1U;
   2830   return lit;
   2831 }
   2832 
   2833 /**
   2834  Mark memory as secret.
   2835 
   2836  No-op if `valgrind_ct_test` cfg is not enabled.
   2837 */
   2838 /**
   2839 A monomorphic instance of libcrux_secrets.mem_requests.ct_classify
   2840 with types Eurydice_derefed_slice uint8_t
   2841 
   2842 */
   2843 static KRML_MUSTINLINE void libcrux_secrets_mem_requests_ct_classify_45(const uint8_t (*val)[])
   2844 {
   2845 
   2846 }
   2847 
   2848 /**
   2849 A monomorphic instance of Eurydice.array_to_slice_mut
   2850 with types uint8_t
   2851 with const generics
   2852 - N= 1312
   2853 */
   2854 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_9f0(Eurydice_arr_02 *a)
   2855 {
   2856   Eurydice_mut_borrow_slice_u8 lit;
   2857   lit.ptr = a->data;
   2858   lit.meta = (size_t)1312U;
   2859   return lit;
   2860 }
   2861 
   2862 /**
   2863 A monomorphic instance of Eurydice.array_to_slice_mut
   2864 with types uint8_t
   2865 with const generics
   2866 - N= 2560
   2867 */
   2868 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_34(Eurydice_arr_10 *a)
   2869 {
   2870   Eurydice_mut_borrow_slice_u8 lit;
   2871   lit.ptr = a->data;
   2872   lit.meta = (size_t)2560U;
   2873   return lit;
   2874 }
   2875 
   2876 /**
   2877 A monomorphic instance of Eurydice.array_to_slice_shared
   2878 with types uint8_t
   2879 with const generics
   2880 - N= 64
   2881 */
   2882 static inline Eurydice_borrow_slice_u8
   2883 Eurydice_array_to_slice_shared_17(const Eurydice_arr_c7 *a)
   2884 {
   2885   Eurydice_borrow_slice_u8 lit;
   2886   lit.ptr = a->data;
   2887   lit.meta = (size_t)64U;
   2888   return lit;
   2889 }
   2890 
   2891 /**
   2892 A monomorphic instance of Eurydice.arr
   2893 with types int32_t
   2894 with const generics
   2895 - $263size_t
   2896 */
   2897 typedef struct Eurydice_arr_d0_s { int32_t data[263U]; } Eurydice_arr_d0;
   2898 
   2899 /**
   2900 A monomorphic instance of Eurydice.dst_ref_mut
   2901 with types Eurydice_arr_d0, size_t
   2902 
   2903 */
   2904 typedef struct Eurydice_dst_ref_mut_33_s
   2905 {
   2906   Eurydice_arr_d0 *ptr;
   2907   size_t meta;
   2908 }
   2909 Eurydice_dst_ref_mut_33;
   2910 
   2911 /**
   2912 A monomorphic instance of Eurydice.arr
   2913 with types Eurydice_arr_d0
   2914 with const generics
   2915 - $4size_t
   2916 */
   2917 typedef struct Eurydice_arr_930_s { Eurydice_arr_d0 data[4U]; } Eurydice_arr_930;
   2918 
   2919 /**
   2920 A monomorphic instance of Eurydice.array_to_slice_mut
   2921 with types Eurydice_arr int32_t[[$263size_t]]
   2922 with const generics
   2923 - N= 4
   2924 */
   2925 static inline Eurydice_dst_ref_mut_33 Eurydice_array_to_slice_mut_7e(Eurydice_arr_930 *a)
   2926 {
   2927   Eurydice_dst_ref_mut_33 lit;
   2928   lit.ptr = a->data;
   2929   lit.meta = (size_t)4U;
   2930   return lit;
   2931 }
   2932 
   2933 /**
   2934 A monomorphic instance of Eurydice.dst_ref_shared
   2935 with types Eurydice_arr_d0, size_t
   2936 
   2937 */
   2938 typedef struct Eurydice_dst_ref_shared_33_s
   2939 {
   2940   const Eurydice_arr_d0 *ptr;
   2941   size_t meta;
   2942 }
   2943 Eurydice_dst_ref_shared_33;
   2944 
   2945 /**
   2946 A monomorphic instance of Eurydice.arr
   2947 with types uint8_t
   2948 with const generics
   2949 - $840size_t
   2950 */
   2951 typedef struct Eurydice_arr_d10_s { uint8_t data[840U]; } Eurydice_arr_d10;
   2952 
   2953 /**
   2954 A monomorphic instance of Eurydice.array_to_slice_shared
   2955 with types uint8_t
   2956 with const generics
   2957 - N= 840
   2958 */
   2959 static inline Eurydice_borrow_slice_u8
   2960 Eurydice_array_to_slice_shared_4c(const Eurydice_arr_d10 *a)
   2961 {
   2962   Eurydice_borrow_slice_u8 lit;
   2963   lit.ptr = a->data;
   2964   lit.meta = (size_t)840U;
   2965   return lit;
   2966 }
   2967 
   2968 /**
   2969 A monomorphic instance of Eurydice.array_to_slice_shared
   2970 with types uint8_t
   2971 with const generics
   2972 - N= 34
   2973 */
   2974 static inline Eurydice_borrow_slice_u8
   2975 Eurydice_array_to_slice_shared_e9(const Eurydice_arr_31 *a)
   2976 {
   2977   Eurydice_borrow_slice_u8 lit;
   2978   lit.ptr = a->data;
   2979   lit.meta = (size_t)34U;
   2980   return lit;
   2981 }
   2982 
   2983 /**
   2984  Declassify secret memory.
   2985 
   2986  No-op if `valgrind_ct_test` cfg is not enabled.
   2987 */
   2988 /**
   2989 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   2990 with types Eurydice_derefed_slice uint8_t
   2991 
   2992 */
   2993 static KRML_MUSTINLINE void
   2994 libcrux_secrets_mem_requests_ct_declassify_45(const uint8_t (*val)[])
   2995 {
   2996 
   2997 }
   2998 
   2999 /**
   3000 A monomorphic instance of Eurydice.array_to_slice_shared
   3001 with types int32_t
   3002 with const generics
   3003 - N= 263
   3004 */
   3005 static inline Eurydice_dst_ref_shared_83
   3006 Eurydice_array_to_slice_shared_2c0(const Eurydice_arr_d0 *a)
   3007 {
   3008   Eurydice_dst_ref_shared_83 lit;
   3009   lit.ptr = a->data;
   3010   lit.meta = (size_t)263U;
   3011   return lit;
   3012 }
   3013 
   3014 /**
   3015 A monomorphic instance of Eurydice.array_to_subslice_from_mut
   3016 with types int32_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice int32_t
   3017 with const generics
   3018 - N= 263
   3019 */
   3020 static inline Eurydice_dst_ref_mut_83
   3021 Eurydice_array_to_subslice_from_mut_11(Eurydice_arr_d0 *a, size_t r)
   3022 {
   3023   return
   3024     (KRML_CLITERAL(Eurydice_dst_ref_mut_83){ .ptr = a->data + r, .meta = (size_t)263U - r });
   3025 }
   3026 
   3027 /**
   3028 A monomorphic instance of Eurydice.arr
   3029 with types uint8_t
   3030 with const generics
   3031 - $66size_t
   3032 */
   3033 typedef struct Eurydice_arr_91_s { uint8_t data[66U]; } Eurydice_arr_91;
   3034 
   3035 /**
   3036 A monomorphic instance of Eurydice.array_to_slice_shared
   3037 with types uint8_t
   3038 with const generics
   3039 - N= 66
   3040 */
   3041 static inline Eurydice_borrow_slice_u8
   3042 Eurydice_array_to_slice_shared_f1(const Eurydice_arr_91 *a)
   3043 {
   3044   Eurydice_borrow_slice_u8 lit;
   3045   lit.ptr = a->data;
   3046   lit.meta = (size_t)66U;
   3047   return lit;
   3048 }
   3049 
   3050 /**
   3051 A monomorphic instance of Eurydice.array_to_slice_shared
   3052 with types uint8_t
   3053 with const generics
   3054 - N= 128
   3055 */
   3056 static inline Eurydice_borrow_slice_u8
   3057 Eurydice_array_to_slice_shared_78(const Eurydice_arr_89 *a)
   3058 {
   3059   Eurydice_borrow_slice_u8 lit;
   3060   lit.ptr = a->data;
   3061   lit.meta = (size_t)128U;
   3062   return lit;
   3063 }
   3064 
   3065 /**
   3066 A monomorphic instance of Eurydice.array_to_slice_mut
   3067 with types uint8_t
   3068 with const generics
   3069 - N= 128
   3070 */
   3071 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_78(Eurydice_arr_89 *a)
   3072 {
   3073   Eurydice_mut_borrow_slice_u8 lit;
   3074   lit.ptr = a->data;
   3075   lit.meta = (size_t)128U;
   3076   return lit;
   3077 }
   3078 
   3079 /**
   3080 A monomorphic instance of Eurydice.array_to_slice_shared
   3081 with types uint8_t
   3082 with const generics
   3083 - N= 2
   3084 */
   3085 static inline Eurydice_borrow_slice_u8
   3086 Eurydice_array_to_slice_shared_82(const Eurydice_array_u8x2 *a)
   3087 {
   3088   Eurydice_borrow_slice_u8 lit;
   3089   lit.ptr = a->data;
   3090   lit.meta = (size_t)2U;
   3091   return lit;
   3092 }
   3093 
   3094 /**
   3095 A monomorphic instance of Eurydice.array_to_slice_shared
   3096 with types uint8_t
   3097 with const generics
   3098 - N= 32
   3099 */
   3100 static inline Eurydice_borrow_slice_u8
   3101 Eurydice_array_to_slice_shared_01(const Eurydice_arr_ec *a)
   3102 {
   3103   Eurydice_borrow_slice_u8 lit;
   3104   lit.ptr = a->data;
   3105   lit.meta = (size_t)32U;
   3106   return lit;
   3107 }
   3108 
   3109 /**
   3110  Mark memory as secret.
   3111 
   3112  No-op if `valgrind_ct_test` cfg is not enabled.
   3113 */
   3114 /**
   3115 A monomorphic instance of libcrux_secrets.mem_requests.ct_classify
   3116 with types Eurydice_arr uint8_t[[$32size_t]]
   3117 
   3118 */
   3119 static KRML_MUSTINLINE void
   3120 libcrux_secrets_mem_requests_ct_classify_4b(const Eurydice_arr_ec *val)
   3121 {
   3122 
   3123 }
   3124 
   3125 typedef struct Eurydice_arr_c5_x4_s
   3126 {
   3127   Eurydice_arr_c5 fst;
   3128   Eurydice_arr_c5 snd;
   3129   Eurydice_arr_c5 thd;
   3130   Eurydice_arr_c5 f3;
   3131 }
   3132 Eurydice_arr_c5_x4;
   3133 
   3134 /**
   3135 A monomorphic instance of Eurydice.array_to_slice_mut
   3136 with types uint8_t
   3137 with const generics
   3138 - N= 168
   3139 */
   3140 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2c(Eurydice_arr_c5 *a)
   3141 {
   3142   Eurydice_mut_borrow_slice_u8 lit;
   3143   lit.ptr = a->data;
   3144   lit.meta = (size_t)168U;
   3145   return lit;
   3146 }
   3147 
   3148 /**
   3149 A monomorphic instance of Eurydice.array_to_slice_mut
   3150 with types uint8_t
   3151 with const generics
   3152 - N= 840
   3153 */
   3154 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_4c(Eurydice_arr_d10 *a)
   3155 {
   3156   Eurydice_mut_borrow_slice_u8 lit;
   3157   lit.ptr = a->data;
   3158   lit.meta = (size_t)840U;
   3159   return lit;
   3160 }
   3161 
   3162 typedef struct Eurydice_arr_ff_x4_s
   3163 {
   3164   Eurydice_arr_ff fst;
   3165   Eurydice_arr_ff snd;
   3166   Eurydice_arr_ff thd;
   3167   Eurydice_arr_ff f3;
   3168 }
   3169 Eurydice_arr_ff_x4;
   3170 
   3171 /**
   3172 A monomorphic instance of Eurydice.array_to_slice_mut
   3173 with types uint8_t
   3174 with const generics
   3175 - N= 136
   3176 */
   3177 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_58(Eurydice_arr_ff *a)
   3178 {
   3179   Eurydice_mut_borrow_slice_u8 lit;
   3180   lit.ptr = a->data;
   3181   lit.meta = (size_t)136U;
   3182   return lit;
   3183 }
   3184 
   3185 /**
   3186 A monomorphic instance of Eurydice.array_to_subslice_shared
   3187 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3188 with const generics
   3189 - N= 32
   3190 */
   3191 static inline Eurydice_borrow_slice_u8
   3192 Eurydice_array_to_subslice_shared_d4(const Eurydice_arr_ec *a, core_ops_range_Range_87 r)
   3193 {
   3194   return
   3195     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });
   3196 }
   3197 
   3198 /**
   3199 A monomorphic instance of Eurydice.arr
   3200 with types Eurydice_arr_ff
   3201 with const generics
   3202 - $4size_t
   3203 */
   3204 typedef struct Eurydice_arr_dc0_s { Eurydice_arr_ff data[4U]; } Eurydice_arr_dc0;
   3205 
   3206 /**
   3207 A monomorphic instance of Eurydice.arr
   3208 with types Eurydice_arr_c5
   3209 with const generics
   3210 - $4size_t
   3211 */
   3212 typedef struct Eurydice_arr_9c_s { Eurydice_arr_c5 data[4U]; } Eurydice_arr_9c;
   3213 
   3214 /**
   3215 A monomorphic instance of Eurydice.arr
   3216 with types Eurydice_borrow_slice_u8
   3217 with const generics
   3218 - $4size_t
   3219 */
   3220 typedef struct Eurydice_arr_68_s { Eurydice_borrow_slice_u8 data[4U]; } Eurydice_arr_68;
   3221 
   3222 /**
   3223 A monomorphic instance of Eurydice.array_to_subslice_mut
   3224 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3225 with const generics
   3226 - N= 32
   3227 */
   3228 static inline Eurydice_mut_borrow_slice_u8
   3229 Eurydice_array_to_subslice_mut_d46(Eurydice_arr_ec *a, core_ops_range_Range_87 r)
   3230 {
   3231   return
   3232     (
   3233       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3234         .ptr = a->data + r.start,
   3235         .meta = r.end - r.start
   3236       }
   3237     );
   3238 }
   3239 
   3240 /**
   3241 A monomorphic instance of Eurydice.array_to_subslice_from_mut
   3242 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   3243 with const generics
   3244 - N= 168
   3245 */
   3246 static inline Eurydice_mut_borrow_slice_u8
   3247 Eurydice_array_to_subslice_from_mut_5f0(Eurydice_arr_c5 *a, size_t r)
   3248 {
   3249   return
   3250     (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)168U - r });
   3251 }
   3252 
   3253 /**
   3254 A monomorphic instance of Eurydice.arr
   3255 with types Eurydice_arr_c5
   3256 with const generics
   3257 - $1size_t
   3258 */
   3259 typedef struct Eurydice_arr_88_s { Eurydice_arr_c5 data[1U]; } Eurydice_arr_88;
   3260 
   3261 /**
   3262 A monomorphic instance of Eurydice.array_to_slice_mut
   3263 with types uint8_t
   3264 with const generics
   3265 - N= 64
   3266 */
   3267 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_17(Eurydice_arr_c7 *a)
   3268 {
   3269   Eurydice_mut_borrow_slice_u8 lit;
   3270   lit.ptr = a->data;
   3271   lit.meta = (size_t)64U;
   3272   return lit;
   3273 }
   3274 
   3275 /**
   3276 A monomorphic instance of Eurydice.array_to_slice_mut
   3277 with types uint8_t
   3278 with const generics
   3279 - N= 48
   3280 */
   3281 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_9f(Eurydice_arr_65 *a)
   3282 {
   3283   Eurydice_mut_borrow_slice_u8 lit;
   3284   lit.ptr = a->data;
   3285   lit.meta = (size_t)48U;
   3286   return lit;
   3287 }
   3288 
   3289 /**
   3290 A monomorphic instance of Eurydice.array_to_slice_mut
   3291 with types uint8_t
   3292 with const generics
   3293 - N= 32
   3294 */
   3295 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_01(Eurydice_arr_ec *a)
   3296 {
   3297   Eurydice_mut_borrow_slice_u8 lit;
   3298   lit.ptr = a->data;
   3299   lit.meta = (size_t)32U;
   3300   return lit;
   3301 }
   3302 
   3303 /**
   3304 A monomorphic instance of Eurydice.arr
   3305 with types uint8_t
   3306 with const generics
   3307 - $28size_t
   3308 */
   3309 typedef struct Eurydice_arr_a2_s { uint8_t data[28U]; } Eurydice_arr_a2;
   3310 
   3311 /**
   3312 A monomorphic instance of Eurydice.array_to_slice_mut
   3313 with types uint8_t
   3314 with const generics
   3315 - N= 28
   3316 */
   3317 static inline Eurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_5e(Eurydice_arr_a2 *a)
   3318 {
   3319   Eurydice_mut_borrow_slice_u8 lit;
   3320   lit.ptr = a->data;
   3321   lit.meta = (size_t)28U;
   3322   return lit;
   3323 }
   3324 
   3325 /**
   3326 A monomorphic instance of Eurydice.arr
   3327 with types uint8_t
   3328 with const generics
   3329 - $104size_t
   3330 */
   3331 typedef struct Eurydice_arr_c4_s { uint8_t data[104U]; } Eurydice_arr_c4;
   3332 
   3333 /**
   3334 A monomorphic instance of Eurydice.array_to_slice_shared
   3335 with types uint8_t
   3336 with const generics
   3337 - N= 104
   3338 */
   3339 static inline Eurydice_borrow_slice_u8
   3340 Eurydice_array_to_slice_shared_72(const Eurydice_arr_c4 *a)
   3341 {
   3342   Eurydice_borrow_slice_u8 lit;
   3343   lit.ptr = a->data;
   3344   lit.meta = (size_t)104U;
   3345   return lit;
   3346 }
   3347 
   3348 /**
   3349 A monomorphic instance of Eurydice.array_to_subslice_mut
   3350 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3351 with const generics
   3352 - N= 104
   3353 */
   3354 static inline Eurydice_mut_borrow_slice_u8
   3355 Eurydice_array_to_subslice_mut_d45(Eurydice_arr_c4 *a, core_ops_range_Range_87 r)
   3356 {
   3357   return
   3358     (
   3359       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3360         .ptr = a->data + r.start,
   3361         .meta = r.end - r.start
   3362       }
   3363     );
   3364 }
   3365 
   3366 /**
   3367 A monomorphic instance of Eurydice.arr
   3368 with types uint8_t
   3369 with const generics
   3370 - $144size_t
   3371 */
   3372 typedef struct Eurydice_arr_f4_s { uint8_t data[144U]; } Eurydice_arr_f4;
   3373 
   3374 /**
   3375 A monomorphic instance of Eurydice.array_to_slice_shared
   3376 with types uint8_t
   3377 with const generics
   3378 - N= 144
   3379 */
   3380 static inline Eurydice_borrow_slice_u8
   3381 Eurydice_array_to_slice_shared_38(const Eurydice_arr_f4 *a)
   3382 {
   3383   Eurydice_borrow_slice_u8 lit;
   3384   lit.ptr = a->data;
   3385   lit.meta = (size_t)144U;
   3386   return lit;
   3387 }
   3388 
   3389 /**
   3390 A monomorphic instance of Eurydice.array_to_subslice_mut
   3391 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3392 with const generics
   3393 - N= 144
   3394 */
   3395 static inline Eurydice_mut_borrow_slice_u8
   3396 Eurydice_array_to_subslice_mut_d44(Eurydice_arr_f4 *a, core_ops_range_Range_87 r)
   3397 {
   3398   return
   3399     (
   3400       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3401         .ptr = a->data + r.start,
   3402         .meta = r.end - r.start
   3403       }
   3404     );
   3405 }
   3406 
   3407 /**
   3408 A monomorphic instance of Eurydice.arr
   3409 with types uint8_t
   3410 with const generics
   3411 - $72size_t
   3412 */
   3413 typedef struct Eurydice_arr_ab_s { uint8_t data[72U]; } Eurydice_arr_ab;
   3414 
   3415 /**
   3416 A monomorphic instance of Eurydice.array_to_slice_shared
   3417 with types uint8_t
   3418 with const generics
   3419 - N= 72
   3420 */
   3421 static inline Eurydice_borrow_slice_u8
   3422 Eurydice_array_to_slice_shared_e2(const Eurydice_arr_ab *a)
   3423 {
   3424   Eurydice_borrow_slice_u8 lit;
   3425   lit.ptr = a->data;
   3426   lit.meta = (size_t)72U;
   3427   return lit;
   3428 }
   3429 
   3430 /**
   3431 A monomorphic instance of Eurydice.array_to_subslice_mut
   3432 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3433 with const generics
   3434 - N= 72
   3435 */
   3436 static inline Eurydice_mut_borrow_slice_u8
   3437 Eurydice_array_to_subslice_mut_d43(Eurydice_arr_ab *a, core_ops_range_Range_87 r)
   3438 {
   3439   return
   3440     (
   3441       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3442         .ptr = a->data + r.start,
   3443         .meta = r.end - r.start
   3444       }
   3445     );
   3446 }
   3447 
   3448 /**
   3449 A monomorphic instance of Eurydice.slice_subslice_to_shared
   3450 with types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t
   3451 
   3452 */
   3453 static inline Eurydice_borrow_slice_u8
   3454 Eurydice_slice_subslice_to_shared_72(Eurydice_borrow_slice_u8 s, size_t r)
   3455 {
   3456   return (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr, .meta = r });
   3457 }
   3458 
   3459 /**
   3460 A monomorphic instance of Eurydice.array_to_subslice_from_mut
   3461 with types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t
   3462 with const generics
   3463 - N= 136
   3464 */
   3465 static inline Eurydice_mut_borrow_slice_u8
   3466 Eurydice_array_to_subslice_from_mut_5f(Eurydice_arr_ff *a, size_t r)
   3467 {
   3468   return
   3469     (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)136U - r });
   3470 }
   3471 
   3472 /**
   3473 A monomorphic instance of Eurydice.array_to_subslice_to_shared
   3474 with types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t
   3475 with const generics
   3476 - N= 8
   3477 */
   3478 static inline Eurydice_borrow_slice_u8
   3479 Eurydice_array_to_subslice_to_shared_21(const Eurydice_array_u8x8 *a, size_t r)
   3480 {
   3481   Eurydice_borrow_slice_u8 lit;
   3482   lit.ptr = a->data;
   3483   lit.meta = r;
   3484   return lit;
   3485 }
   3486 
   3487 /**
   3488 A monomorphic instance of Eurydice.array_to_slice_shared
   3489 with types uint8_t
   3490 with const generics
   3491 - N= 8
   3492 */
   3493 static inline Eurydice_borrow_slice_u8
   3494 Eurydice_array_to_slice_shared_6e(const Eurydice_array_u8x8 *a)
   3495 {
   3496   Eurydice_borrow_slice_u8 lit;
   3497   lit.ptr = a->data;
   3498   lit.meta = (size_t)8U;
   3499   return lit;
   3500 }
   3501 
   3502 /**
   3503 A monomorphic instance of Eurydice.slice_subslice_mut
   3504 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3505 
   3506 */
   3507 static inline Eurydice_mut_borrow_slice_u8
   3508 Eurydice_slice_subslice_mut_c8(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_87 r)
   3509 {
   3510   return
   3511     (
   3512       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start }
   3513     );
   3514 }
   3515 
   3516 /**
   3517 A monomorphic instance of Eurydice.array_to_slice_shared
   3518 with types uint8_t
   3519 with const generics
   3520 - N= 136
   3521 */
   3522 static inline Eurydice_borrow_slice_u8
   3523 Eurydice_array_to_slice_shared_58(const Eurydice_arr_ff *a)
   3524 {
   3525   Eurydice_borrow_slice_u8 lit;
   3526   lit.ptr = a->data;
   3527   lit.meta = (size_t)136U;
   3528   return lit;
   3529 }
   3530 
   3531 /**
   3532 A monomorphic instance of Eurydice.array_to_subslice_mut
   3533 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3534 with const generics
   3535 - N= 136
   3536 */
   3537 static inline Eurydice_mut_borrow_slice_u8
   3538 Eurydice_array_to_subslice_mut_d42(Eurydice_arr_ff *a, core_ops_range_Range_87 r)
   3539 {
   3540   return
   3541     (
   3542       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3543         .ptr = a->data + r.start,
   3544         .meta = r.end - r.start
   3545       }
   3546     );
   3547 }
   3548 
   3549 /**
   3550 A monomorphic instance of Eurydice.arr
   3551 with types uint64_t
   3552 with const generics
   3553 - $5size_t
   3554 */
   3555 typedef struct Eurydice_arr_84_s { uint64_t data[5U]; } Eurydice_arr_84;
   3556 
   3557 typedef struct size_t_x2_s
   3558 {
   3559   size_t fst;
   3560   size_t snd;
   3561 }
   3562 size_t_x2;
   3563 
   3564 /**
   3565 A monomorphic instance of Eurydice.arr
   3566 with types Eurydice_borrow_slice_u8
   3567 with const generics
   3568 - $1size_t
   3569 */
   3570 typedef struct Eurydice_arr_dc_s { Eurydice_borrow_slice_u8 data[1U]; } Eurydice_arr_dc;
   3571 
   3572 /**
   3573 A monomorphic instance of Eurydice.array_to_slice_shared
   3574 with types uint8_t
   3575 with const generics
   3576 - N= 168
   3577 */
   3578 static inline Eurydice_borrow_slice_u8
   3579 Eurydice_array_to_slice_shared_2c(const Eurydice_arr_c5 *a)
   3580 {
   3581   Eurydice_borrow_slice_u8 lit;
   3582   lit.ptr = a->data;
   3583   lit.meta = (size_t)168U;
   3584   return lit;
   3585 }
   3586 
   3587 /**
   3588 A monomorphic instance of core.result.Result
   3589 with types Eurydice_array_u8x8, core_array_TryFromSliceError
   3590 
   3591 */
   3592 typedef struct core_result_Result_8e_s
   3593 {
   3594   core_result_Result_57_tags tag;
   3595   union {
   3596     Eurydice_array_u8x8 case_Ok;
   3597     core_array_TryFromSliceError case_Err;
   3598   }
   3599   val;
   3600 }
   3601 core_result_Result_8e;
   3602 
   3603 /**
   3604 This function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}
   3605 */
   3606 /**
   3607 A monomorphic instance of core.result.unwrap_26
   3608 with types Eurydice_arr uint8_t[[$8size_t]], core_array_TryFromSliceError
   3609 
   3610 */
   3611 static inline Eurydice_array_u8x8 core_result_unwrap_26_e0(core_result_Result_8e self)
   3612 {
   3613   if (self.tag == core_result_Ok)
   3614   {
   3615     return self.val.case_Ok;
   3616   }
   3617   else
   3618   {
   3619     KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "unwrap not Ok");
   3620     KRML_HOST_EXIT(255U);
   3621   }
   3622 }
   3623 
   3624 /**
   3625 A monomorphic instance of Eurydice.array_to_subslice_mut
   3626 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3627 with const generics
   3628 - N= 168
   3629 */
   3630 static inline Eurydice_mut_borrow_slice_u8
   3631 Eurydice_array_to_subslice_mut_d41(Eurydice_arr_c5 *a, core_ops_range_Range_87 r)
   3632 {
   3633   return
   3634     (
   3635       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3636         .ptr = a->data + r.start,
   3637         .meta = r.end - r.start
   3638       }
   3639     );
   3640 }
   3641 
   3642 /**
   3643 A monomorphic instance of Eurydice.arr
   3644 with types uint64_t
   3645 with const generics
   3646 - $24size_t
   3647 */
   3648 typedef struct Eurydice_arr_22_s { uint64_t data[24U]; } Eurydice_arr_22;
   3649 
   3650 /**
   3651 A monomorphic instance of Eurydice.arr
   3652 with types Eurydice_arr_ff
   3653 with const generics
   3654 - $1size_t
   3655 */
   3656 typedef struct Eurydice_arr_0b_s { Eurydice_arr_ff data[1U]; } Eurydice_arr_0b;
   3657 
   3658 /**
   3659 A monomorphic instance of Eurydice.arr
   3660 with types uint64_t
   3661 with const generics
   3662 - $25size_t
   3663 */
   3664 typedef struct Eurydice_arr_7c_s { uint64_t data[25U]; } Eurydice_arr_7c;
   3665 
   3666 /**
   3667 A monomorphic instance of Eurydice.slice_subslice_shared
   3668 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3669 
   3670 */
   3671 static inline Eurydice_borrow_slice_u8
   3672 Eurydice_slice_subslice_shared_c8(Eurydice_borrow_slice_u8 s, core_ops_range_Range_87 r)
   3673 {
   3674   return
   3675     (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start });
   3676 }
   3677 
   3678 /**
   3679 A monomorphic instance of Eurydice.arr
   3680 with types int32_t
   3681 with const generics
   3682 - $8size_t
   3683 */
   3684 typedef struct Eurydice_arr_4d_s { int32_t data[8U]; } Eurydice_arr_4d;
   3685 
   3686 /**
   3687 A monomorphic instance of Eurydice.array_to_subslice_shared
   3688 with types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t
   3689 with const generics
   3690 - N= 8
   3691 */
   3692 static inline Eurydice_dst_ref_shared_83
   3693 Eurydice_array_to_subslice_shared_44(const Eurydice_arr_4d *a, core_ops_range_Range_87 r)
   3694 {
   3695   return
   3696     (
   3697       KRML_CLITERAL(Eurydice_dst_ref_shared_83){ .ptr = a->data + r.start, .meta = r.end - r.start }
   3698     );
   3699 }
   3700 
   3701 /**
   3702  Declassify secret memory.
   3703 
   3704  No-op if `valgrind_ct_test` cfg is not enabled.
   3705 */
   3706 /**
   3707 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   3708 with types bool
   3709 
   3710 */
   3711 static KRML_MUSTINLINE void libcrux_secrets_mem_requests_ct_declassify_5f(const bool *val)
   3712 {
   3713 
   3714 }
   3715 
   3716 typedef struct int32_t_x2_s
   3717 {
   3718   int32_t fst;
   3719   int32_t snd;
   3720 }
   3721 int32_t_x2;
   3722 
   3723 /**
   3724 A monomorphic instance of Eurydice.array_to_slice_shared
   3725 with types int32_t
   3726 with const generics
   3727 - N= 8
   3728 */
   3729 static inline Eurydice_dst_ref_shared_83
   3730 Eurydice_array_to_slice_shared_fd(const Eurydice_arr_4d *a)
   3731 {
   3732   Eurydice_dst_ref_shared_83 lit;
   3733   lit.ptr = a->data;
   3734   lit.meta = (size_t)8U;
   3735   return lit;
   3736 }
   3737 
   3738 /**
   3739 A monomorphic instance of Eurydice.slice_subslice_shared
   3740 with types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t
   3741 
   3742 */
   3743 static inline Eurydice_dst_ref_shared_83
   3744 Eurydice_slice_subslice_shared_47(Eurydice_dst_ref_shared_83 s, core_ops_range_Range_87 r)
   3745 {
   3746   return
   3747     (KRML_CLITERAL(Eurydice_dst_ref_shared_83){ .ptr = s.ptr + r.start, .meta = r.end - r.start });
   3748 }
   3749 
   3750 /**
   3751 A monomorphic instance of Eurydice.array_to_slice_mut
   3752 with types int32_t
   3753 with const generics
   3754 - N= 8
   3755 */
   3756 static inline Eurydice_dst_ref_mut_83 Eurydice_array_to_slice_mut_fd(Eurydice_arr_4d *a)
   3757 {
   3758   Eurydice_dst_ref_mut_83 lit;
   3759   lit.ptr = a->data;
   3760   lit.meta = (size_t)8U;
   3761   return lit;
   3762 }
   3763 
   3764 /**
   3765 A monomorphic instance of core.option.Option
   3766 with types Eurydice_arr_c9
   3767 
   3768 */
   3769 typedef struct core_option_Option_57_s
   3770 {
   3771   core_option_Option_45_tags tag;
   3772   Eurydice_arr_c9 f0;
   3773 }
   3774 core_option_Option_57;
   3775 
   3776 /**
   3777 A monomorphic instance of Eurydice.array_to_subslice_mut
   3778 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3779 with const generics
   3780 - N= 34
   3781 */
   3782 static inline Eurydice_mut_borrow_slice_u8
   3783 Eurydice_array_to_subslice_mut_d40(Eurydice_arr_31 *a, core_ops_range_Range_87 r)
   3784 {
   3785   return
   3786     (
   3787       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3788         .ptr = a->data + r.start,
   3789         .meta = r.end - r.start
   3790       }
   3791     );
   3792 }
   3793 
   3794 typedef struct uint8_t_x2_s
   3795 {
   3796   uint8_t fst;
   3797   uint8_t snd;
   3798 }
   3799 uint8_t_x2;
   3800 
   3801 /**
   3802 A monomorphic instance of Eurydice.array_to_subslice_mut
   3803 with types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t
   3804 with const generics
   3805 - N= 66
   3806 */
   3807 static inline Eurydice_mut_borrow_slice_u8
   3808 Eurydice_array_to_subslice_mut_d4(Eurydice_arr_91 *a, core_ops_range_Range_87 r)
   3809 {
   3810   return
   3811     (
   3812       KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){
   3813         .ptr = a->data + r.start,
   3814         .meta = r.end - r.start
   3815       }
   3816     );
   3817 }
   3818 
   3819 typedef struct libcrux_ml_kem_utils_extraction_helper_Keypair768_s
   3820 {
   3821   Eurydice_arr_0e fst;
   3822   Eurydice_arr_5f snd;
   3823 }
   3824 libcrux_ml_kem_utils_extraction_helper_Keypair768;
   3825 
   3826 /**
   3827 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   3828 */
   3829 /**
   3830 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   3831 with types uint64_t
   3832 
   3833 */
   3834 static KRML_MUSTINLINE uint64_t
   3835 libcrux_secrets_int_public_integers_declassify_d8_49(uint64_t self)
   3836 {
   3837   return self;
   3838 }
   3839 
   3840 /**
   3841 This function found in impl {libcrux_secrets::traits::Classify<T> for T}
   3842 */
   3843 /**
   3844 A monomorphic instance of libcrux_secrets.int.public_integers.classify_27
   3845 with types uint32_t
   3846 
   3847 */
   3848 static KRML_MUSTINLINE uint32_t
   3849 libcrux_secrets_int_public_integers_classify_27_df(uint32_t self)
   3850 {
   3851   return self;
   3852 }
   3853 
   3854 /**
   3855 This function found in impl {libcrux_secrets::traits::Classify<T> for T}
   3856 */
   3857 /**
   3858 A monomorphic instance of libcrux_secrets.int.public_integers.classify_27
   3859 with types uint64_t
   3860 
   3861 */
   3862 static KRML_MUSTINLINE uint64_t
   3863 libcrux_secrets_int_public_integers_classify_27_49(uint64_t self)
   3864 {
   3865   return self;
   3866 }
   3867 
   3868 /**
   3869 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   3870 */
   3871 /**
   3872 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   3873 with types uint16_t
   3874 
   3875 */
   3876 static KRML_MUSTINLINE uint16_t
   3877 libcrux_secrets_int_public_integers_declassify_d8_de(uint16_t self)
   3878 {
   3879   return self;
   3880 }
   3881 
   3882 /**
   3883 This function found in impl {libcrux_secrets::traits::Classify<T> for T}
   3884 */
   3885 /**
   3886 A monomorphic instance of libcrux_secrets.int.public_integers.classify_27
   3887 with types uint16_t
   3888 
   3889 */
   3890 static KRML_MUSTINLINE uint16_t
   3891 libcrux_secrets_int_public_integers_classify_27_de(uint16_t self)
   3892 {
   3893   return self;
   3894 }
   3895 
   3896 /**
   3897 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   3898 */
   3899 /**
   3900 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   3901 with types uint32_t
   3902 
   3903 */
   3904 static KRML_MUSTINLINE uint32_t
   3905 libcrux_secrets_int_public_integers_declassify_d8_df(uint32_t self)
   3906 {
   3907   return self;
   3908 }
   3909 
   3910 /**
   3911 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   3912 */
   3913 /**
   3914 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   3915 with types int32_t
   3916 
   3917 */
   3918 static KRML_MUSTINLINE int32_t
   3919 libcrux_secrets_int_public_integers_declassify_d8_a8(int32_t self)
   3920 {
   3921   return self;
   3922 }
   3923 
   3924 /**
   3925 This function found in impl {libcrux_secrets::traits::Classify<T> for T}
   3926 */
   3927 /**
   3928 A monomorphic instance of libcrux_secrets.int.public_integers.classify_27
   3929 with types int32_t
   3930 
   3931 */
   3932 static KRML_MUSTINLINE int32_t libcrux_secrets_int_public_integers_classify_27_a8(int32_t self)
   3933 {
   3934   return self;
   3935 }
   3936 
   3937 /**
   3938 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   3939 */
   3940 /**
   3941 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   3942 with types uint8_t
   3943 
   3944 */
   3945 static KRML_MUSTINLINE uint8_t
   3946 libcrux_secrets_int_public_integers_declassify_d8_90(uint8_t self)
   3947 {
   3948   return self;
   3949 }
   3950 
   3951 /**
   3952 This function found in impl {libcrux_secrets::traits::Classify<T> for T}
   3953 */
   3954 /**
   3955 A monomorphic instance of libcrux_secrets.int.public_integers.classify_27
   3956 with types int16_t
   3957 
   3958 */
   3959 static KRML_MUSTINLINE int16_t libcrux_secrets_int_public_integers_classify_27_39(int16_t self)
   3960 {
   3961   return self;
   3962 }
   3963 
   3964 /**
   3965 This function found in impl {libcrux_secrets::traits::Declassify<T> for T}
   3966 */
   3967 /**
   3968 A monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8
   3969 with types int16_t
   3970 
   3971 */
   3972 static KRML_MUSTINLINE int16_t
   3973 libcrux_secrets_int_public_integers_declassify_d8_39(int16_t self)
   3974 {
   3975   return self;
   3976 }
   3977 
   3978 /**
   3979 This function found in impl {libcrux_secrets::traits::Classify<T> for T}
   3980 */
   3981 /**
   3982 A monomorphic instance of libcrux_secrets.int.public_integers.classify_27
   3983 with types uint8_t
   3984 
   3985 */
   3986 static KRML_MUSTINLINE uint8_t libcrux_secrets_int_public_integers_classify_27_90(uint8_t self)
   3987 {
   3988   return self;
   3989 }
   3990 
   3991 #if defined(__cplusplus)
   3992 }
   3993 #endif
   3994 
   3995 #define combined_core_H_DEFINED
   3996 #endif /* combined_core_H */
   3997 
   3998 /* from libcrux/combined_extraction/generated/libcrux_sha3_portable.h */
   3999 /*
   4000  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   4001  *
   4002  * SPDX-License-Identifier: MIT or Apache-2.0
   4003  *
   4004  * This code was generated with the following revisions:
   4005  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   4006  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   4007  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   4008  * F*: unset
   4009  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   4010  */
   4011 
   4012 
   4013 #ifndef libcrux_sha3_portable_H
   4014 #define libcrux_sha3_portable_H
   4015 
   4016 
   4017 
   4018 #if defined(__cplusplus)
   4019 extern "C" {
   4020 #endif
   4021 
   4022 
   4023 /**
   4024 A monomorphic instance of libcrux_sha3.generic_keccak.KeccakState
   4025 with types uint64_t
   4026 with const generics
   4027 - $1size_t
   4028 */
   4029 typedef Eurydice_arr_7c libcrux_sha3_generic_keccak_KeccakState_f3;
   4030 
   4031 typedef libcrux_sha3_generic_keccak_KeccakState_f3 libcrux_sha3_portable_KeccakState;
   4032 
   4033 /**
   4034 A monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState
   4035 with types uint64_t
   4036 with const generics
   4037 - $1size_t
   4038 - $136size_t
   4039 */
   4040 typedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_8d_s
   4041 {
   4042   Eurydice_arr_7c inner;
   4043   Eurydice_arr_0b buf;
   4044   size_t buf_len;
   4045   bool sponge;
   4046 }
   4047 libcrux_sha3_generic_keccak_xof_KeccakXofState_8d;
   4048 
   4049 typedef libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   4050 libcrux_sha3_portable_incremental_Shake256Xof;
   4051 
   4052 /**
   4053 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4054 */
   4055 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_zero_d2(void)
   4056 {
   4057   return 0ULL;
   4058 }
   4059 
   4060 static KRML_MUSTINLINE uint64_t
   4061 libcrux_sha3_simd_portable__veor5q_u64(
   4062   uint64_t a,
   4063   uint64_t b,
   4064   uint64_t c,
   4065   uint64_t d,
   4066   uint64_t e
   4067 )
   4068 {
   4069   return (((a ^ b) ^ c) ^ d) ^ e;
   4070 }
   4071 
   4072 /**
   4073 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4074 */
   4075 static KRML_MUSTINLINE uint64_t
   4076 libcrux_sha3_simd_portable_xor5_d2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e)
   4077 {
   4078   return libcrux_sha3_simd_portable__veor5q_u64(a, b, c, d, e);
   4079 }
   4080 
   4081 /**
   4082 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4083 with const generics
   4084 - LEFT= 1
   4085 - RIGHT= 63
   4086 */
   4087 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_76(uint64_t x)
   4088 {
   4089   return core_num__u64__rotate_left(x, (uint32_t)1);
   4090 }
   4091 
   4092 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, uint64_t b)
   4093 {
   4094   return a ^ libcrux_sha3_simd_portable_rotate_left_76(b);
   4095 }
   4096 
   4097 /**
   4098 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4099 */
   4100 static KRML_MUSTINLINE uint64_t
   4101 libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, uint64_t b)
   4102 {
   4103   return libcrux_sha3_simd_portable__vrax1q_u64(a, b);
   4104 }
   4105 
   4106 static KRML_MUSTINLINE uint64_t
   4107 libcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c)
   4108 {
   4109   return a ^ (b & ~c);
   4110 }
   4111 
   4112 /**
   4113 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4114 */
   4115 static KRML_MUSTINLINE uint64_t
   4116 libcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, uint64_t b, uint64_t c)
   4117 {
   4118   return libcrux_sha3_simd_portable__vbcaxq_u64(a, b, c);
   4119 }
   4120 
   4121 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, uint64_t c)
   4122 {
   4123   return a ^ c;
   4124 }
   4125 
   4126 /**
   4127 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4128 */
   4129 static KRML_MUSTINLINE uint64_t
   4130 libcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c)
   4131 {
   4132   return libcrux_sha3_simd_portable__veorq_n_u64(a, c);
   4133 }
   4134 
   4135 /**
   4136 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4137 */
   4138 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_xor_d2(uint64_t a, uint64_t b)
   4139 {
   4140   return a ^ b;
   4141 }
   4142 
   4143 /**
   4144  Create a new Shake128 x4 state.
   4145 */
   4146 /**
   4147 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   4148 */
   4149 /**
   4150 A monomorphic instance of libcrux_sha3.generic_keccak.new_80
   4151 with types uint64_t
   4152 with const generics
   4153 - N= 1
   4154 */
   4155 static KRML_MUSTINLINE Eurydice_arr_7c libcrux_sha3_generic_keccak_new_80_71(void)
   4156 {
   4157   Eurydice_arr_7c lit;
   4158   uint64_t repeat_expression[25U];
   4159   for (size_t i = (size_t)0U; i < (size_t)25U; i++)
   4160   {
   4161     repeat_expression[i] = libcrux_sha3_simd_portable_zero_d2();
   4162   }
   4163   memcpy(lit.data, repeat_expression, (size_t)25U * sizeof (uint64_t));
   4164   return lit;
   4165 }
   4166 
   4167 /**
   4168  Create a new SHAKE-128 state object.
   4169 */
   4170 static KRML_MUSTINLINE Eurydice_arr_7c libcrux_sha3_portable_incremental_shake128_init(void)
   4171 {
   4172   return libcrux_sha3_generic_keccak_new_80_71();
   4173 }
   4174 
   4175 #define LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS ((KRML_CLITERAL(Eurydice_arr_22){ .data = { 1ULL, 32898ULL, 9223372036854808714ULL, 9223372039002292224ULL, 32907ULL, 2147483649ULL, 9223372039002292353ULL, 9223372036854808585ULL, 138ULL, 136ULL, 2147516425ULL, 2147483658ULL, 2147516555ULL, 9223372036854775947ULL, 9223372036854808713ULL, 9223372036854808579ULL, 9223372036854808578ULL, 9223372036854775936ULL, 32778ULL, 9223372039002259466ULL, 9223372039002292353ULL, 9223372036854808704ULL, 2147483649ULL, 9223372039002292232ULL } }))
   4176 
   4177 /**
   4178 A monomorphic instance of libcrux_sha3.traits.get_ij
   4179 with types uint64_t
   4180 with const generics
   4181 - N= 1
   4182 */
   4183 static KRML_MUSTINLINE const
   4184 uint64_t
   4185 *libcrux_sha3_traits_get_ij_71(const Eurydice_arr_7c *arr, size_t i, size_t j)
   4186 {
   4187   return &arr->data[(size_t)5U * j + i];
   4188 }
   4189 
   4190 /**
   4191 A monomorphic instance of libcrux_sha3.traits.set_ij
   4192 with types uint64_t
   4193 with const generics
   4194 - N= 1
   4195 */
   4196 static KRML_MUSTINLINE void
   4197 libcrux_sha3_traits_set_ij_71(Eurydice_arr_7c *arr, size_t i, size_t j, uint64_t value)
   4198 {
   4199   arr->data[(size_t)5U * j + i] = value;
   4200 }
   4201 
   4202 /**
   4203 A monomorphic instance of libcrux_sha3.simd.portable.load_block
   4204 with const generics
   4205 - RATE= 168
   4206 */
   4207 static KRML_MUSTINLINE void
   4208 libcrux_sha3_simd_portable_load_block_60(
   4209   Eurydice_arr_7c *state,
   4210   Eurydice_borrow_slice_u8 blocks,
   4211   size_t start
   4212 )
   4213 {
   4214   Eurydice_arr_7c state_flat = { .data = { 0U } };
   4215   for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++)
   4216   {
   4217     size_t i0 = i;
   4218     size_t offset = start + (size_t)8U * i0;
   4219     Eurydice_array_u8x8 arr;
   4220     memcpy(arr.data,
   4221       Eurydice_slice_subslice_shared_c8(blocks,
   4222         (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,
   4223       (size_t)8U * sizeof (uint8_t));
   4224     Eurydice_array_u8x8
   4225     uu____0 =
   4226       core_result_unwrap_26_e0((
   4227           KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   4228         ));
   4229     state_flat.data[i0] = core_num__u64__from_le_bytes(uu____0);
   4230   }
   4231   for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++)
   4232   {
   4233     size_t i0 = i;
   4234     libcrux_sha3_traits_set_ij_71(state,
   4235       i0 / (size_t)5U,
   4236       i0 % (size_t)5U,
   4237       libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^
   4238         state_flat.data[i0]);
   4239   }
   4240 }
   4241 
   4242 /**
   4243 A monomorphic instance of libcrux_sha3.simd.portable.load_last
   4244 with const generics
   4245 - RATE= 168
   4246 - DELIMITER= 31
   4247 */
   4248 static KRML_MUSTINLINE void
   4249 libcrux_sha3_simd_portable_load_last_37(
   4250   Eurydice_arr_7c *state,
   4251   Eurydice_borrow_slice_u8 blocks,
   4252   size_t start,
   4253   size_t len
   4254 )
   4255 {
   4256   Eurydice_arr_c5 buffer = { .data = { 0U } };
   4257   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d41(&buffer,
   4258       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),
   4259     Eurydice_slice_subslice_shared_c8(blocks,
   4260       (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),
   4261     uint8_t);
   4262   buffer.data[len] = 31U;
   4263   size_t uu____0 = (size_t)168U - (size_t)1U;
   4264   buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;
   4265   libcrux_sha3_simd_portable_load_block_60(state,
   4266     Eurydice_array_to_slice_shared_2c(&buffer),
   4267     (size_t)0U);
   4268 }
   4269 
   4270 /**
   4271 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   4272 */
   4273 /**
   4274 A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1
   4275 with const generics
   4276 - RATE= 168
   4277 - DELIMITER= 31
   4278 */
   4279 static inline void
   4280 libcrux_sha3_simd_portable_load_last_a1_37(
   4281   Eurydice_arr_7c *self,
   4282   const Eurydice_arr_dc *input,
   4283   size_t start,
   4284   size_t len
   4285 )
   4286 {
   4287   libcrux_sha3_simd_portable_load_last_37(self, input->data[0U], start, len);
   4288 }
   4289 
   4290 /**
   4291  Get element `[i, j]`.
   4292 */
   4293 /**
   4294 This function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   4295 */
   4296 /**
   4297 A monomorphic instance of libcrux_sha3.generic_keccak.index_c2
   4298 with types uint64_t
   4299 with const generics
   4300 - N= 1
   4301 */
   4302 static inline const
   4303 uint64_t
   4304 *libcrux_sha3_generic_keccak_index_c2_71(const Eurydice_arr_7c *self, size_t_x2 index)
   4305 {
   4306   return libcrux_sha3_traits_get_ij_71(self, index.fst, index.snd);
   4307 }
   4308 
   4309 /**
   4310 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   4311 */
   4312 /**
   4313 A monomorphic instance of libcrux_sha3.generic_keccak.theta_80
   4314 with types uint64_t
   4315 with const generics
   4316 - N= 1
   4317 */
   4318 static KRML_MUSTINLINE Eurydice_arr_84
   4319 libcrux_sha3_generic_keccak_theta_80_71(Eurydice_arr_7c *self)
   4320 {
   4321   Eurydice_arr_84
   4322   c =
   4323     {
   4324       .data = {
   4325         libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   4326             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],
   4327           libcrux_sha3_generic_keccak_index_c2_71(self,
   4328             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],
   4329           libcrux_sha3_generic_keccak_index_c2_71(self,
   4330             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],
   4331           libcrux_sha3_generic_keccak_index_c2_71(self,
   4332             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],
   4333           libcrux_sha3_generic_keccak_index_c2_71(self,
   4334             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]),
   4335         libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   4336             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],
   4337           libcrux_sha3_generic_keccak_index_c2_71(self,
   4338             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],
   4339           libcrux_sha3_generic_keccak_index_c2_71(self,
   4340             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],
   4341           libcrux_sha3_generic_keccak_index_c2_71(self,
   4342             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],
   4343           libcrux_sha3_generic_keccak_index_c2_71(self,
   4344             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]),
   4345         libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   4346             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],
   4347           libcrux_sha3_generic_keccak_index_c2_71(self,
   4348             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],
   4349           libcrux_sha3_generic_keccak_index_c2_71(self,
   4350             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],
   4351           libcrux_sha3_generic_keccak_index_c2_71(self,
   4352             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],
   4353           libcrux_sha3_generic_keccak_index_c2_71(self,
   4354             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]),
   4355         libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   4356             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],
   4357           libcrux_sha3_generic_keccak_index_c2_71(self,
   4358             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],
   4359           libcrux_sha3_generic_keccak_index_c2_71(self,
   4360             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],
   4361           libcrux_sha3_generic_keccak_index_c2_71(self,
   4362             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],
   4363           libcrux_sha3_generic_keccak_index_c2_71(self,
   4364             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]),
   4365         libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   4366             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],
   4367           libcrux_sha3_generic_keccak_index_c2_71(self,
   4368             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],
   4369           libcrux_sha3_generic_keccak_index_c2_71(self,
   4370             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],
   4371           libcrux_sha3_generic_keccak_index_c2_71(self,
   4372             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],
   4373           libcrux_sha3_generic_keccak_index_c2_71(self,
   4374             (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U])
   4375       }
   4376     };
   4377   return
   4378     (
   4379       KRML_CLITERAL(Eurydice_arr_84){
   4380         .data = {
   4381           libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)0U + (size_t)4U) %
   4382               (size_t)5U],
   4383             c.data[((size_t)0U + (size_t)1U) % (size_t)5U]),
   4384           libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)1U + (size_t)4U) %
   4385               (size_t)5U],
   4386             c.data[((size_t)1U + (size_t)1U) % (size_t)5U]),
   4387           libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)2U + (size_t)4U) %
   4388               (size_t)5U],
   4389             c.data[((size_t)2U + (size_t)1U) % (size_t)5U]),
   4390           libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)3U + (size_t)4U) %
   4391               (size_t)5U],
   4392             c.data[((size_t)3U + (size_t)1U) % (size_t)5U]),
   4393           libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)4U + (size_t)4U) %
   4394               (size_t)5U],
   4395             c.data[((size_t)4U + (size_t)1U) % (size_t)5U])
   4396         }
   4397       }
   4398     );
   4399 }
   4400 
   4401 /**
   4402  Set element `[i, j] = v`.
   4403 */
   4404 /**
   4405 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   4406 */
   4407 /**
   4408 A monomorphic instance of libcrux_sha3.generic_keccak.set_80
   4409 with types uint64_t
   4410 with const generics
   4411 - N= 1
   4412 */
   4413 static inline void
   4414 libcrux_sha3_generic_keccak_set_80_71(Eurydice_arr_7c *self, size_t i, size_t j, uint64_t v)
   4415 {
   4416   libcrux_sha3_traits_set_ij_71(self, i, j, v);
   4417 }
   4418 
   4419 /**
   4420 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4421 with const generics
   4422 - LEFT= 36
   4423 - RIGHT= 28
   4424 */
   4425 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_02(uint64_t x)
   4426 {
   4427   return core_num__u64__rotate_left(x, (uint32_t)36);
   4428 }
   4429 
   4430 /**
   4431 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4432 with const generics
   4433 - LEFT= 36
   4434 - RIGHT= 28
   4435 */
   4436 static KRML_MUSTINLINE uint64_t
   4437 libcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, uint64_t b)
   4438 {
   4439   return libcrux_sha3_simd_portable_rotate_left_02(a ^ b);
   4440 }
   4441 
   4442 /**
   4443 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4444 */
   4445 /**
   4446 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4447 with const generics
   4448 - LEFT= 36
   4449 - RIGHT= 28
   4450 */
   4451 static KRML_MUSTINLINE uint64_t
   4452 libcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, uint64_t b)
   4453 {
   4454   return libcrux_sha3_simd_portable__vxarq_u64_02(a, b);
   4455 }
   4456 
   4457 /**
   4458 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4459 with const generics
   4460 - LEFT= 3
   4461 - RIGHT= 61
   4462 */
   4463 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x)
   4464 {
   4465   return core_num__u64__rotate_left(x, (uint32_t)3);
   4466 }
   4467 
   4468 /**
   4469 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4470 with const generics
   4471 - LEFT= 3
   4472 - RIGHT= 61
   4473 */
   4474 static KRML_MUSTINLINE uint64_t
   4475 libcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, uint64_t b)
   4476 {
   4477   return libcrux_sha3_simd_portable_rotate_left_ac(a ^ b);
   4478 }
   4479 
   4480 /**
   4481 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4482 */
   4483 /**
   4484 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4485 with const generics
   4486 - LEFT= 3
   4487 - RIGHT= 61
   4488 */
   4489 static KRML_MUSTINLINE uint64_t
   4490 libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, uint64_t b)
   4491 {
   4492   return libcrux_sha3_simd_portable__vxarq_u64_ac(a, b);
   4493 }
   4494 
   4495 /**
   4496 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4497 with const generics
   4498 - LEFT= 41
   4499 - RIGHT= 23
   4500 */
   4501 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_020(uint64_t x)
   4502 {
   4503   return core_num__u64__rotate_left(x, (uint32_t)41);
   4504 }
   4505 
   4506 /**
   4507 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4508 with const generics
   4509 - LEFT= 41
   4510 - RIGHT= 23
   4511 */
   4512 static KRML_MUSTINLINE uint64_t
   4513 libcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, uint64_t b)
   4514 {
   4515   return libcrux_sha3_simd_portable_rotate_left_020(a ^ b);
   4516 }
   4517 
   4518 /**
   4519 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4520 */
   4521 /**
   4522 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4523 with const generics
   4524 - LEFT= 41
   4525 - RIGHT= 23
   4526 */
   4527 static KRML_MUSTINLINE uint64_t
   4528 libcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, uint64_t b)
   4529 {
   4530   return libcrux_sha3_simd_portable__vxarq_u64_020(a, b);
   4531 }
   4532 
   4533 /**
   4534 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4535 with const generics
   4536 - LEFT= 18
   4537 - RIGHT= 46
   4538 */
   4539 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x)
   4540 {
   4541   return core_num__u64__rotate_left(x, (uint32_t)18);
   4542 }
   4543 
   4544 /**
   4545 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4546 with const generics
   4547 - LEFT= 18
   4548 - RIGHT= 46
   4549 */
   4550 static KRML_MUSTINLINE uint64_t
   4551 libcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, uint64_t b)
   4552 {
   4553   return libcrux_sha3_simd_portable_rotate_left_a9(a ^ b);
   4554 }
   4555 
   4556 /**
   4557 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4558 */
   4559 /**
   4560 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4561 with const generics
   4562 - LEFT= 18
   4563 - RIGHT= 46
   4564 */
   4565 static KRML_MUSTINLINE uint64_t
   4566 libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, uint64_t b)
   4567 {
   4568   return libcrux_sha3_simd_portable__vxarq_u64_a9(a, b);
   4569 }
   4570 
   4571 /**
   4572 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   4573 */
   4574 /**
   4575 A monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80
   4576 with types uint64_t
   4577 with const generics
   4578 - N= 1
   4579 */
   4580 static KRML_MUSTINLINE void
   4581 libcrux_sha3_generic_keccak_rho_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)
   4582 {
   4583   libcrux_sha3_generic_keccak_set_80_71(self,
   4584     (size_t)0U,
   4585     (size_t)0U,
   4586     libcrux_sha3_simd_portable_xor_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   4587         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],
   4588       t.data[0U]));
   4589   libcrux_sha3_generic_keccak_set_80_71(self,
   4590     (size_t)1U,
   4591     (size_t)0U,
   4592     libcrux_sha3_simd_portable_xor_and_rotate_d2_02(libcrux_sha3_generic_keccak_index_c2_71(self,
   4593         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],
   4594       t.data[0U]));
   4595   libcrux_sha3_generic_keccak_set_80_71(self,
   4596     (size_t)2U,
   4597     (size_t)0U,
   4598     libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(libcrux_sha3_generic_keccak_index_c2_71(self,
   4599         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],
   4600       t.data[0U]));
   4601   libcrux_sha3_generic_keccak_set_80_71(self,
   4602     (size_t)3U,
   4603     (size_t)0U,
   4604     libcrux_sha3_simd_portable_xor_and_rotate_d2_020(libcrux_sha3_generic_keccak_index_c2_71(self,
   4605         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],
   4606       t.data[0U]));
   4607   libcrux_sha3_generic_keccak_set_80_71(self,
   4608     (size_t)4U,
   4609     (size_t)0U,
   4610     libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(libcrux_sha3_generic_keccak_index_c2_71(self,
   4611         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U],
   4612       t.data[0U]));
   4613 }
   4614 
   4615 /**
   4616 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4617 with const generics
   4618 - LEFT= 1
   4619 - RIGHT= 63
   4620 */
   4621 static KRML_MUSTINLINE uint64_t
   4622 libcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, uint64_t b)
   4623 {
   4624   return libcrux_sha3_simd_portable_rotate_left_76(a ^ b);
   4625 }
   4626 
   4627 /**
   4628 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4629 */
   4630 /**
   4631 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4632 with const generics
   4633 - LEFT= 1
   4634 - RIGHT= 63
   4635 */
   4636 static KRML_MUSTINLINE uint64_t
   4637 libcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, uint64_t b)
   4638 {
   4639   return libcrux_sha3_simd_portable__vxarq_u64_76(a, b);
   4640 }
   4641 
   4642 /**
   4643 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4644 with const generics
   4645 - LEFT= 44
   4646 - RIGHT= 20
   4647 */
   4648 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_58(uint64_t x)
   4649 {
   4650   return core_num__u64__rotate_left(x, (uint32_t)44);
   4651 }
   4652 
   4653 /**
   4654 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4655 with const generics
   4656 - LEFT= 44
   4657 - RIGHT= 20
   4658 */
   4659 static KRML_MUSTINLINE uint64_t
   4660 libcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, uint64_t b)
   4661 {
   4662   return libcrux_sha3_simd_portable_rotate_left_58(a ^ b);
   4663 }
   4664 
   4665 /**
   4666 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4667 */
   4668 /**
   4669 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4670 with const generics
   4671 - LEFT= 44
   4672 - RIGHT= 20
   4673 */
   4674 static KRML_MUSTINLINE uint64_t
   4675 libcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, uint64_t b)
   4676 {
   4677   return libcrux_sha3_simd_portable__vxarq_u64_58(a, b);
   4678 }
   4679 
   4680 /**
   4681 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4682 with const generics
   4683 - LEFT= 10
   4684 - RIGHT= 54
   4685 */
   4686 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x)
   4687 {
   4688   return core_num__u64__rotate_left(x, (uint32_t)10);
   4689 }
   4690 
   4691 /**
   4692 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4693 with const generics
   4694 - LEFT= 10
   4695 - RIGHT= 54
   4696 */
   4697 static KRML_MUSTINLINE uint64_t
   4698 libcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, uint64_t b)
   4699 {
   4700   return libcrux_sha3_simd_portable_rotate_left_e0(a ^ b);
   4701 }
   4702 
   4703 /**
   4704 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4705 */
   4706 /**
   4707 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4708 with const generics
   4709 - LEFT= 10
   4710 - RIGHT= 54
   4711 */
   4712 static KRML_MUSTINLINE uint64_t
   4713 libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, uint64_t b)
   4714 {
   4715   return libcrux_sha3_simd_portable__vxarq_u64_e0(a, b);
   4716 }
   4717 
   4718 /**
   4719 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4720 with const generics
   4721 - LEFT= 45
   4722 - RIGHT= 19
   4723 */
   4724 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_63(uint64_t x)
   4725 {
   4726   return core_num__u64__rotate_left(x, (uint32_t)45);
   4727 }
   4728 
   4729 /**
   4730 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4731 with const generics
   4732 - LEFT= 45
   4733 - RIGHT= 19
   4734 */
   4735 static KRML_MUSTINLINE uint64_t
   4736 libcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, uint64_t b)
   4737 {
   4738   return libcrux_sha3_simd_portable_rotate_left_63(a ^ b);
   4739 }
   4740 
   4741 /**
   4742 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4743 */
   4744 /**
   4745 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4746 with const generics
   4747 - LEFT= 45
   4748 - RIGHT= 19
   4749 */
   4750 static KRML_MUSTINLINE uint64_t
   4751 libcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, uint64_t b)
   4752 {
   4753   return libcrux_sha3_simd_portable__vxarq_u64_63(a, b);
   4754 }
   4755 
   4756 /**
   4757 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4758 with const generics
   4759 - LEFT= 2
   4760 - RIGHT= 62
   4761 */
   4762 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x)
   4763 {
   4764   return core_num__u64__rotate_left(x, (uint32_t)2);
   4765 }
   4766 
   4767 /**
   4768 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4769 with const generics
   4770 - LEFT= 2
   4771 - RIGHT= 62
   4772 */
   4773 static KRML_MUSTINLINE uint64_t
   4774 libcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, uint64_t b)
   4775 {
   4776   return libcrux_sha3_simd_portable_rotate_left_6a(a ^ b);
   4777 }
   4778 
   4779 /**
   4780 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4781 */
   4782 /**
   4783 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4784 with const generics
   4785 - LEFT= 2
   4786 - RIGHT= 62
   4787 */
   4788 static KRML_MUSTINLINE uint64_t
   4789 libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, uint64_t b)
   4790 {
   4791   return libcrux_sha3_simd_portable__vxarq_u64_6a(a, b);
   4792 }
   4793 
   4794 /**
   4795 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   4796 */
   4797 /**
   4798 A monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80
   4799 with types uint64_t
   4800 with const generics
   4801 - N= 1
   4802 */
   4803 static KRML_MUSTINLINE void
   4804 libcrux_sha3_generic_keccak_rho_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)
   4805 {
   4806   libcrux_sha3_generic_keccak_set_80_71(self,
   4807     (size_t)0U,
   4808     (size_t)1U,
   4809     libcrux_sha3_simd_portable_xor_and_rotate_d2_76(libcrux_sha3_generic_keccak_index_c2_71(self,
   4810         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],
   4811       t.data[1U]));
   4812   libcrux_sha3_generic_keccak_set_80_71(self,
   4813     (size_t)1U,
   4814     (size_t)1U,
   4815     libcrux_sha3_simd_portable_xor_and_rotate_d2_58(libcrux_sha3_generic_keccak_index_c2_71(self,
   4816         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],
   4817       t.data[1U]));
   4818   libcrux_sha3_generic_keccak_set_80_71(self,
   4819     (size_t)2U,
   4820     (size_t)1U,
   4821     libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(libcrux_sha3_generic_keccak_index_c2_71(self,
   4822         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],
   4823       t.data[1U]));
   4824   libcrux_sha3_generic_keccak_set_80_71(self,
   4825     (size_t)3U,
   4826     (size_t)1U,
   4827     libcrux_sha3_simd_portable_xor_and_rotate_d2_63(libcrux_sha3_generic_keccak_index_c2_71(self,
   4828         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],
   4829       t.data[1U]));
   4830   libcrux_sha3_generic_keccak_set_80_71(self,
   4831     (size_t)4U,
   4832     (size_t)1U,
   4833     libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(libcrux_sha3_generic_keccak_index_c2_71(self,
   4834         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U],
   4835       t.data[1U]));
   4836 }
   4837 
   4838 /**
   4839 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4840 with const generics
   4841 - LEFT= 62
   4842 - RIGHT= 2
   4843 */
   4844 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x)
   4845 {
   4846   return core_num__u64__rotate_left(x, (uint32_t)62);
   4847 }
   4848 
   4849 /**
   4850 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4851 with const generics
   4852 - LEFT= 62
   4853 - RIGHT= 2
   4854 */
   4855 static KRML_MUSTINLINE uint64_t
   4856 libcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, uint64_t b)
   4857 {
   4858   return libcrux_sha3_simd_portable_rotate_left_ab(a ^ b);
   4859 }
   4860 
   4861 /**
   4862 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4863 */
   4864 /**
   4865 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4866 with const generics
   4867 - LEFT= 62
   4868 - RIGHT= 2
   4869 */
   4870 static KRML_MUSTINLINE uint64_t
   4871 libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, uint64_t b)
   4872 {
   4873   return libcrux_sha3_simd_portable__vxarq_u64_ab(a, b);
   4874 }
   4875 
   4876 /**
   4877 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4878 with const generics
   4879 - LEFT= 6
   4880 - RIGHT= 58
   4881 */
   4882 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x)
   4883 {
   4884   return core_num__u64__rotate_left(x, (uint32_t)6);
   4885 }
   4886 
   4887 /**
   4888 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4889 with const generics
   4890 - LEFT= 6
   4891 - RIGHT= 58
   4892 */
   4893 static KRML_MUSTINLINE uint64_t
   4894 libcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, uint64_t b)
   4895 {
   4896   return libcrux_sha3_simd_portable_rotate_left_5b(a ^ b);
   4897 }
   4898 
   4899 /**
   4900 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4901 */
   4902 /**
   4903 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4904 with const generics
   4905 - LEFT= 6
   4906 - RIGHT= 58
   4907 */
   4908 static KRML_MUSTINLINE uint64_t
   4909 libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, uint64_t b)
   4910 {
   4911   return libcrux_sha3_simd_portable__vxarq_u64_5b(a, b);
   4912 }
   4913 
   4914 /**
   4915 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4916 with const generics
   4917 - LEFT= 43
   4918 - RIGHT= 21
   4919 */
   4920 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x)
   4921 {
   4922   return core_num__u64__rotate_left(x, (uint32_t)43);
   4923 }
   4924 
   4925 /**
   4926 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4927 with const generics
   4928 - LEFT= 43
   4929 - RIGHT= 21
   4930 */
   4931 static KRML_MUSTINLINE uint64_t
   4932 libcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, uint64_t b)
   4933 {
   4934   return libcrux_sha3_simd_portable_rotate_left_6f(a ^ b);
   4935 }
   4936 
   4937 /**
   4938 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4939 */
   4940 /**
   4941 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4942 with const generics
   4943 - LEFT= 43
   4944 - RIGHT= 21
   4945 */
   4946 static KRML_MUSTINLINE uint64_t
   4947 libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, uint64_t b)
   4948 {
   4949   return libcrux_sha3_simd_portable__vxarq_u64_6f(a, b);
   4950 }
   4951 
   4952 /**
   4953 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4954 with const generics
   4955 - LEFT= 15
   4956 - RIGHT= 49
   4957 */
   4958 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_62(uint64_t x)
   4959 {
   4960   return core_num__u64__rotate_left(x, (uint32_t)15);
   4961 }
   4962 
   4963 /**
   4964 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   4965 with const generics
   4966 - LEFT= 15
   4967 - RIGHT= 49
   4968 */
   4969 static KRML_MUSTINLINE uint64_t
   4970 libcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, uint64_t b)
   4971 {
   4972   return libcrux_sha3_simd_portable_rotate_left_62(a ^ b);
   4973 }
   4974 
   4975 /**
   4976 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   4977 */
   4978 /**
   4979 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   4980 with const generics
   4981 - LEFT= 15
   4982 - RIGHT= 49
   4983 */
   4984 static KRML_MUSTINLINE uint64_t
   4985 libcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, uint64_t b)
   4986 {
   4987   return libcrux_sha3_simd_portable__vxarq_u64_62(a, b);
   4988 }
   4989 
   4990 /**
   4991 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   4992 with const generics
   4993 - LEFT= 61
   4994 - RIGHT= 3
   4995 */
   4996 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_23(uint64_t x)
   4997 {
   4998   return core_num__u64__rotate_left(x, (uint32_t)61);
   4999 }
   5000 
   5001 /**
   5002 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5003 with const generics
   5004 - LEFT= 61
   5005 - RIGHT= 3
   5006 */
   5007 static KRML_MUSTINLINE uint64_t
   5008 libcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, uint64_t b)
   5009 {
   5010   return libcrux_sha3_simd_portable_rotate_left_23(a ^ b);
   5011 }
   5012 
   5013 /**
   5014 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5015 */
   5016 /**
   5017 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5018 with const generics
   5019 - LEFT= 61
   5020 - RIGHT= 3
   5021 */
   5022 static KRML_MUSTINLINE uint64_t
   5023 libcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, uint64_t b)
   5024 {
   5025   return libcrux_sha3_simd_portable__vxarq_u64_23(a, b);
   5026 }
   5027 
   5028 /**
   5029 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5030 */
   5031 /**
   5032 A monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80
   5033 with types uint64_t
   5034 with const generics
   5035 - N= 1
   5036 */
   5037 static KRML_MUSTINLINE void
   5038 libcrux_sha3_generic_keccak_rho_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)
   5039 {
   5040   libcrux_sha3_generic_keccak_set_80_71(self,
   5041     (size_t)0U,
   5042     (size_t)2U,
   5043     libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(libcrux_sha3_generic_keccak_index_c2_71(self,
   5044         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],
   5045       t.data[2U]));
   5046   libcrux_sha3_generic_keccak_set_80_71(self,
   5047     (size_t)1U,
   5048     (size_t)2U,
   5049     libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(libcrux_sha3_generic_keccak_index_c2_71(self,
   5050         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],
   5051       t.data[2U]));
   5052   libcrux_sha3_generic_keccak_set_80_71(self,
   5053     (size_t)2U,
   5054     (size_t)2U,
   5055     libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(libcrux_sha3_generic_keccak_index_c2_71(self,
   5056         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],
   5057       t.data[2U]));
   5058   libcrux_sha3_generic_keccak_set_80_71(self,
   5059     (size_t)3U,
   5060     (size_t)2U,
   5061     libcrux_sha3_simd_portable_xor_and_rotate_d2_62(libcrux_sha3_generic_keccak_index_c2_71(self,
   5062         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],
   5063       t.data[2U]));
   5064   libcrux_sha3_generic_keccak_set_80_71(self,
   5065     (size_t)4U,
   5066     (size_t)2U,
   5067     libcrux_sha3_simd_portable_xor_and_rotate_d2_23(libcrux_sha3_generic_keccak_index_c2_71(self,
   5068         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U],
   5069       t.data[2U]));
   5070 }
   5071 
   5072 /**
   5073 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5074 with const generics
   5075 - LEFT= 28
   5076 - RIGHT= 36
   5077 */
   5078 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_37(uint64_t x)
   5079 {
   5080   return core_num__u64__rotate_left(x, (uint32_t)28);
   5081 }
   5082 
   5083 /**
   5084 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5085 with const generics
   5086 - LEFT= 28
   5087 - RIGHT= 36
   5088 */
   5089 static KRML_MUSTINLINE uint64_t
   5090 libcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, uint64_t b)
   5091 {
   5092   return libcrux_sha3_simd_portable_rotate_left_37(a ^ b);
   5093 }
   5094 
   5095 /**
   5096 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5097 */
   5098 /**
   5099 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5100 with const generics
   5101 - LEFT= 28
   5102 - RIGHT= 36
   5103 */
   5104 static KRML_MUSTINLINE uint64_t
   5105 libcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, uint64_t b)
   5106 {
   5107   return libcrux_sha3_simd_portable__vxarq_u64_37(a, b);
   5108 }
   5109 
   5110 /**
   5111 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5112 with const generics
   5113 - LEFT= 55
   5114 - RIGHT= 9
   5115 */
   5116 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x)
   5117 {
   5118   return core_num__u64__rotate_left(x, (uint32_t)55);
   5119 }
   5120 
   5121 /**
   5122 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5123 with const generics
   5124 - LEFT= 55
   5125 - RIGHT= 9
   5126 */
   5127 static KRML_MUSTINLINE uint64_t
   5128 libcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, uint64_t b)
   5129 {
   5130   return libcrux_sha3_simd_portable_rotate_left_bb(a ^ b);
   5131 }
   5132 
   5133 /**
   5134 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5135 */
   5136 /**
   5137 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5138 with const generics
   5139 - LEFT= 55
   5140 - RIGHT= 9
   5141 */
   5142 static KRML_MUSTINLINE uint64_t
   5143 libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, uint64_t b)
   5144 {
   5145   return libcrux_sha3_simd_portable__vxarq_u64_bb(a, b);
   5146 }
   5147 
   5148 /**
   5149 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5150 with const generics
   5151 - LEFT= 25
   5152 - RIGHT= 39
   5153 */
   5154 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x)
   5155 {
   5156   return core_num__u64__rotate_left(x, (uint32_t)25);
   5157 }
   5158 
   5159 /**
   5160 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5161 with const generics
   5162 - LEFT= 25
   5163 - RIGHT= 39
   5164 */
   5165 static KRML_MUSTINLINE uint64_t
   5166 libcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, uint64_t b)
   5167 {
   5168   return libcrux_sha3_simd_portable_rotate_left_b9(a ^ b);
   5169 }
   5170 
   5171 /**
   5172 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5173 */
   5174 /**
   5175 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5176 with const generics
   5177 - LEFT= 25
   5178 - RIGHT= 39
   5179 */
   5180 static KRML_MUSTINLINE uint64_t
   5181 libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, uint64_t b)
   5182 {
   5183   return libcrux_sha3_simd_portable__vxarq_u64_b9(a, b);
   5184 }
   5185 
   5186 /**
   5187 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5188 with const generics
   5189 - LEFT= 21
   5190 - RIGHT= 43
   5191 */
   5192 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_54(uint64_t x)
   5193 {
   5194   return core_num__u64__rotate_left(x, (uint32_t)21);
   5195 }
   5196 
   5197 /**
   5198 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5199 with const generics
   5200 - LEFT= 21
   5201 - RIGHT= 43
   5202 */
   5203 static KRML_MUSTINLINE uint64_t
   5204 libcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, uint64_t b)
   5205 {
   5206   return libcrux_sha3_simd_portable_rotate_left_54(a ^ b);
   5207 }
   5208 
   5209 /**
   5210 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5211 */
   5212 /**
   5213 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5214 with const generics
   5215 - LEFT= 21
   5216 - RIGHT= 43
   5217 */
   5218 static KRML_MUSTINLINE uint64_t
   5219 libcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, uint64_t b)
   5220 {
   5221   return libcrux_sha3_simd_portable__vxarq_u64_54(a, b);
   5222 }
   5223 
   5224 /**
   5225 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5226 with const generics
   5227 - LEFT= 56
   5228 - RIGHT= 8
   5229 */
   5230 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x)
   5231 {
   5232   return core_num__u64__rotate_left(x, (uint32_t)56);
   5233 }
   5234 
   5235 /**
   5236 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5237 with const generics
   5238 - LEFT= 56
   5239 - RIGHT= 8
   5240 */
   5241 static KRML_MUSTINLINE uint64_t
   5242 libcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, uint64_t b)
   5243 {
   5244   return libcrux_sha3_simd_portable_rotate_left_4c(a ^ b);
   5245 }
   5246 
   5247 /**
   5248 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5249 */
   5250 /**
   5251 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5252 with const generics
   5253 - LEFT= 56
   5254 - RIGHT= 8
   5255 */
   5256 static KRML_MUSTINLINE uint64_t
   5257 libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, uint64_t b)
   5258 {
   5259   return libcrux_sha3_simd_portable__vxarq_u64_4c(a, b);
   5260 }
   5261 
   5262 /**
   5263 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5264 */
   5265 /**
   5266 A monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80
   5267 with types uint64_t
   5268 with const generics
   5269 - N= 1
   5270 */
   5271 static KRML_MUSTINLINE void
   5272 libcrux_sha3_generic_keccak_rho_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)
   5273 {
   5274   libcrux_sha3_generic_keccak_set_80_71(self,
   5275     (size_t)0U,
   5276     (size_t)3U,
   5277     libcrux_sha3_simd_portable_xor_and_rotate_d2_37(libcrux_sha3_generic_keccak_index_c2_71(self,
   5278         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],
   5279       t.data[3U]));
   5280   libcrux_sha3_generic_keccak_set_80_71(self,
   5281     (size_t)1U,
   5282     (size_t)3U,
   5283     libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(libcrux_sha3_generic_keccak_index_c2_71(self,
   5284         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],
   5285       t.data[3U]));
   5286   libcrux_sha3_generic_keccak_set_80_71(self,
   5287     (size_t)2U,
   5288     (size_t)3U,
   5289     libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(libcrux_sha3_generic_keccak_index_c2_71(self,
   5290         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],
   5291       t.data[3U]));
   5292   libcrux_sha3_generic_keccak_set_80_71(self,
   5293     (size_t)3U,
   5294     (size_t)3U,
   5295     libcrux_sha3_simd_portable_xor_and_rotate_d2_54(libcrux_sha3_generic_keccak_index_c2_71(self,
   5296         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],
   5297       t.data[3U]));
   5298   libcrux_sha3_generic_keccak_set_80_71(self,
   5299     (size_t)4U,
   5300     (size_t)3U,
   5301     libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(libcrux_sha3_generic_keccak_index_c2_71(self,
   5302         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U],
   5303       t.data[3U]));
   5304 }
   5305 
   5306 /**
   5307 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5308 with const generics
   5309 - LEFT= 27
   5310 - RIGHT= 37
   5311 */
   5312 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x)
   5313 {
   5314   return core_num__u64__rotate_left(x, (uint32_t)27);
   5315 }
   5316 
   5317 /**
   5318 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5319 with const generics
   5320 - LEFT= 27
   5321 - RIGHT= 37
   5322 */
   5323 static KRML_MUSTINLINE uint64_t
   5324 libcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, uint64_t b)
   5325 {
   5326   return libcrux_sha3_simd_portable_rotate_left_ce(a ^ b);
   5327 }
   5328 
   5329 /**
   5330 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5331 */
   5332 /**
   5333 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5334 with const generics
   5335 - LEFT= 27
   5336 - RIGHT= 37
   5337 */
   5338 static KRML_MUSTINLINE uint64_t
   5339 libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, uint64_t b)
   5340 {
   5341   return libcrux_sha3_simd_portable__vxarq_u64_ce(a, b);
   5342 }
   5343 
   5344 /**
   5345 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5346 with const generics
   5347 - LEFT= 20
   5348 - RIGHT= 44
   5349 */
   5350 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_77(uint64_t x)
   5351 {
   5352   return core_num__u64__rotate_left(x, (uint32_t)20);
   5353 }
   5354 
   5355 /**
   5356 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5357 with const generics
   5358 - LEFT= 20
   5359 - RIGHT= 44
   5360 */
   5361 static KRML_MUSTINLINE uint64_t
   5362 libcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, uint64_t b)
   5363 {
   5364   return libcrux_sha3_simd_portable_rotate_left_77(a ^ b);
   5365 }
   5366 
   5367 /**
   5368 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5369 */
   5370 /**
   5371 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5372 with const generics
   5373 - LEFT= 20
   5374 - RIGHT= 44
   5375 */
   5376 static KRML_MUSTINLINE uint64_t
   5377 libcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, uint64_t b)
   5378 {
   5379   return libcrux_sha3_simd_portable__vxarq_u64_77(a, b);
   5380 }
   5381 
   5382 /**
   5383 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5384 with const generics
   5385 - LEFT= 39
   5386 - RIGHT= 25
   5387 */
   5388 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_25(uint64_t x)
   5389 {
   5390   return core_num__u64__rotate_left(x, (uint32_t)39);
   5391 }
   5392 
   5393 /**
   5394 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5395 with const generics
   5396 - LEFT= 39
   5397 - RIGHT= 25
   5398 */
   5399 static KRML_MUSTINLINE uint64_t
   5400 libcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, uint64_t b)
   5401 {
   5402   return libcrux_sha3_simd_portable_rotate_left_25(a ^ b);
   5403 }
   5404 
   5405 /**
   5406 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5407 */
   5408 /**
   5409 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5410 with const generics
   5411 - LEFT= 39
   5412 - RIGHT= 25
   5413 */
   5414 static KRML_MUSTINLINE uint64_t
   5415 libcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, uint64_t b)
   5416 {
   5417   return libcrux_sha3_simd_portable__vxarq_u64_25(a, b);
   5418 }
   5419 
   5420 /**
   5421 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5422 with const generics
   5423 - LEFT= 8
   5424 - RIGHT= 56
   5425 */
   5426 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_af(uint64_t x)
   5427 {
   5428   return core_num__u64__rotate_left(x, (uint32_t)8);
   5429 }
   5430 
   5431 /**
   5432 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5433 with const generics
   5434 - LEFT= 8
   5435 - RIGHT= 56
   5436 */
   5437 static KRML_MUSTINLINE uint64_t
   5438 libcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, uint64_t b)
   5439 {
   5440   return libcrux_sha3_simd_portable_rotate_left_af(a ^ b);
   5441 }
   5442 
   5443 /**
   5444 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5445 */
   5446 /**
   5447 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5448 with const generics
   5449 - LEFT= 8
   5450 - RIGHT= 56
   5451 */
   5452 static KRML_MUSTINLINE uint64_t
   5453 libcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, uint64_t b)
   5454 {
   5455   return libcrux_sha3_simd_portable__vxarq_u64_af(a, b);
   5456 }
   5457 
   5458 /**
   5459 A monomorphic instance of libcrux_sha3.simd.portable.rotate_left
   5460 with const generics
   5461 - LEFT= 14
   5462 - RIGHT= 50
   5463 */
   5464 static KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x)
   5465 {
   5466   return core_num__u64__rotate_left(x, (uint32_t)14);
   5467 }
   5468 
   5469 /**
   5470 A monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64
   5471 with const generics
   5472 - LEFT= 14
   5473 - RIGHT= 50
   5474 */
   5475 static KRML_MUSTINLINE uint64_t
   5476 libcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, uint64_t b)
   5477 {
   5478   return libcrux_sha3_simd_portable_rotate_left_fd(a ^ b);
   5479 }
   5480 
   5481 /**
   5482 This function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}
   5483 */
   5484 /**
   5485 A monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2
   5486 with const generics
   5487 - LEFT= 14
   5488 - RIGHT= 50
   5489 */
   5490 static KRML_MUSTINLINE uint64_t
   5491 libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, uint64_t b)
   5492 {
   5493   return libcrux_sha3_simd_portable__vxarq_u64_fd(a, b);
   5494 }
   5495 
   5496 /**
   5497 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5498 */
   5499 /**
   5500 A monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80
   5501 with types uint64_t
   5502 with const generics
   5503 - N= 1
   5504 */
   5505 static KRML_MUSTINLINE void
   5506 libcrux_sha3_generic_keccak_rho_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)
   5507 {
   5508   libcrux_sha3_generic_keccak_set_80_71(self,
   5509     (size_t)0U,
   5510     (size_t)4U,
   5511     libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(libcrux_sha3_generic_keccak_index_c2_71(self,
   5512         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],
   5513       t.data[4U]));
   5514   libcrux_sha3_generic_keccak_set_80_71(self,
   5515     (size_t)1U,
   5516     (size_t)4U,
   5517     libcrux_sha3_simd_portable_xor_and_rotate_d2_77(libcrux_sha3_generic_keccak_index_c2_71(self,
   5518         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],
   5519       t.data[4U]));
   5520   libcrux_sha3_generic_keccak_set_80_71(self,
   5521     (size_t)2U,
   5522     (size_t)4U,
   5523     libcrux_sha3_simd_portable_xor_and_rotate_d2_25(libcrux_sha3_generic_keccak_index_c2_71(self,
   5524         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],
   5525       t.data[4U]));
   5526   libcrux_sha3_generic_keccak_set_80_71(self,
   5527     (size_t)3U,
   5528     (size_t)4U,
   5529     libcrux_sha3_simd_portable_xor_and_rotate_d2_af(libcrux_sha3_generic_keccak_index_c2_71(self,
   5530         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],
   5531       t.data[4U]));
   5532   libcrux_sha3_generic_keccak_set_80_71(self,
   5533     (size_t)4U,
   5534     (size_t)4U,
   5535     libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(libcrux_sha3_generic_keccak_index_c2_71(self,
   5536         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U],
   5537       t.data[4U]));
   5538 }
   5539 
   5540 /**
   5541 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5542 */
   5543 /**
   5544 A monomorphic instance of libcrux_sha3.generic_keccak.rho_80
   5545 with types uint64_t
   5546 with const generics
   5547 - N= 1
   5548 */
   5549 static KRML_MUSTINLINE void
   5550 libcrux_sha3_generic_keccak_rho_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)
   5551 {
   5552   libcrux_sha3_generic_keccak_rho_0_80_71(self, t);
   5553   libcrux_sha3_generic_keccak_rho_1_80_71(self, t);
   5554   libcrux_sha3_generic_keccak_rho_2_80_71(self, t);
   5555   libcrux_sha3_generic_keccak_rho_3_80_71(self, t);
   5556   libcrux_sha3_generic_keccak_rho_4_80_71(self, t);
   5557 }
   5558 
   5559 /**
   5560 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5561 */
   5562 /**
   5563 A monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80
   5564 with types uint64_t
   5565 with const generics
   5566 - N= 1
   5567 */
   5568 static KRML_MUSTINLINE void
   5569 libcrux_sha3_generic_keccak_pi_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)
   5570 {
   5571   libcrux_sha3_generic_keccak_set_80_71(self,
   5572     (size_t)1U,
   5573     (size_t)0U,
   5574     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5575       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U]);
   5576   libcrux_sha3_generic_keccak_set_80_71(self,
   5577     (size_t)2U,
   5578     (size_t)0U,
   5579     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5580       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U]);
   5581   libcrux_sha3_generic_keccak_set_80_71(self,
   5582     (size_t)3U,
   5583     (size_t)0U,
   5584     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5585       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U]);
   5586   libcrux_sha3_generic_keccak_set_80_71(self,
   5587     (size_t)4U,
   5588     (size_t)0U,
   5589     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5590       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U]);
   5591 }
   5592 
   5593 /**
   5594 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5595 */
   5596 /**
   5597 A monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80
   5598 with types uint64_t
   5599 with const generics
   5600 - N= 1
   5601 */
   5602 static KRML_MUSTINLINE void
   5603 libcrux_sha3_generic_keccak_pi_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)
   5604 {
   5605   libcrux_sha3_generic_keccak_set_80_71(self,
   5606     (size_t)0U,
   5607     (size_t)1U,
   5608     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5609       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U]);
   5610   libcrux_sha3_generic_keccak_set_80_71(self,
   5611     (size_t)1U,
   5612     (size_t)1U,
   5613     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5614       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U]);
   5615   libcrux_sha3_generic_keccak_set_80_71(self,
   5616     (size_t)2U,
   5617     (size_t)1U,
   5618     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5619       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U]);
   5620   libcrux_sha3_generic_keccak_set_80_71(self,
   5621     (size_t)3U,
   5622     (size_t)1U,
   5623     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5624       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U]);
   5625   libcrux_sha3_generic_keccak_set_80_71(self,
   5626     (size_t)4U,
   5627     (size_t)1U,
   5628     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5629       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U]);
   5630 }
   5631 
   5632 /**
   5633 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5634 */
   5635 /**
   5636 A monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80
   5637 with types uint64_t
   5638 with const generics
   5639 - N= 1
   5640 */
   5641 static KRML_MUSTINLINE void
   5642 libcrux_sha3_generic_keccak_pi_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)
   5643 {
   5644   libcrux_sha3_generic_keccak_set_80_71(self,
   5645     (size_t)0U,
   5646     (size_t)2U,
   5647     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5648       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U]);
   5649   libcrux_sha3_generic_keccak_set_80_71(self,
   5650     (size_t)1U,
   5651     (size_t)2U,
   5652     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5653       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U]);
   5654   libcrux_sha3_generic_keccak_set_80_71(self,
   5655     (size_t)2U,
   5656     (size_t)2U,
   5657     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5658       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U]);
   5659   libcrux_sha3_generic_keccak_set_80_71(self,
   5660     (size_t)3U,
   5661     (size_t)2U,
   5662     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5663       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U]);
   5664   libcrux_sha3_generic_keccak_set_80_71(self,
   5665     (size_t)4U,
   5666     (size_t)2U,
   5667     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5668       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U]);
   5669 }
   5670 
   5671 /**
   5672 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5673 */
   5674 /**
   5675 A monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80
   5676 with types uint64_t
   5677 with const generics
   5678 - N= 1
   5679 */
   5680 static KRML_MUSTINLINE void
   5681 libcrux_sha3_generic_keccak_pi_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)
   5682 {
   5683   libcrux_sha3_generic_keccak_set_80_71(self,
   5684     (size_t)0U,
   5685     (size_t)3U,
   5686     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5687       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U]);
   5688   libcrux_sha3_generic_keccak_set_80_71(self,
   5689     (size_t)1U,
   5690     (size_t)3U,
   5691     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5692       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U]);
   5693   libcrux_sha3_generic_keccak_set_80_71(self,
   5694     (size_t)2U,
   5695     (size_t)3U,
   5696     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5697       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U]);
   5698   libcrux_sha3_generic_keccak_set_80_71(self,
   5699     (size_t)3U,
   5700     (size_t)3U,
   5701     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5702       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U]);
   5703   libcrux_sha3_generic_keccak_set_80_71(self,
   5704     (size_t)4U,
   5705     (size_t)3U,
   5706     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5707       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U]);
   5708 }
   5709 
   5710 /**
   5711 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5712 */
   5713 /**
   5714 A monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80
   5715 with types uint64_t
   5716 with const generics
   5717 - N= 1
   5718 */
   5719 static KRML_MUSTINLINE void
   5720 libcrux_sha3_generic_keccak_pi_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)
   5721 {
   5722   libcrux_sha3_generic_keccak_set_80_71(self,
   5723     (size_t)0U,
   5724     (size_t)4U,
   5725     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5726       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U]);
   5727   libcrux_sha3_generic_keccak_set_80_71(self,
   5728     (size_t)1U,
   5729     (size_t)4U,
   5730     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5731       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]);
   5732   libcrux_sha3_generic_keccak_set_80_71(self,
   5733     (size_t)2U,
   5734     (size_t)4U,
   5735     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5736       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]);
   5737   libcrux_sha3_generic_keccak_set_80_71(self,
   5738     (size_t)3U,
   5739     (size_t)4U,
   5740     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5741       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]);
   5742   libcrux_sha3_generic_keccak_set_80_71(self,
   5743     (size_t)4U,
   5744     (size_t)4U,
   5745     libcrux_sha3_generic_keccak_index_c2_71(&old,
   5746       (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]);
   5747 }
   5748 
   5749 /**
   5750 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5751 */
   5752 /**
   5753 A monomorphic instance of libcrux_sha3.generic_keccak.pi_80
   5754 with types uint64_t
   5755 with const generics
   5756 - N= 1
   5757 */
   5758 static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_pi_80_71(Eurydice_arr_7c *self)
   5759 {
   5760   Eurydice_arr_7c old = self[0U];
   5761   libcrux_sha3_generic_keccak_pi_0_80_71(self, old);
   5762   libcrux_sha3_generic_keccak_pi_1_80_71(self, old);
   5763   libcrux_sha3_generic_keccak_pi_2_80_71(self, old);
   5764   libcrux_sha3_generic_keccak_pi_3_80_71(self, old);
   5765   libcrux_sha3_generic_keccak_pi_4_80_71(self, old);
   5766 }
   5767 
   5768 /**
   5769 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5770 */
   5771 /**
   5772 A monomorphic instance of libcrux_sha3.generic_keccak.chi_80
   5773 with types uint64_t
   5774 with const generics
   5775 - N= 1
   5776 */
   5777 static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_chi_80_71(Eurydice_arr_7c *self)
   5778 {
   5779   Eurydice_arr_7c old = self[0U];
   5780   for (size_t i0 = (size_t)0U; i0 < (size_t)5U; i0++)
   5781   {
   5782     size_t i1 = i0;
   5783     for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   5784     {
   5785       size_t j = i;
   5786       libcrux_sha3_generic_keccak_set_80_71(self,
   5787         i1,
   5788         j,
   5789         libcrux_sha3_simd_portable_and_not_xor_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   5790             (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U],
   5791           libcrux_sha3_generic_keccak_index_c2_71(&old,
   5792             (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)2U) % (size_t)5U }))[0U],
   5793           libcrux_sha3_generic_keccak_index_c2_71(&old,
   5794             (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)1U) % (size_t)5U }))[0U]));
   5795     }
   5796   }
   5797 }
   5798 
   5799 /**
   5800 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5801 */
   5802 /**
   5803 A monomorphic instance of libcrux_sha3.generic_keccak.iota_80
   5804 with types uint64_t
   5805 with const generics
   5806 - N= 1
   5807 */
   5808 static KRML_MUSTINLINE void
   5809 libcrux_sha3_generic_keccak_iota_80_71(Eurydice_arr_7c *self, size_t i)
   5810 {
   5811   libcrux_sha3_generic_keccak_set_80_71(self,
   5812     (size_t)0U,
   5813     (size_t)0U,
   5814     libcrux_sha3_simd_portable_xor_constant_d2(libcrux_sha3_generic_keccak_index_c2_71(self,
   5815         (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],
   5816       LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS.data[i]));
   5817 }
   5818 
   5819 /**
   5820 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5821 */
   5822 /**
   5823 A monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80
   5824 with types uint64_t
   5825 with const generics
   5826 - N= 1
   5827 */
   5828 static KRML_MUSTINLINE void
   5829 libcrux_sha3_generic_keccak_keccakf1600_80_71(Eurydice_arr_7c *self)
   5830 {
   5831   for (size_t i = (size_t)0U; i < (size_t)24U; i++)
   5832   {
   5833     size_t i0 = i;
   5834     Eurydice_arr_84 t = libcrux_sha3_generic_keccak_theta_80_71(self);
   5835     libcrux_sha3_generic_keccak_rho_80_71(self, t);
   5836     libcrux_sha3_generic_keccak_pi_80_71(self);
   5837     libcrux_sha3_generic_keccak_chi_80_71(self);
   5838     libcrux_sha3_generic_keccak_iota_80_71(self, i0);
   5839   }
   5840 }
   5841 
   5842 /**
   5843 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5844 */
   5845 /**
   5846 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80
   5847 with types uint64_t
   5848 with const generics
   5849 - N= 1
   5850 - RATE= 168
   5851 - DELIM= 31
   5852 */
   5853 static KRML_MUSTINLINE void
   5854 libcrux_sha3_generic_keccak_absorb_final_80_bd(
   5855   Eurydice_arr_7c *self,
   5856   const Eurydice_arr_dc *input,
   5857   size_t start,
   5858   size_t len
   5859 )
   5860 {
   5861   libcrux_sha3_simd_portable_load_last_a1_37(self, input, start, len);
   5862   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   5863 }
   5864 
   5865 /**
   5866  Absorb
   5867 */
   5868 static KRML_MUSTINLINE void
   5869 libcrux_sha3_portable_incremental_shake128_absorb_final(
   5870   Eurydice_arr_7c *s,
   5871   Eurydice_borrow_slice_u8 data0
   5872 )
   5873 {
   5874   /* original Rust expression is not an lvalue in C */
   5875   Eurydice_arr_dc lvalue = { .data = { data0 } };
   5876   libcrux_sha3_generic_keccak_absorb_final_80_bd(s, &lvalue, (size_t)0U, data0.meta);
   5877 }
   5878 
   5879 /**
   5880  Create a new SHAKE-256 state object.
   5881 */
   5882 static KRML_MUSTINLINE Eurydice_arr_7c libcrux_sha3_portable_incremental_shake256_init(void)
   5883 {
   5884   return libcrux_sha3_generic_keccak_new_80_71();
   5885 }
   5886 
   5887 /**
   5888 A monomorphic instance of libcrux_sha3.simd.portable.load_block
   5889 with const generics
   5890 - RATE= 136
   5891 */
   5892 static KRML_MUSTINLINE void
   5893 libcrux_sha3_simd_portable_load_block_b2(
   5894   Eurydice_arr_7c *state,
   5895   Eurydice_borrow_slice_u8 blocks,
   5896   size_t start
   5897 )
   5898 {
   5899   Eurydice_arr_7c state_flat = { .data = { 0U } };
   5900   for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++)
   5901   {
   5902     size_t i0 = i;
   5903     size_t offset = start + (size_t)8U * i0;
   5904     Eurydice_array_u8x8 arr;
   5905     memcpy(arr.data,
   5906       Eurydice_slice_subslice_shared_c8(blocks,
   5907         (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,
   5908       (size_t)8U * sizeof (uint8_t));
   5909     Eurydice_array_u8x8
   5910     uu____0 =
   5911       core_result_unwrap_26_e0((
   5912           KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   5913         ));
   5914     state_flat.data[i0] = core_num__u64__from_le_bytes(uu____0);
   5915   }
   5916   for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++)
   5917   {
   5918     size_t i0 = i;
   5919     libcrux_sha3_traits_set_ij_71(state,
   5920       i0 / (size_t)5U,
   5921       i0 % (size_t)5U,
   5922       libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^
   5923         state_flat.data[i0]);
   5924   }
   5925 }
   5926 
   5927 /**
   5928 A monomorphic instance of libcrux_sha3.simd.portable.load_last
   5929 with const generics
   5930 - RATE= 136
   5931 - DELIMITER= 31
   5932 */
   5933 static KRML_MUSTINLINE void
   5934 libcrux_sha3_simd_portable_load_last_22(
   5935   Eurydice_arr_7c *state,
   5936   Eurydice_borrow_slice_u8 blocks,
   5937   size_t start,
   5938   size_t len
   5939 )
   5940 {
   5941   Eurydice_arr_ff buffer = { .data = { 0U } };
   5942   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d42(&buffer,
   5943       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),
   5944     Eurydice_slice_subslice_shared_c8(blocks,
   5945       (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),
   5946     uint8_t);
   5947   buffer.data[len] = 31U;
   5948   size_t uu____0 = (size_t)136U - (size_t)1U;
   5949   buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;
   5950   libcrux_sha3_simd_portable_load_block_b2(state,
   5951     Eurydice_array_to_slice_shared_58(&buffer),
   5952     (size_t)0U);
   5953 }
   5954 
   5955 /**
   5956 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   5957 */
   5958 /**
   5959 A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1
   5960 with const generics
   5961 - RATE= 136
   5962 - DELIMITER= 31
   5963 */
   5964 static inline void
   5965 libcrux_sha3_simd_portable_load_last_a1_22(
   5966   Eurydice_arr_7c *self,
   5967   const Eurydice_arr_dc *input,
   5968   size_t start,
   5969   size_t len
   5970 )
   5971 {
   5972   libcrux_sha3_simd_portable_load_last_22(self, input->data[0U], start, len);
   5973 }
   5974 
   5975 /**
   5976 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   5977 */
   5978 /**
   5979 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80
   5980 with types uint64_t
   5981 with const generics
   5982 - N= 1
   5983 - RATE= 136
   5984 - DELIM= 31
   5985 */
   5986 static KRML_MUSTINLINE void
   5987 libcrux_sha3_generic_keccak_absorb_final_80_bd0(
   5988   Eurydice_arr_7c *self,
   5989   const Eurydice_arr_dc *input,
   5990   size_t start,
   5991   size_t len
   5992 )
   5993 {
   5994   libcrux_sha3_simd_portable_load_last_a1_22(self, input, start, len);
   5995   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   5996 }
   5997 
   5998 /**
   5999  Absorb some data for SHAKE-256 for the last time
   6000 */
   6001 static KRML_MUSTINLINE void
   6002 libcrux_sha3_portable_incremental_shake256_absorb_final(
   6003   Eurydice_arr_7c *s,
   6004   Eurydice_borrow_slice_u8 data
   6005 )
   6006 {
   6007   /* original Rust expression is not an lvalue in C */
   6008   Eurydice_arr_dc lvalue = { .data = { data } };
   6009   libcrux_sha3_generic_keccak_absorb_final_80_bd0(s, &lvalue, (size_t)0U, data.meta);
   6010 }
   6011 
   6012 /**
   6013 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6014 */
   6015 /**
   6016 A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1
   6017 with const generics
   6018 - RATE= 168
   6019 */
   6020 static inline void
   6021 libcrux_sha3_simd_portable_load_block_a1_60(
   6022   Eurydice_arr_7c *self,
   6023   const Eurydice_arr_dc *input,
   6024   size_t start
   6025 )
   6026 {
   6027   libcrux_sha3_simd_portable_load_block_60(self, input->data[0U], start);
   6028 }
   6029 
   6030 /**
   6031 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   6032 */
   6033 /**
   6034 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80
   6035 with types uint64_t
   6036 with const generics
   6037 - N= 1
   6038 - RATE= 168
   6039 */
   6040 static KRML_MUSTINLINE void
   6041 libcrux_sha3_generic_keccak_absorb_block_80_e9(
   6042   Eurydice_arr_7c *self,
   6043   const Eurydice_arr_dc *input,
   6044   size_t start
   6045 )
   6046 {
   6047   libcrux_sha3_simd_portable_load_block_a1_60(self, input, start);
   6048   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6049 }
   6050 
   6051 /**
   6052 A monomorphic instance of libcrux_sha3.simd.portable.store_block
   6053 with const generics
   6054 - RATE= 168
   6055 */
   6056 static KRML_MUSTINLINE void
   6057 libcrux_sha3_simd_portable_store_block_60(
   6058   const Eurydice_arr_7c *s,
   6059   Eurydice_mut_borrow_slice_u8 out,
   6060   size_t start,
   6061   size_t len
   6062 )
   6063 {
   6064   size_t octets = len / (size_t)8U;
   6065   for (size_t i = (size_t)0U; i < octets; i++)
   6066   {
   6067     size_t i0 = i;
   6068     Eurydice_array_u8x8
   6069     bytes =
   6070       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   6071           i0 / (size_t)5U,
   6072           i0 % (size_t)5U)[0U]);
   6073     size_t out_pos = start + (size_t)8U * i0;
   6074     Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,
   6075         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),
   6076       Eurydice_array_to_slice_shared_6e(&bytes),
   6077       uint8_t);
   6078   }
   6079   size_t remaining = len % (size_t)8U;
   6080   if (remaining > (size_t)0U)
   6081   {
   6082     Eurydice_array_u8x8
   6083     bytes =
   6084       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   6085           octets / (size_t)5U,
   6086           octets % (size_t)5U)[0U]);
   6087     size_t out_pos = start + len - remaining;
   6088     Eurydice_mut_borrow_slice_u8
   6089     uu____0 =
   6090       Eurydice_slice_subslice_mut_c8(out,
   6091         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));
   6092     Eurydice_slice_copy(uu____0,
   6093       Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),
   6094       uint8_t);
   6095   }
   6096 }
   6097 
   6098 /**
   6099 This function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6100 */
   6101 /**
   6102 A monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b
   6103 with const generics
   6104 - RATE= 168
   6105 */
   6106 static inline void
   6107 libcrux_sha3_simd_portable_squeeze_9b_60(
   6108   const Eurydice_arr_7c *self,
   6109   Eurydice_mut_borrow_slice_u8 out,
   6110   size_t start,
   6111   size_t len
   6112 )
   6113 {
   6114   libcrux_sha3_simd_portable_store_block_60(self, out, start, len);
   6115 }
   6116 
   6117 /**
   6118 A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1
   6119 with const generics
   6120 - RATE= 168
   6121 - DELIM= 31
   6122 */
   6123 static inline void
   6124 libcrux_sha3_generic_keccak_portable_keccak1_37(
   6125   Eurydice_borrow_slice_u8 input,
   6126   Eurydice_mut_borrow_slice_u8 output
   6127 )
   6128 {
   6129   Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();
   6130   size_t input_len = input.meta;
   6131   size_t input_blocks = input_len / (size_t)168U;
   6132   size_t input_rem = input_len % (size_t)168U;
   6133   for (size_t i = (size_t)0U; i < input_blocks; i++)
   6134   {
   6135     size_t i0 = i;
   6136     /* original Rust expression is not an lvalue in C */
   6137     Eurydice_arr_dc lvalue = { .data = { input } };
   6138     libcrux_sha3_generic_keccak_absorb_block_80_e9(&s, &lvalue, i0 * (size_t)168U);
   6139   }
   6140   /* original Rust expression is not an lvalue in C */
   6141   Eurydice_arr_dc lvalue = { .data = { input } };
   6142   libcrux_sha3_generic_keccak_absorb_final_80_bd(&s, &lvalue, input_len - input_rem, input_rem);
   6143   size_t output_len = output.meta;
   6144   size_t output_blocks = output_len / (size_t)168U;
   6145   size_t output_rem = output_len % (size_t)168U;
   6146   if (output_blocks == (size_t)0U)
   6147   {
   6148     libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, (size_t)0U, output_len);
   6149   }
   6150   else
   6151   {
   6152     libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, (size_t)0U, (size_t)168U);
   6153     for (size_t i = (size_t)1U; i < output_blocks; i++)
   6154     {
   6155       size_t i0 = i;
   6156       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   6157       libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, i0 * (size_t)168U, (size_t)168U);
   6158     }
   6159     if (output_rem != (size_t)0U)
   6160     {
   6161       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   6162       libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, output_len - output_rem, output_rem);
   6163     }
   6164   }
   6165 }
   6166 
   6167 /**
   6168  A portable SHAKE128 implementation.
   6169 */
   6170 static KRML_MUSTINLINE void
   6171 libcrux_sha3_portable_shake128(
   6172   Eurydice_mut_borrow_slice_u8 digest,
   6173   Eurydice_borrow_slice_u8 data
   6174 )
   6175 {
   6176   libcrux_sha3_generic_keccak_portable_keccak1_37(data, digest);
   6177 }
   6178 
   6179 /**
   6180 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6181 */
   6182 /**
   6183 A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1
   6184 with const generics
   6185 - RATE= 136
   6186 */
   6187 static inline void
   6188 libcrux_sha3_simd_portable_load_block_a1_b2(
   6189   Eurydice_arr_7c *self,
   6190   const Eurydice_arr_dc *input,
   6191   size_t start
   6192 )
   6193 {
   6194   libcrux_sha3_simd_portable_load_block_b2(self, input->data[0U], start);
   6195 }
   6196 
   6197 /**
   6198 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   6199 */
   6200 /**
   6201 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80
   6202 with types uint64_t
   6203 with const generics
   6204 - N= 1
   6205 - RATE= 136
   6206 */
   6207 static KRML_MUSTINLINE void
   6208 libcrux_sha3_generic_keccak_absorb_block_80_e90(
   6209   Eurydice_arr_7c *self,
   6210   const Eurydice_arr_dc *input,
   6211   size_t start
   6212 )
   6213 {
   6214   libcrux_sha3_simd_portable_load_block_a1_b2(self, input, start);
   6215   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6216 }
   6217 
   6218 /**
   6219 A monomorphic instance of libcrux_sha3.simd.portable.store_block
   6220 with const generics
   6221 - RATE= 136
   6222 */
   6223 static KRML_MUSTINLINE void
   6224 libcrux_sha3_simd_portable_store_block_b2(
   6225   const Eurydice_arr_7c *s,
   6226   Eurydice_mut_borrow_slice_u8 out,
   6227   size_t start,
   6228   size_t len
   6229 )
   6230 {
   6231   size_t octets = len / (size_t)8U;
   6232   for (size_t i = (size_t)0U; i < octets; i++)
   6233   {
   6234     size_t i0 = i;
   6235     Eurydice_array_u8x8
   6236     bytes =
   6237       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   6238           i0 / (size_t)5U,
   6239           i0 % (size_t)5U)[0U]);
   6240     size_t out_pos = start + (size_t)8U * i0;
   6241     Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,
   6242         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),
   6243       Eurydice_array_to_slice_shared_6e(&bytes),
   6244       uint8_t);
   6245   }
   6246   size_t remaining = len % (size_t)8U;
   6247   if (remaining > (size_t)0U)
   6248   {
   6249     Eurydice_array_u8x8
   6250     bytes =
   6251       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   6252           octets / (size_t)5U,
   6253           octets % (size_t)5U)[0U]);
   6254     size_t out_pos = start + len - remaining;
   6255     Eurydice_mut_borrow_slice_u8
   6256     uu____0 =
   6257       Eurydice_slice_subslice_mut_c8(out,
   6258         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));
   6259     Eurydice_slice_copy(uu____0,
   6260       Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),
   6261       uint8_t);
   6262   }
   6263 }
   6264 
   6265 /**
   6266 This function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6267 */
   6268 /**
   6269 A monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b
   6270 with const generics
   6271 - RATE= 136
   6272 */
   6273 static inline void
   6274 libcrux_sha3_simd_portable_squeeze_9b_b2(
   6275   const Eurydice_arr_7c *self,
   6276   Eurydice_mut_borrow_slice_u8 out,
   6277   size_t start,
   6278   size_t len
   6279 )
   6280 {
   6281   libcrux_sha3_simd_portable_store_block_b2(self, out, start, len);
   6282 }
   6283 
   6284 /**
   6285 A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1
   6286 with const generics
   6287 - RATE= 136
   6288 - DELIM= 31
   6289 */
   6290 static inline void
   6291 libcrux_sha3_generic_keccak_portable_keccak1_22(
   6292   Eurydice_borrow_slice_u8 input,
   6293   Eurydice_mut_borrow_slice_u8 output
   6294 )
   6295 {
   6296   Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();
   6297   size_t input_len = input.meta;
   6298   size_t input_blocks = input_len / (size_t)136U;
   6299   size_t input_rem = input_len % (size_t)136U;
   6300   for (size_t i = (size_t)0U; i < input_blocks; i++)
   6301   {
   6302     size_t i0 = i;
   6303     /* original Rust expression is not an lvalue in C */
   6304     Eurydice_arr_dc lvalue = { .data = { input } };
   6305     libcrux_sha3_generic_keccak_absorb_block_80_e90(&s, &lvalue, i0 * (size_t)136U);
   6306   }
   6307   /* original Rust expression is not an lvalue in C */
   6308   Eurydice_arr_dc lvalue = { .data = { input } };
   6309   libcrux_sha3_generic_keccak_absorb_final_80_bd0(&s, &lvalue, input_len - input_rem, input_rem);
   6310   size_t output_len = output.meta;
   6311   size_t output_blocks = output_len / (size_t)136U;
   6312   size_t output_rem = output_len % (size_t)136U;
   6313   if (output_blocks == (size_t)0U)
   6314   {
   6315     libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, output_len);
   6316   }
   6317   else
   6318   {
   6319     libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, (size_t)136U);
   6320     for (size_t i = (size_t)1U; i < output_blocks; i++)
   6321     {
   6322       size_t i0 = i;
   6323       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   6324       libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, i0 * (size_t)136U, (size_t)136U);
   6325     }
   6326     if (output_rem != (size_t)0U)
   6327     {
   6328       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   6329       libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, output_len - output_rem, output_rem);
   6330     }
   6331   }
   6332 }
   6333 
   6334 /**
   6335  A portable SHAKE256 implementation.
   6336 */
   6337 static KRML_MUSTINLINE void
   6338 libcrux_sha3_portable_shake256(
   6339   Eurydice_mut_borrow_slice_u8 digest,
   6340   Eurydice_borrow_slice_u8 data
   6341 )
   6342 {
   6343   libcrux_sha3_generic_keccak_portable_keccak1_22(data, digest);
   6344 }
   6345 
   6346 /**
   6347 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6348 */
   6349 /**
   6350 A monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4
   6351 with const generics
   6352 - RATE= 136
   6353 */
   6354 static KRML_MUSTINLINE void
   6355 libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(
   6356   const Eurydice_arr_7c *self,
   6357   Eurydice_mut_borrow_slice_u8 out
   6358 )
   6359 {
   6360   libcrux_sha3_simd_portable_squeeze_9b_b2(self, out, (size_t)0U, (size_t)136U);
   6361 }
   6362 
   6363 /**
   6364  Squeeze the first SHAKE-256 block
   6365 */
   6366 static KRML_MUSTINLINE void
   6367 libcrux_sha3_portable_incremental_shake256_squeeze_first_block(
   6368   Eurydice_arr_7c *s,
   6369   Eurydice_mut_borrow_slice_u8 out
   6370 )
   6371 {
   6372   libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(&s[0U], out);
   6373 }
   6374 
   6375 /**
   6376 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6377 */
   6378 /**
   6379 A monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4
   6380 with const generics
   6381 - RATE= 168
   6382 */
   6383 static KRML_MUSTINLINE void
   6384 libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(
   6385   Eurydice_arr_7c *self,
   6386   Eurydice_mut_borrow_slice_u8 out
   6387 )
   6388 {
   6389   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)0U, (size_t)168U);
   6390   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6391   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)168U, (size_t)168U);
   6392   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6393   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)2U * (size_t)168U, (size_t)168U);
   6394   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6395   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)3U * (size_t)168U, (size_t)168U);
   6396   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6397   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)4U * (size_t)168U, (size_t)168U);
   6398 }
   6399 
   6400 /**
   6401  Squeeze five blocks
   6402 */
   6403 static KRML_MUSTINLINE void
   6404 libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(
   6405   Eurydice_arr_7c *s,
   6406   Eurydice_mut_borrow_slice_u8 out0
   6407 )
   6408 {
   6409   libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(s, out0);
   6410 }
   6411 
   6412 /**
   6413 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6414 */
   6415 /**
   6416 A monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4
   6417 with const generics
   6418 - RATE= 168
   6419 */
   6420 static KRML_MUSTINLINE void
   6421 libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(
   6422   Eurydice_arr_7c *self,
   6423   Eurydice_mut_borrow_slice_u8 out,
   6424   size_t start
   6425 )
   6426 {
   6427   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6428   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, start, (size_t)168U);
   6429 }
   6430 
   6431 /**
   6432  Squeeze another block
   6433 */
   6434 static KRML_MUSTINLINE void
   6435 libcrux_sha3_portable_incremental_shake128_squeeze_next_block(
   6436   Eurydice_arr_7c *s,
   6437   Eurydice_mut_borrow_slice_u8 out0
   6438 )
   6439 {
   6440   libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(s, out0, (size_t)0U);
   6441 }
   6442 
   6443 /**
   6444 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6445 */
   6446 /**
   6447 A monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4
   6448 with const generics
   6449 - RATE= 136
   6450 */
   6451 static KRML_MUSTINLINE void
   6452 libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(
   6453   Eurydice_arr_7c *self,
   6454   Eurydice_mut_borrow_slice_u8 out,
   6455   size_t start
   6456 )
   6457 {
   6458   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6459   libcrux_sha3_simd_portable_squeeze_9b_b2(self, out, start, (size_t)136U);
   6460 }
   6461 
   6462 /**
   6463  Squeeze the next SHAKE-256 block
   6464 */
   6465 static KRML_MUSTINLINE void
   6466 libcrux_sha3_portable_incremental_shake256_squeeze_next_block(
   6467   Eurydice_arr_7c *s,
   6468   Eurydice_mut_borrow_slice_u8 out
   6469 )
   6470 {
   6471   libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(s, out, (size_t)0U);
   6472 }
   6473 
   6474 /**
   6475  Try to complete the internal partial buffer by consuming the minimum required
   6476  number of bytes from the provided `inputs` so that `self.buf` becomes exactly
   6477  one full block of size `RATE`.
   6478 
   6479  Behaviour:
   6480  - If `self.buf_len` is 0 (no buffered bytes) or already equal to `RATE`
   6481    (already a full block), or if the combined available bytes in `inputs` are
   6482    not enough to reach `RATE`, the function does nothing and returns 0.
   6483  - If `0 < self.buf_len < RATE` and `inputs[..]` contain at least
   6484    `RATE - self.buf_len` bytes, the function copies exactly
   6485    `consumed = RATE - self.buf_len` bytes from each lane `inputs[i]` into
   6486    `self.buf[i]` starting at the current `self.buf_len` offset, sets
   6487    `self.buf_len = RATE`, and returns `consumed`.
   6488 
   6489  Returns the `consumed` bytes from `inputs` if there's enough buffered
   6490  content to consume, and `0` otherwise.
   6491  If `consumed > 0` is returned, `self.buf` contains a full block to be
   6492  loaded.
   6493 */
   6494 /**
   6495 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   6496 */
   6497 /**
   6498 A monomorphic instance of libcrux_sha3.generic_keccak.xof.fill_buffer_35
   6499 with types uint64_t
   6500 with const generics
   6501 - PARALLEL_LANES= 1
   6502 - RATE= 136
   6503 */
   6504 static inline size_t
   6505 libcrux_sha3_generic_keccak_xof_fill_buffer_35_e9(
   6506   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6507   const Eurydice_arr_dc *inputs
   6508 )
   6509 {
   6510   size_t input_len = inputs->data->meta;
   6511   size_t uu____0;
   6512   if (self->buf_len != (size_t)0U)
   6513   {
   6514     if (input_len >= (size_t)136U - self->buf_len)
   6515     {
   6516       size_t consumed = (size_t)136U - self->buf_len;
   6517       for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   6518       {
   6519         size_t i0 = i;
   6520         Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&self->buf.data[i0],
   6521             self->buf_len),
   6522           Eurydice_slice_subslice_to_shared_72(inputs->data[i0], consumed),
   6523           uint8_t);
   6524       }
   6525       self->buf_len = (size_t)136U;
   6526       uu____0 = consumed;
   6527     }
   6528     else
   6529     {
   6530       uu____0 = (size_t)0U;
   6531     }
   6532   }
   6533   else
   6534   {
   6535     uu____0 = (size_t)0U;
   6536   }
   6537   return uu____0;
   6538 }
   6539 
   6540 /**
   6541 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.closure
   6542 with const generics
   6543 - $1size_t
   6544 - $136size_t
   6545 */
   6546 typedef const Eurydice_arr_0b *libcrux_sha3_generic_keccak_xof_buf_to_slices_closure_94;
   6547 
   6548 /**
   6549 This function found in impl {core::ops::function::FnMut<(usize), &'_ ([u8])> for libcrux_sha3::generic_keccak::xof::buf_to_slices::closure<0, PARALLEL_LANES, RATE>}
   6550 */
   6551 /**
   6552 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.call_mut_2a
   6553 with const generics
   6554 - PARALLEL_LANES= 1
   6555 - RATE= 136
   6556 */
   6557 static inline Eurydice_borrow_slice_u8
   6558 libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_81(
   6559   const Eurydice_arr_0b **_,
   6560   size_t tupled_args
   6561 )
   6562 {
   6563   size_t i = tupled_args;
   6564   return
   6565     core_array___T__N___as_slice((size_t)136U,
   6566       &_[0U]->data[i],
   6567       uint8_t,
   6568       Eurydice_borrow_slice_u8);
   6569 }
   6570 
   6571 /**
   6572 This function found in impl {core::ops::function::FnOnce<(usize), &'_ ([u8])> for libcrux_sha3::generic_keccak::xof::buf_to_slices::closure<0, PARALLEL_LANES, RATE>}
   6573 */
   6574 /**
   6575 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.call_once_fa
   6576 with const generics
   6577 - PARALLEL_LANES= 1
   6578 - RATE= 136
   6579 */
   6580 static inline Eurydice_borrow_slice_u8
   6581 libcrux_sha3_generic_keccak_xof_buf_to_slices_call_once_fa_81(
   6582   const Eurydice_arr_0b *_,
   6583   size_t _0
   6584 )
   6585 {
   6586   return libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_81(&_, _0);
   6587 }
   6588 
   6589 /**
   6590  Note: This function exists to work around a hax bug where `core::array::from_fn`
   6591  is extracted with an incorrect explicit type parameter `#(usize -> t_Slice u8)`
   6592  instead of using the typeclass-based implicit parameter `#v_F` from
   6593  `Core_models.Array.from_fn`.
   6594  See: https://github.com/cryspen/hax/issues/1920
   6595 */
   6596 /**
   6597 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices
   6598 with const generics
   6599 - PARALLEL_LANES= 1
   6600 - RATE= 136
   6601 */
   6602 static KRML_MUSTINLINE Eurydice_arr_dc
   6603 libcrux_sha3_generic_keccak_xof_buf_to_slices_81(const Eurydice_arr_0b *buf)
   6604 {
   6605   Eurydice_arr_dc arr_struct;
   6606   for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   6607   {
   6608     arr_struct.data[i] = libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_81(&buf, i);
   6609   }
   6610   return arr_struct;
   6611 }
   6612 
   6613 /**
   6614 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   6615 */
   6616 /**
   6617 A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_full_35
   6618 with types uint64_t
   6619 with const generics
   6620 - PARALLEL_LANES= 1
   6621 - RATE= 136
   6622 */
   6623 static inline size_t
   6624 libcrux_sha3_generic_keccak_xof_absorb_full_35_e9(
   6625   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6626   const Eurydice_arr_dc *inputs
   6627 )
   6628 {
   6629   size_t consumed = libcrux_sha3_generic_keccak_xof_fill_buffer_35_e9(self, inputs);
   6630   if (self->buf_len == (size_t)136U)
   6631   {
   6632     Eurydice_arr_dc borrowed = libcrux_sha3_generic_keccak_xof_buf_to_slices_81(&self->buf);
   6633     libcrux_sha3_simd_portable_load_block_a1_b2(&self->inner, &borrowed, (size_t)0U);
   6634     libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   6635     self->buf_len = (size_t)0U;
   6636   }
   6637   size_t input_to_consume = inputs->data->meta - consumed;
   6638   size_t num_blocks = input_to_consume / (size_t)136U;
   6639   size_t remainder = input_to_consume % (size_t)136U;
   6640   for (size_t i = (size_t)0U; i < num_blocks; i++)
   6641   {
   6642     size_t i0 = i;
   6643     size_t start = i0 * (size_t)136U + consumed;
   6644     libcrux_sha3_simd_portable_load_block_a1_b2(&self->inner, inputs, start);
   6645     libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   6646   }
   6647   return remainder;
   6648 }
   6649 
   6650 /**
   6651  Absorb
   6652 
   6653  This function takes any number of bytes to absorb and buffers if it's not enough.
   6654  The function assumes that all input slices in `inputs` have the same length.
   6655 
   6656  Only a multiple of `RATE` blocks are absorbed.
   6657  For the remaining bytes [`absorb_final`] needs to be called.
   6658 
   6659  This works best with relatively small `inputs`.
   6660 */
   6661 /**
   6662 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   6663 */
   6664 /**
   6665 A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_35
   6666 with types uint64_t
   6667 with const generics
   6668 - PARALLEL_LANES= 1
   6669 - RATE= 136
   6670 */
   6671 static KRML_MUSTINLINE void
   6672 libcrux_sha3_generic_keccak_xof_absorb_35_e9(
   6673   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6674   const Eurydice_arr_dc *inputs
   6675 )
   6676 {
   6677   size_t remainder = libcrux_sha3_generic_keccak_xof_absorb_full_35_e9(self, inputs);
   6678   if (remainder > (size_t)0U)
   6679   {
   6680     size_t input_len = inputs->data->meta;
   6681     for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   6682     {
   6683       size_t i0 = i;
   6684       Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d42(&self->buf.data[i0],
   6685           (
   6686             KRML_CLITERAL(core_ops_range_Range_87){
   6687               .start = self->buf_len,
   6688               .end = self->buf_len + remainder
   6689             }
   6690           )),
   6691         Eurydice_slice_subslice_shared_c8(inputs->data[i0],
   6692           (
   6693             KRML_CLITERAL(core_ops_range_Range_87){
   6694               .start = input_len - remainder,
   6695               .end = input_len
   6696             }
   6697           )),
   6698         uint8_t);
   6699     }
   6700     self->buf_len += remainder;
   6701   }
   6702 }
   6703 
   6704 /**
   6705  Shake256 absorb
   6706 */
   6707 /**
   6708 This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}
   6709 */
   6710 static inline void
   6711 libcrux_sha3_portable_incremental_absorb_42(
   6712   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6713   Eurydice_borrow_slice_u8 input
   6714 )
   6715 {
   6716   /* original Rust expression is not an lvalue in C */
   6717   Eurydice_arr_dc lvalue = { .data = { input } };
   6718   libcrux_sha3_generic_keccak_xof_absorb_35_e9(self, &lvalue);
   6719 }
   6720 
   6721 /**
   6722  Absorb a final block.
   6723 
   6724  The `inputs` block may be empty. Everything in the `inputs` block beyond
   6725  `RATE` bytes is ignored.
   6726 */
   6727 /**
   6728 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   6729 */
   6730 /**
   6731 A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_final_35
   6732 with types uint64_t
   6733 with const generics
   6734 - PARALLEL_LANES= 1
   6735 - RATE= 136
   6736 - DELIMITER= 31
   6737 */
   6738 static KRML_MUSTINLINE void
   6739 libcrux_sha3_generic_keccak_xof_absorb_final_35_bd(
   6740   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6741   const Eurydice_arr_dc *inputs
   6742 )
   6743 {
   6744   libcrux_sha3_generic_keccak_xof_absorb_35_e9(self, inputs);
   6745   Eurydice_arr_dc borrowed = libcrux_sha3_generic_keccak_xof_buf_to_slices_81(&self->buf);
   6746   libcrux_sha3_simd_portable_load_last_a1_22(&self->inner, &borrowed, (size_t)0U, self->buf_len);
   6747   libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   6748 }
   6749 
   6750 /**
   6751  Shake256 absorb final
   6752 */
   6753 /**
   6754 This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}
   6755 */
   6756 static inline void
   6757 libcrux_sha3_portable_incremental_absorb_final_42(
   6758   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6759   Eurydice_borrow_slice_u8 input
   6760 )
   6761 {
   6762   /* original Rust expression is not an lvalue in C */
   6763   Eurydice_arr_dc lvalue = { .data = { input } };
   6764   libcrux_sha3_generic_keccak_xof_absorb_final_35_bd(self, &lvalue);
   6765 }
   6766 
   6767 /**
   6768  An all zero block
   6769 */
   6770 /**
   6771 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   6772 */
   6773 /**
   6774 A monomorphic instance of libcrux_sha3.generic_keccak.xof.zero_block_35
   6775 with types uint64_t
   6776 with const generics
   6777 - PARALLEL_LANES= 1
   6778 - RATE= 136
   6779 */
   6780 static inline Eurydice_arr_ff libcrux_sha3_generic_keccak_xof_zero_block_35_e9(void)
   6781 {
   6782   return (KRML_CLITERAL(Eurydice_arr_ff){ .data = { 0U } });
   6783 }
   6784 
   6785 /**
   6786  Generate a new keccak xof state.
   6787 */
   6788 /**
   6789 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   6790 */
   6791 /**
   6792 A monomorphic instance of libcrux_sha3.generic_keccak.xof.new_35
   6793 with types uint64_t
   6794 with const generics
   6795 - PARALLEL_LANES= 1
   6796 - RATE= 136
   6797 */
   6798 static inline libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   6799 libcrux_sha3_generic_keccak_xof_new_35_e9(void)
   6800 {
   6801   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d lit;
   6802   lit.inner = libcrux_sha3_generic_keccak_new_80_71();
   6803   Eurydice_arr_ff repeat_expression[1U];
   6804   for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   6805   {
   6806     repeat_expression[i] = libcrux_sha3_generic_keccak_xof_zero_block_35_e9();
   6807   }
   6808   memcpy(lit.buf.data, repeat_expression, (size_t)1U * sizeof (Eurydice_arr_ff));
   6809   lit.buf_len = (size_t)0U;
   6810   lit.sponge = false;
   6811   return lit;
   6812 }
   6813 
   6814 /**
   6815  Shake256 new state
   6816 */
   6817 /**
   6818 This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}
   6819 */
   6820 static inline libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   6821 libcrux_sha3_portable_incremental_new_42(void)
   6822 {
   6823   return libcrux_sha3_generic_keccak_xof_new_35_e9();
   6824 }
   6825 
   6826 /**
   6827  Squeeze `N` x `LEN` bytes. Only `N = 1` for now.
   6828 */
   6829 /**
   6830 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, 1usize, RATE>[TraitClause@0, TraitClause@1]}
   6831 */
   6832 /**
   6833 A monomorphic instance of libcrux_sha3.generic_keccak.xof.squeeze_85
   6834 with types uint64_t
   6835 with const generics
   6836 - RATE= 136
   6837 */
   6838 static KRML_MUSTINLINE void
   6839 libcrux_sha3_generic_keccak_xof_squeeze_85_76(
   6840   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6841   Eurydice_mut_borrow_slice_u8 out
   6842 )
   6843 {
   6844   size_t out_len = out.meta;
   6845   if (!(out_len == (size_t)0U))
   6846   {
   6847     if (self->sponge)
   6848     {
   6849       libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   6850     }
   6851     if (out_len > (size_t)0U)
   6852     {
   6853       size_t blocks = out_len / (size_t)136U;
   6854       size_t last = out_len - out_len % (size_t)136U;
   6855       if (blocks == (size_t)0U)
   6856       {
   6857         libcrux_sha3_simd_portable_squeeze_9b_b2(&self->inner, out, (size_t)0U, out_len);
   6858       }
   6859       else
   6860       {
   6861         libcrux_sha3_simd_portable_squeeze_9b_b2(&self->inner, out, (size_t)0U, (size_t)136U);
   6862         for (size_t i = (size_t)1U; i < blocks; i++)
   6863         {
   6864           size_t i0 = i;
   6865           libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   6866           libcrux_sha3_simd_portable_squeeze_9b_b2(&self->inner,
   6867             out,
   6868             i0 * (size_t)136U,
   6869             (size_t)136U);
   6870         }
   6871         if (last < out_len)
   6872         {
   6873           libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   6874           libcrux_sha3_simd_portable_squeeze_9b_b2(&self->inner, out, last, out_len - last);
   6875         }
   6876       }
   6877     }
   6878     self->sponge = true;
   6879   }
   6880 }
   6881 
   6882 /**
   6883  Shake256 squeeze
   6884 */
   6885 /**
   6886 This function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}
   6887 */
   6888 static inline void
   6889 libcrux_sha3_portable_incremental_squeeze_42(
   6890   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   6891   Eurydice_mut_borrow_slice_u8 out
   6892 )
   6893 {
   6894   libcrux_sha3_generic_keccak_xof_squeeze_85_76(self, out);
   6895 }
   6896 
   6897 /**
   6898 A monomorphic instance of libcrux_sha3.simd.portable.load_block
   6899 with const generics
   6900 - RATE= 72
   6901 */
   6902 static KRML_MUSTINLINE void
   6903 libcrux_sha3_simd_portable_load_block_c6(
   6904   Eurydice_arr_7c *state,
   6905   Eurydice_borrow_slice_u8 blocks,
   6906   size_t start
   6907 )
   6908 {
   6909   Eurydice_arr_7c state_flat = { .data = { 0U } };
   6910   for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++)
   6911   {
   6912     size_t i0 = i;
   6913     size_t offset = start + (size_t)8U * i0;
   6914     Eurydice_array_u8x8 arr;
   6915     memcpy(arr.data,
   6916       Eurydice_slice_subslice_shared_c8(blocks,
   6917         (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,
   6918       (size_t)8U * sizeof (uint8_t));
   6919     Eurydice_array_u8x8
   6920     uu____0 =
   6921       core_result_unwrap_26_e0((
   6922           KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   6923         ));
   6924     state_flat.data[i0] = core_num__u64__from_le_bytes(uu____0);
   6925   }
   6926   for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++)
   6927   {
   6928     size_t i0 = i;
   6929     libcrux_sha3_traits_set_ij_71(state,
   6930       i0 / (size_t)5U,
   6931       i0 % (size_t)5U,
   6932       libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^
   6933         state_flat.data[i0]);
   6934   }
   6935 }
   6936 
   6937 /**
   6938 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   6939 */
   6940 /**
   6941 A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1
   6942 with const generics
   6943 - RATE= 72
   6944 */
   6945 static inline void
   6946 libcrux_sha3_simd_portable_load_block_a1_c6(
   6947   Eurydice_arr_7c *self,
   6948   const Eurydice_arr_dc *input,
   6949   size_t start
   6950 )
   6951 {
   6952   libcrux_sha3_simd_portable_load_block_c6(self, input->data[0U], start);
   6953 }
   6954 
   6955 /**
   6956 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   6957 */
   6958 /**
   6959 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80
   6960 with types uint64_t
   6961 with const generics
   6962 - N= 1
   6963 - RATE= 72
   6964 */
   6965 static KRML_MUSTINLINE void
   6966 libcrux_sha3_generic_keccak_absorb_block_80_e91(
   6967   Eurydice_arr_7c *self,
   6968   const Eurydice_arr_dc *input,
   6969   size_t start
   6970 )
   6971 {
   6972   libcrux_sha3_simd_portable_load_block_a1_c6(self, input, start);
   6973   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   6974 }
   6975 
   6976 /**
   6977 A monomorphic instance of libcrux_sha3.simd.portable.load_last
   6978 with const generics
   6979 - RATE= 72
   6980 - DELIMITER= 6
   6981 */
   6982 static KRML_MUSTINLINE void
   6983 libcrux_sha3_simd_portable_load_last_dc(
   6984   Eurydice_arr_7c *state,
   6985   Eurydice_borrow_slice_u8 blocks,
   6986   size_t start,
   6987   size_t len
   6988 )
   6989 {
   6990   Eurydice_arr_ab buffer = { .data = { 0U } };
   6991   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d43(&buffer,
   6992       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),
   6993     Eurydice_slice_subslice_shared_c8(blocks,
   6994       (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),
   6995     uint8_t);
   6996   buffer.data[len] = 6U;
   6997   size_t uu____0 = (size_t)72U - (size_t)1U;
   6998   buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;
   6999   libcrux_sha3_simd_portable_load_block_c6(state,
   7000     Eurydice_array_to_slice_shared_e2(&buffer),
   7001     (size_t)0U);
   7002 }
   7003 
   7004 /**
   7005 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7006 */
   7007 /**
   7008 A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1
   7009 with const generics
   7010 - RATE= 72
   7011 - DELIMITER= 6
   7012 */
   7013 static inline void
   7014 libcrux_sha3_simd_portable_load_last_a1_dc(
   7015   Eurydice_arr_7c *self,
   7016   const Eurydice_arr_dc *input,
   7017   size_t start,
   7018   size_t len
   7019 )
   7020 {
   7021   libcrux_sha3_simd_portable_load_last_dc(self, input->data[0U], start, len);
   7022 }
   7023 
   7024 /**
   7025 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   7026 */
   7027 /**
   7028 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80
   7029 with types uint64_t
   7030 with const generics
   7031 - N= 1
   7032 - RATE= 72
   7033 - DELIM= 6
   7034 */
   7035 static KRML_MUSTINLINE void
   7036 libcrux_sha3_generic_keccak_absorb_final_80_bd1(
   7037   Eurydice_arr_7c *self,
   7038   const Eurydice_arr_dc *input,
   7039   size_t start,
   7040   size_t len
   7041 )
   7042 {
   7043   libcrux_sha3_simd_portable_load_last_a1_dc(self, input, start, len);
   7044   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7045 }
   7046 
   7047 /**
   7048 A monomorphic instance of libcrux_sha3.simd.portable.store_block
   7049 with const generics
   7050 - RATE= 72
   7051 */
   7052 static KRML_MUSTINLINE void
   7053 libcrux_sha3_simd_portable_store_block_c6(
   7054   const Eurydice_arr_7c *s,
   7055   Eurydice_mut_borrow_slice_u8 out,
   7056   size_t start,
   7057   size_t len
   7058 )
   7059 {
   7060   size_t octets = len / (size_t)8U;
   7061   for (size_t i = (size_t)0U; i < octets; i++)
   7062   {
   7063     size_t i0 = i;
   7064     Eurydice_array_u8x8
   7065     bytes =
   7066       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   7067           i0 / (size_t)5U,
   7068           i0 % (size_t)5U)[0U]);
   7069     size_t out_pos = start + (size_t)8U * i0;
   7070     Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,
   7071         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),
   7072       Eurydice_array_to_slice_shared_6e(&bytes),
   7073       uint8_t);
   7074   }
   7075   size_t remaining = len % (size_t)8U;
   7076   if (remaining > (size_t)0U)
   7077   {
   7078     Eurydice_array_u8x8
   7079     bytes =
   7080       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   7081           octets / (size_t)5U,
   7082           octets % (size_t)5U)[0U]);
   7083     size_t out_pos = start + len - remaining;
   7084     Eurydice_mut_borrow_slice_u8
   7085     uu____0 =
   7086       Eurydice_slice_subslice_mut_c8(out,
   7087         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));
   7088     Eurydice_slice_copy(uu____0,
   7089       Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),
   7090       uint8_t);
   7091   }
   7092 }
   7093 
   7094 /**
   7095 This function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7096 */
   7097 /**
   7098 A monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b
   7099 with const generics
   7100 - RATE= 72
   7101 */
   7102 static inline void
   7103 libcrux_sha3_simd_portable_squeeze_9b_c6(
   7104   const Eurydice_arr_7c *self,
   7105   Eurydice_mut_borrow_slice_u8 out,
   7106   size_t start,
   7107   size_t len
   7108 )
   7109 {
   7110   libcrux_sha3_simd_portable_store_block_c6(self, out, start, len);
   7111 }
   7112 
   7113 /**
   7114 A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1
   7115 with const generics
   7116 - RATE= 72
   7117 - DELIM= 6
   7118 */
   7119 static inline void
   7120 libcrux_sha3_generic_keccak_portable_keccak1_dc(
   7121   Eurydice_borrow_slice_u8 input,
   7122   Eurydice_mut_borrow_slice_u8 output
   7123 )
   7124 {
   7125   Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();
   7126   size_t input_len = input.meta;
   7127   size_t input_blocks = input_len / (size_t)72U;
   7128   size_t input_rem = input_len % (size_t)72U;
   7129   for (size_t i = (size_t)0U; i < input_blocks; i++)
   7130   {
   7131     size_t i0 = i;
   7132     /* original Rust expression is not an lvalue in C */
   7133     Eurydice_arr_dc lvalue = { .data = { input } };
   7134     libcrux_sha3_generic_keccak_absorb_block_80_e91(&s, &lvalue, i0 * (size_t)72U);
   7135   }
   7136   /* original Rust expression is not an lvalue in C */
   7137   Eurydice_arr_dc lvalue = { .data = { input } };
   7138   libcrux_sha3_generic_keccak_absorb_final_80_bd1(&s, &lvalue, input_len - input_rem, input_rem);
   7139   size_t output_len = output.meta;
   7140   size_t output_blocks = output_len / (size_t)72U;
   7141   size_t output_rem = output_len % (size_t)72U;
   7142   if (output_blocks == (size_t)0U)
   7143   {
   7144     libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, (size_t)0U, output_len);
   7145   }
   7146   else
   7147   {
   7148     libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, (size_t)0U, (size_t)72U);
   7149     for (size_t i = (size_t)1U; i < output_blocks; i++)
   7150     {
   7151       size_t i0 = i;
   7152       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7153       libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, i0 * (size_t)72U, (size_t)72U);
   7154     }
   7155     if (output_rem != (size_t)0U)
   7156     {
   7157       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7158       libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, output_len - output_rem, output_rem);
   7159     }
   7160   }
   7161 }
   7162 
   7163 /**
   7164  A portable SHA3 512 implementation.
   7165 */
   7166 static KRML_MUSTINLINE void
   7167 libcrux_sha3_portable_sha512(
   7168   Eurydice_mut_borrow_slice_u8 digest,
   7169   Eurydice_borrow_slice_u8 data
   7170 )
   7171 {
   7172   libcrux_sha3_generic_keccak_portable_keccak1_dc(data, digest);
   7173 }
   7174 
   7175 /**
   7176 A monomorphic instance of libcrux_sha3.simd.portable.load_last
   7177 with const generics
   7178 - RATE= 136
   7179 - DELIMITER= 6
   7180 */
   7181 static KRML_MUSTINLINE void
   7182 libcrux_sha3_simd_portable_load_last_220(
   7183   Eurydice_arr_7c *state,
   7184   Eurydice_borrow_slice_u8 blocks,
   7185   size_t start,
   7186   size_t len
   7187 )
   7188 {
   7189   Eurydice_arr_ff buffer = { .data = { 0U } };
   7190   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d42(&buffer,
   7191       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),
   7192     Eurydice_slice_subslice_shared_c8(blocks,
   7193       (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),
   7194     uint8_t);
   7195   buffer.data[len] = 6U;
   7196   size_t uu____0 = (size_t)136U - (size_t)1U;
   7197   buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;
   7198   libcrux_sha3_simd_portable_load_block_b2(state,
   7199     Eurydice_array_to_slice_shared_58(&buffer),
   7200     (size_t)0U);
   7201 }
   7202 
   7203 /**
   7204 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7205 */
   7206 /**
   7207 A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1
   7208 with const generics
   7209 - RATE= 136
   7210 - DELIMITER= 6
   7211 */
   7212 static inline void
   7213 libcrux_sha3_simd_portable_load_last_a1_220(
   7214   Eurydice_arr_7c *self,
   7215   const Eurydice_arr_dc *input,
   7216   size_t start,
   7217   size_t len
   7218 )
   7219 {
   7220   libcrux_sha3_simd_portable_load_last_220(self, input->data[0U], start, len);
   7221 }
   7222 
   7223 /**
   7224 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   7225 */
   7226 /**
   7227 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80
   7228 with types uint64_t
   7229 with const generics
   7230 - N= 1
   7231 - RATE= 136
   7232 - DELIM= 6
   7233 */
   7234 static KRML_MUSTINLINE void
   7235 libcrux_sha3_generic_keccak_absorb_final_80_bd2(
   7236   Eurydice_arr_7c *self,
   7237   const Eurydice_arr_dc *input,
   7238   size_t start,
   7239   size_t len
   7240 )
   7241 {
   7242   libcrux_sha3_simd_portable_load_last_a1_220(self, input, start, len);
   7243   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7244 }
   7245 
   7246 /**
   7247 A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1
   7248 with const generics
   7249 - RATE= 136
   7250 - DELIM= 6
   7251 */
   7252 static inline void
   7253 libcrux_sha3_generic_keccak_portable_keccak1_220(
   7254   Eurydice_borrow_slice_u8 input,
   7255   Eurydice_mut_borrow_slice_u8 output
   7256 )
   7257 {
   7258   Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();
   7259   size_t input_len = input.meta;
   7260   size_t input_blocks = input_len / (size_t)136U;
   7261   size_t input_rem = input_len % (size_t)136U;
   7262   for (size_t i = (size_t)0U; i < input_blocks; i++)
   7263   {
   7264     size_t i0 = i;
   7265     /* original Rust expression is not an lvalue in C */
   7266     Eurydice_arr_dc lvalue = { .data = { input } };
   7267     libcrux_sha3_generic_keccak_absorb_block_80_e90(&s, &lvalue, i0 * (size_t)136U);
   7268   }
   7269   /* original Rust expression is not an lvalue in C */
   7270   Eurydice_arr_dc lvalue = { .data = { input } };
   7271   libcrux_sha3_generic_keccak_absorb_final_80_bd2(&s, &lvalue, input_len - input_rem, input_rem);
   7272   size_t output_len = output.meta;
   7273   size_t output_blocks = output_len / (size_t)136U;
   7274   size_t output_rem = output_len % (size_t)136U;
   7275   if (output_blocks == (size_t)0U)
   7276   {
   7277     libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, output_len);
   7278   }
   7279   else
   7280   {
   7281     libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, (size_t)136U);
   7282     for (size_t i = (size_t)1U; i < output_blocks; i++)
   7283     {
   7284       size_t i0 = i;
   7285       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7286       libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, i0 * (size_t)136U, (size_t)136U);
   7287     }
   7288     if (output_rem != (size_t)0U)
   7289     {
   7290       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7291       libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, output_len - output_rem, output_rem);
   7292     }
   7293   }
   7294 }
   7295 
   7296 /**
   7297  A portable SHA3 256 implementation.
   7298 */
   7299 static KRML_MUSTINLINE void
   7300 libcrux_sha3_portable_sha256(
   7301   Eurydice_mut_borrow_slice_u8 digest,
   7302   Eurydice_borrow_slice_u8 data
   7303 )
   7304 {
   7305   libcrux_sha3_generic_keccak_portable_keccak1_220(data, digest);
   7306 }
   7307 
   7308 /**
   7309 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7310 */
   7311 /**
   7312 A monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4
   7313 with const generics
   7314 - RATE= 168
   7315 */
   7316 static KRML_MUSTINLINE void
   7317 libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(
   7318   Eurydice_arr_7c *self,
   7319   Eurydice_mut_borrow_slice_u8 out
   7320 )
   7321 {
   7322   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)0U, (size_t)168U);
   7323   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7324   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)168U, (size_t)168U);
   7325   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7326   libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)2U * (size_t)168U, (size_t)168U);
   7327 }
   7328 
   7329 /**
   7330  Squeeze three blocks
   7331 */
   7332 static KRML_MUSTINLINE void
   7333 libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(
   7334   Eurydice_arr_7c *s,
   7335   Eurydice_mut_borrow_slice_u8 out0
   7336 )
   7337 {
   7338   libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(s, out0);
   7339 }
   7340 
   7341 #define libcrux_sha3_Algorithm_Sha224 1
   7342 #define libcrux_sha3_Algorithm_Sha256 2
   7343 #define libcrux_sha3_Algorithm_Sha384 3
   7344 #define libcrux_sha3_Algorithm_Sha512 4
   7345 
   7346 typedef uint8_t libcrux_sha3_Algorithm;
   7347 
   7348 #define LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE ((size_t)28U)
   7349 
   7350 #define LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE ((size_t)32U)
   7351 
   7352 #define LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE ((size_t)48U)
   7353 
   7354 #define LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE ((size_t)64U)
   7355 
   7356 /**
   7357  Returns the output size of a digest.
   7358 */
   7359 static inline size_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode)
   7360 {
   7361   switch (mode)
   7362   {
   7363     case libcrux_sha3_Algorithm_Sha224:
   7364       {
   7365         break;
   7366       }
   7367     case libcrux_sha3_Algorithm_Sha256:
   7368       {
   7369         return LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE;
   7370       }
   7371     case libcrux_sha3_Algorithm_Sha384:
   7372       {
   7373         return LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE;
   7374       }
   7375     case libcrux_sha3_Algorithm_Sha512:
   7376       {
   7377         return LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE;
   7378       }
   7379     default:
   7380       {
   7381         KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__);
   7382         KRML_HOST_EXIT(253U);
   7383       }
   7384   }
   7385   return LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE;
   7386 }
   7387 
   7388 /**
   7389 A monomorphic instance of libcrux_sha3.simd.portable.load_block
   7390 with const generics
   7391 - RATE= 144
   7392 */
   7393 static KRML_MUSTINLINE void
   7394 libcrux_sha3_simd_portable_load_block_9e(
   7395   Eurydice_arr_7c *state,
   7396   Eurydice_borrow_slice_u8 blocks,
   7397   size_t start
   7398 )
   7399 {
   7400   Eurydice_arr_7c state_flat = { .data = { 0U } };
   7401   for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++)
   7402   {
   7403     size_t i0 = i;
   7404     size_t offset = start + (size_t)8U * i0;
   7405     Eurydice_array_u8x8 arr;
   7406     memcpy(arr.data,
   7407       Eurydice_slice_subslice_shared_c8(blocks,
   7408         (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,
   7409       (size_t)8U * sizeof (uint8_t));
   7410     Eurydice_array_u8x8
   7411     uu____0 =
   7412       core_result_unwrap_26_e0((
   7413           KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   7414         ));
   7415     state_flat.data[i0] = core_num__u64__from_le_bytes(uu____0);
   7416   }
   7417   for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++)
   7418   {
   7419     size_t i0 = i;
   7420     libcrux_sha3_traits_set_ij_71(state,
   7421       i0 / (size_t)5U,
   7422       i0 % (size_t)5U,
   7423       libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^
   7424         state_flat.data[i0]);
   7425   }
   7426 }
   7427 
   7428 /**
   7429 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7430 */
   7431 /**
   7432 A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1
   7433 with const generics
   7434 - RATE= 144
   7435 */
   7436 static inline void
   7437 libcrux_sha3_simd_portable_load_block_a1_9e(
   7438   Eurydice_arr_7c *self,
   7439   const Eurydice_arr_dc *input,
   7440   size_t start
   7441 )
   7442 {
   7443   libcrux_sha3_simd_portable_load_block_9e(self, input->data[0U], start);
   7444 }
   7445 
   7446 /**
   7447 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   7448 */
   7449 /**
   7450 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80
   7451 with types uint64_t
   7452 with const generics
   7453 - N= 1
   7454 - RATE= 144
   7455 */
   7456 static KRML_MUSTINLINE void
   7457 libcrux_sha3_generic_keccak_absorb_block_80_e92(
   7458   Eurydice_arr_7c *self,
   7459   const Eurydice_arr_dc *input,
   7460   size_t start
   7461 )
   7462 {
   7463   libcrux_sha3_simd_portable_load_block_a1_9e(self, input, start);
   7464   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7465 }
   7466 
   7467 /**
   7468 A monomorphic instance of libcrux_sha3.simd.portable.load_last
   7469 with const generics
   7470 - RATE= 144
   7471 - DELIMITER= 6
   7472 */
   7473 static KRML_MUSTINLINE void
   7474 libcrux_sha3_simd_portable_load_last_3a(
   7475   Eurydice_arr_7c *state,
   7476   Eurydice_borrow_slice_u8 blocks,
   7477   size_t start,
   7478   size_t len
   7479 )
   7480 {
   7481   Eurydice_arr_f4 buffer = { .data = { 0U } };
   7482   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&buffer,
   7483       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),
   7484     Eurydice_slice_subslice_shared_c8(blocks,
   7485       (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),
   7486     uint8_t);
   7487   buffer.data[len] = 6U;
   7488   size_t uu____0 = (size_t)144U - (size_t)1U;
   7489   buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;
   7490   libcrux_sha3_simd_portable_load_block_9e(state,
   7491     Eurydice_array_to_slice_shared_38(&buffer),
   7492     (size_t)0U);
   7493 }
   7494 
   7495 /**
   7496 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7497 */
   7498 /**
   7499 A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1
   7500 with const generics
   7501 - RATE= 144
   7502 - DELIMITER= 6
   7503 */
   7504 static inline void
   7505 libcrux_sha3_simd_portable_load_last_a1_3a(
   7506   Eurydice_arr_7c *self,
   7507   const Eurydice_arr_dc *input,
   7508   size_t start,
   7509   size_t len
   7510 )
   7511 {
   7512   libcrux_sha3_simd_portable_load_last_3a(self, input->data[0U], start, len);
   7513 }
   7514 
   7515 /**
   7516 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   7517 */
   7518 /**
   7519 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80
   7520 with types uint64_t
   7521 with const generics
   7522 - N= 1
   7523 - RATE= 144
   7524 - DELIM= 6
   7525 */
   7526 static KRML_MUSTINLINE void
   7527 libcrux_sha3_generic_keccak_absorb_final_80_bd3(
   7528   Eurydice_arr_7c *self,
   7529   const Eurydice_arr_dc *input,
   7530   size_t start,
   7531   size_t len
   7532 )
   7533 {
   7534   libcrux_sha3_simd_portable_load_last_a1_3a(self, input, start, len);
   7535   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7536 }
   7537 
   7538 /**
   7539 A monomorphic instance of libcrux_sha3.simd.portable.store_block
   7540 with const generics
   7541 - RATE= 144
   7542 */
   7543 static KRML_MUSTINLINE void
   7544 libcrux_sha3_simd_portable_store_block_9e(
   7545   const Eurydice_arr_7c *s,
   7546   Eurydice_mut_borrow_slice_u8 out,
   7547   size_t start,
   7548   size_t len
   7549 )
   7550 {
   7551   size_t octets = len / (size_t)8U;
   7552   for (size_t i = (size_t)0U; i < octets; i++)
   7553   {
   7554     size_t i0 = i;
   7555     Eurydice_array_u8x8
   7556     bytes =
   7557       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   7558           i0 / (size_t)5U,
   7559           i0 % (size_t)5U)[0U]);
   7560     size_t out_pos = start + (size_t)8U * i0;
   7561     Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,
   7562         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),
   7563       Eurydice_array_to_slice_shared_6e(&bytes),
   7564       uint8_t);
   7565   }
   7566   size_t remaining = len % (size_t)8U;
   7567   if (remaining > (size_t)0U)
   7568   {
   7569     Eurydice_array_u8x8
   7570     bytes =
   7571       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   7572           octets / (size_t)5U,
   7573           octets % (size_t)5U)[0U]);
   7574     size_t out_pos = start + len - remaining;
   7575     Eurydice_mut_borrow_slice_u8
   7576     uu____0 =
   7577       Eurydice_slice_subslice_mut_c8(out,
   7578         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));
   7579     Eurydice_slice_copy(uu____0,
   7580       Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),
   7581       uint8_t);
   7582   }
   7583 }
   7584 
   7585 /**
   7586 This function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7587 */
   7588 /**
   7589 A monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b
   7590 with const generics
   7591 - RATE= 144
   7592 */
   7593 static inline void
   7594 libcrux_sha3_simd_portable_squeeze_9b_9e(
   7595   const Eurydice_arr_7c *self,
   7596   Eurydice_mut_borrow_slice_u8 out,
   7597   size_t start,
   7598   size_t len
   7599 )
   7600 {
   7601   libcrux_sha3_simd_portable_store_block_9e(self, out, start, len);
   7602 }
   7603 
   7604 /**
   7605 A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1
   7606 with const generics
   7607 - RATE= 144
   7608 - DELIM= 6
   7609 */
   7610 static inline void
   7611 libcrux_sha3_generic_keccak_portable_keccak1_3a(
   7612   Eurydice_borrow_slice_u8 input,
   7613   Eurydice_mut_borrow_slice_u8 output
   7614 )
   7615 {
   7616   Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();
   7617   size_t input_len = input.meta;
   7618   size_t input_blocks = input_len / (size_t)144U;
   7619   size_t input_rem = input_len % (size_t)144U;
   7620   for (size_t i = (size_t)0U; i < input_blocks; i++)
   7621   {
   7622     size_t i0 = i;
   7623     /* original Rust expression is not an lvalue in C */
   7624     Eurydice_arr_dc lvalue = { .data = { input } };
   7625     libcrux_sha3_generic_keccak_absorb_block_80_e92(&s, &lvalue, i0 * (size_t)144U);
   7626   }
   7627   /* original Rust expression is not an lvalue in C */
   7628   Eurydice_arr_dc lvalue = { .data = { input } };
   7629   libcrux_sha3_generic_keccak_absorb_final_80_bd3(&s, &lvalue, input_len - input_rem, input_rem);
   7630   size_t output_len = output.meta;
   7631   size_t output_blocks = output_len / (size_t)144U;
   7632   size_t output_rem = output_len % (size_t)144U;
   7633   if (output_blocks == (size_t)0U)
   7634   {
   7635     libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, (size_t)0U, output_len);
   7636   }
   7637   else
   7638   {
   7639     libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, (size_t)0U, (size_t)144U);
   7640     for (size_t i = (size_t)1U; i < output_blocks; i++)
   7641     {
   7642       size_t i0 = i;
   7643       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7644       libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, i0 * (size_t)144U, (size_t)144U);
   7645     }
   7646     if (output_rem != (size_t)0U)
   7647     {
   7648       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7649       libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, output_len - output_rem, output_rem);
   7650     }
   7651   }
   7652 }
   7653 
   7654 /**
   7655  A portable SHA3 224 implementation.
   7656 */
   7657 static KRML_MUSTINLINE void
   7658 libcrux_sha3_portable_sha224(
   7659   Eurydice_mut_borrow_slice_u8 digest,
   7660   Eurydice_borrow_slice_u8 data
   7661 )
   7662 {
   7663   libcrux_sha3_generic_keccak_portable_keccak1_3a(data, digest);
   7664 }
   7665 
   7666 /**
   7667 A monomorphic instance of libcrux_sha3.simd.portable.load_block
   7668 with const generics
   7669 - RATE= 104
   7670 */
   7671 static KRML_MUSTINLINE void
   7672 libcrux_sha3_simd_portable_load_block_53(
   7673   Eurydice_arr_7c *state,
   7674   Eurydice_borrow_slice_u8 blocks,
   7675   size_t start
   7676 )
   7677 {
   7678   Eurydice_arr_7c state_flat = { .data = { 0U } };
   7679   for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++)
   7680   {
   7681     size_t i0 = i;
   7682     size_t offset = start + (size_t)8U * i0;
   7683     Eurydice_array_u8x8 arr;
   7684     memcpy(arr.data,
   7685       Eurydice_slice_subslice_shared_c8(blocks,
   7686         (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,
   7687       (size_t)8U * sizeof (uint8_t));
   7688     Eurydice_array_u8x8
   7689     uu____0 =
   7690       core_result_unwrap_26_e0((
   7691           KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   7692         ));
   7693     state_flat.data[i0] = core_num__u64__from_le_bytes(uu____0);
   7694   }
   7695   for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++)
   7696   {
   7697     size_t i0 = i;
   7698     libcrux_sha3_traits_set_ij_71(state,
   7699       i0 / (size_t)5U,
   7700       i0 % (size_t)5U,
   7701       libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^
   7702         state_flat.data[i0]);
   7703   }
   7704 }
   7705 
   7706 /**
   7707 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7708 */
   7709 /**
   7710 A monomorphic instance of libcrux_sha3.simd.portable.load_block_a1
   7711 with const generics
   7712 - RATE= 104
   7713 */
   7714 static inline void
   7715 libcrux_sha3_simd_portable_load_block_a1_53(
   7716   Eurydice_arr_7c *self,
   7717   const Eurydice_arr_dc *input,
   7718   size_t start
   7719 )
   7720 {
   7721   libcrux_sha3_simd_portable_load_block_53(self, input->data[0U], start);
   7722 }
   7723 
   7724 /**
   7725 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   7726 */
   7727 /**
   7728 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80
   7729 with types uint64_t
   7730 with const generics
   7731 - N= 1
   7732 - RATE= 104
   7733 */
   7734 static KRML_MUSTINLINE void
   7735 libcrux_sha3_generic_keccak_absorb_block_80_e93(
   7736   Eurydice_arr_7c *self,
   7737   const Eurydice_arr_dc *input,
   7738   size_t start
   7739 )
   7740 {
   7741   libcrux_sha3_simd_portable_load_block_a1_53(self, input, start);
   7742   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7743 }
   7744 
   7745 /**
   7746 A monomorphic instance of libcrux_sha3.simd.portable.load_last
   7747 with const generics
   7748 - RATE= 104
   7749 - DELIMITER= 6
   7750 */
   7751 static KRML_MUSTINLINE void
   7752 libcrux_sha3_simd_portable_load_last_dc0(
   7753   Eurydice_arr_7c *state,
   7754   Eurydice_borrow_slice_u8 blocks,
   7755   size_t start,
   7756   size_t len
   7757 )
   7758 {
   7759   Eurydice_arr_c4 buffer = { .data = { 0U } };
   7760   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d45(&buffer,
   7761       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),
   7762     Eurydice_slice_subslice_shared_c8(blocks,
   7763       (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),
   7764     uint8_t);
   7765   buffer.data[len] = 6U;
   7766   size_t uu____0 = (size_t)104U - (size_t)1U;
   7767   buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;
   7768   libcrux_sha3_simd_portable_load_block_53(state,
   7769     Eurydice_array_to_slice_shared_72(&buffer),
   7770     (size_t)0U);
   7771 }
   7772 
   7773 /**
   7774 This function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7775 */
   7776 /**
   7777 A monomorphic instance of libcrux_sha3.simd.portable.load_last_a1
   7778 with const generics
   7779 - RATE= 104
   7780 - DELIMITER= 6
   7781 */
   7782 static inline void
   7783 libcrux_sha3_simd_portable_load_last_a1_dc0(
   7784   Eurydice_arr_7c *self,
   7785   const Eurydice_arr_dc *input,
   7786   size_t start,
   7787   size_t len
   7788 )
   7789 {
   7790   libcrux_sha3_simd_portable_load_last_dc0(self, input->data[0U], start, len);
   7791 }
   7792 
   7793 /**
   7794 This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}
   7795 */
   7796 /**
   7797 A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80
   7798 with types uint64_t
   7799 with const generics
   7800 - N= 1
   7801 - RATE= 104
   7802 - DELIM= 6
   7803 */
   7804 static KRML_MUSTINLINE void
   7805 libcrux_sha3_generic_keccak_absorb_final_80_bd4(
   7806   Eurydice_arr_7c *self,
   7807   const Eurydice_arr_dc *input,
   7808   size_t start,
   7809   size_t len
   7810 )
   7811 {
   7812   libcrux_sha3_simd_portable_load_last_a1_dc0(self, input, start, len);
   7813   libcrux_sha3_generic_keccak_keccakf1600_80_71(self);
   7814 }
   7815 
   7816 /**
   7817 A monomorphic instance of libcrux_sha3.simd.portable.store_block
   7818 with const generics
   7819 - RATE= 104
   7820 */
   7821 static KRML_MUSTINLINE void
   7822 libcrux_sha3_simd_portable_store_block_53(
   7823   const Eurydice_arr_7c *s,
   7824   Eurydice_mut_borrow_slice_u8 out,
   7825   size_t start,
   7826   size_t len
   7827 )
   7828 {
   7829   size_t octets = len / (size_t)8U;
   7830   for (size_t i = (size_t)0U; i < octets; i++)
   7831   {
   7832     size_t i0 = i;
   7833     Eurydice_array_u8x8
   7834     bytes =
   7835       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   7836           i0 / (size_t)5U,
   7837           i0 % (size_t)5U)[0U]);
   7838     size_t out_pos = start + (size_t)8U * i0;
   7839     Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,
   7840         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),
   7841       Eurydice_array_to_slice_shared_6e(&bytes),
   7842       uint8_t);
   7843   }
   7844   size_t remaining = len % (size_t)8U;
   7845   if (remaining > (size_t)0U)
   7846   {
   7847     Eurydice_array_u8x8
   7848     bytes =
   7849       core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,
   7850           octets / (size_t)5U,
   7851           octets % (size_t)5U)[0U]);
   7852     size_t out_pos = start + len - remaining;
   7853     Eurydice_mut_borrow_slice_u8
   7854     uu____0 =
   7855       Eurydice_slice_subslice_mut_c8(out,
   7856         (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));
   7857     Eurydice_slice_copy(uu____0,
   7858       Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),
   7859       uint8_t);
   7860   }
   7861 }
   7862 
   7863 /**
   7864 This function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}
   7865 */
   7866 /**
   7867 A monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b
   7868 with const generics
   7869 - RATE= 104
   7870 */
   7871 static inline void
   7872 libcrux_sha3_simd_portable_squeeze_9b_53(
   7873   const Eurydice_arr_7c *self,
   7874   Eurydice_mut_borrow_slice_u8 out,
   7875   size_t start,
   7876   size_t len
   7877 )
   7878 {
   7879   libcrux_sha3_simd_portable_store_block_53(self, out, start, len);
   7880 }
   7881 
   7882 /**
   7883 A monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1
   7884 with const generics
   7885 - RATE= 104
   7886 - DELIM= 6
   7887 */
   7888 static inline void
   7889 libcrux_sha3_generic_keccak_portable_keccak1_dc0(
   7890   Eurydice_borrow_slice_u8 input,
   7891   Eurydice_mut_borrow_slice_u8 output
   7892 )
   7893 {
   7894   Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();
   7895   size_t input_len = input.meta;
   7896   size_t input_blocks = input_len / (size_t)104U;
   7897   size_t input_rem = input_len % (size_t)104U;
   7898   for (size_t i = (size_t)0U; i < input_blocks; i++)
   7899   {
   7900     size_t i0 = i;
   7901     /* original Rust expression is not an lvalue in C */
   7902     Eurydice_arr_dc lvalue = { .data = { input } };
   7903     libcrux_sha3_generic_keccak_absorb_block_80_e93(&s, &lvalue, i0 * (size_t)104U);
   7904   }
   7905   /* original Rust expression is not an lvalue in C */
   7906   Eurydice_arr_dc lvalue = { .data = { input } };
   7907   libcrux_sha3_generic_keccak_absorb_final_80_bd4(&s, &lvalue, input_len - input_rem, input_rem);
   7908   size_t output_len = output.meta;
   7909   size_t output_blocks = output_len / (size_t)104U;
   7910   size_t output_rem = output_len % (size_t)104U;
   7911   if (output_blocks == (size_t)0U)
   7912   {
   7913     libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, (size_t)0U, output_len);
   7914   }
   7915   else
   7916   {
   7917     libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, (size_t)0U, (size_t)104U);
   7918     for (size_t i = (size_t)1U; i < output_blocks; i++)
   7919     {
   7920       size_t i0 = i;
   7921       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7922       libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, i0 * (size_t)104U, (size_t)104U);
   7923     }
   7924     if (output_rem != (size_t)0U)
   7925     {
   7926       libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);
   7927       libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, output_len - output_rem, output_rem);
   7928     }
   7929   }
   7930 }
   7931 
   7932 /**
   7933  A portable SHA3 384 implementation.
   7934 */
   7935 static KRML_MUSTINLINE void
   7936 libcrux_sha3_portable_sha384(
   7937   Eurydice_mut_borrow_slice_u8 digest,
   7938   Eurydice_borrow_slice_u8 data
   7939 )
   7940 {
   7941   libcrux_sha3_generic_keccak_portable_keccak1_dc0(data, digest);
   7942 }
   7943 
   7944 /**
   7945  SHA3 224
   7946 
   7947  Preconditions:
   7948  - `digest.len() == 28`
   7949 */
   7950 static inline void
   7951 libcrux_sha3_sha224_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)
   7952 {
   7953   libcrux_sha3_portable_sha224(digest, payload);
   7954 }
   7955 
   7956 /**
   7957  SHA3 224
   7958 */
   7959 static inline Eurydice_arr_a2 libcrux_sha3_sha224(Eurydice_borrow_slice_u8 data)
   7960 {
   7961   Eurydice_arr_a2 out = { .data = { 0U } };
   7962   libcrux_sha3_sha224_ema(Eurydice_array_to_slice_mut_5e(&out), data);
   7963   return out;
   7964 }
   7965 
   7966 /**
   7967  SHA3 256
   7968 */
   7969 static inline void
   7970 libcrux_sha3_sha256_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)
   7971 {
   7972   libcrux_sha3_portable_sha256(digest, payload);
   7973 }
   7974 
   7975 /**
   7976  SHA3 256
   7977 */
   7978 static inline Eurydice_arr_ec libcrux_sha3_sha256(Eurydice_borrow_slice_u8 data)
   7979 {
   7980   Eurydice_arr_ec out = { .data = { 0U } };
   7981   libcrux_sha3_sha256_ema(Eurydice_array_to_slice_mut_01(&out), data);
   7982   return out;
   7983 }
   7984 
   7985 /**
   7986  SHA3 384
   7987 */
   7988 static inline void
   7989 libcrux_sha3_sha384_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)
   7990 {
   7991   libcrux_sha3_portable_sha384(digest, payload);
   7992 }
   7993 
   7994 /**
   7995  SHA3 384
   7996 */
   7997 static inline Eurydice_arr_65 libcrux_sha3_sha384(Eurydice_borrow_slice_u8 data)
   7998 {
   7999   Eurydice_arr_65 out = { .data = { 0U } };
   8000   libcrux_sha3_sha384_ema(Eurydice_array_to_slice_mut_9f(&out), data);
   8001   return out;
   8002 }
   8003 
   8004 /**
   8005  SHA3 512
   8006 */
   8007 static inline void
   8008 libcrux_sha3_sha512_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)
   8009 {
   8010   libcrux_sha3_portable_sha512(digest, payload);
   8011 }
   8012 
   8013 /**
   8014  SHA3 512
   8015 */
   8016 static inline Eurydice_arr_c7 libcrux_sha3_sha512(Eurydice_borrow_slice_u8 data)
   8017 {
   8018   Eurydice_arr_c7 out = { .data = { 0U } };
   8019   libcrux_sha3_sha512_ema(Eurydice_array_to_slice_mut_17(&out), data);
   8020   return out;
   8021 }
   8022 
   8023 /**
   8024  SHAKE 128
   8025 
   8026  Writes `out.len()` bytes.
   8027 */
   8028 static inline void
   8029 libcrux_sha3_shake128_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data)
   8030 {
   8031   libcrux_sha3_portable_shake128(out, data);
   8032 }
   8033 
   8034 /**
   8035  SHAKE 256
   8036 
   8037  Writes `out.len()` bytes.
   8038 */
   8039 static inline void
   8040 libcrux_sha3_shake256_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data)
   8041 {
   8042   libcrux_sha3_portable_shake256(out, data);
   8043 }
   8044 
   8045 /**
   8046 A monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState
   8047 with types uint64_t
   8048 with const generics
   8049 - $1size_t
   8050 - $168size_t
   8051 */
   8052 typedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_55_s
   8053 {
   8054   Eurydice_arr_7c inner;
   8055   Eurydice_arr_88 buf;
   8056   size_t buf_len;
   8057   bool sponge;
   8058 }
   8059 libcrux_sha3_generic_keccak_xof_KeccakXofState_55;
   8060 
   8061 typedef libcrux_sha3_generic_keccak_xof_KeccakXofState_55
   8062 libcrux_sha3_portable_incremental_Shake128Xof;
   8063 
   8064 /**
   8065  Try to complete the internal partial buffer by consuming the minimum required
   8066  number of bytes from the provided `inputs` so that `self.buf` becomes exactly
   8067  one full block of size `RATE`.
   8068 
   8069  Behaviour:
   8070  - If `self.buf_len` is 0 (no buffered bytes) or already equal to `RATE`
   8071    (already a full block), or if the combined available bytes in `inputs` are
   8072    not enough to reach `RATE`, the function does nothing and returns 0.
   8073  - If `0 < self.buf_len < RATE` and `inputs[..]` contain at least
   8074    `RATE - self.buf_len` bytes, the function copies exactly
   8075    `consumed = RATE - self.buf_len` bytes from each lane `inputs[i]` into
   8076    `self.buf[i]` starting at the current `self.buf_len` offset, sets
   8077    `self.buf_len = RATE`, and returns `consumed`.
   8078 
   8079  Returns the `consumed` bytes from `inputs` if there's enough buffered
   8080  content to consume, and `0` otherwise.
   8081  If `consumed > 0` is returned, `self.buf` contains a full block to be
   8082  loaded.
   8083 */
   8084 /**
   8085 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   8086 */
   8087 /**
   8088 A monomorphic instance of libcrux_sha3.generic_keccak.xof.fill_buffer_35
   8089 with types uint64_t
   8090 with const generics
   8091 - PARALLEL_LANES= 1
   8092 - RATE= 168
   8093 */
   8094 static inline size_t
   8095 libcrux_sha3_generic_keccak_xof_fill_buffer_35_e90(
   8096   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8097   const Eurydice_arr_dc *inputs
   8098 )
   8099 {
   8100   size_t input_len = inputs->data->meta;
   8101   size_t uu____0;
   8102   if (self->buf_len != (size_t)0U)
   8103   {
   8104     if (input_len >= (size_t)168U - self->buf_len)
   8105     {
   8106       size_t consumed = (size_t)168U - self->buf_len;
   8107       for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   8108       {
   8109         size_t i0 = i;
   8110         Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&self->buf.data[i0],
   8111             self->buf_len),
   8112           Eurydice_slice_subslice_to_shared_72(inputs->data[i0], consumed),
   8113           uint8_t);
   8114       }
   8115       self->buf_len = (size_t)168U;
   8116       uu____0 = consumed;
   8117     }
   8118     else
   8119     {
   8120       uu____0 = (size_t)0U;
   8121     }
   8122   }
   8123   else
   8124   {
   8125     uu____0 = (size_t)0U;
   8126   }
   8127   return uu____0;
   8128 }
   8129 
   8130 /**
   8131 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.closure
   8132 with const generics
   8133 - $1size_t
   8134 - $168size_t
   8135 */
   8136 typedef const Eurydice_arr_88 *libcrux_sha3_generic_keccak_xof_buf_to_slices_closure_48;
   8137 
   8138 /**
   8139 This function found in impl {core::ops::function::FnMut<(usize), &'_ ([u8])> for libcrux_sha3::generic_keccak::xof::buf_to_slices::closure<0, PARALLEL_LANES, RATE>}
   8140 */
   8141 /**
   8142 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.call_mut_2a
   8143 with const generics
   8144 - PARALLEL_LANES= 1
   8145 - RATE= 168
   8146 */
   8147 static inline Eurydice_borrow_slice_u8
   8148 libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_810(
   8149   const Eurydice_arr_88 **_,
   8150   size_t tupled_args
   8151 )
   8152 {
   8153   size_t i = tupled_args;
   8154   return
   8155     core_array___T__N___as_slice((size_t)168U,
   8156       &_[0U]->data[i],
   8157       uint8_t,
   8158       Eurydice_borrow_slice_u8);
   8159 }
   8160 
   8161 /**
   8162 This function found in impl {core::ops::function::FnOnce<(usize), &'_ ([u8])> for libcrux_sha3::generic_keccak::xof::buf_to_slices::closure<0, PARALLEL_LANES, RATE>}
   8163 */
   8164 /**
   8165 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.call_once_fa
   8166 with const generics
   8167 - PARALLEL_LANES= 1
   8168 - RATE= 168
   8169 */
   8170 static inline Eurydice_borrow_slice_u8
   8171 libcrux_sha3_generic_keccak_xof_buf_to_slices_call_once_fa_810(
   8172   const Eurydice_arr_88 *_,
   8173   size_t _0
   8174 )
   8175 {
   8176   return libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_810(&_, _0);
   8177 }
   8178 
   8179 /**
   8180  Note: This function exists to work around a hax bug where `core::array::from_fn`
   8181  is extracted with an incorrect explicit type parameter `#(usize -> t_Slice u8)`
   8182  instead of using the typeclass-based implicit parameter `#v_F` from
   8183  `Core_models.Array.from_fn`.
   8184  See: https://github.com/cryspen/hax/issues/1920
   8185 */
   8186 /**
   8187 A monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices
   8188 with const generics
   8189 - PARALLEL_LANES= 1
   8190 - RATE= 168
   8191 */
   8192 static KRML_MUSTINLINE Eurydice_arr_dc
   8193 libcrux_sha3_generic_keccak_xof_buf_to_slices_810(const Eurydice_arr_88 *buf)
   8194 {
   8195   Eurydice_arr_dc arr_struct;
   8196   for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   8197   {
   8198     arr_struct.data[i] = libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_810(&buf, i);
   8199   }
   8200   return arr_struct;
   8201 }
   8202 
   8203 /**
   8204 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   8205 */
   8206 /**
   8207 A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_full_35
   8208 with types uint64_t
   8209 with const generics
   8210 - PARALLEL_LANES= 1
   8211 - RATE= 168
   8212 */
   8213 static inline size_t
   8214 libcrux_sha3_generic_keccak_xof_absorb_full_35_e90(
   8215   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8216   const Eurydice_arr_dc *inputs
   8217 )
   8218 {
   8219   size_t consumed = libcrux_sha3_generic_keccak_xof_fill_buffer_35_e90(self, inputs);
   8220   if (self->buf_len == (size_t)168U)
   8221   {
   8222     Eurydice_arr_dc borrowed = libcrux_sha3_generic_keccak_xof_buf_to_slices_810(&self->buf);
   8223     libcrux_sha3_simd_portable_load_block_a1_60(&self->inner, &borrowed, (size_t)0U);
   8224     libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   8225     self->buf_len = (size_t)0U;
   8226   }
   8227   size_t input_to_consume = inputs->data->meta - consumed;
   8228   size_t num_blocks = input_to_consume / (size_t)168U;
   8229   size_t remainder = input_to_consume % (size_t)168U;
   8230   for (size_t i = (size_t)0U; i < num_blocks; i++)
   8231   {
   8232     size_t i0 = i;
   8233     size_t start = i0 * (size_t)168U + consumed;
   8234     libcrux_sha3_simd_portable_load_block_a1_60(&self->inner, inputs, start);
   8235     libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   8236   }
   8237   return remainder;
   8238 }
   8239 
   8240 /**
   8241  Absorb
   8242 
   8243  This function takes any number of bytes to absorb and buffers if it's not enough.
   8244  The function assumes that all input slices in `inputs` have the same length.
   8245 
   8246  Only a multiple of `RATE` blocks are absorbed.
   8247  For the remaining bytes [`absorb_final`] needs to be called.
   8248 
   8249  This works best with relatively small `inputs`.
   8250 */
   8251 /**
   8252 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   8253 */
   8254 /**
   8255 A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_35
   8256 with types uint64_t
   8257 with const generics
   8258 - PARALLEL_LANES= 1
   8259 - RATE= 168
   8260 */
   8261 static KRML_MUSTINLINE void
   8262 libcrux_sha3_generic_keccak_xof_absorb_35_e90(
   8263   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8264   const Eurydice_arr_dc *inputs
   8265 )
   8266 {
   8267   size_t remainder = libcrux_sha3_generic_keccak_xof_absorb_full_35_e90(self, inputs);
   8268   if (remainder > (size_t)0U)
   8269   {
   8270     size_t input_len = inputs->data->meta;
   8271     for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   8272     {
   8273       size_t i0 = i;
   8274       Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d41(&self->buf.data[i0],
   8275           (
   8276             KRML_CLITERAL(core_ops_range_Range_87){
   8277               .start = self->buf_len,
   8278               .end = self->buf_len + remainder
   8279             }
   8280           )),
   8281         Eurydice_slice_subslice_shared_c8(inputs->data[i0],
   8282           (
   8283             KRML_CLITERAL(core_ops_range_Range_87){
   8284               .start = input_len - remainder,
   8285               .end = input_len
   8286             }
   8287           )),
   8288         uint8_t);
   8289     }
   8290     self->buf_len += remainder;
   8291   }
   8292 }
   8293 
   8294 /**
   8295 This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> for libcrux_sha3::portable::incremental::Shake128Xof}
   8296 */
   8297 static inline void
   8298 libcrux_sha3_portable_incremental_absorb_26(
   8299   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8300   Eurydice_borrow_slice_u8 input
   8301 )
   8302 {
   8303   /* original Rust expression is not an lvalue in C */
   8304   Eurydice_arr_dc lvalue = { .data = { input } };
   8305   libcrux_sha3_generic_keccak_xof_absorb_35_e90(self, &lvalue);
   8306 }
   8307 
   8308 /**
   8309  Absorb a final block.
   8310 
   8311  The `inputs` block may be empty. Everything in the `inputs` block beyond
   8312  `RATE` bytes is ignored.
   8313 */
   8314 /**
   8315 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   8316 */
   8317 /**
   8318 A monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_final_35
   8319 with types uint64_t
   8320 with const generics
   8321 - PARALLEL_LANES= 1
   8322 - RATE= 168
   8323 - DELIMITER= 31
   8324 */
   8325 static KRML_MUSTINLINE void
   8326 libcrux_sha3_generic_keccak_xof_absorb_final_35_bd0(
   8327   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8328   const Eurydice_arr_dc *inputs
   8329 )
   8330 {
   8331   libcrux_sha3_generic_keccak_xof_absorb_35_e90(self, inputs);
   8332   Eurydice_arr_dc borrowed = libcrux_sha3_generic_keccak_xof_buf_to_slices_810(&self->buf);
   8333   libcrux_sha3_simd_portable_load_last_a1_37(&self->inner, &borrowed, (size_t)0U, self->buf_len);
   8334   libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   8335 }
   8336 
   8337 /**
   8338 This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> for libcrux_sha3::portable::incremental::Shake128Xof}
   8339 */
   8340 static inline void
   8341 libcrux_sha3_portable_incremental_absorb_final_26(
   8342   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8343   Eurydice_borrow_slice_u8 input
   8344 )
   8345 {
   8346   /* original Rust expression is not an lvalue in C */
   8347   Eurydice_arr_dc lvalue = { .data = { input } };
   8348   libcrux_sha3_generic_keccak_xof_absorb_final_35_bd0(self, &lvalue);
   8349 }
   8350 
   8351 /**
   8352  An all zero block
   8353 */
   8354 /**
   8355 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   8356 */
   8357 /**
   8358 A monomorphic instance of libcrux_sha3.generic_keccak.xof.zero_block_35
   8359 with types uint64_t
   8360 with const generics
   8361 - PARALLEL_LANES= 1
   8362 - RATE= 168
   8363 */
   8364 static inline Eurydice_arr_c5 libcrux_sha3_generic_keccak_xof_zero_block_35_e90(void)
   8365 {
   8366   return (KRML_CLITERAL(Eurydice_arr_c5){ .data = { 0U } });
   8367 }
   8368 
   8369 /**
   8370  Generate a new keccak xof state.
   8371 */
   8372 /**
   8373 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}
   8374 */
   8375 /**
   8376 A monomorphic instance of libcrux_sha3.generic_keccak.xof.new_35
   8377 with types uint64_t
   8378 with const generics
   8379 - PARALLEL_LANES= 1
   8380 - RATE= 168
   8381 */
   8382 static inline libcrux_sha3_generic_keccak_xof_KeccakXofState_55
   8383 libcrux_sha3_generic_keccak_xof_new_35_e90(void)
   8384 {
   8385   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 lit;
   8386   lit.inner = libcrux_sha3_generic_keccak_new_80_71();
   8387   Eurydice_arr_c5 repeat_expression[1U];
   8388   for (size_t i = (size_t)0U; i < (size_t)1U; i++)
   8389   {
   8390     repeat_expression[i] = libcrux_sha3_generic_keccak_xof_zero_block_35_e90();
   8391   }
   8392   memcpy(lit.buf.data, repeat_expression, (size_t)1U * sizeof (Eurydice_arr_c5));
   8393   lit.buf_len = (size_t)0U;
   8394   lit.sponge = false;
   8395   return lit;
   8396 }
   8397 
   8398 /**
   8399 This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> for libcrux_sha3::portable::incremental::Shake128Xof}
   8400 */
   8401 static inline libcrux_sha3_generic_keccak_xof_KeccakXofState_55
   8402 libcrux_sha3_portable_incremental_new_26(void)
   8403 {
   8404   return libcrux_sha3_generic_keccak_xof_new_35_e90();
   8405 }
   8406 
   8407 /**
   8408  Squeeze `N` x `LEN` bytes. Only `N = 1` for now.
   8409 */
   8410 /**
   8411 This function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, 1usize, RATE>[TraitClause@0, TraitClause@1]}
   8412 */
   8413 /**
   8414 A monomorphic instance of libcrux_sha3.generic_keccak.xof.squeeze_85
   8415 with types uint64_t
   8416 with const generics
   8417 - RATE= 168
   8418 */
   8419 static KRML_MUSTINLINE void
   8420 libcrux_sha3_generic_keccak_xof_squeeze_85_2a(
   8421   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8422   Eurydice_mut_borrow_slice_u8 out
   8423 )
   8424 {
   8425   size_t out_len = out.meta;
   8426   if (!(out_len == (size_t)0U))
   8427   {
   8428     if (self->sponge)
   8429     {
   8430       libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   8431     }
   8432     if (out_len > (size_t)0U)
   8433     {
   8434       size_t blocks = out_len / (size_t)168U;
   8435       size_t last = out_len - out_len % (size_t)168U;
   8436       if (blocks == (size_t)0U)
   8437       {
   8438         libcrux_sha3_simd_portable_squeeze_9b_60(&self->inner, out, (size_t)0U, out_len);
   8439       }
   8440       else
   8441       {
   8442         libcrux_sha3_simd_portable_squeeze_9b_60(&self->inner, out, (size_t)0U, (size_t)168U);
   8443         for (size_t i = (size_t)1U; i < blocks; i++)
   8444         {
   8445           size_t i0 = i;
   8446           libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   8447           libcrux_sha3_simd_portable_squeeze_9b_60(&self->inner,
   8448             out,
   8449             i0 * (size_t)168U,
   8450             (size_t)168U);
   8451         }
   8452         if (last < out_len)
   8453         {
   8454           libcrux_sha3_generic_keccak_keccakf1600_80_71(&self->inner);
   8455           libcrux_sha3_simd_portable_squeeze_9b_60(&self->inner, out, last, out_len - last);
   8456         }
   8457       }
   8458     }
   8459     self->sponge = true;
   8460   }
   8461 }
   8462 
   8463 /**
   8464  Shake128 squeeze
   8465 */
   8466 /**
   8467 This function found in impl {libcrux_sha3::portable::incremental::Xof<168usize> for libcrux_sha3::portable::incremental::Shake128Xof}
   8468 */
   8469 static inline void
   8470 libcrux_sha3_portable_incremental_squeeze_26(
   8471   libcrux_sha3_generic_keccak_xof_KeccakXofState_55 *self,
   8472   Eurydice_mut_borrow_slice_u8 out
   8473 )
   8474 {
   8475   libcrux_sha3_generic_keccak_xof_squeeze_85_2a(self, out);
   8476 }
   8477 
   8478 /**
   8479 This function found in impl {core::clone::Clone for libcrux_sha3::portable::KeccakState}
   8480 */
   8481 static inline Eurydice_arr_7c libcrux_sha3_portable_clone_fe(const Eurydice_arr_7c *self)
   8482 {
   8483   return self[0U];
   8484 }
   8485 
   8486 /**
   8487 This function found in impl {core::clone::Clone for libcrux_sha3::Algorithm}
   8488 */
   8489 static inline libcrux_sha3_Algorithm libcrux_sha3_clone_e6(const libcrux_sha3_Algorithm *self)
   8490 {
   8491   return self[0U];
   8492 }
   8493 
   8494 /**
   8495 This function found in impl {core::convert::From<libcrux_sha3::Algorithm> for u32}
   8496 */
   8497 static inline uint32_t libcrux_sha3_from_6c(libcrux_sha3_Algorithm v)
   8498 {
   8499   switch (v)
   8500   {
   8501     case libcrux_sha3_Algorithm_Sha224:
   8502       {
   8503         break;
   8504       }
   8505     case libcrux_sha3_Algorithm_Sha256:
   8506       {
   8507         return 2U;
   8508       }
   8509     case libcrux_sha3_Algorithm_Sha384:
   8510       {
   8511         return 3U;
   8512       }
   8513     case libcrux_sha3_Algorithm_Sha512:
   8514       {
   8515         return 4U;
   8516       }
   8517     default:
   8518       {
   8519         KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__);
   8520         KRML_HOST_EXIT(253U);
   8521       }
   8522   }
   8523   return 1U;
   8524 }
   8525 
   8526 /**
   8527 A monomorphic instance of Eurydice.arr
   8528 with types libcrux_sha3_portable_KeccakState
   8529 with const generics
   8530 - $3size_t
   8531 */
   8532 typedef struct Eurydice_arr_1b0_s { Eurydice_arr_7c data[3U]; } Eurydice_arr_1b0;
   8533 
   8534 #if defined(__cplusplus)
   8535 }
   8536 #endif
   8537 
   8538 #define libcrux_sha3_portable_H_DEFINED
   8539 #endif /* libcrux_sha3_portable_H */
   8540 
   8541 /* from libcrux/combined_extraction/generated/libcrux_mlkem_core.h */
   8542 /*
   8543  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   8544  *
   8545  * SPDX-License-Identifier: MIT or Apache-2.0
   8546  *
   8547  * This code was generated with the following revisions:
   8548  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   8549  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   8550  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   8551  * F*: unset
   8552  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   8553  */
   8554 
   8555 
   8556 #ifndef libcrux_mlkem_core_H
   8557 #define libcrux_mlkem_core_H
   8558 
   8559 
   8560 
   8561 #if defined(__cplusplus)
   8562 extern "C" {
   8563 #endif
   8564 
   8565 
   8566 #define LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE ((size_t)32U)
   8567 
   8568 #define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT ((size_t)12U)
   8569 
   8570 #define LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT ((size_t)256U)
   8571 
   8572 #define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)12U)
   8573 
   8574 #define LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)
   8575 
   8576 #define LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE ((size_t)32U)
   8577 
   8578 #define LIBCRUX_ML_KEM_CONSTANTS_G_DIGEST_SIZE ((size_t)64U)
   8579 
   8580 #define LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE ((size_t)32U)
   8581 
   8582 /**
   8583  K * BITS_PER_RING_ELEMENT / 8
   8584 
   8585  [eurydice] Note that we can't use const generics here because that breaks
   8586             C extraction with eurydice.
   8587 */
   8588 static inline size_t libcrux_ml_kem_constants_ranked_bytes_per_ring_element(size_t rank)
   8589 {
   8590   return rank * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U;
   8591 }
   8592 
   8593 /**
   8594 This function found in impl {libcrux_secrets::int::CastOps for i16}
   8595 */
   8596 static KRML_MUSTINLINE uint8_t libcrux_secrets_int_as_u8_f5(int16_t self)
   8597 {
   8598   return
   8599     libcrux_secrets_int_public_integers_classify_27_90((uint8_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));
   8600 }
   8601 
   8602 /**
   8603 This function found in impl {libcrux_secrets::int::CastOps for u8}
   8604 */
   8605 static KRML_MUSTINLINE int16_t libcrux_secrets_int_as_i16_59(uint8_t self)
   8606 {
   8607   return
   8608     libcrux_secrets_int_public_integers_classify_27_39((int16_t)(uint32_t)libcrux_secrets_int_public_integers_declassify_d8_90(self));
   8609 }
   8610 
   8611 /**
   8612 This function found in impl {libcrux_secrets::int::CastOps for i16}
   8613 */
   8614 static KRML_MUSTINLINE int32_t libcrux_secrets_int_as_i32_f5(int16_t self)
   8615 {
   8616   return
   8617     libcrux_secrets_int_public_integers_classify_27_a8((int32_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));
   8618 }
   8619 
   8620 /**
   8621 This function found in impl {libcrux_secrets::int::CastOps for i32}
   8622 */
   8623 static KRML_MUSTINLINE int16_t libcrux_secrets_int_as_i16_36(int32_t self)
   8624 {
   8625   return
   8626     libcrux_secrets_int_public_integers_classify_27_39((int16_t)libcrux_secrets_int_public_integers_declassify_d8_a8(self));
   8627 }
   8628 
   8629 /**
   8630 This function found in impl {libcrux_secrets::int::CastOps for u32}
   8631 */
   8632 static KRML_MUSTINLINE int32_t libcrux_secrets_int_as_i32_b8(uint32_t self)
   8633 {
   8634   return
   8635     libcrux_secrets_int_public_integers_classify_27_a8((int32_t)libcrux_secrets_int_public_integers_declassify_d8_df(self));
   8636 }
   8637 
   8638 /**
   8639 This function found in impl {libcrux_secrets::int::CastOps for i16}
   8640 */
   8641 static KRML_MUSTINLINE uint16_t libcrux_secrets_int_as_u16_f5(int16_t self)
   8642 {
   8643   return
   8644     libcrux_secrets_int_public_integers_classify_27_de((uint16_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));
   8645 }
   8646 
   8647 /**
   8648 This function found in impl {libcrux_secrets::int::CastOps for u16}
   8649 */
   8650 static KRML_MUSTINLINE int16_t libcrux_secrets_int_as_i16_ca(uint16_t self)
   8651 {
   8652   return
   8653     libcrux_secrets_int_public_integers_classify_27_39((int16_t)(uint32_t)libcrux_secrets_int_public_integers_declassify_d8_de(self));
   8654 }
   8655 
   8656 /**
   8657 This function found in impl {libcrux_secrets::int::CastOps for u16}
   8658 */
   8659 static KRML_MUSTINLINE uint64_t libcrux_secrets_int_as_u64_ca(uint16_t self)
   8660 {
   8661   return
   8662     libcrux_secrets_int_public_integers_classify_27_49((uint64_t)(uint32_t)libcrux_secrets_int_public_integers_declassify_d8_de(self));
   8663 }
   8664 
   8665 /**
   8666 This function found in impl {libcrux_secrets::int::CastOps for u64}
   8667 */
   8668 static KRML_MUSTINLINE uint32_t libcrux_secrets_int_as_u32_a3(uint64_t self)
   8669 {
   8670   return
   8671     libcrux_secrets_int_public_integers_classify_27_df((uint32_t)libcrux_secrets_int_public_integers_declassify_d8_49(self));
   8672 }
   8673 
   8674 /**
   8675 This function found in impl {libcrux_secrets::int::CastOps for u32}
   8676 */
   8677 static KRML_MUSTINLINE int16_t libcrux_secrets_int_as_i16_b8(uint32_t self)
   8678 {
   8679   return
   8680     libcrux_secrets_int_public_integers_classify_27_39((int16_t)libcrux_secrets_int_public_integers_declassify_d8_df(self));
   8681 }
   8682 
   8683 /**
   8684 This function found in impl {libcrux_secrets::int::CastOps for i16}
   8685 */
   8686 static KRML_MUSTINLINE int16_t libcrux_secrets_int_as_i16_f5(int16_t self)
   8687 {
   8688   return
   8689     libcrux_secrets_int_public_integers_classify_27_39(libcrux_secrets_int_public_integers_declassify_d8_39(self));
   8690 }
   8691 
   8692 /**
   8693  Pad the `slice` with `0`s at the end.
   8694 */
   8695 /**
   8696 A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
   8697 with const generics
   8698 - LEN= 32
   8699 */
   8700 static KRML_MUSTINLINE Eurydice_arr_ec
   8701 libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_borrow_slice_u8 slice)
   8702 {
   8703   Eurydice_arr_ec out = { .data = { 0U } };
   8704   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d46(&out,
   8705       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),
   8706     slice,
   8707     uint8_t);
   8708   return out;
   8709 }
   8710 
   8711 /**
   8712 This function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}
   8713 */
   8714 /**
   8715 A monomorphic instance of libcrux_ml_kem.types.default_d3
   8716 with const generics
   8717 - SIZE= 2400
   8718 */
   8719 static inline Eurydice_arr_7d libcrux_ml_kem_types_default_d3_79(void)
   8720 {
   8721   return (KRML_CLITERAL(Eurydice_arr_7d){ .data = { 0U } });
   8722 }
   8723 
   8724 /**
   8725 This function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}
   8726 */
   8727 /**
   8728 A monomorphic instance of libcrux_ml_kem.types.from_51
   8729 with const generics
   8730 - SIZE= 1184
   8731 */
   8732 static inline Eurydice_arr_5f libcrux_ml_kem_types_from_51_3d(Eurydice_arr_5f value)
   8733 {
   8734   return value;
   8735 }
   8736 
   8737 typedef struct libcrux_ml_kem_mlkem768_MlKem768KeyPair_s
   8738 {
   8739   Eurydice_arr_7d sk;
   8740   Eurydice_arr_5f pk;
   8741 }
   8742 libcrux_ml_kem_mlkem768_MlKem768KeyPair;
   8743 
   8744 /**
   8745  Create a new [`MlKemKeyPair`] from the secret and public key.
   8746 */
   8747 /**
   8748 This function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}
   8749 */
   8750 /**
   8751 A monomorphic instance of libcrux_ml_kem.types.from_17
   8752 with const generics
   8753 - PRIVATE_KEY_SIZE= 2400
   8754 - PUBLIC_KEY_SIZE= 1184
   8755 */
   8756 static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
   8757 libcrux_ml_kem_types_from_17_bc(Eurydice_arr_7d sk, Eurydice_arr_5f pk)
   8758 {
   8759   return (KRML_CLITERAL(libcrux_ml_kem_mlkem768_MlKem768KeyPair){ .sk = sk, .pk = pk });
   8760 }
   8761 
   8762 /**
   8763 This function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}
   8764 */
   8765 /**
   8766 A monomorphic instance of libcrux_ml_kem.types.from_b2
   8767 with const generics
   8768 - SIZE= 2400
   8769 */
   8770 static inline Eurydice_arr_7d libcrux_ml_kem_types_from_b2_79(Eurydice_arr_7d value)
   8771 {
   8772   return value;
   8773 }
   8774 
   8775 /**
   8776 A monomorphic instance of n-tuple
   8777 with types libcrux_ml_kem_mlkem768_MlKem768Ciphertext, Eurydice_arr_ec
   8778 
   8779 */
   8780 typedef struct tuple_f4_s
   8781 {
   8782   Eurydice_arr_2b fst;
   8783   Eurydice_arr_ec snd;
   8784 }
   8785 tuple_f4;
   8786 
   8787 /**
   8788 This function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}
   8789 */
   8790 /**
   8791 A monomorphic instance of libcrux_ml_kem.types.from_19
   8792 with const generics
   8793 - SIZE= 1088
   8794 */
   8795 static inline Eurydice_arr_2b libcrux_ml_kem_types_from_19_52(Eurydice_arr_2b value)
   8796 {
   8797   return value;
   8798 }
   8799 
   8800 /**
   8801  A reference to the raw byte slice.
   8802 */
   8803 /**
   8804 This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}
   8805 */
   8806 /**
   8807 A monomorphic instance of libcrux_ml_kem.types.as_slice_e6
   8808 with const generics
   8809 - SIZE= 1184
   8810 */
   8811 static inline const
   8812 Eurydice_arr_5f
   8813 *libcrux_ml_kem_types_as_slice_e6_3d(const Eurydice_arr_5f *self)
   8814 {
   8815   return self;
   8816 }
   8817 
   8818 /**
   8819  A reference to the raw byte slice.
   8820 */
   8821 /**
   8822 This function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}
   8823 */
   8824 /**
   8825 A monomorphic instance of libcrux_ml_kem.types.as_slice_a9
   8826 with const generics
   8827 - SIZE= 1088
   8828 */
   8829 static inline const
   8830 Eurydice_arr_2b
   8831 *libcrux_ml_kem_types_as_slice_a9_52(const Eurydice_arr_2b *self)
   8832 {
   8833   return self;
   8834 }
   8835 
   8836 /**
   8837 A monomorphic instance of libcrux_ml_kem.utils.prf_input_inc
   8838 with const generics
   8839 - K= 3
   8840 */
   8841 static KRML_MUSTINLINE uint8_t
   8842 libcrux_ml_kem_utils_prf_input_inc_78(Eurydice_arr_fd *prf_inputs, uint8_t domain_separator)
   8843 {
   8844   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   8845   {
   8846     size_t i0 = i;
   8847     prf_inputs->data[i0].data[32U] = domain_separator;
   8848     domain_separator = (uint32_t)domain_separator + 1U;
   8849   }
   8850   return domain_separator;
   8851 }
   8852 
   8853 /**
   8854  Pad the `slice` with `0`s at the end.
   8855 */
   8856 /**
   8857 A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
   8858 with const generics
   8859 - LEN= 33
   8860 */
   8861 static KRML_MUSTINLINE Eurydice_arr_fa0
   8862 libcrux_ml_kem_utils_into_padded_array_29(Eurydice_borrow_slice_u8 slice)
   8863 {
   8864   Eurydice_arr_fa0 out = { .data = { 0U } };
   8865   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(&out,
   8866       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),
   8867     slice,
   8868     uint8_t);
   8869   return out;
   8870 }
   8871 
   8872 /**
   8873  Pad the `slice` with `0`s at the end.
   8874 */
   8875 /**
   8876 A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
   8877 with const generics
   8878 - LEN= 34
   8879 */
   8880 static KRML_MUSTINLINE Eurydice_arr_31
   8881 libcrux_ml_kem_utils_into_padded_array_de(Eurydice_borrow_slice_u8 slice)
   8882 {
   8883   Eurydice_arr_31 out = { .data = { 0U } };
   8884   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&out,
   8885       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),
   8886     slice,
   8887     uint8_t);
   8888   return out;
   8889 }
   8890 
   8891 /**
   8892 This function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}
   8893 */
   8894 /**
   8895 A monomorphic instance of libcrux_ml_kem.types.as_ref_c1
   8896 with const generics
   8897 - SIZE= 1088
   8898 */
   8899 static inline Eurydice_borrow_slice_u8
   8900 libcrux_ml_kem_types_as_ref_c1_52(const Eurydice_arr_2b *self)
   8901 {
   8902   return Eurydice_array_to_slice_shared_06(self);
   8903 }
   8904 
   8905 /**
   8906  Pad the `slice` with `0`s at the end.
   8907 */
   8908 /**
   8909 A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
   8910 with const generics
   8911 - LEN= 1120
   8912 */
   8913 static KRML_MUSTINLINE Eurydice_arr_af
   8914 libcrux_ml_kem_utils_into_padded_array_66(Eurydice_borrow_slice_u8 slice)
   8915 {
   8916   Eurydice_arr_af out = { .data = { 0U } };
   8917   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&out,
   8918       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),
   8919     slice,
   8920     uint8_t);
   8921   return out;
   8922 }
   8923 
   8924 /**
   8925  Pad the `slice` with `0`s at the end.
   8926 */
   8927 /**
   8928 A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
   8929 with const generics
   8930 - LEN= 64
   8931 */
   8932 static KRML_MUSTINLINE Eurydice_arr_c7
   8933 libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_borrow_slice_u8 slice)
   8934 {
   8935   Eurydice_arr_c7 out = { .data = { 0U } };
   8936   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d410(&out,
   8937       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),
   8938     slice,
   8939     uint8_t);
   8940   return out;
   8941 }
   8942 
   8943 typedef struct Eurydice_borrow_slice_u8_x4_s
   8944 {
   8945   Eurydice_borrow_slice_u8 fst;
   8946   Eurydice_borrow_slice_u8 snd;
   8947   Eurydice_borrow_slice_u8 thd;
   8948   Eurydice_borrow_slice_u8 f3;
   8949 }
   8950 Eurydice_borrow_slice_u8_x4;
   8951 
   8952 typedef struct Eurydice_borrow_slice_u8_x2_s
   8953 {
   8954   Eurydice_borrow_slice_u8 fst;
   8955   Eurydice_borrow_slice_u8 snd;
   8956 }
   8957 Eurydice_borrow_slice_u8_x2;
   8958 
   8959 /**
   8960  Unpack an incoming private key into it's different parts.
   8961 
   8962  We have this here in types to extract into a common core for C.
   8963 */
   8964 /**
   8965 A monomorphic instance of libcrux_ml_kem.types.unpack_private_key
   8966 with const generics
   8967 - CPA_SECRET_KEY_SIZE= 1152
   8968 - PUBLIC_KEY_SIZE= 1184
   8969 */
   8970 static inline Eurydice_borrow_slice_u8_x4
   8971 libcrux_ml_kem_types_unpack_private_key_64(Eurydice_borrow_slice_u8 private_key)
   8972 {
   8973   Eurydice_borrow_slice_u8_x2
   8974   uu____0 =
   8975     Eurydice_slice_split_at(private_key,
   8976       (size_t)1152U,
   8977       uint8_t,
   8978       Eurydice_borrow_slice_u8_x2);
   8979   Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;
   8980   Eurydice_borrow_slice_u8 secret_key0 = uu____0.snd;
   8981   Eurydice_borrow_slice_u8_x2
   8982   uu____1 =
   8983     Eurydice_slice_split_at(secret_key0,
   8984       (size_t)1184U,
   8985       uint8_t,
   8986       Eurydice_borrow_slice_u8_x2);
   8987   Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____1.fst;
   8988   Eurydice_borrow_slice_u8 secret_key = uu____1.snd;
   8989   Eurydice_borrow_slice_u8_x2
   8990   uu____2 =
   8991     Eurydice_slice_split_at(secret_key,
   8992       LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE,
   8993       uint8_t,
   8994       Eurydice_borrow_slice_u8_x2);
   8995   Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____2.fst;
   8996   Eurydice_borrow_slice_u8 implicit_rejection_value = uu____2.snd;
   8997   return
   8998     (
   8999       KRML_CLITERAL(Eurydice_borrow_slice_u8_x4){
   9000         .fst = ind_cpa_secret_key,
   9001         .snd = ind_cpa_public_key,
   9002         .thd = ind_cpa_public_key_hash,
   9003         .f3 = implicit_rejection_value
   9004       }
   9005     );
   9006 }
   9007 
   9008 #if defined(__cplusplus)
   9009 }
   9010 #endif
   9011 
   9012 #define libcrux_mlkem_core_H_DEFINED
   9013 #endif /* libcrux_mlkem_core_H */
   9014 
   9015 /* from libcrux/combined_extraction/generated/libcrux_mldsa_core.h */
   9016 /*
   9017  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   9018  *
   9019  * SPDX-License-Identifier: MIT or Apache-2.0
   9020  *
   9021  * This code was generated with the following revisions:
   9022  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   9023  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   9024  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   9025  * F*: unset
   9026  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   9027  */
   9028 
   9029 
   9030 #ifndef libcrux_mldsa_core_H
   9031 #define libcrux_mldsa_core_H
   9032 
   9033 
   9034 
   9035 #if defined(__cplusplus)
   9036 extern "C" {
   9037 #endif
   9038 
   9039 
   9040 #define libcrux_ml_dsa_constants_Eta_Two 2
   9041 #define libcrux_ml_dsa_constants_Eta_Four 4
   9042 
   9043 typedef uint8_t libcrux_ml_dsa_constants_Eta;
   9044 
   9045 #define LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT ((size_t)8U)
   9046 
   9047 #define LIBCRUX_ML_DSA_SIMD_TRAITS_SIMD_UNITS_IN_RING_ELEMENT ((size_t)32U)
   9048 
   9049 #define LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T ((size_t)13U)
   9050 
   9051 #define LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS_MINUS_ONE_BIT_LENGTH ((size_t)23U)
   9052 
   9053 #define LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_UPPER_PART_OF_T (LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS_MINUS_ONE_BIT_LENGTH - LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T)
   9054 
   9055 #define LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH ((size_t)64U)
   9056 
   9057 #define LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT ((size_t)256U)
   9058 
   9059 #define LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN ((size_t)255U)
   9060 
   9061 #define LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS (8380417)
   9062 
   9063 #define LIBCRUX_ML_DSA_CONSTANTS_GAMMA2_V261_888 (261888)
   9064 
   9065 #define LIBCRUX_ML_DSA_CONSTANTS_GAMMA2_V95_232 (95232)
   9066 
   9067 typedef int32_t libcrux_ml_dsa_constants_Gamma2;
   9068 
   9069 #define LIBCRUX_ML_DSA_CONSTANTS_KEY_GENERATION_RANDOMNESS_SIZE ((size_t)32U)
   9070 
   9071 #define LIBCRUX_ML_DSA_CONSTANTS_MASK_SEED_SIZE ((size_t)64U)
   9072 
   9073 #define LIBCRUX_ML_DSA_CONSTANTS_MESSAGE_REPRESENTATIVE_SIZE ((size_t)64U)
   9074 
   9075 #define LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN ((size_t)814U)
   9076 
   9077 #define LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE (LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)8U)
   9078 
   9079 #define LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE (LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_UPPER_PART_OF_T * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)8U)
   9080 
   9081 #define LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE ((size_t)32U)
   9082 
   9083 #define LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE ((size_t)64U)
   9084 
   9085 #define LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE ((size_t)32U)
   9086 
   9087 #define LIBCRUX_ML_DSA_CONSTANTS_SIGNING_RANDOMNESS_SIZE ((size_t)32U)
   9088 
   9089 static inline int32_t
   9090 libcrux_ml_dsa_constants_beta(
   9091   size_t ones_in_verifier_challenge,
   9092   libcrux_ml_dsa_constants_Eta eta
   9093 )
   9094 {
   9095   size_t eta_val;
   9096   switch (eta)
   9097   {
   9098     case libcrux_ml_dsa_constants_Eta_Two:
   9099       {
   9100         eta_val = (size_t)2U;
   9101         break;
   9102       }
   9103     case libcrux_ml_dsa_constants_Eta_Four:
   9104       {
   9105         eta_val = (size_t)4U;
   9106         break;
   9107       }
   9108     default:
   9109       {
   9110         KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__);
   9111         KRML_HOST_EXIT(253U);
   9112       }
   9113   }
   9114   return (int32_t)(ones_in_verifier_challenge * eta_val);
   9115 }
   9116 
   9117 static inline size_t
   9118 libcrux_ml_dsa_constants_commitment_ring_element_size(size_t bits_per_commitment_coefficient)
   9119 {
   9120   return
   9121     bits_per_commitment_coefficient * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT /
   9122       (size_t)8U;
   9123 }
   9124 
   9125 static inline size_t
   9126 libcrux_ml_dsa_constants_commitment_vector_size(
   9127   size_t bits_per_commitment_coefficient,
   9128   size_t rows_in_a
   9129 )
   9130 {
   9131   return
   9132     libcrux_ml_dsa_constants_commitment_ring_element_size(bits_per_commitment_coefficient) *
   9133       rows_in_a;
   9134 }
   9135 
   9136 static inline size_t
   9137 libcrux_ml_dsa_constants_error_ring_element_size(size_t bits_per_error_coefficient)
   9138 {
   9139   return
   9140     bits_per_error_coefficient * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)8U;
   9141 }
   9142 
   9143 static inline size_t
   9144 libcrux_ml_dsa_constants_gamma1_ring_element_size(size_t bits_per_gamma1_coefficient)
   9145 {
   9146   return
   9147     bits_per_gamma1_coefficient * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT /
   9148       (size_t)8U;
   9149 }
   9150 
   9151 static inline size_t
   9152 libcrux_ml_dsa_constants_signature_size(
   9153   size_t rows_in_a,
   9154   size_t columns_in_a,
   9155   size_t max_ones_in_hint,
   9156   size_t commitment_hash_size,
   9157   size_t bits_per_gamma1_coefficient
   9158 )
   9159 {
   9160   return
   9161     commitment_hash_size +
   9162       columns_in_a * libcrux_ml_dsa_constants_gamma1_ring_element_size(bits_per_gamma1_coefficient)
   9163     + max_ones_in_hint
   9164     + rows_in_a;
   9165 }
   9166 
   9167 static inline size_t
   9168 libcrux_ml_dsa_constants_signing_key_size(
   9169   size_t rows_in_a,
   9170   size_t columns_in_a,
   9171   size_t error_ring_element_size
   9172 )
   9173 {
   9174   return
   9175     LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE +
   9176       LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH
   9177     + (rows_in_a + columns_in_a) * error_ring_element_size
   9178     + rows_in_a * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE;
   9179 }
   9180 
   9181 static inline size_t libcrux_ml_dsa_constants_verification_key_size(size_t rows_in_a)
   9182 {
   9183   return
   9184     LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE +
   9185       LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * rows_in_a *
   9186         (LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS_MINUS_ONE_BIT_LENGTH -
   9187           LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T)
   9188       / (size_t)8U;
   9189 }
   9190 
   9191 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_COMMITMENT_COEFFICIENT ((size_t)6U)
   9192 
   9193 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_ERROR_COEFFICIENT ((size_t)3U)
   9194 
   9195 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_GAMMA1_COEFFICIENT ((size_t)18U)
   9196 
   9197 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A ((size_t)4U)
   9198 
   9199 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE ((size_t)32U)
   9200 
   9201 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA (libcrux_ml_dsa_constants_Eta_Two)
   9202 
   9203 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT ((size_t)17U)
   9204 
   9205 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2 ((LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS - 1) / 88)
   9206 
   9207 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT ((size_t)80U)
   9208 
   9209 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE ((size_t)39U)
   9210 
   9211 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A ((size_t)4U)
   9212 
   9213 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_COMMITMENT_COEFFICIENT ((size_t)4U)
   9214 
   9215 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_ERROR_COEFFICIENT ((size_t)4U)
   9216 
   9217 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_GAMMA1_COEFFICIENT ((size_t)20U)
   9218 
   9219 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A ((size_t)5U)
   9220 
   9221 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE ((size_t)48U)
   9222 
   9223 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA (libcrux_ml_dsa_constants_Eta_Four)
   9224 
   9225 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT ((size_t)19U)
   9226 
   9227 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2 ((LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS - 1) / 32)
   9228 
   9229 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT ((size_t)55U)
   9230 
   9231 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE ((size_t)49U)
   9232 
   9233 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A ((size_t)6U)
   9234 
   9235 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_COMMITMENT_COEFFICIENT ((size_t)4U)
   9236 
   9237 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_ERROR_COEFFICIENT ((size_t)3U)
   9238 
   9239 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_GAMMA1_COEFFICIENT ((size_t)20U)
   9240 
   9241 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A ((size_t)7U)
   9242 
   9243 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE ((size_t)64U)
   9244 
   9245 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA (libcrux_ml_dsa_constants_Eta_Two)
   9246 
   9247 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT ((size_t)19U)
   9248 
   9249 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2 ((LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS - 1) / 32)
   9250 
   9251 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT ((size_t)75U)
   9252 
   9253 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE ((size_t)60U)
   9254 
   9255 #define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A ((size_t)8U)
   9256 
   9257 /**
   9258 This function found in impl {core::clone::Clone for libcrux_ml_dsa::constants::Eta}
   9259 */
   9260 static inline libcrux_ml_dsa_constants_Eta
   9261 libcrux_ml_dsa_constants_clone_54(const libcrux_ml_dsa_constants_Eta *self)
   9262 {
   9263   return self[0U];
   9264 }
   9265 
   9266 static KRML_MUSTINLINE size_t
   9267 libcrux_ml_dsa_encoding_error_chunk_size(libcrux_ml_dsa_constants_Eta eta)
   9268 {
   9269   switch (eta)
   9270   {
   9271     case libcrux_ml_dsa_constants_Eta_Two:
   9272       {
   9273         break;
   9274       }
   9275     case libcrux_ml_dsa_constants_Eta_Four:
   9276       {
   9277         return (size_t)4U;
   9278       }
   9279     default:
   9280       {
   9281         KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__);
   9282         KRML_HOST_EXIT(253U);
   9283       }
   9284   }
   9285   return (size_t)3U;
   9286 }
   9287 
   9288 #define libcrux_ml_dsa_types_VerificationError_MalformedHintError 0
   9289 #define libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError 1
   9290 #define libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError 2
   9291 #define libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError 3
   9292 
   9293 typedef uint8_t libcrux_ml_dsa_types_VerificationError;
   9294 
   9295 static KRML_MUSTINLINE void
   9296 libcrux_ml_dsa_encoding_signature_set_hint(
   9297   Eurydice_dst_ref_mut_20 out_hint,
   9298   size_t i,
   9299   size_t j
   9300 )
   9301 {
   9302   out_hint.ptr[i].data[j] = 1;
   9303 }
   9304 
   9305 #define LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT ((size_t)13U)
   9306 
   9307 #define LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW ((size_t)10U)
   9308 
   9309 #define LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT ((size_t)10U)
   9310 
   9311 #define LIBCRUX_ML_DSA_HASH_FUNCTIONS_SHAKE128_BLOCK_SIZE ((size_t)168U)
   9312 
   9313 #define LIBCRUX_ML_DSA_HASH_FUNCTIONS_SHAKE128_FIVE_BLOCKS_SIZE (LIBCRUX_ML_DSA_HASH_FUNCTIONS_SHAKE128_BLOCK_SIZE * (size_t)5U)
   9314 
   9315 #define LIBCRUX_ML_DSA_HASH_FUNCTIONS_SHAKE256_BLOCK_SIZE ((size_t)136U)
   9316 
   9317 static KRML_MUSTINLINE Eurydice_arr_91
   9318 libcrux_ml_dsa_sample_add_error_domain_separator(
   9319   Eurydice_borrow_slice_u8 slice,
   9320   uint16_t domain_separator
   9321 )
   9322 {
   9323   Eurydice_arr_91 out = { .data = { 0U } };
   9324   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d4(&out,
   9325       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),
   9326     slice,
   9327     uint8_t);
   9328   out.data[64U] = (uint8_t)(uint32_t)domain_separator;
   9329   out.data[65U] = (uint8_t)((uint32_t)domain_separator >> 8U & 0xFFFFU);
   9330   return out;
   9331 }
   9332 
   9333 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_error_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_ERROR_COEFFICIENT))
   9334 
   9335 #define LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS (8380417)
   9336 
   9337 #define LIBCRUX_ML_DSA_SIMD_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R (58728449ULL)
   9338 
   9339 static inline uint8_t_x2
   9340 libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(size_t index, size_t width)
   9341 {
   9342   return
   9343     (KRML_CLITERAL(uint8_t_x2){ .fst = (uint8_t)(index / width), .snd = (uint8_t)(index % width) });
   9344 }
   9345 
   9346 static KRML_MUSTINLINE uint16_t libcrux_ml_dsa_sample_generate_domain_separator(uint8_t_x2 _)
   9347 {
   9348   uint8_t row = _.fst;
   9349   uint8_t column = _.snd;
   9350   return (uint32_t)(uint16_t)(uint32_t)column | (uint32_t)(uint16_t)(uint32_t)row << 8U;
   9351 }
   9352 
   9353 static KRML_MUSTINLINE Eurydice_arr_31
   9354 libcrux_ml_dsa_sample_add_domain_separator(Eurydice_borrow_slice_u8 slice, uint8_t_x2 indices)
   9355 {
   9356   Eurydice_arr_31 out = { .data = { 0U } };
   9357   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&out,
   9358       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),
   9359     slice,
   9360     uint8_t);
   9361   uint16_t domain_separator = libcrux_ml_dsa_sample_generate_domain_separator(indices);
   9362   out.data[32U] = (uint8_t)(uint32_t)domain_separator;
   9363   out.data[33U] = (uint8_t)((uint32_t)domain_separator >> 8U & 0xFFFFU);
   9364   return out;
   9365 }
   9366 
   9367 #define libcrux_ml_dsa_types_SigningError_RejectionSamplingError 0
   9368 #define libcrux_ml_dsa_types_SigningError_ContextTooLongError 1
   9369 
   9370 typedef uint8_t libcrux_ml_dsa_types_SigningError;
   9371 
   9372 typedef struct libcrux_ml_dsa_pre_hash_DomainSeparationContext_s
   9373 {
   9374   Eurydice_borrow_slice_u8 context;
   9375   core_option_Option_57 pre_hash_oid;
   9376 }
   9377 libcrux_ml_dsa_pre_hash_DomainSeparationContext;
   9378 
   9379 #define libcrux_ml_dsa_pre_hash_DomainSeparationError_ContextTooLongError 0
   9380 
   9381 typedef uint8_t libcrux_ml_dsa_pre_hash_DomainSeparationError;
   9382 
   9383 /**
   9384 A monomorphic instance of core.result.Result
   9385 with types libcrux_ml_dsa_pre_hash_DomainSeparationContext, libcrux_ml_dsa_pre_hash_DomainSeparationError
   9386 
   9387 */
   9388 typedef struct core_result_Result_a8_s
   9389 {
   9390   core_result_Result_57_tags tag;
   9391   union {
   9392     libcrux_ml_dsa_pre_hash_DomainSeparationContext case_Ok;
   9393     libcrux_ml_dsa_pre_hash_DomainSeparationError case_Err;
   9394   }
   9395   val;
   9396 }
   9397 core_result_Result_a8;
   9398 
   9399 /**
   9400  `context` must be at most 255 bytes long.
   9401 */
   9402 /**
   9403 This function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}
   9404 */
   9405 static inline core_result_Result_a8
   9406 libcrux_ml_dsa_pre_hash_new_88(
   9407   Eurydice_borrow_slice_u8 context,
   9408   core_option_Option_57 pre_hash_oid
   9409 )
   9410 {
   9411   if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))
   9412   {
   9413     return
   9414       (
   9415         KRML_CLITERAL(core_result_Result_a8){
   9416           .tag = core_result_Ok,
   9417           .val = { .case_Ok = { .context = context, .pre_hash_oid = pre_hash_oid } }
   9418         }
   9419       );
   9420   }
   9421   return
   9422     (
   9423       KRML_CLITERAL(core_result_Result_a8){
   9424         .tag = core_result_Err,
   9425         .val = { .case_Err = libcrux_ml_dsa_pre_hash_DomainSeparationError_ContextTooLongError }
   9426       }
   9427     );
   9428 }
   9429 
   9430 /**
   9431  Returns the pre-hash OID, if any.
   9432 */
   9433 /**
   9434 This function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}
   9435 */
   9436 static inline const
   9437 core_option_Option_57
   9438 *libcrux_ml_dsa_pre_hash_pre_hash_oid_88(
   9439   const libcrux_ml_dsa_pre_hash_DomainSeparationContext *self
   9440 )
   9441 {
   9442   return &self->pre_hash_oid;
   9443 }
   9444 
   9445 /**
   9446  Returns the context, guaranteed to be at most 255 bytes long.
   9447 */
   9448 /**
   9449 This function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}
   9450 */
   9451 static inline Eurydice_borrow_slice_u8
   9452 libcrux_ml_dsa_pre_hash_context_88(const libcrux_ml_dsa_pre_hash_DomainSeparationContext *self)
   9453 {
   9454   return self->context;
   9455 }
   9456 
   9457 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_commitment_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_COMMITMENT_COEFFICIENT))
   9458 
   9459 static KRML_MUSTINLINE bool
   9460 libcrux_ml_dsa_sample_inside_out_shuffle(
   9461   Eurydice_borrow_slice_u8 randomness,
   9462   size_t *out_index,
   9463   uint64_t *signs,
   9464   Eurydice_arr_6c *result
   9465 )
   9466 {
   9467   bool done = false;
   9468   for (size_t i = (size_t)0U; i < randomness.meta; i++)
   9469   {
   9470     size_t _cloop_j = i;
   9471     const uint8_t *byte = &randomness.ptr[_cloop_j];
   9472     if (!done)
   9473     {
   9474       size_t sample_at = (size_t)(uint32_t)byte[0U];
   9475       if (sample_at <= out_index[0U])
   9476       {
   9477         result->data[out_index[0U]] = result->data[sample_at];
   9478         out_index[0U]++;
   9479         result->data[sample_at] = 1 - 2 * (int32_t)(signs[0U] & 1ULL);
   9480         signs[0U] >>= 1U;
   9481       }
   9482       done = out_index[0U] == (size_t)256U;
   9483     }
   9484   }
   9485   return done;
   9486 }
   9487 
   9488 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA (libcrux_ml_dsa_constants_beta(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA))
   9489 
   9490 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_gamma1_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_GAMMA1_COEFFICIENT))
   9491 
   9492 #define LIBCRUX_ML_DSA_PRE_HASH_SHAKE128_OID ((KRML_CLITERAL(Eurydice_arr_c9){ .data = { 6U, 9U, 96U, 134U, 72U, 1U, 101U, 3U, 4U, 2U, 11U } }))
   9493 
   9494 /**
   9495 This function found in impl {libcrux_ml_dsa::pre_hash::PreHash for libcrux_ml_dsa::pre_hash::SHAKE128_PH}
   9496 */
   9497 static inline Eurydice_arr_c9 libcrux_ml_dsa_pre_hash_oid_30(void)
   9498 {
   9499   return LIBCRUX_ML_DSA_PRE_HASH_SHAKE128_OID;
   9500 }
   9501 
   9502 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_VERIFICATION_KEY_SIZE (libcrux_ml_dsa_constants_verification_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A))
   9503 
   9504 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_SIGNATURE_SIZE (libcrux_ml_dsa_constants_signature_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_GAMMA1_COEFFICIENT))
   9505 
   9506 typedef Eurydice_arr_4d libcrux_ml_dsa_simd_portable_vector_type_Coefficients;
   9507 
   9508 static KRML_MUSTINLINE Eurydice_arr_4d libcrux_ml_dsa_simd_portable_vector_type_zero(void)
   9509 {
   9510   return (KRML_CLITERAL(Eurydice_arr_4d){ .data = { 0U } });
   9511 }
   9512 
   9513 /**
   9514 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9515 */
   9516 static inline Eurydice_arr_4d libcrux_ml_dsa_simd_portable_zero_65(void)
   9517 {
   9518   return libcrux_ml_dsa_simd_portable_vector_type_zero();
   9519 }
   9520 
   9521 static KRML_MUSTINLINE void
   9522 libcrux_ml_dsa_simd_portable_vector_type_from_coefficient_array(
   9523   Eurydice_dst_ref_shared_83 array,
   9524   Eurydice_arr_4d *out
   9525 )
   9526 {
   9527   Eurydice_slice_copy(Eurydice_array_to_slice_mut_fd(out),
   9528     Eurydice_slice_subslice_shared_47(array,
   9529       (
   9530         KRML_CLITERAL(core_ops_range_Range_87){
   9531           .start = (size_t)0U,
   9532           .end = LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT
   9533         }
   9534       )),
   9535     int32_t);
   9536 }
   9537 
   9538 /**
   9539 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9540 */
   9541 static inline void
   9542 libcrux_ml_dsa_simd_portable_from_coefficient_array_65(
   9543   Eurydice_dst_ref_shared_83 array,
   9544   Eurydice_arr_4d *out
   9545 )
   9546 {
   9547   libcrux_ml_dsa_simd_portable_vector_type_from_coefficient_array(array, out);
   9548 }
   9549 
   9550 static KRML_MUSTINLINE void
   9551 libcrux_ml_dsa_simd_portable_vector_type_to_coefficient_array(
   9552   const Eurydice_arr_4d *value,
   9553   Eurydice_dst_ref_mut_83 out
   9554 )
   9555 {
   9556   Eurydice_slice_copy(out, Eurydice_array_to_slice_shared_fd(value), int32_t);
   9557 }
   9558 
   9559 /**
   9560 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9561 */
   9562 static inline void
   9563 libcrux_ml_dsa_simd_portable_to_coefficient_array_65(
   9564   const Eurydice_arr_4d *value,
   9565   Eurydice_dst_ref_mut_83 out
   9566 )
   9567 {
   9568   libcrux_ml_dsa_simd_portable_vector_type_to_coefficient_array(value, out);
   9569 }
   9570 
   9571 static KRML_MUSTINLINE void
   9572 libcrux_ml_dsa_simd_portable_arithmetic_add(Eurydice_arr_4d *lhs, const Eurydice_arr_4d *rhs)
   9573 {
   9574   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9575   {
   9576     size_t i0 = i;
   9577     size_t uu____0 = i0;
   9578     lhs->data[uu____0] += rhs->data[i0];
   9579   }
   9580 }
   9581 
   9582 /**
   9583 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9584 */
   9585 static inline void
   9586 libcrux_ml_dsa_simd_portable_add_65(Eurydice_arr_4d *lhs, const Eurydice_arr_4d *rhs)
   9587 {
   9588   libcrux_ml_dsa_simd_portable_arithmetic_add(lhs, rhs);
   9589 }
   9590 
   9591 static KRML_MUSTINLINE void
   9592 libcrux_ml_dsa_simd_portable_arithmetic_subtract(
   9593   Eurydice_arr_4d *lhs,
   9594   const Eurydice_arr_4d *rhs
   9595 )
   9596 {
   9597   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9598   {
   9599     size_t i0 = i;
   9600     size_t uu____0 = i0;
   9601     lhs->data[uu____0] -= rhs->data[i0];
   9602   }
   9603 }
   9604 
   9605 /**
   9606 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9607 */
   9608 static inline void
   9609 libcrux_ml_dsa_simd_portable_subtract_65(Eurydice_arr_4d *lhs, const Eurydice_arr_4d *rhs)
   9610 {
   9611   libcrux_ml_dsa_simd_portable_arithmetic_subtract(lhs, rhs);
   9612 }
   9613 
   9614 static KRML_MUSTINLINE bool
   9615 libcrux_ml_dsa_simd_portable_arithmetic_infinity_norm_exceeds(
   9616   const Eurydice_arr_4d *simd_unit,
   9617   int32_t bound
   9618 )
   9619 {
   9620   bool result = false;
   9621   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9622   {
   9623     size_t i0 = i;
   9624     int32_t coefficient = simd_unit->data[i0];
   9625     int32_t sign = coefficient >> 31U;
   9626     int32_t normalized = coefficient - (sign & 2 * coefficient);
   9627     bool uu____0;
   9628     if (result)
   9629     {
   9630       uu____0 = true;
   9631     }
   9632     else
   9633     {
   9634       uu____0 = normalized >= bound;
   9635     }
   9636     result = uu____0;
   9637   }
   9638   return result;
   9639 }
   9640 
   9641 /**
   9642 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9643 */
   9644 static inline bool
   9645 libcrux_ml_dsa_simd_portable_infinity_norm_exceeds_65(
   9646   const Eurydice_arr_4d *simd_unit,
   9647   int32_t bound
   9648 )
   9649 {
   9650   return libcrux_ml_dsa_simd_portable_arithmetic_infinity_norm_exceeds(simd_unit, bound);
   9651 }
   9652 
   9653 static KRML_MUSTINLINE int32_t_x2
   9654 libcrux_ml_dsa_simd_portable_arithmetic_decompose_element(int32_t gamma2, int32_t r)
   9655 {
   9656   int32_t r0 = r + (r >> 31U & LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);
   9657   int32_t ceil_of_r_by_128 = (r0 + 127) >> 7U;
   9658   int32_t r1;
   9659   switch (gamma2)
   9660   {
   9661     case 95232:
   9662       {
   9663         int32_t result = (ceil_of_r_by_128 * 11275 + (int32_t)((uint32_t)1 << 23U)) >> 24U;
   9664         int32_t result_0 = (result ^ (43 - result) >> 31U) & result;
   9665         r1 = result_0;
   9666         break;
   9667       }
   9668     case 261888:
   9669       {
   9670         int32_t result = (ceil_of_r_by_128 * 1025 + (int32_t)((uint32_t)1 << 21U)) >> 22U;
   9671         int32_t result_0 = result & 15;
   9672         r1 = result_0;
   9673         break;
   9674       }
   9675     default:
   9676       {
   9677         KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!");
   9678         KRML_HOST_EXIT(255U);
   9679       }
   9680   }
   9681   int32_t alpha = gamma2 * 2;
   9682   int32_t r00 = r0 - r1 * alpha;
   9683   r00 -=
   9684     ((LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS - 1) / 2 - r00) >> 31U &
   9685       LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS;
   9686   return (KRML_CLITERAL(int32_t_x2){ .fst = r00, .snd = r1 });
   9687 }
   9688 
   9689 static KRML_MUSTINLINE void
   9690 libcrux_ml_dsa_simd_portable_arithmetic_decompose(
   9691   int32_t gamma2,
   9692   const Eurydice_arr_4d *simd_unit,
   9693   Eurydice_arr_4d *low,
   9694   Eurydice_arr_4d *high
   9695 )
   9696 {
   9697   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9698   {
   9699     size_t i0 = i;
   9700     int32_t_x2
   9701     uu____0 =
   9702       libcrux_ml_dsa_simd_portable_arithmetic_decompose_element(gamma2,
   9703         simd_unit->data[i0]);
   9704     int32_t uu____1 = uu____0.snd;
   9705     low->data[i0] = uu____0.fst;
   9706     high->data[i0] = uu____1;
   9707   }
   9708 }
   9709 
   9710 /**
   9711 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9712 */
   9713 static inline void
   9714 libcrux_ml_dsa_simd_portable_decompose_65(
   9715   int32_t gamma2,
   9716   const Eurydice_arr_4d *simd_unit,
   9717   Eurydice_arr_4d *low,
   9718   Eurydice_arr_4d *high
   9719 )
   9720 {
   9721   libcrux_ml_dsa_simd_portable_arithmetic_decompose(gamma2, simd_unit, low, high);
   9722 }
   9723 
   9724 static KRML_MUSTINLINE int32_t
   9725 libcrux_ml_dsa_simd_portable_arithmetic_compute_one_hint(
   9726   int32_t low,
   9727   int32_t high,
   9728   int32_t gamma2
   9729 )
   9730 {
   9731   int32_t uu____0;
   9732   if (low > gamma2)
   9733   {
   9734     uu____0 = 1;
   9735   }
   9736   else if (low < -gamma2)
   9737   {
   9738     uu____0 = 1;
   9739   }
   9740   else if (low == -gamma2)
   9741   {
   9742     if (high != 0)
   9743     {
   9744       uu____0 = 1;
   9745     }
   9746     else
   9747     {
   9748       uu____0 = 0;
   9749     }
   9750   }
   9751   else
   9752   {
   9753     uu____0 = 0;
   9754   }
   9755   return uu____0;
   9756 }
   9757 
   9758 static KRML_MUSTINLINE size_t
   9759 libcrux_ml_dsa_simd_portable_arithmetic_compute_hint(
   9760   const Eurydice_arr_4d *low,
   9761   const Eurydice_arr_4d *high,
   9762   int32_t gamma2,
   9763   Eurydice_arr_4d *hint
   9764 )
   9765 {
   9766   size_t one_hints_count = (size_t)0U;
   9767   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9768   {
   9769     size_t i0 = i;
   9770     hint->data[i0] =
   9771       libcrux_ml_dsa_simd_portable_arithmetic_compute_one_hint(low->data[i0],
   9772         high->data[i0],
   9773         gamma2);
   9774     one_hints_count += (size_t)hint->data[i0];
   9775   }
   9776   return one_hints_count;
   9777 }
   9778 
   9779 /**
   9780 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9781 */
   9782 static inline size_t
   9783 libcrux_ml_dsa_simd_portable_compute_hint_65(
   9784   const Eurydice_arr_4d *low,
   9785   const Eurydice_arr_4d *high,
   9786   int32_t gamma2,
   9787   Eurydice_arr_4d *hint
   9788 )
   9789 {
   9790   return libcrux_ml_dsa_simd_portable_arithmetic_compute_hint(low, high, gamma2, hint);
   9791 }
   9792 
   9793 static KRML_MUSTINLINE int32_t
   9794 libcrux_ml_dsa_simd_portable_arithmetic_use_one_hint(int32_t gamma2, int32_t r, int32_t hint)
   9795 {
   9796   int32_t_x2 uu____0 = libcrux_ml_dsa_simd_portable_arithmetic_decompose_element(gamma2, r);
   9797   int32_t r0 = uu____0.fst;
   9798   int32_t r1 = uu____0.snd;
   9799   int32_t uu____1;
   9800   if (!(hint == 0))
   9801   {
   9802     switch (gamma2)
   9803     {
   9804       case 95232:
   9805         {
   9806           if (r0 > 0)
   9807           {
   9808             if (r1 == 43)
   9809             {
   9810               uu____1 = 0;
   9811             }
   9812             else
   9813             {
   9814               uu____1 = r1 + hint;
   9815             }
   9816           }
   9817           else if (r1 == 0)
   9818           {
   9819             uu____1 = 43;
   9820           }
   9821           else
   9822           {
   9823             uu____1 = r1 - hint;
   9824           }
   9825           break;
   9826         }
   9827       case 261888:
   9828         {
   9829           if (r0 > 0)
   9830           {
   9831             uu____1 = (r1 + hint) & 15;
   9832           }
   9833           else
   9834           {
   9835             uu____1 = (r1 - hint) & 15;
   9836           }
   9837           break;
   9838         }
   9839       default:
   9840         {
   9841           KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!");
   9842           KRML_HOST_EXIT(255U);
   9843         }
   9844     }
   9845     return uu____1;
   9846   }
   9847   return r1;
   9848 }
   9849 
   9850 static KRML_MUSTINLINE void
   9851 libcrux_ml_dsa_simd_portable_arithmetic_use_hint(
   9852   int32_t gamma2,
   9853   const Eurydice_arr_4d *simd_unit,
   9854   Eurydice_arr_4d *hint
   9855 )
   9856 {
   9857   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9858   {
   9859     size_t i0 = i;
   9860     int32_t
   9861     uu____0 =
   9862       libcrux_ml_dsa_simd_portable_arithmetic_use_one_hint(gamma2,
   9863         simd_unit->data[i0],
   9864         hint->data[i0]);
   9865     hint->data[i0] = uu____0;
   9866   }
   9867 }
   9868 
   9869 /**
   9870 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9871 */
   9872 static inline void
   9873 libcrux_ml_dsa_simd_portable_use_hint_65(
   9874   int32_t gamma2,
   9875   const Eurydice_arr_4d *simd_unit,
   9876   Eurydice_arr_4d *hint
   9877 )
   9878 {
   9879   libcrux_ml_dsa_simd_portable_arithmetic_use_hint(gamma2, simd_unit, hint);
   9880 }
   9881 
   9882 static KRML_MUSTINLINE uint64_t
   9883 libcrux_ml_dsa_simd_portable_arithmetic_get_n_least_significant_bits(uint8_t n, uint64_t value)
   9884 {
   9885   return value & ((1ULL << (uint32_t)n) - 1ULL);
   9886 }
   9887 
   9888 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT (32U)
   9889 
   9890 static KRML_MUSTINLINE int32_t
   9891 libcrux_ml_dsa_simd_portable_arithmetic_montgomery_reduce_element(int64_t value)
   9892 {
   9893   uint64_t
   9894   t =
   9895     libcrux_ml_dsa_simd_portable_arithmetic_get_n_least_significant_bits(LIBCRUX_ML_DSA_SIMD_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT,
   9896       (uint64_t)value)
   9897     * LIBCRUX_ML_DSA_SIMD_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R;
   9898   int32_t
   9899   k =
   9900     (int32_t)libcrux_ml_dsa_simd_portable_arithmetic_get_n_least_significant_bits(LIBCRUX_ML_DSA_SIMD_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT,
   9901       t);
   9902   int64_t k_times_modulus = (int64_t)k * (int64_t)LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS;
   9903   int32_t
   9904   c =
   9905     (int32_t)(k_times_modulus >> (uint32_t)LIBCRUX_ML_DSA_SIMD_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);
   9906   int32_t
   9907   value_high =
   9908     (int32_t)(value >> (uint32_t)LIBCRUX_ML_DSA_SIMD_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);
   9909   return value_high - c;
   9910 }
   9911 
   9912 static KRML_MUSTINLINE void
   9913 libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply(
   9914   Eurydice_arr_4d *lhs,
   9915   const Eurydice_arr_4d *rhs
   9916 )
   9917 {
   9918   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9919   {
   9920     size_t i0 = i;
   9921     lhs->data[i0] =
   9922       libcrux_ml_dsa_simd_portable_arithmetic_montgomery_reduce_element((int64_t)lhs->data[i0] *
   9923           (int64_t)rhs->data[i0]);
   9924   }
   9925 }
   9926 
   9927 /**
   9928 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9929 */
   9930 static inline void
   9931 libcrux_ml_dsa_simd_portable_montgomery_multiply_65(
   9932   Eurydice_arr_4d *lhs,
   9933   const Eurydice_arr_4d *rhs
   9934 )
   9935 {
   9936   libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply(lhs, rhs);
   9937 }
   9938 
   9939 static KRML_MUSTINLINE int32_t
   9940 libcrux_ml_dsa_simd_portable_arithmetic_barrett_reduce_element(int32_t fe)
   9941 {
   9942   int32_t quotient = (fe + (int32_t)((uint32_t)1 << 22U)) >> 23U;
   9943   return fe - quotient * LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS;
   9944 }
   9945 
   9946 static inline void
   9947 libcrux_ml_dsa_simd_portable_arithmetic_barrett_reduce_simd_unit(Eurydice_arr_4d *simd_unit)
   9948 {
   9949   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9950   {
   9951     size_t i0 = i;
   9952     simd_unit->data[i0] =
   9953       libcrux_ml_dsa_simd_portable_arithmetic_barrett_reduce_element(simd_unit->data[i0]);
   9954   }
   9955 }
   9956 
   9957 static KRML_MUSTINLINE int32_t_x2
   9958 libcrux_ml_dsa_simd_portable_arithmetic_power2round_element(int32_t t)
   9959 {
   9960   int32_t t2 = t + (t >> 31U & LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);
   9961   int32_t
   9962   t1 =
   9963     (t2 - 1 +
   9964       (int32_t)((uint32_t)1 <<
   9965         (uint32_t)(LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T - (size_t)1U)))
   9966     >> (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T;
   9967   int32_t
   9968   t0 = t2 - (int32_t)((uint32_t)t1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T);
   9969   return (KRML_CLITERAL(int32_t_x2){ .fst = t0, .snd = t1 });
   9970 }
   9971 
   9972 static KRML_MUSTINLINE void
   9973 libcrux_ml_dsa_simd_portable_arithmetic_power2round(Eurydice_arr_4d *t0, Eurydice_arr_4d *t1)
   9974 {
   9975   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   9976   {
   9977     size_t i0 = i;
   9978     int32_t_x2 uu____0 = libcrux_ml_dsa_simd_portable_arithmetic_power2round_element(t0->data[i0]);
   9979     int32_t uu____1 = uu____0.snd;
   9980     t0->data[i0] = uu____0.fst;
   9981     t1->data[i0] = uu____1;
   9982   }
   9983 }
   9984 
   9985 /**
   9986 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   9987 */
   9988 static inline void
   9989 libcrux_ml_dsa_simd_portable_power2round_65(Eurydice_arr_4d *t0, Eurydice_arr_4d *t1)
   9990 {
   9991   libcrux_ml_dsa_simd_portable_arithmetic_power2round(t0, t1);
   9992 }
   9993 
   9994 static KRML_MUSTINLINE size_t
   9995 libcrux_ml_dsa_simd_portable_sample_rejection_sample_less_than_field_modulus(
   9996   Eurydice_borrow_slice_u8 randomness,
   9997   Eurydice_dst_ref_mut_83 out
   9998 )
   9999 {
   10000   size_t sampled = (size_t)0U;
   10001   for (size_t i = (size_t)0U; i < randomness.meta / (size_t)3U; i++)
   10002   {
   10003     size_t i0 = i;
   10004     int32_t b0 = (int32_t)(uint32_t)randomness.ptr[i0 * (size_t)3U];
   10005     int32_t b1 = (int32_t)(uint32_t)randomness.ptr[i0 * (size_t)3U + (size_t)1U];
   10006     int32_t b2 = (int32_t)(uint32_t)randomness.ptr[i0 * (size_t)3U + (size_t)2U];
   10007     int32_t
   10008     coefficient = (((int32_t)((uint32_t)b2 << 16U) | (int32_t)((uint32_t)b1 << 8U)) | b0) & 8388607;
   10009     if (coefficient < LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS)
   10010     {
   10011       out.ptr[sampled] = coefficient;
   10012       sampled++;
   10013     }
   10014   }
   10015   return sampled;
   10016 }
   10017 
   10018 /**
   10019 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10020 */
   10021 static inline size_t
   10022 libcrux_ml_dsa_simd_portable_rejection_sample_less_than_field_modulus_65(
   10023   Eurydice_borrow_slice_u8 randomness,
   10024   Eurydice_dst_ref_mut_83 out
   10025 )
   10026 {
   10027   return
   10028     libcrux_ml_dsa_simd_portable_sample_rejection_sample_less_than_field_modulus(randomness,
   10029       out);
   10030 }
   10031 
   10032 static KRML_MUSTINLINE size_t
   10033 libcrux_ml_dsa_simd_portable_sample_rejection_sample_less_than_eta_equals_2(
   10034   Eurydice_borrow_slice_u8 randomness,
   10035   Eurydice_dst_ref_mut_83 out
   10036 )
   10037 {
   10038   size_t sampled = (size_t)0U;
   10039   for (size_t i = (size_t)0U; i < randomness.meta; i++)
   10040   {
   10041     size_t i0 = i;
   10042     uint8_t byte = randomness.ptr[i0];
   10043     uint8_t try_0 = (uint32_t)byte & 15U;
   10044     uint8_t try_1 = (uint32_t)byte >> 4U;
   10045     bool try_0_comp = try_0 < 15U;
   10046     bool try_1_comp = try_1 < 15U;
   10047     if (try_0_comp)
   10048     {
   10049       int32_t try_00 = (int32_t)(uint32_t)try_0;
   10050       int32_t try_0_mod_5 = try_00 - (try_00 * 26 >> 7U) * 5;
   10051       out.ptr[sampled] = 2 - try_0_mod_5;
   10052       sampled++;
   10053     }
   10054     if (try_1_comp)
   10055     {
   10056       int32_t try_10 = (int32_t)(uint32_t)try_1;
   10057       int32_t try_1_mod_5 = try_10 - (try_10 * 26 >> 7U) * 5;
   10058       out.ptr[sampled] = 2 - try_1_mod_5;
   10059       sampled++;
   10060     }
   10061   }
   10062   return sampled;
   10063 }
   10064 
   10065 /**
   10066 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10067 */
   10068 static inline size_t
   10069 libcrux_ml_dsa_simd_portable_rejection_sample_less_than_eta_equals_2_65(
   10070   Eurydice_borrow_slice_u8 randomness,
   10071   Eurydice_dst_ref_mut_83 out
   10072 )
   10073 {
   10074   return
   10075     libcrux_ml_dsa_simd_portable_sample_rejection_sample_less_than_eta_equals_2(randomness,
   10076       out);
   10077 }
   10078 
   10079 static KRML_MUSTINLINE size_t
   10080 libcrux_ml_dsa_simd_portable_sample_rejection_sample_less_than_eta_equals_4(
   10081   Eurydice_borrow_slice_u8 randomness,
   10082   Eurydice_dst_ref_mut_83 out
   10083 )
   10084 {
   10085   size_t sampled = (size_t)0U;
   10086   for (size_t i = (size_t)0U; i < randomness.meta; i++)
   10087   {
   10088     size_t i0 = i;
   10089     uint8_t byte = randomness.ptr[i0];
   10090     uint8_t try_0 = (uint32_t)byte & 15U;
   10091     uint8_t try_1 = (uint32_t)byte >> 4U;
   10092     bool try_0_comp = try_0 < 9U;
   10093     bool try_1_comp = try_1 < 9U;
   10094     if (try_0_comp)
   10095     {
   10096       out.ptr[sampled] = 4 - (int32_t)(uint32_t)try_0;
   10097       sampled++;
   10098     }
   10099     if (try_1_comp)
   10100     {
   10101       out.ptr[sampled] = 4 - (int32_t)(uint32_t)try_1;
   10102       sampled++;
   10103     }
   10104   }
   10105   return sampled;
   10106 }
   10107 
   10108 /**
   10109 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10110 */
   10111 static inline size_t
   10112 libcrux_ml_dsa_simd_portable_rejection_sample_less_than_eta_equals_4_65(
   10113   Eurydice_borrow_slice_u8 randomness,
   10114   Eurydice_dst_ref_mut_83 out
   10115 )
   10116 {
   10117   return
   10118     libcrux_ml_dsa_simd_portable_sample_rejection_sample_less_than_eta_equals_4(randomness,
   10119       out);
   10120 }
   10121 
   10122 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1 ((int32_t)((uint32_t)1 << 19U))
   10123 
   10124 static KRML_MUSTINLINE void
   10125 libcrux_ml_dsa_simd_portable_encoding_gamma1_serialize_when_gamma1_is_2_pow_19(
   10126   const Eurydice_arr_4d *simd_unit,
   10127   Eurydice_mut_borrow_slice_u8 serialized
   10128 )
   10129 {
   10130   for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)2U; i++)
   10131   {
   10132     size_t i0 = i;
   10133     Eurydice_dst_ref_shared_83
   10134     coefficients =
   10135       Eurydice_array_to_subslice_shared_44(simd_unit,
   10136         (
   10137           KRML_CLITERAL(core_ops_range_Range_87){
   10138             .start = i0 * (size_t)2U,
   10139             .end = i0 * (size_t)2U + (size_t)2U
   10140           }
   10141         ));
   10142     int32_t
   10143     coefficient0 =
   10144       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1 -
   10145         coefficients.ptr[0U];
   10146     int32_t
   10147     coefficient1 =
   10148       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1 -
   10149         coefficients.ptr[1U];
   10150     serialized.ptr[(size_t)5U * i0] = (uint8_t)coefficient0;
   10151     serialized.ptr[(size_t)5U * i0 + (size_t)1U] = (uint8_t)(coefficient0 >> 8U);
   10152     serialized.ptr[(size_t)5U * i0 + (size_t)2U] = (uint8_t)(coefficient0 >> 16U);
   10153     size_t uu____0 = (size_t)5U * i0 + (size_t)2U;
   10154     serialized.ptr[uu____0] =
   10155       (uint32_t)serialized.ptr[uu____0] | (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient1 << 4U);
   10156     serialized.ptr[(size_t)5U * i0 + (size_t)3U] = (uint8_t)(coefficient1 >> 4U);
   10157     serialized.ptr[(size_t)5U * i0 + (size_t)4U] = (uint8_t)(coefficient1 >> 12U);
   10158   }
   10159 }
   10160 
   10161 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 ((int32_t)((uint32_t)1 << 17U))
   10162 
   10163 static KRML_MUSTINLINE void
   10164 libcrux_ml_dsa_simd_portable_encoding_gamma1_serialize_when_gamma1_is_2_pow_17(
   10165   const Eurydice_arr_4d *simd_unit,
   10166   Eurydice_mut_borrow_slice_u8 serialized
   10167 )
   10168 {
   10169   for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)4U; i++)
   10170   {
   10171     size_t i0 = i;
   10172     Eurydice_dst_ref_shared_83
   10173     coefficients =
   10174       Eurydice_array_to_subslice_shared_44(simd_unit,
   10175         (
   10176           KRML_CLITERAL(core_ops_range_Range_87){
   10177             .start = i0 * (size_t)4U,
   10178             .end = i0 * (size_t)4U + (size_t)4U
   10179           }
   10180         ));
   10181     int32_t
   10182     coefficient0 =
   10183       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10184         coefficients.ptr[0U];
   10185     int32_t
   10186     coefficient1 =
   10187       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10188         coefficients.ptr[1U];
   10189     int32_t
   10190     coefficient2 =
   10191       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10192         coefficients.ptr[2U];
   10193     int32_t
   10194     coefficient3 =
   10195       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_SERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10196         coefficients.ptr[3U];
   10197     serialized.ptr[(size_t)9U * i0] = (uint8_t)coefficient0;
   10198     serialized.ptr[(size_t)9U * i0 + (size_t)1U] = (uint8_t)(coefficient0 >> 8U);
   10199     serialized.ptr[(size_t)9U * i0 + (size_t)2U] = (uint8_t)(coefficient0 >> 16U);
   10200     size_t uu____0 = (size_t)9U * i0 + (size_t)2U;
   10201     serialized.ptr[uu____0] =
   10202       (uint32_t)serialized.ptr[uu____0] | (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient1 << 2U);
   10203     serialized.ptr[(size_t)9U * i0 + (size_t)3U] = (uint8_t)(coefficient1 >> 6U);
   10204     serialized.ptr[(size_t)9U * i0 + (size_t)4U] = (uint8_t)(coefficient1 >> 14U);
   10205     size_t uu____1 = (size_t)9U * i0 + (size_t)4U;
   10206     serialized.ptr[uu____1] =
   10207       (uint32_t)serialized.ptr[uu____1] | (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient2 << 4U);
   10208     serialized.ptr[(size_t)9U * i0 + (size_t)5U] = (uint8_t)(coefficient2 >> 4U);
   10209     serialized.ptr[(size_t)9U * i0 + (size_t)6U] = (uint8_t)(coefficient2 >> 12U);
   10210     size_t uu____2 = (size_t)9U * i0 + (size_t)6U;
   10211     serialized.ptr[uu____2] =
   10212       (uint32_t)serialized.ptr[uu____2] | (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient3 << 6U);
   10213     serialized.ptr[(size_t)9U * i0 + (size_t)7U] = (uint8_t)(coefficient3 >> 2U);
   10214     serialized.ptr[(size_t)9U * i0 + (size_t)8U] = (uint8_t)(coefficient3 >> 10U);
   10215   }
   10216 }
   10217 
   10218 static KRML_MUSTINLINE void
   10219 libcrux_ml_dsa_simd_portable_encoding_gamma1_serialize(
   10220   const Eurydice_arr_4d *simd_unit,
   10221   Eurydice_mut_borrow_slice_u8 serialized,
   10222   size_t gamma1_exponent
   10223 )
   10224 {
   10225   switch (gamma1_exponent)
   10226   {
   10227     case 17U:
   10228       {
   10229         break;
   10230       }
   10231     case 19U:
   10232       {
   10233         libcrux_ml_dsa_simd_portable_encoding_gamma1_serialize_when_gamma1_is_2_pow_19(simd_unit,
   10234           serialized);
   10235         return;
   10236       }
   10237     default:
   10238       {
   10239         KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!");
   10240         KRML_HOST_EXIT(255U);
   10241       }
   10242   }
   10243   libcrux_ml_dsa_simd_portable_encoding_gamma1_serialize_when_gamma1_is_2_pow_17(simd_unit,
   10244     serialized);
   10245 }
   10246 
   10247 /**
   10248 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10249 */
   10250 static inline void
   10251 libcrux_ml_dsa_simd_portable_gamma1_serialize_65(
   10252   const Eurydice_arr_4d *simd_unit,
   10253   Eurydice_mut_borrow_slice_u8 serialized,
   10254   size_t gamma1_exponent
   10255 )
   10256 {
   10257   libcrux_ml_dsa_simd_portable_encoding_gamma1_serialize(simd_unit, serialized, gamma1_exponent);
   10258 }
   10259 
   10260 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1 ((int32_t)((uint32_t)1 << 19U))
   10261 
   10262 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1_TIMES_2_BITMASK ((int32_t)((uint32_t)LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1 << 1U) - 1)
   10263 
   10264 static KRML_MUSTINLINE void
   10265 libcrux_ml_dsa_simd_portable_encoding_gamma1_deserialize_when_gamma1_is_2_pow_19(
   10266   Eurydice_borrow_slice_u8 serialized,
   10267   Eurydice_arr_4d *simd_unit
   10268 )
   10269 {
   10270   for (size_t i = (size_t)0U; i < serialized.meta / (size_t)5U; i++)
   10271   {
   10272     size_t i0 = i;
   10273     Eurydice_borrow_slice_u8
   10274     bytes =
   10275       Eurydice_slice_subslice_shared_c8(serialized,
   10276         (
   10277           KRML_CLITERAL(core_ops_range_Range_87){
   10278             .start = i0 * (size_t)5U,
   10279             .end = i0 * (size_t)5U + (size_t)5U
   10280           }
   10281         ));
   10282     int32_t coefficient0 = (int32_t)(uint32_t)bytes.ptr[0U];
   10283     coefficient0 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[1U] << 8U);
   10284     coefficient0 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[2U] << 16U);
   10285     coefficient0 &=
   10286       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1_TIMES_2_BITMASK;
   10287     int32_t coefficient1 = (int32_t)(uint32_t)bytes.ptr[2U] >> 4U;
   10288     coefficient1 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[3U] << 4U);
   10289     coefficient1 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[4U] << 12U);
   10290     simd_unit->data[(size_t)2U * i0] =
   10291       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1 -
   10292         coefficient0;
   10293     simd_unit->data[(size_t)2U * i0 + (size_t)1U] =
   10294       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_19_GAMMA1 -
   10295         coefficient1;
   10296   }
   10297 }
   10298 
   10299 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 ((int32_t)((uint32_t)1 << 17U))
   10300 
   10301 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1_TIMES_2_BITMASK ((int32_t)((uint32_t)LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 << 1U) - 1)
   10302 
   10303 static KRML_MUSTINLINE void
   10304 libcrux_ml_dsa_simd_portable_encoding_gamma1_deserialize_when_gamma1_is_2_pow_17(
   10305   Eurydice_borrow_slice_u8 serialized,
   10306   Eurydice_arr_4d *simd_unit
   10307 )
   10308 {
   10309   for (size_t i = (size_t)0U; i < serialized.meta / (size_t)9U; i++)
   10310   {
   10311     size_t i0 = i;
   10312     Eurydice_borrow_slice_u8
   10313     bytes =
   10314       Eurydice_slice_subslice_shared_c8(serialized,
   10315         (
   10316           KRML_CLITERAL(core_ops_range_Range_87){
   10317             .start = i0 * (size_t)9U,
   10318             .end = i0 * (size_t)9U + (size_t)9U
   10319           }
   10320         ));
   10321     int32_t coefficient0 = (int32_t)(uint32_t)bytes.ptr[0U];
   10322     coefficient0 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[1U] << 8U);
   10323     coefficient0 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[2U] << 16U);
   10324     coefficient0 &=
   10325       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1_TIMES_2_BITMASK;
   10326     int32_t coefficient1 = (int32_t)(uint32_t)bytes.ptr[2U] >> 2U;
   10327     coefficient1 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[3U] << 6U);
   10328     coefficient1 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[4U] << 14U);
   10329     coefficient1 &=
   10330       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1_TIMES_2_BITMASK;
   10331     int32_t coefficient2 = (int32_t)(uint32_t)bytes.ptr[4U] >> 4U;
   10332     coefficient2 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[5U] << 4U);
   10333     coefficient2 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[6U] << 12U);
   10334     coefficient2 &=
   10335       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1_TIMES_2_BITMASK;
   10336     int32_t coefficient3 = (int32_t)(uint32_t)bytes.ptr[6U] >> 6U;
   10337     coefficient3 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[7U] << 2U);
   10338     coefficient3 |= (int32_t)((uint32_t)(int32_t)(uint32_t)bytes.ptr[8U] << 10U);
   10339     coefficient3 &=
   10340       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1_TIMES_2_BITMASK;
   10341     simd_unit->data[(size_t)4U * i0] =
   10342       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10343         coefficient0;
   10344     simd_unit->data[(size_t)4U * i0 + (size_t)1U] =
   10345       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10346         coefficient1;
   10347     simd_unit->data[(size_t)4U * i0 + (size_t)2U] =
   10348       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10349         coefficient2;
   10350     simd_unit->data[(size_t)4U * i0 + (size_t)3U] =
   10351       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_GAMMA1_DESERIALIZE_WHEN_GAMMA1_IS_2_POW_17_GAMMA1 -
   10352         coefficient3;
   10353   }
   10354 }
   10355 
   10356 static KRML_MUSTINLINE void
   10357 libcrux_ml_dsa_simd_portable_encoding_gamma1_deserialize(
   10358   Eurydice_borrow_slice_u8 serialized,
   10359   Eurydice_arr_4d *out,
   10360   size_t gamma1_exponent
   10361 )
   10362 {
   10363   switch (gamma1_exponent)
   10364   {
   10365     case 17U:
   10366       {
   10367         break;
   10368       }
   10369     case 19U:
   10370       {
   10371         libcrux_ml_dsa_simd_portable_encoding_gamma1_deserialize_when_gamma1_is_2_pow_19(serialized,
   10372           out);
   10373         return;
   10374       }
   10375     default:
   10376       {
   10377         KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!");
   10378         KRML_HOST_EXIT(255U);
   10379       }
   10380   }
   10381   libcrux_ml_dsa_simd_portable_encoding_gamma1_deserialize_when_gamma1_is_2_pow_17(serialized,
   10382     out);
   10383 }
   10384 
   10385 /**
   10386 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10387 */
   10388 static inline void
   10389 libcrux_ml_dsa_simd_portable_gamma1_deserialize_65(
   10390   Eurydice_borrow_slice_u8 serialized,
   10391   Eurydice_arr_4d *out,
   10392   size_t gamma1_exponent
   10393 )
   10394 {
   10395   libcrux_ml_dsa_simd_portable_encoding_gamma1_deserialize(serialized, out, gamma1_exponent);
   10396 }
   10397 
   10398 static KRML_MUSTINLINE void
   10399 libcrux_ml_dsa_simd_portable_encoding_commitment_serialize_4(
   10400   const Eurydice_arr_4d *simd_unit,
   10401   Eurydice_mut_borrow_slice_u8 serialized
   10402 )
   10403 {
   10404   uint8_t coefficient0 = (uint8_t)simd_unit->data[0U];
   10405   uint8_t coefficient1 = (uint8_t)simd_unit->data[1U];
   10406   uint8_t coefficient2 = (uint8_t)simd_unit->data[2U];
   10407   uint8_t coefficient3 = (uint8_t)simd_unit->data[3U];
   10408   uint8_t coefficient4 = (uint8_t)simd_unit->data[4U];
   10409   uint8_t coefficient5 = (uint8_t)simd_unit->data[5U];
   10410   uint8_t coefficient6 = (uint8_t)simd_unit->data[6U];
   10411   uint8_t coefficient7 = (uint8_t)simd_unit->data[7U];
   10412   uint8_t byte0 = (uint32_t)coefficient1 << 4U | (uint32_t)coefficient0;
   10413   uint8_t byte1 = (uint32_t)coefficient3 << 4U | (uint32_t)coefficient2;
   10414   uint8_t byte2 = (uint32_t)coefficient5 << 4U | (uint32_t)coefficient4;
   10415   uint8_t byte3 = (uint32_t)coefficient7 << 4U | (uint32_t)coefficient6;
   10416   serialized.ptr[0U] = byte0;
   10417   serialized.ptr[1U] = byte1;
   10418   serialized.ptr[2U] = byte2;
   10419   serialized.ptr[3U] = byte3;
   10420 }
   10421 
   10422 static KRML_MUSTINLINE void
   10423 libcrux_ml_dsa_simd_portable_encoding_commitment_serialize_6(
   10424   const Eurydice_arr_4d *simd_unit,
   10425   Eurydice_mut_borrow_slice_u8 serialized
   10426 )
   10427 {
   10428   uint8_t coefficient0 = (uint8_t)simd_unit->data[0U];
   10429   uint8_t coefficient1 = (uint8_t)simd_unit->data[1U];
   10430   uint8_t coefficient2 = (uint8_t)simd_unit->data[2U];
   10431   uint8_t coefficient3 = (uint8_t)simd_unit->data[3U];
   10432   uint8_t coefficient4 = (uint8_t)simd_unit->data[4U];
   10433   uint8_t coefficient5 = (uint8_t)simd_unit->data[5U];
   10434   uint8_t coefficient6 = (uint8_t)simd_unit->data[6U];
   10435   uint8_t coefficient7 = (uint8_t)simd_unit->data[7U];
   10436   uint8_t byte0 = (uint32_t)coefficient1 << 6U | (uint32_t)coefficient0;
   10437   uint8_t byte1 = (uint32_t)coefficient2 << 4U | (uint32_t)coefficient1 >> 2U;
   10438   uint8_t byte2 = (uint32_t)coefficient3 << 2U | (uint32_t)coefficient2 >> 4U;
   10439   uint8_t byte3 = (uint32_t)coefficient5 << 6U | (uint32_t)coefficient4;
   10440   uint8_t byte4 = (uint32_t)coefficient6 << 4U | (uint32_t)coefficient5 >> 2U;
   10441   uint8_t byte5 = (uint32_t)coefficient7 << 2U | (uint32_t)coefficient6 >> 4U;
   10442   serialized.ptr[0U] = byte0;
   10443   serialized.ptr[1U] = byte1;
   10444   serialized.ptr[2U] = byte2;
   10445   serialized.ptr[3U] = byte3;
   10446   serialized.ptr[4U] = byte4;
   10447   serialized.ptr[5U] = byte5;
   10448 }
   10449 
   10450 static KRML_MUSTINLINE void
   10451 libcrux_ml_dsa_simd_portable_encoding_commitment_serialize(
   10452   const Eurydice_arr_4d *simd_unit,
   10453   Eurydice_mut_borrow_slice_u8 serialized
   10454 )
   10455 {
   10456   switch ((uint32_t)(uint8_t)serialized.meta)
   10457   {
   10458     case 4U:
   10459       {
   10460         libcrux_ml_dsa_simd_portable_encoding_commitment_serialize_4(simd_unit, serialized);
   10461         break;
   10462       }
   10463     case 6U:
   10464       {
   10465         libcrux_ml_dsa_simd_portable_encoding_commitment_serialize_6(simd_unit, serialized);
   10466         break;
   10467       }
   10468     default:
   10469       {
   10470         KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!");
   10471         KRML_HOST_EXIT(255U);
   10472       }
   10473   }
   10474 }
   10475 
   10476 /**
   10477 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10478 */
   10479 static inline void
   10480 libcrux_ml_dsa_simd_portable_commitment_serialize_65(
   10481   const Eurydice_arr_4d *simd_unit,
   10482   Eurydice_mut_borrow_slice_u8 serialized
   10483 )
   10484 {
   10485   libcrux_ml_dsa_simd_portable_encoding_commitment_serialize(simd_unit, serialized);
   10486 }
   10487 
   10488 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_4_ETA (4)
   10489 
   10490 static KRML_MUSTINLINE void
   10491 libcrux_ml_dsa_simd_portable_encoding_error_serialize_when_eta_is_4(
   10492   const Eurydice_arr_4d *simd_unit,
   10493   Eurydice_mut_borrow_slice_u8 serialized
   10494 )
   10495 {
   10496   for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)2U; i++)
   10497   {
   10498     size_t i0 = i;
   10499     Eurydice_dst_ref_shared_83
   10500     coefficients =
   10501       Eurydice_array_to_subslice_shared_44(simd_unit,
   10502         (
   10503           KRML_CLITERAL(core_ops_range_Range_87){
   10504             .start = i0 * (size_t)2U,
   10505             .end = i0 * (size_t)2U + (size_t)2U
   10506           }
   10507         ));
   10508     uint8_t
   10509     coefficient0 =
   10510       (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_4_ETA -
   10511         coefficients.ptr[0U]);
   10512     uint8_t
   10513     coefficient1 =
   10514       (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_4_ETA -
   10515         coefficients.ptr[1U]);
   10516     serialized.ptr[i0] = (uint32_t)coefficient1 << 4U | (uint32_t)coefficient0;
   10517   }
   10518 }
   10519 
   10520 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA (2)
   10521 
   10522 static KRML_MUSTINLINE void
   10523 libcrux_ml_dsa_simd_portable_encoding_error_serialize_when_eta_is_2(
   10524   const Eurydice_arr_4d *simd_unit,
   10525   Eurydice_mut_borrow_slice_u8 serialized
   10526 )
   10527 {
   10528   uint8_t
   10529   coefficient0 =
   10530     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10531       simd_unit->data[0U]);
   10532   uint8_t
   10533   coefficient1 =
   10534     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10535       simd_unit->data[1U]);
   10536   uint8_t
   10537   coefficient2 =
   10538     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10539       simd_unit->data[2U]);
   10540   uint8_t
   10541   coefficient3 =
   10542     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10543       simd_unit->data[3U]);
   10544   uint8_t
   10545   coefficient4 =
   10546     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10547       simd_unit->data[4U]);
   10548   uint8_t
   10549   coefficient5 =
   10550     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10551       simd_unit->data[5U]);
   10552   uint8_t
   10553   coefficient6 =
   10554     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10555       simd_unit->data[6U]);
   10556   uint8_t
   10557   coefficient7 =
   10558     (uint8_t)(LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_SERIALIZE_WHEN_ETA_IS_2_ETA -
   10559       simd_unit->data[7U]);
   10560   serialized.ptr[0U] =
   10561     ((uint32_t)coefficient2 << 6U | (uint32_t)coefficient1 << 3U) | (uint32_t)coefficient0;
   10562   serialized.ptr[1U] =
   10563     (((uint32_t)coefficient5 << 7U | (uint32_t)coefficient4 << 4U) | (uint32_t)coefficient3 << 1U)
   10564     | (uint32_t)coefficient2 >> 2U;
   10565   serialized.ptr[2U] =
   10566     ((uint32_t)coefficient7 << 5U | (uint32_t)coefficient6 << 2U) | (uint32_t)coefficient5 >> 1U;
   10567 }
   10568 
   10569 static KRML_MUSTINLINE void
   10570 libcrux_ml_dsa_simd_portable_encoding_error_serialize(
   10571   libcrux_ml_dsa_constants_Eta eta,
   10572   const Eurydice_arr_4d *simd_unit,
   10573   Eurydice_mut_borrow_slice_u8 serialized
   10574 )
   10575 {
   10576   switch (eta)
   10577   {
   10578     case libcrux_ml_dsa_constants_Eta_Two:
   10579       {
   10580         break;
   10581       }
   10582     case libcrux_ml_dsa_constants_Eta_Four:
   10583       {
   10584         libcrux_ml_dsa_simd_portable_encoding_error_serialize_when_eta_is_4(simd_unit, serialized);
   10585         return;
   10586       }
   10587     default:
   10588       {
   10589         KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__);
   10590         KRML_HOST_EXIT(253U);
   10591       }
   10592   }
   10593   libcrux_ml_dsa_simd_portable_encoding_error_serialize_when_eta_is_2(simd_unit, serialized);
   10594 }
   10595 
   10596 /**
   10597 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10598 */
   10599 static inline void
   10600 libcrux_ml_dsa_simd_portable_error_serialize_65(
   10601   libcrux_ml_dsa_constants_Eta eta,
   10602   const Eurydice_arr_4d *simd_unit,
   10603   Eurydice_mut_borrow_slice_u8 serialized
   10604 )
   10605 {
   10606   libcrux_ml_dsa_simd_portable_encoding_error_serialize(eta, simd_unit, serialized);
   10607 }
   10608 
   10609 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_4_ETA (4)
   10610 
   10611 static KRML_MUSTINLINE void
   10612 libcrux_ml_dsa_simd_portable_encoding_error_deserialize_when_eta_is_4(
   10613   Eurydice_borrow_slice_u8 serialized,
   10614   Eurydice_arr_4d *simd_units
   10615 )
   10616 {
   10617   for (size_t i = (size_t)0U; i < serialized.meta; i++)
   10618   {
   10619     size_t i0 = i;
   10620     const uint8_t *byte = &serialized.ptr[i0];
   10621     uint8_t uu____0 = core_ops_bit__core__ops__bit__BitAnd_u8__u8__for__0__u8___bitand(byte, 15U);
   10622     simd_units->data[(size_t)2U * i0] =
   10623       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_4_ETA -
   10624         (int32_t)(uint32_t)uu____0;
   10625     uint8_t uu____1 = core_ops_bit__core__ops__bit__Shr_i32__u8__for__0__u8___shr(byte, 4);
   10626     simd_units->data[(size_t)2U * i0 + (size_t)1U] =
   10627       LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_4_ETA -
   10628         (int32_t)(uint32_t)uu____1;
   10629   }
   10630 }
   10631 
   10632 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA (2)
   10633 
   10634 static KRML_MUSTINLINE void
   10635 libcrux_ml_dsa_simd_portable_encoding_error_deserialize_when_eta_is_2(
   10636   Eurydice_borrow_slice_u8 serialized,
   10637   Eurydice_arr_4d *simd_unit
   10638 )
   10639 {
   10640   int32_t byte0 = (int32_t)(uint32_t)serialized.ptr[0U];
   10641   int32_t byte1 = (int32_t)(uint32_t)serialized.ptr[1U];
   10642   int32_t byte2 = (int32_t)(uint32_t)serialized.ptr[2U];
   10643   simd_unit->data[0U] =
   10644     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA - (byte0 & 7);
   10645   simd_unit->data[1U] =
   10646     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA - (byte0 >> 3U & 7);
   10647   simd_unit->data[2U] =
   10648     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA -
   10649       ((byte0 >> 6U | (int32_t)((uint32_t)byte1 << 2U)) & 7);
   10650   simd_unit->data[3U] =
   10651     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA - (byte1 >> 1U & 7);
   10652   simd_unit->data[4U] =
   10653     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA - (byte1 >> 4U & 7);
   10654   simd_unit->data[5U] =
   10655     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA -
   10656       ((byte1 >> 7U | (int32_t)((uint32_t)byte2 << 1U)) & 7);
   10657   simd_unit->data[6U] =
   10658     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA - (byte2 >> 2U & 7);
   10659   simd_unit->data[7U] =
   10660     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_ERROR_DESERIALIZE_WHEN_ETA_IS_2_ETA - (byte2 >> 5U & 7);
   10661 }
   10662 
   10663 static KRML_MUSTINLINE void
   10664 libcrux_ml_dsa_simd_portable_encoding_error_deserialize(
   10665   libcrux_ml_dsa_constants_Eta eta,
   10666   Eurydice_borrow_slice_u8 serialized,
   10667   Eurydice_arr_4d *out
   10668 )
   10669 {
   10670   switch (eta)
   10671   {
   10672     case libcrux_ml_dsa_constants_Eta_Two:
   10673       {
   10674         break;
   10675       }
   10676     case libcrux_ml_dsa_constants_Eta_Four:
   10677       {
   10678         libcrux_ml_dsa_simd_portable_encoding_error_deserialize_when_eta_is_4(serialized, out);
   10679         return;
   10680       }
   10681     default:
   10682       {
   10683         KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__);
   10684         KRML_HOST_EXIT(253U);
   10685       }
   10686   }
   10687   libcrux_ml_dsa_simd_portable_encoding_error_deserialize_when_eta_is_2(serialized, out);
   10688 }
   10689 
   10690 /**
   10691 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10692 */
   10693 static inline void
   10694 libcrux_ml_dsa_simd_portable_error_deserialize_65(
   10695   libcrux_ml_dsa_constants_Eta eta,
   10696   Eurydice_borrow_slice_u8 serialized,
   10697   Eurydice_arr_4d *out
   10698 )
   10699 {
   10700   libcrux_ml_dsa_simd_portable_encoding_error_deserialize(eta, serialized, out);
   10701 }
   10702 
   10703 static KRML_MUSTINLINE int32_t
   10704 libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(int32_t t0)
   10705 {
   10706   return
   10707     (int32_t)((uint32_t)1 <<
   10708       (uint32_t)(LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T - (size_t)1U))
   10709     - t0;
   10710 }
   10711 
   10712 static KRML_MUSTINLINE void
   10713 libcrux_ml_dsa_simd_portable_encoding_t0_serialize(
   10714   const Eurydice_arr_4d *simd_unit,
   10715   Eurydice_mut_borrow_slice_u8 serialized
   10716 )
   10717 {
   10718   int32_t
   10719   coefficient0 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[0U]);
   10720   int32_t
   10721   coefficient1 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[1U]);
   10722   int32_t
   10723   coefficient2 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[2U]);
   10724   int32_t
   10725   coefficient3 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[3U]);
   10726   int32_t
   10727   coefficient4 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[4U]);
   10728   int32_t
   10729   coefficient5 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[5U]);
   10730   int32_t
   10731   coefficient6 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[6U]);
   10732   int32_t
   10733   coefficient7 = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(simd_unit->data[7U]);
   10734   serialized.ptr[0U] = (uint8_t)coefficient0;
   10735   serialized.ptr[1U] =
   10736     (uint32_t)(uint8_t)(coefficient0 >> 8U) |
   10737       (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient1 << 5U);
   10738   serialized.ptr[2U] = (uint8_t)(coefficient1 >> 3U);
   10739   serialized.ptr[3U] =
   10740     (uint32_t)(uint8_t)(coefficient1 >> 11U) |
   10741       (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient2 << 2U);
   10742   serialized.ptr[4U] =
   10743     (uint32_t)(uint8_t)(coefficient2 >> 6U) |
   10744       (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient3 << 7U);
   10745   serialized.ptr[5U] = (uint8_t)(coefficient3 >> 1U);
   10746   serialized.ptr[6U] =
   10747     (uint32_t)(uint8_t)(coefficient3 >> 9U) |
   10748       (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient4 << 4U);
   10749   serialized.ptr[7U] = (uint8_t)(coefficient4 >> 4U);
   10750   serialized.ptr[8U] =
   10751     (uint32_t)(uint8_t)(coefficient4 >> 12U) |
   10752       (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient5 << 1U);
   10753   serialized.ptr[9U] =
   10754     (uint32_t)(uint8_t)(coefficient5 >> 7U) |
   10755       (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient6 << 6U);
   10756   serialized.ptr[10U] = (uint8_t)(coefficient6 >> 2U);
   10757   serialized.ptr[11U] =
   10758     (uint32_t)(uint8_t)(coefficient6 >> 10U) |
   10759       (uint32_t)(uint8_t)(int32_t)((uint32_t)coefficient7 << 3U);
   10760   serialized.ptr[12U] = (uint8_t)(coefficient7 >> 5U);
   10761 }
   10762 
   10763 /**
   10764 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10765 */
   10766 static inline void
   10767 libcrux_ml_dsa_simd_portable_t0_serialize_65(
   10768   const Eurydice_arr_4d *simd_unit,
   10769   Eurydice_mut_borrow_slice_u8 out
   10770 )
   10771 {
   10772   libcrux_ml_dsa_simd_portable_encoding_t0_serialize(simd_unit, out);
   10773 }
   10774 
   10775 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK ((int32_t)((uint32_t)1 << (uint32_t)(int32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T) - 1)
   10776 
   10777 static KRML_MUSTINLINE void
   10778 libcrux_ml_dsa_simd_portable_encoding_t0_deserialize(
   10779   Eurydice_borrow_slice_u8 serialized,
   10780   Eurydice_arr_4d *simd_unit
   10781 )
   10782 {
   10783   int32_t byte0 = (int32_t)(uint32_t)serialized.ptr[0U];
   10784   int32_t byte1 = (int32_t)(uint32_t)serialized.ptr[1U];
   10785   int32_t byte2 = (int32_t)(uint32_t)serialized.ptr[2U];
   10786   int32_t byte3 = (int32_t)(uint32_t)serialized.ptr[3U];
   10787   int32_t byte4 = (int32_t)(uint32_t)serialized.ptr[4U];
   10788   int32_t byte5 = (int32_t)(uint32_t)serialized.ptr[5U];
   10789   int32_t byte6 = (int32_t)(uint32_t)serialized.ptr[6U];
   10790   int32_t byte7 = (int32_t)(uint32_t)serialized.ptr[7U];
   10791   int32_t byte8 = (int32_t)(uint32_t)serialized.ptr[8U];
   10792   int32_t byte9 = (int32_t)(uint32_t)serialized.ptr[9U];
   10793   int32_t byte10 = (int32_t)(uint32_t)serialized.ptr[10U];
   10794   int32_t byte11 = (int32_t)(uint32_t)serialized.ptr[11U];
   10795   int32_t byte12 = (int32_t)(uint32_t)serialized.ptr[12U];
   10796   int32_t coefficient0 = byte0;
   10797   coefficient0 |= (int32_t)((uint32_t)byte1 << 8U);
   10798   coefficient0 &=
   10799     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10800   int32_t coefficient1 = byte1 >> 5U;
   10801   coefficient1 |= (int32_t)((uint32_t)byte2 << 3U);
   10802   coefficient1 |= (int32_t)((uint32_t)byte3 << 11U);
   10803   coefficient1 &=
   10804     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10805   int32_t coefficient2 = byte3 >> 2U;
   10806   coefficient2 |= (int32_t)((uint32_t)byte4 << 6U);
   10807   coefficient2 &=
   10808     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10809   int32_t coefficient3 = byte4 >> 7U;
   10810   coefficient3 |= (int32_t)((uint32_t)byte5 << 1U);
   10811   coefficient3 |= (int32_t)((uint32_t)byte6 << 9U);
   10812   coefficient3 &=
   10813     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10814   int32_t coefficient4 = byte6 >> 4U;
   10815   coefficient4 |= (int32_t)((uint32_t)byte7 << 4U);
   10816   coefficient4 |= (int32_t)((uint32_t)byte8 << 12U);
   10817   coefficient4 &=
   10818     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10819   int32_t coefficient5 = byte8 >> 1U;
   10820   coefficient5 |= (int32_t)((uint32_t)byte9 << 7U);
   10821   coefficient5 &=
   10822     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10823   int32_t coefficient6 = byte9 >> 6U;
   10824   coefficient6 |= (int32_t)((uint32_t)byte10 << 2U);
   10825   coefficient6 |= (int32_t)((uint32_t)byte11 << 10U);
   10826   coefficient6 &=
   10827     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10828   int32_t coefficient7 = byte11 >> 3U;
   10829   coefficient7 |= (int32_t)((uint32_t)byte12 << 5U);
   10830   coefficient7 &=
   10831     LIBCRUX_ML_DSA_SIMD_PORTABLE_ENCODING_T0_DESERIALIZE_BITS_IN_LOWER_PART_OF_T_MASK;
   10832   simd_unit->data[0U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient0);
   10833   simd_unit->data[1U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient1);
   10834   simd_unit->data[2U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient2);
   10835   simd_unit->data[3U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient3);
   10836   simd_unit->data[4U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient4);
   10837   simd_unit->data[5U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient5);
   10838   simd_unit->data[6U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient6);
   10839   simd_unit->data[7U] = libcrux_ml_dsa_simd_portable_encoding_t0_change_t0_interval(coefficient7);
   10840 }
   10841 
   10842 /**
   10843 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10844 */
   10845 static inline void
   10846 libcrux_ml_dsa_simd_portable_t0_deserialize_65(
   10847   Eurydice_borrow_slice_u8 serialized,
   10848   Eurydice_arr_4d *out
   10849 )
   10850 {
   10851   libcrux_ml_dsa_simd_portable_encoding_t0_deserialize(serialized, out);
   10852 }
   10853 
   10854 static KRML_MUSTINLINE void
   10855 libcrux_ml_dsa_simd_portable_encoding_t1_serialize(
   10856   const Eurydice_arr_4d *simd_unit,
   10857   Eurydice_mut_borrow_slice_u8 serialized
   10858 )
   10859 {
   10860   for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)4U; i++)
   10861   {
   10862     size_t i0 = i;
   10863     Eurydice_dst_ref_shared_83
   10864     coefficients =
   10865       Eurydice_array_to_subslice_shared_44(simd_unit,
   10866         (
   10867           KRML_CLITERAL(core_ops_range_Range_87){
   10868             .start = i0 * (size_t)4U,
   10869             .end = i0 * (size_t)4U + (size_t)4U
   10870           }
   10871         ));
   10872     serialized.ptr[(size_t)5U * i0] = (uint8_t)(coefficients.ptr[0U] & 255);
   10873     serialized.ptr[(size_t)5U * i0 + (size_t)1U] =
   10874       (uint32_t)(uint8_t)(coefficients.ptr[1U] & 63) << 2U |
   10875         (uint32_t)(uint8_t)(coefficients.ptr[0U] >> 8U & 3);
   10876     serialized.ptr[(size_t)5U * i0 + (size_t)2U] =
   10877       (uint32_t)(uint8_t)(coefficients.ptr[2U] & 15) << 4U |
   10878         (uint32_t)(uint8_t)(coefficients.ptr[1U] >> 6U & 15);
   10879     serialized.ptr[(size_t)5U * i0 + (size_t)3U] =
   10880       (uint32_t)(uint8_t)(coefficients.ptr[3U] & 3) << 6U |
   10881         (uint32_t)(uint8_t)(coefficients.ptr[2U] >> 4U & 63);
   10882     serialized.ptr[(size_t)5U * i0 + (size_t)4U] = (uint8_t)(coefficients.ptr[3U] >> 2U & 255);
   10883   }
   10884 }
   10885 
   10886 /**
   10887 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10888 */
   10889 static inline void
   10890 libcrux_ml_dsa_simd_portable_t1_serialize_65(
   10891   const Eurydice_arr_4d *simd_unit,
   10892   Eurydice_mut_borrow_slice_u8 out
   10893 )
   10894 {
   10895   libcrux_ml_dsa_simd_portable_encoding_t1_serialize(simd_unit, out);
   10896 }
   10897 
   10898 static KRML_MUSTINLINE void
   10899 libcrux_ml_dsa_simd_portable_encoding_t1_deserialize(
   10900   Eurydice_borrow_slice_u8 serialized,
   10901   Eurydice_arr_4d *simd_unit
   10902 )
   10903 {
   10904   int32_t
   10905   mask = (int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_UPPER_PART_OF_T) - 1;
   10906   for (size_t i = (size_t)0U; i < serialized.meta / (size_t)5U; i++)
   10907   {
   10908     size_t i0 = i;
   10909     Eurydice_borrow_slice_u8
   10910     bytes =
   10911       Eurydice_slice_subslice_shared_c8(serialized,
   10912         (
   10913           KRML_CLITERAL(core_ops_range_Range_87){
   10914             .start = i0 * (size_t)5U,
   10915             .end = i0 * (size_t)5U + (size_t)5U
   10916           }
   10917         ));
   10918     int32_t byte0 = (int32_t)(uint32_t)bytes.ptr[0U];
   10919     int32_t byte1 = (int32_t)(uint32_t)bytes.ptr[1U];
   10920     int32_t byte2 = (int32_t)(uint32_t)bytes.ptr[2U];
   10921     int32_t byte3 = (int32_t)(uint32_t)bytes.ptr[3U];
   10922     int32_t byte4 = (int32_t)(uint32_t)bytes.ptr[4U];
   10923     simd_unit->data[(size_t)4U * i0] = (byte0 | (int32_t)((uint32_t)byte1 << 8U)) & mask;
   10924     simd_unit->data[(size_t)4U * i0 + (size_t)1U] =
   10925       (byte1 >> 2U | (int32_t)((uint32_t)byte2 << 6U)) & mask;
   10926     simd_unit->data[(size_t)4U * i0 + (size_t)2U] =
   10927       (byte2 >> 4U | (int32_t)((uint32_t)byte3 << 4U)) & mask;
   10928     simd_unit->data[(size_t)4U * i0 + (size_t)3U] =
   10929       (byte3 >> 6U | (int32_t)((uint32_t)byte4 << 2U)) & mask;
   10930   }
   10931 }
   10932 
   10933 /**
   10934 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   10935 */
   10936 static inline void
   10937 libcrux_ml_dsa_simd_portable_t1_deserialize_65(
   10938   Eurydice_borrow_slice_u8 serialized,
   10939   Eurydice_arr_4d *out
   10940 )
   10941 {
   10942   libcrux_ml_dsa_simd_portable_encoding_t1_deserialize(serialized, out);
   10943 }
   10944 
   10945 static KRML_MUSTINLINE void
   10946 libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(
   10947   Eurydice_arr_4d *simd_unit,
   10948   int32_t c
   10949 )
   10950 {
   10951   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   10952   {
   10953     size_t i0 = i;
   10954     simd_unit->data[i0] =
   10955       libcrux_ml_dsa_simd_portable_arithmetic_montgomery_reduce_element((int64_t)simd_unit->data[i0]
   10956         * (int64_t)c);
   10957   }
   10958 }
   10959 
   10960 /**
   10961 A monomorphic instance of Eurydice.arr
   10962 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   10963 with const generics
   10964 - $32size_t
   10965 */
   10966 typedef struct Eurydice_arr_a3_s { Eurydice_arr_4d data[32U]; } Eurydice_arr_a3;
   10967 
   10968 static KRML_MUSTINLINE void
   10969 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(
   10970   Eurydice_arr_a3 *re,
   10971   size_t index,
   10972   size_t step_by,
   10973   int32_t zeta
   10974 )
   10975 {
   10976   Eurydice_arr_4d tmp = re->data[index + step_by];
   10977   libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&tmp, zeta);
   10978   re->data[index + step_by] = re->data[index];
   10979   libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[index + step_by], &tmp);
   10980   libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[index], &tmp);
   10981 }
   10982 
   10983 /**
   10984 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   10985 with const generics
   10986 - OFFSET= 0
   10987 - STEP_BY= 16
   10988 - ZETA= 25847
   10989 */
   10990 static KRML_MUSTINLINE void
   10991 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_30(Eurydice_arr_a3 *re)
   10992 {
   10993   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)16U; i++)
   10994   {
   10995     size_t j = i;
   10996     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)16U, 25847);
   10997   }
   10998 }
   10999 
   11000 static KRML_MUSTINLINE void
   11001 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_7(Eurydice_arr_a3 *re)
   11002 {
   11003   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_30(re);
   11004 }
   11005 
   11006 /**
   11007 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11008 with const generics
   11009 - OFFSET= 0
   11010 - STEP_BY= 8
   11011 - ZETA= -2608894
   11012 */
   11013 static KRML_MUSTINLINE void
   11014 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_300(Eurydice_arr_a3 *re)
   11015 {
   11016   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)8U; i++)
   11017   {
   11018     size_t j = i;
   11019     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)8U, -2608894);
   11020   }
   11021 }
   11022 
   11023 /**
   11024 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11025 with const generics
   11026 - OFFSET= 16
   11027 - STEP_BY= 8
   11028 - ZETA= -518909
   11029 */
   11030 static KRML_MUSTINLINE void
   11031 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_42(Eurydice_arr_a3 *re)
   11032 {
   11033   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)8U; i++)
   11034   {
   11035     size_t j = i;
   11036     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)8U, -518909);
   11037   }
   11038 }
   11039 
   11040 static KRML_MUSTINLINE void
   11041 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_6(Eurydice_arr_a3 *re)
   11042 {
   11043   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_300(re);
   11044   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_42(re);
   11045 }
   11046 
   11047 /**
   11048 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11049 with const generics
   11050 - OFFSET= 0
   11051 - STEP_BY= 4
   11052 - ZETA= 237124
   11053 */
   11054 static KRML_MUSTINLINE void
   11055 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_301(Eurydice_arr_a3 *re)
   11056 {
   11057   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)4U; i++)
   11058   {
   11059     size_t j = i;
   11060     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)4U, 237124);
   11061   }
   11062 }
   11063 
   11064 /**
   11065 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11066 with const generics
   11067 - OFFSET= 8
   11068 - STEP_BY= 4
   11069 - ZETA= -777960
   11070 */
   11071 static KRML_MUSTINLINE void
   11072 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_82(Eurydice_arr_a3 *re)
   11073 {
   11074   for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)4U; i++)
   11075   {
   11076     size_t j = i;
   11077     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)4U, -777960);
   11078   }
   11079 }
   11080 
   11081 /**
   11082 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11083 with const generics
   11084 - OFFSET= 16
   11085 - STEP_BY= 4
   11086 - ZETA= -876248
   11087 */
   11088 static KRML_MUSTINLINE void
   11089 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_420(Eurydice_arr_a3 *re)
   11090 {
   11091   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)4U; i++)
   11092   {
   11093     size_t j = i;
   11094     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)4U, -876248);
   11095   }
   11096 }
   11097 
   11098 /**
   11099 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11100 with const generics
   11101 - OFFSET= 24
   11102 - STEP_BY= 4
   11103 - ZETA= 466468
   11104 */
   11105 static KRML_MUSTINLINE void
   11106 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_fe(Eurydice_arr_a3 *re)
   11107 {
   11108   for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)4U; i++)
   11109   {
   11110     size_t j = i;
   11111     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)4U, 466468);
   11112   }
   11113 }
   11114 
   11115 static KRML_MUSTINLINE void
   11116 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_5(Eurydice_arr_a3 *re)
   11117 {
   11118   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_301(re);
   11119   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_82(re);
   11120   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_420(re);
   11121   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_fe(re);
   11122 }
   11123 
   11124 /**
   11125 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11126 with const generics
   11127 - OFFSET= 0
   11128 - STEP_BY= 2
   11129 - ZETA= 1826347
   11130 */
   11131 static KRML_MUSTINLINE void
   11132 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_302(Eurydice_arr_a3 *re)
   11133 {
   11134   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)2U; i++)
   11135   {
   11136     size_t j = i;
   11137     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, 1826347);
   11138   }
   11139 }
   11140 
   11141 /**
   11142 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11143 with const generics
   11144 - OFFSET= 4
   11145 - STEP_BY= 2
   11146 - ZETA= 2353451
   11147 */
   11148 static KRML_MUSTINLINE void
   11149 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_43(Eurydice_arr_a3 *re)
   11150 {
   11151   for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)2U; i++)
   11152   {
   11153     size_t j = i;
   11154     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, 2353451);
   11155   }
   11156 }
   11157 
   11158 /**
   11159 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11160 with const generics
   11161 - OFFSET= 8
   11162 - STEP_BY= 2
   11163 - ZETA= -359251
   11164 */
   11165 static KRML_MUSTINLINE void
   11166 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_820(Eurydice_arr_a3 *re)
   11167 {
   11168   for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)2U; i++)
   11169   {
   11170     size_t j = i;
   11171     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, -359251);
   11172   }
   11173 }
   11174 
   11175 /**
   11176 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11177 with const generics
   11178 - OFFSET= 12
   11179 - STEP_BY= 2
   11180 - ZETA= -2091905
   11181 */
   11182 static KRML_MUSTINLINE void
   11183 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_ea(Eurydice_arr_a3 *re)
   11184 {
   11185   for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)2U; i++)
   11186   {
   11187     size_t j = i;
   11188     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, -2091905);
   11189   }
   11190 }
   11191 
   11192 /**
   11193 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11194 with const generics
   11195 - OFFSET= 16
   11196 - STEP_BY= 2
   11197 - ZETA= 3119733
   11198 */
   11199 static KRML_MUSTINLINE void
   11200 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_421(Eurydice_arr_a3 *re)
   11201 {
   11202   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)2U; i++)
   11203   {
   11204     size_t j = i;
   11205     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, 3119733);
   11206   }
   11207 }
   11208 
   11209 /**
   11210 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11211 with const generics
   11212 - OFFSET= 20
   11213 - STEP_BY= 2
   11214 - ZETA= -2884855
   11215 */
   11216 static KRML_MUSTINLINE void
   11217 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_61(Eurydice_arr_a3 *re)
   11218 {
   11219   for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)2U; i++)
   11220   {
   11221     size_t j = i;
   11222     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, -2884855);
   11223   }
   11224 }
   11225 
   11226 /**
   11227 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11228 with const generics
   11229 - OFFSET= 24
   11230 - STEP_BY= 2
   11231 - ZETA= 3111497
   11232 */
   11233 static KRML_MUSTINLINE void
   11234 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_fe0(Eurydice_arr_a3 *re)
   11235 {
   11236   for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)2U; i++)
   11237   {
   11238     size_t j = i;
   11239     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, 3111497);
   11240   }
   11241 }
   11242 
   11243 /**
   11244 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11245 with const generics
   11246 - OFFSET= 28
   11247 - STEP_BY= 2
   11248 - ZETA= 2680103
   11249 */
   11250 static KRML_MUSTINLINE void
   11251 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_38(Eurydice_arr_a3 *re)
   11252 {
   11253   for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)2U; i++)
   11254   {
   11255     size_t j = i;
   11256     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)2U, 2680103);
   11257   }
   11258 }
   11259 
   11260 static KRML_MUSTINLINE void
   11261 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_4(Eurydice_arr_a3 *re)
   11262 {
   11263   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_302(re);
   11264   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_43(re);
   11265   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_820(re);
   11266   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_ea(re);
   11267   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_421(re);
   11268   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_61(re);
   11269   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_fe0(re);
   11270   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_38(re);
   11271 }
   11272 
   11273 /**
   11274 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11275 with const generics
   11276 - OFFSET= 0
   11277 - STEP_BY= 1
   11278 - ZETA= 2725464
   11279 */
   11280 static KRML_MUSTINLINE void
   11281 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_303(Eurydice_arr_a3 *re)
   11282 {
   11283   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)1U; i++)
   11284   {
   11285     size_t j = i;
   11286     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, 2725464);
   11287   }
   11288 }
   11289 
   11290 /**
   11291 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11292 with const generics
   11293 - OFFSET= 2
   11294 - STEP_BY= 1
   11295 - ZETA= 1024112
   11296 */
   11297 static KRML_MUSTINLINE void
   11298 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_25(Eurydice_arr_a3 *re)
   11299 {
   11300   for (size_t i = (size_t)2U; i < (size_t)2U + (size_t)1U; i++)
   11301   {
   11302     size_t j = i;
   11303     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, 1024112);
   11304   }
   11305 }
   11306 
   11307 /**
   11308 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11309 with const generics
   11310 - OFFSET= 4
   11311 - STEP_BY= 1
   11312 - ZETA= -1079900
   11313 */
   11314 static KRML_MUSTINLINE void
   11315 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_430(Eurydice_arr_a3 *re)
   11316 {
   11317   for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)1U; i++)
   11318   {
   11319     size_t j = i;
   11320     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -1079900);
   11321   }
   11322 }
   11323 
   11324 /**
   11325 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11326 with const generics
   11327 - OFFSET= 6
   11328 - STEP_BY= 1
   11329 - ZETA= 3585928
   11330 */
   11331 static KRML_MUSTINLINE void
   11332 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_f4(Eurydice_arr_a3 *re)
   11333 {
   11334   for (size_t i = (size_t)6U; i < (size_t)6U + (size_t)1U; i++)
   11335   {
   11336     size_t j = i;
   11337     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, 3585928);
   11338   }
   11339 }
   11340 
   11341 /**
   11342 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11343 with const generics
   11344 - OFFSET= 8
   11345 - STEP_BY= 1
   11346 - ZETA= -549488
   11347 */
   11348 static KRML_MUSTINLINE void
   11349 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_821(Eurydice_arr_a3 *re)
   11350 {
   11351   for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)1U; i++)
   11352   {
   11353     size_t j = i;
   11354     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -549488);
   11355   }
   11356 }
   11357 
   11358 /**
   11359 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11360 with const generics
   11361 - OFFSET= 10
   11362 - STEP_BY= 1
   11363 - ZETA= -1119584
   11364 */
   11365 static KRML_MUSTINLINE void
   11366 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_1d(Eurydice_arr_a3 *re)
   11367 {
   11368   for (size_t i = (size_t)10U; i < (size_t)10U + (size_t)1U; i++)
   11369   {
   11370     size_t j = i;
   11371     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -1119584);
   11372   }
   11373 }
   11374 
   11375 /**
   11376 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11377 with const generics
   11378 - OFFSET= 12
   11379 - STEP_BY= 1
   11380 - ZETA= 2619752
   11381 */
   11382 static KRML_MUSTINLINE void
   11383 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_ea0(Eurydice_arr_a3 *re)
   11384 {
   11385   for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)1U; i++)
   11386   {
   11387     size_t j = i;
   11388     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, 2619752);
   11389   }
   11390 }
   11391 
   11392 /**
   11393 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11394 with const generics
   11395 - OFFSET= 14
   11396 - STEP_BY= 1
   11397 - ZETA= -2108549
   11398 */
   11399 static KRML_MUSTINLINE void
   11400 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_d8(Eurydice_arr_a3 *re)
   11401 {
   11402   for (size_t i = (size_t)14U; i < (size_t)14U + (size_t)1U; i++)
   11403   {
   11404     size_t j = i;
   11405     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -2108549);
   11406   }
   11407 }
   11408 
   11409 /**
   11410 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11411 with const generics
   11412 - OFFSET= 16
   11413 - STEP_BY= 1
   11414 - ZETA= -2118186
   11415 */
   11416 static KRML_MUSTINLINE void
   11417 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_422(Eurydice_arr_a3 *re)
   11418 {
   11419   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)1U; i++)
   11420   {
   11421     size_t j = i;
   11422     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -2118186);
   11423   }
   11424 }
   11425 
   11426 /**
   11427 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11428 with const generics
   11429 - OFFSET= 18
   11430 - STEP_BY= 1
   11431 - ZETA= -3859737
   11432 */
   11433 static KRML_MUSTINLINE void
   11434 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_60(Eurydice_arr_a3 *re)
   11435 {
   11436   for (size_t i = (size_t)18U; i < (size_t)18U + (size_t)1U; i++)
   11437   {
   11438     size_t j = i;
   11439     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -3859737);
   11440   }
   11441 }
   11442 
   11443 /**
   11444 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11445 with const generics
   11446 - OFFSET= 20
   11447 - STEP_BY= 1
   11448 - ZETA= -1399561
   11449 */
   11450 static KRML_MUSTINLINE void
   11451 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_610(Eurydice_arr_a3 *re)
   11452 {
   11453   for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)1U; i++)
   11454   {
   11455     size_t j = i;
   11456     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -1399561);
   11457   }
   11458 }
   11459 
   11460 /**
   11461 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11462 with const generics
   11463 - OFFSET= 22
   11464 - STEP_BY= 1
   11465 - ZETA= -3277672
   11466 */
   11467 static KRML_MUSTINLINE void
   11468 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_29(Eurydice_arr_a3 *re)
   11469 {
   11470   for (size_t i = (size_t)22U; i < (size_t)22U + (size_t)1U; i++)
   11471   {
   11472     size_t j = i;
   11473     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -3277672);
   11474   }
   11475 }
   11476 
   11477 /**
   11478 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11479 with const generics
   11480 - OFFSET= 24
   11481 - STEP_BY= 1
   11482 - ZETA= 1757237
   11483 */
   11484 static KRML_MUSTINLINE void
   11485 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_fe1(Eurydice_arr_a3 *re)
   11486 {
   11487   for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)1U; i++)
   11488   {
   11489     size_t j = i;
   11490     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, 1757237);
   11491   }
   11492 }
   11493 
   11494 /**
   11495 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11496 with const generics
   11497 - OFFSET= 26
   11498 - STEP_BY= 1
   11499 - ZETA= -19422
   11500 */
   11501 static KRML_MUSTINLINE void
   11502 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_9d(Eurydice_arr_a3 *re)
   11503 {
   11504   for (size_t i = (size_t)26U; i < (size_t)26U + (size_t)1U; i++)
   11505   {
   11506     size_t j = i;
   11507     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, -19422);
   11508   }
   11509 }
   11510 
   11511 /**
   11512 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11513 with const generics
   11514 - OFFSET= 28
   11515 - STEP_BY= 1
   11516 - ZETA= 4010497
   11517 */
   11518 static KRML_MUSTINLINE void
   11519 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_380(Eurydice_arr_a3 *re)
   11520 {
   11521   for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)1U; i++)
   11522   {
   11523     size_t j = i;
   11524     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, 4010497);
   11525   }
   11526 }
   11527 
   11528 /**
   11529 A monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus
   11530 with const generics
   11531 - OFFSET= 30
   11532 - STEP_BY= 1
   11533 - ZETA= 280005
   11534 */
   11535 static KRML_MUSTINLINE void
   11536 libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_5f(Eurydice_arr_a3 *re)
   11537 {
   11538   for (size_t i = (size_t)30U; i < (size_t)30U + (size_t)1U; i++)
   11539   {
   11540     size_t j = i;
   11541     libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_round(re, j, (size_t)1U, 280005);
   11542   }
   11543 }
   11544 
   11545 static KRML_MUSTINLINE void
   11546 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_3(Eurydice_arr_a3 *re)
   11547 {
   11548   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_303(re);
   11549   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_25(re);
   11550   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_430(re);
   11551   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_f4(re);
   11552   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_821(re);
   11553   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_1d(re);
   11554   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_ea0(re);
   11555   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_d8(re);
   11556   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_422(re);
   11557   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_60(re);
   11558   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_610(re);
   11559   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_29(re);
   11560   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_fe1(re);
   11561   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_9d(re);
   11562   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_380(re);
   11563   libcrux_ml_dsa_simd_portable_ntt_outer_3_plus_5f(re);
   11564 }
   11565 
   11566 static KRML_MUSTINLINE int32_t
   11567 libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_fe_by_fer(int32_t fe, int32_t fer)
   11568 {
   11569   return
   11570     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_reduce_element((int64_t)fe * (int64_t)fer);
   11571 }
   11572 
   11573 static KRML_MUSTINLINE void
   11574 libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(
   11575   Eurydice_arr_4d *simd_unit,
   11576   int32_t zeta,
   11577   size_t index,
   11578   size_t step
   11579 )
   11580 {
   11581   int32_t
   11582   t =
   11583     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_fe_by_fer(simd_unit->data[index +
   11584         step],
   11585       zeta);
   11586   simd_unit->data[index + step] = simd_unit->data[index] - t;
   11587   simd_unit->data[index] += t;
   11588 }
   11589 
   11590 static KRML_MUSTINLINE void
   11591 libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_at_layer_2(
   11592   Eurydice_arr_4d *simd_unit,
   11593   int32_t zeta
   11594 )
   11595 {
   11596   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta, (size_t)0U, (size_t)4U);
   11597   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta, (size_t)1U, (size_t)4U);
   11598   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta, (size_t)2U, (size_t)4U);
   11599   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta, (size_t)3U, (size_t)4U);
   11600 }
   11601 
   11602 static KRML_MUSTINLINE void
   11603 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(
   11604   Eurydice_arr_a3 *re,
   11605   size_t index,
   11606   int32_t zeta
   11607 )
   11608 {
   11609   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_at_layer_2(&re->data[index], zeta);
   11610 }
   11611 
   11612 static KRML_MUSTINLINE void
   11613 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2(Eurydice_arr_a3 *re)
   11614 {
   11615   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)0U, 2706023);
   11616   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)1U, 95776);
   11617   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)2U, 3077325);
   11618   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)3U, 3530437);
   11619   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)4U, -1661693);
   11620   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)5U, -3592148);
   11621   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)6U, -2537516);
   11622   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)7U, 3915439);
   11623   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)8U, -3861115);
   11624   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)9U, -3043716);
   11625   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)10U, 3574422);
   11626   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)11U, -2867647);
   11627   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)12U, 3539968);
   11628   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)13U, -300467);
   11629   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)14U, 2348700);
   11630   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)15U, -539299);
   11631   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)16U, -1699267);
   11632   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)17U, -1643818);
   11633   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)18U, 3505694);
   11634   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)19U, -3821735);
   11635   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)20U, 3507263);
   11636   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)21U, -2140649);
   11637   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)22U, -1600420);
   11638   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)23U, 3699596);
   11639   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)24U, 811944);
   11640   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)25U, 531354);
   11641   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)26U, 954230);
   11642   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)27U, 3881043);
   11643   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)28U, 3900724);
   11644   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)29U, -2556880);
   11645   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)30U, 2071892);
   11646   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2_round(re, (size_t)31U, -2797779);
   11647 }
   11648 
   11649 static KRML_MUSTINLINE void
   11650 libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_at_layer_1(
   11651   Eurydice_arr_4d *simd_unit,
   11652   int32_t zeta1,
   11653   int32_t zeta2
   11654 )
   11655 {
   11656   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta1, (size_t)0U, (size_t)2U);
   11657   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta1, (size_t)1U, (size_t)2U);
   11658   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta2, (size_t)4U, (size_t)2U);
   11659   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta2, (size_t)5U, (size_t)2U);
   11660 }
   11661 
   11662 static KRML_MUSTINLINE void
   11663 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(
   11664   Eurydice_arr_a3 *re,
   11665   size_t index,
   11666   int32_t zeta_0,
   11667   int32_t zeta_1
   11668 )
   11669 {
   11670   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_at_layer_1(&re->data[index], zeta_0, zeta_1);
   11671 }
   11672 
   11673 static KRML_MUSTINLINE void
   11674 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1(Eurydice_arr_a3 *re)
   11675 {
   11676   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)0U, -3930395, -1528703);
   11677   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)1U, -3677745, -3041255);
   11678   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)2U, -1452451, 3475950);
   11679   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)3U, 2176455, -1585221);
   11680   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)4U, -1257611, 1939314);
   11681   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)5U, -4083598, -1000202);
   11682   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)6U, -3190144, -3157330);
   11683   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)7U, -3632928, 126922);
   11684   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)8U, 3412210, -983419);
   11685   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)9U, 2147896, 2715295);
   11686   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)10U, -2967645, -3693493);
   11687   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)11U, -411027, -2477047);
   11688   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)12U, -671102, -1228525);
   11689   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)13U, -22981, -1308169);
   11690   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)14U, -381987, 1349076);
   11691   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)15U, 1852771, -1430430);
   11692   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)16U, -3343383, 264944);
   11693   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)17U, 508951, 3097992);
   11694   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)18U, 44288, -1100098);
   11695   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)19U, 904516, 3958618);
   11696   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)20U, -3724342, -8578);
   11697   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)21U, 1653064, -3249728);
   11698   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)22U, 2389356, -210977);
   11699   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)23U, 759969, -1316856);
   11700   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)24U, 189548, -3553272);
   11701   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)25U, 3159746, -1851402);
   11702   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)26U, -2409325, -177440);
   11703   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)27U, 1315589, 1341330);
   11704   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)28U, 1285669, -1584928);
   11705   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)29U, -812732, -1439742);
   11706   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)30U, -3019102, -3881060);
   11707   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1_round(re, (size_t)31U, -3628969, 3839961);
   11708 }
   11709 
   11710 static KRML_MUSTINLINE void
   11711 libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_at_layer_0(
   11712   Eurydice_arr_4d *simd_unit,
   11713   int32_t zeta0,
   11714   int32_t zeta1,
   11715   int32_t zeta2,
   11716   int32_t zeta3
   11717 )
   11718 {
   11719   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta0, (size_t)0U, (size_t)1U);
   11720   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta1, (size_t)2U, (size_t)1U);
   11721   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta2, (size_t)4U, (size_t)1U);
   11722   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_step(simd_unit, zeta3, (size_t)6U, (size_t)1U);
   11723 }
   11724 
   11725 static KRML_MUSTINLINE void
   11726 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(
   11727   Eurydice_arr_a3 *re,
   11728   size_t index,
   11729   int32_t zeta_0,
   11730   int32_t zeta_1,
   11731   int32_t zeta_2,
   11732   int32_t zeta_3
   11733 )
   11734 {
   11735   libcrux_ml_dsa_simd_portable_ntt_simd_unit_ntt_at_layer_0(&re->data[index],
   11736     zeta_0,
   11737     zeta_1,
   11738     zeta_2,
   11739     zeta_3);
   11740 }
   11741 
   11742 static KRML_MUSTINLINE void
   11743 libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0(Eurydice_arr_a3 *re)
   11744 {
   11745   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11746     (size_t)0U,
   11747     2091667,
   11748     3407706,
   11749     2316500,
   11750     3817976);
   11751   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11752     (size_t)1U,
   11753     -3342478,
   11754     2244091,
   11755     -2446433,
   11756     -3562462);
   11757   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11758     (size_t)2U,
   11759     266997,
   11760     2434439,
   11761     -1235728,
   11762     3513181);
   11763   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11764     (size_t)3U,
   11765     -3520352,
   11766     -3759364,
   11767     -1197226,
   11768     -3193378);
   11769   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11770     (size_t)4U,
   11771     900702,
   11772     1859098,
   11773     909542,
   11774     819034);
   11775   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11776     (size_t)5U,
   11777     495491,
   11778     -1613174,
   11779     -43260,
   11780     -522500);
   11781   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11782     (size_t)6U,
   11783     -655327,
   11784     -3122442,
   11785     2031748,
   11786     3207046);
   11787   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11788     (size_t)7U,
   11789     -3556995,
   11790     -525098,
   11791     -768622,
   11792     -3595838);
   11793   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11794     (size_t)8U,
   11795     342297,
   11796     286988,
   11797     -2437823,
   11798     4108315);
   11799   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11800     (size_t)9U,
   11801     3437287,
   11802     -3342277,
   11803     1735879,
   11804     203044);
   11805   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11806     (size_t)10U,
   11807     2842341,
   11808     2691481,
   11809     -2590150,
   11810     1265009);
   11811   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11812     (size_t)11U,
   11813     4055324,
   11814     1247620,
   11815     2486353,
   11816     1595974);
   11817   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11818     (size_t)12U,
   11819     -3767016,
   11820     1250494,
   11821     2635921,
   11822     -3548272);
   11823   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11824     (size_t)13U,
   11825     -2994039,
   11826     1869119,
   11827     1903435,
   11828     -1050970);
   11829   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11830     (size_t)14U,
   11831     -1333058,
   11832     1237275,
   11833     -3318210,
   11834     -1430225);
   11835   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11836     (size_t)15U,
   11837     -451100,
   11838     1312455,
   11839     3306115,
   11840     -1962642);
   11841   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11842     (size_t)16U,
   11843     -1279661,
   11844     1917081,
   11845     -2546312,
   11846     -1374803);
   11847   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11848     (size_t)17U,
   11849     1500165,
   11850     777191,
   11851     2235880,
   11852     3406031);
   11853   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11854     (size_t)18U,
   11855     -542412,
   11856     -2831860,
   11857     -1671176,
   11858     -1846953);
   11859   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11860     (size_t)19U,
   11861     -2584293,
   11862     -3724270,
   11863     594136,
   11864     -3776993);
   11865   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11866     (size_t)20U,
   11867     -2013608,
   11868     2432395,
   11869     2454455,
   11870     -164721);
   11871   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11872     (size_t)21U,
   11873     1957272,
   11874     3369112,
   11875     185531,
   11876     -1207385);
   11877   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11878     (size_t)22U,
   11879     -3183426,
   11880     162844,
   11881     1616392,
   11882     3014001);
   11883   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11884     (size_t)23U,
   11885     810149,
   11886     1652634,
   11887     -3694233,
   11888     -1799107);
   11889   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11890     (size_t)24U,
   11891     -3038916,
   11892     3523897,
   11893     3866901,
   11894     269760);
   11895   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11896     (size_t)25U,
   11897     2213111,
   11898     -975884,
   11899     1717735,
   11900     472078);
   11901   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11902     (size_t)26U,
   11903     -426683,
   11904     1723600,
   11905     -1803090,
   11906     1910376);
   11907   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11908     (size_t)27U,
   11909     -1667432,
   11910     -1104333,
   11911     -260646,
   11912     -3833893);
   11913   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11914     (size_t)28U,
   11915     -2939036,
   11916     -2235985,
   11917     -420899,
   11918     -2286327);
   11919   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11920     (size_t)29U,
   11921     183443,
   11922     -976891,
   11923     1612842,
   11924     -3545687);
   11925   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11926     (size_t)30U,
   11927     -554416,
   11928     3919660,
   11929     -48306,
   11930     -1362209);
   11931   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0_round(re,
   11932     (size_t)31U,
   11933     3937738,
   11934     1400424,
   11935     -846154,
   11936     1976782);
   11937 }
   11938 
   11939 static KRML_MUSTINLINE void libcrux_ml_dsa_simd_portable_ntt_ntt(Eurydice_arr_a3 *re)
   11940 {
   11941   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_7(re);
   11942   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_6(re);
   11943   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_5(re);
   11944   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_4(re);
   11945   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_3(re);
   11946   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_2(re);
   11947   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_1(re);
   11948   libcrux_ml_dsa_simd_portable_ntt_ntt_at_layer_0(re);
   11949 }
   11950 
   11951 /**
   11952 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   11953 */
   11954 static inline void libcrux_ml_dsa_simd_portable_ntt_65(Eurydice_arr_a3 *simd_units)
   11955 {
   11956   libcrux_ml_dsa_simd_portable_ntt_ntt(simd_units);
   11957 }
   11958 
   11959 static KRML_MUSTINLINE void
   11960 libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(
   11961   Eurydice_arr_4d *simd_unit,
   11962   int32_t zeta,
   11963   size_t index,
   11964   size_t step
   11965 )
   11966 {
   11967   int32_t a_minus_b = simd_unit->data[index + step] - simd_unit->data[index];
   11968   simd_unit->data[index] += simd_unit->data[index + step];
   11969   simd_unit->data[index + step] =
   11970     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_fe_by_fer(a_minus_b,
   11971       zeta);
   11972 }
   11973 
   11974 static KRML_MUSTINLINE void
   11975 libcrux_ml_dsa_simd_portable_invntt_simd_unit_invert_ntt_at_layer_0(
   11976   Eurydice_arr_4d *simd_unit,
   11977   int32_t zeta0,
   11978   int32_t zeta1,
   11979   int32_t zeta2,
   11980   int32_t zeta3
   11981 )
   11982 {
   11983   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   11984     zeta0,
   11985     (size_t)0U,
   11986     (size_t)1U);
   11987   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   11988     zeta1,
   11989     (size_t)2U,
   11990     (size_t)1U);
   11991   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   11992     zeta2,
   11993     (size_t)4U,
   11994     (size_t)1U);
   11995   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   11996     zeta3,
   11997     (size_t)6U,
   11998     (size_t)1U);
   11999 }
   12000 
   12001 static KRML_MUSTINLINE void
   12002 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(
   12003   Eurydice_arr_a3 *re,
   12004   size_t index,
   12005   int32_t zeta0,
   12006   int32_t zeta1,
   12007   int32_t zeta2,
   12008   int32_t zeta3
   12009 )
   12010 {
   12011   libcrux_ml_dsa_simd_portable_invntt_simd_unit_invert_ntt_at_layer_0(&re->data[index],
   12012     zeta0,
   12013     zeta1,
   12014     zeta2,
   12015     zeta3);
   12016 }
   12017 
   12018 static KRML_MUSTINLINE void
   12019 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0(Eurydice_arr_a3 *re)
   12020 {
   12021   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12022     (size_t)0U,
   12023     1976782,
   12024     -846154,
   12025     1400424,
   12026     3937738);
   12027   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12028     (size_t)1U,
   12029     -1362209,
   12030     -48306,
   12031     3919660,
   12032     -554416);
   12033   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12034     (size_t)2U,
   12035     -3545687,
   12036     1612842,
   12037     -976891,
   12038     183443);
   12039   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12040     (size_t)3U,
   12041     -2286327,
   12042     -420899,
   12043     -2235985,
   12044     -2939036);
   12045   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12046     (size_t)4U,
   12047     -3833893,
   12048     -260646,
   12049     -1104333,
   12050     -1667432);
   12051   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12052     (size_t)5U,
   12053     1910376,
   12054     -1803090,
   12055     1723600,
   12056     -426683);
   12057   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12058     (size_t)6U,
   12059     472078,
   12060     1717735,
   12061     -975884,
   12062     2213111);
   12063   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12064     (size_t)7U,
   12065     269760,
   12066     3866901,
   12067     3523897,
   12068     -3038916);
   12069   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12070     (size_t)8U,
   12071     -1799107,
   12072     -3694233,
   12073     1652634,
   12074     810149);
   12075   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12076     (size_t)9U,
   12077     3014001,
   12078     1616392,
   12079     162844,
   12080     -3183426);
   12081   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12082     (size_t)10U,
   12083     -1207385,
   12084     185531,
   12085     3369112,
   12086     1957272);
   12087   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12088     (size_t)11U,
   12089     -164721,
   12090     2454455,
   12091     2432395,
   12092     -2013608);
   12093   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12094     (size_t)12U,
   12095     -3776993,
   12096     594136,
   12097     -3724270,
   12098     -2584293);
   12099   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12100     (size_t)13U,
   12101     -1846953,
   12102     -1671176,
   12103     -2831860,
   12104     -542412);
   12105   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12106     (size_t)14U,
   12107     3406031,
   12108     2235880,
   12109     777191,
   12110     1500165);
   12111   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12112     (size_t)15U,
   12113     -1374803,
   12114     -2546312,
   12115     1917081,
   12116     -1279661);
   12117   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12118     (size_t)16U,
   12119     -1962642,
   12120     3306115,
   12121     1312455,
   12122     -451100);
   12123   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12124     (size_t)17U,
   12125     -1430225,
   12126     -3318210,
   12127     1237275,
   12128     -1333058);
   12129   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12130     (size_t)18U,
   12131     -1050970,
   12132     1903435,
   12133     1869119,
   12134     -2994039);
   12135   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12136     (size_t)19U,
   12137     -3548272,
   12138     2635921,
   12139     1250494,
   12140     -3767016);
   12141   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12142     (size_t)20U,
   12143     1595974,
   12144     2486353,
   12145     1247620,
   12146     4055324);
   12147   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12148     (size_t)21U,
   12149     1265009,
   12150     -2590150,
   12151     2691481,
   12152     2842341);
   12153   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12154     (size_t)22U,
   12155     203044,
   12156     1735879,
   12157     -3342277,
   12158     3437287);
   12159   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12160     (size_t)23U,
   12161     4108315,
   12162     -2437823,
   12163     286988,
   12164     342297);
   12165   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12166     (size_t)24U,
   12167     -3595838,
   12168     -768622,
   12169     -525098,
   12170     -3556995);
   12171   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12172     (size_t)25U,
   12173     3207046,
   12174     2031748,
   12175     -3122442,
   12176     -655327);
   12177   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12178     (size_t)26U,
   12179     -522500,
   12180     -43260,
   12181     -1613174,
   12182     495491);
   12183   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12184     (size_t)27U,
   12185     819034,
   12186     909542,
   12187     1859098,
   12188     900702);
   12189   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12190     (size_t)28U,
   12191     -3193378,
   12192     -1197226,
   12193     -3759364,
   12194     -3520352);
   12195   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12196     (size_t)29U,
   12197     3513181,
   12198     -1235728,
   12199     2434439,
   12200     266997);
   12201   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12202     (size_t)30U,
   12203     -3562462,
   12204     -2446433,
   12205     2244091,
   12206     -3342478);
   12207   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0_round(re,
   12208     (size_t)31U,
   12209     3817976,
   12210     2316500,
   12211     3407706,
   12212     2091667);
   12213 }
   12214 
   12215 static KRML_MUSTINLINE void
   12216 libcrux_ml_dsa_simd_portable_invntt_simd_unit_invert_ntt_at_layer_1(
   12217   Eurydice_arr_4d *simd_unit,
   12218   int32_t zeta0,
   12219   int32_t zeta1
   12220 )
   12221 {
   12222   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12223     zeta0,
   12224     (size_t)0U,
   12225     (size_t)2U);
   12226   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12227     zeta0,
   12228     (size_t)1U,
   12229     (size_t)2U);
   12230   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12231     zeta1,
   12232     (size_t)4U,
   12233     (size_t)2U);
   12234   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12235     zeta1,
   12236     (size_t)5U,
   12237     (size_t)2U);
   12238 }
   12239 
   12240 static KRML_MUSTINLINE void
   12241 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(
   12242   Eurydice_arr_a3 *re,
   12243   size_t index,
   12244   int32_t zeta_00,
   12245   int32_t zeta_01
   12246 )
   12247 {
   12248   libcrux_ml_dsa_simd_portable_invntt_simd_unit_invert_ntt_at_layer_1(&re->data[index],
   12249     zeta_00,
   12250     zeta_01);
   12251 }
   12252 
   12253 static KRML_MUSTINLINE void
   12254 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1(Eurydice_arr_a3 *re)
   12255 {
   12256   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12257     (size_t)0U,
   12258     3839961,
   12259     -3628969);
   12260   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12261     (size_t)1U,
   12262     -3881060,
   12263     -3019102);
   12264   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12265     (size_t)2U,
   12266     -1439742,
   12267     -812732);
   12268   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12269     (size_t)3U,
   12270     -1584928,
   12271     1285669);
   12272   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12273     (size_t)4U,
   12274     1341330,
   12275     1315589);
   12276   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12277     (size_t)5U,
   12278     -177440,
   12279     -2409325);
   12280   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12281     (size_t)6U,
   12282     -1851402,
   12283     3159746);
   12284   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12285     (size_t)7U,
   12286     -3553272,
   12287     189548);
   12288   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12289     (size_t)8U,
   12290     -1316856,
   12291     759969);
   12292   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12293     (size_t)9U,
   12294     -210977,
   12295     2389356);
   12296   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12297     (size_t)10U,
   12298     -3249728,
   12299     1653064);
   12300   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12301     (size_t)11U,
   12302     -8578,
   12303     -3724342);
   12304   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12305     (size_t)12U,
   12306     3958618,
   12307     904516);
   12308   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12309     (size_t)13U,
   12310     -1100098,
   12311     44288);
   12312   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12313     (size_t)14U,
   12314     3097992,
   12315     508951);
   12316   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12317     (size_t)15U,
   12318     264944,
   12319     -3343383);
   12320   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12321     (size_t)16U,
   12322     -1430430,
   12323     1852771);
   12324   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12325     (size_t)17U,
   12326     1349076,
   12327     -381987);
   12328   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12329     (size_t)18U,
   12330     -1308169,
   12331     -22981);
   12332   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12333     (size_t)19U,
   12334     -1228525,
   12335     -671102);
   12336   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12337     (size_t)20U,
   12338     -2477047,
   12339     -411027);
   12340   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12341     (size_t)21U,
   12342     -3693493,
   12343     -2967645);
   12344   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12345     (size_t)22U,
   12346     2715295,
   12347     2147896);
   12348   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12349     (size_t)23U,
   12350     -983419,
   12351     3412210);
   12352   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12353     (size_t)24U,
   12354     126922,
   12355     -3632928);
   12356   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12357     (size_t)25U,
   12358     -3157330,
   12359     -3190144);
   12360   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12361     (size_t)26U,
   12362     -1000202,
   12363     -4083598);
   12364   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12365     (size_t)27U,
   12366     1939314,
   12367     -1257611);
   12368   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12369     (size_t)28U,
   12370     -1585221,
   12371     2176455);
   12372   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12373     (size_t)29U,
   12374     3475950,
   12375     -1452451);
   12376   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12377     (size_t)30U,
   12378     -3041255,
   12379     -3677745);
   12380   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1_round(re,
   12381     (size_t)31U,
   12382     -1528703,
   12383     -3930395);
   12384 }
   12385 
   12386 static KRML_MUSTINLINE void
   12387 libcrux_ml_dsa_simd_portable_invntt_simd_unit_invert_ntt_at_layer_2(
   12388   Eurydice_arr_4d *simd_unit,
   12389   int32_t zeta
   12390 )
   12391 {
   12392   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12393     zeta,
   12394     (size_t)0U,
   12395     (size_t)4U);
   12396   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12397     zeta,
   12398     (size_t)1U,
   12399     (size_t)4U);
   12400   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12401     zeta,
   12402     (size_t)2U,
   12403     (size_t)4U);
   12404   libcrux_ml_dsa_simd_portable_invntt_simd_unit_inv_ntt_step(simd_unit,
   12405     zeta,
   12406     (size_t)3U,
   12407     (size_t)4U);
   12408 }
   12409 
   12410 static KRML_MUSTINLINE void
   12411 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(
   12412   Eurydice_arr_a3 *re,
   12413   size_t index,
   12414   int32_t zeta1
   12415 )
   12416 {
   12417   libcrux_ml_dsa_simd_portable_invntt_simd_unit_invert_ntt_at_layer_2(&re->data[index], zeta1);
   12418 }
   12419 
   12420 static KRML_MUSTINLINE void
   12421 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2(Eurydice_arr_a3 *re)
   12422 {
   12423   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)0U, -2797779);
   12424   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)1U, 2071892);
   12425   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)2U, -2556880);
   12426   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)3U, 3900724);
   12427   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)4U, 3881043);
   12428   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)5U, 954230);
   12429   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)6U, 531354);
   12430   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)7U, 811944);
   12431   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)8U, 3699596);
   12432   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)9U, -1600420);
   12433   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)10U, -2140649);
   12434   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)11U, 3507263);
   12435   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)12U, -3821735);
   12436   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)13U, 3505694);
   12437   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)14U, -1643818);
   12438   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)15U, -1699267);
   12439   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)16U, -539299);
   12440   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)17U, 2348700);
   12441   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)18U, -300467);
   12442   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)19U, 3539968);
   12443   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)20U, -2867647);
   12444   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)21U, 3574422);
   12445   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)22U, -3043716);
   12446   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)23U, -3861115);
   12447   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)24U, 3915439);
   12448   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)25U, -2537516);
   12449   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)26U, -3592148);
   12450   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)27U, -1661693);
   12451   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)28U, 3530437);
   12452   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)29U, 3077325);
   12453   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)30U, 95776);
   12454   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2_round(re, (size_t)31U, 2706023);
   12455 }
   12456 
   12457 /**
   12458 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12459 with const generics
   12460 - OFFSET= 0
   12461 - STEP_BY= 1
   12462 - ZETA= 280005
   12463 */
   12464 static KRML_MUSTINLINE void
   12465 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_30(Eurydice_arr_a3 *re)
   12466 {
   12467   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)1U; i++)
   12468   {
   12469     size_t j = i;
   12470     Eurydice_arr_4d rej = re->data[j];
   12471     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12472     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12473     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12474     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12475         (size_t)1U],
   12476       280005);
   12477   }
   12478 }
   12479 
   12480 /**
   12481 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12482 with const generics
   12483 - OFFSET= 2
   12484 - STEP_BY= 1
   12485 - ZETA= 4010497
   12486 */
   12487 static KRML_MUSTINLINE void
   12488 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_25(Eurydice_arr_a3 *re)
   12489 {
   12490   for (size_t i = (size_t)2U; i < (size_t)2U + (size_t)1U; i++)
   12491   {
   12492     size_t j = i;
   12493     Eurydice_arr_4d rej = re->data[j];
   12494     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12495     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12496     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12497     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12498         (size_t)1U],
   12499       4010497);
   12500   }
   12501 }
   12502 
   12503 /**
   12504 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12505 with const generics
   12506 - OFFSET= 4
   12507 - STEP_BY= 1
   12508 - ZETA= -19422
   12509 */
   12510 static KRML_MUSTINLINE void
   12511 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_43(Eurydice_arr_a3 *re)
   12512 {
   12513   for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)1U; i++)
   12514   {
   12515     size_t j = i;
   12516     Eurydice_arr_4d rej = re->data[j];
   12517     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12518     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12519     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12520     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12521         (size_t)1U],
   12522       -19422);
   12523   }
   12524 }
   12525 
   12526 /**
   12527 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12528 with const generics
   12529 - OFFSET= 6
   12530 - STEP_BY= 1
   12531 - ZETA= 1757237
   12532 */
   12533 static KRML_MUSTINLINE void
   12534 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_f4(Eurydice_arr_a3 *re)
   12535 {
   12536   for (size_t i = (size_t)6U; i < (size_t)6U + (size_t)1U; i++)
   12537   {
   12538     size_t j = i;
   12539     Eurydice_arr_4d rej = re->data[j];
   12540     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12541     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12542     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12543     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12544         (size_t)1U],
   12545       1757237);
   12546   }
   12547 }
   12548 
   12549 /**
   12550 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12551 with const generics
   12552 - OFFSET= 8
   12553 - STEP_BY= 1
   12554 - ZETA= -3277672
   12555 */
   12556 static KRML_MUSTINLINE void
   12557 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_82(Eurydice_arr_a3 *re)
   12558 {
   12559   for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)1U; i++)
   12560   {
   12561     size_t j = i;
   12562     Eurydice_arr_4d rej = re->data[j];
   12563     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12564     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12565     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12566     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12567         (size_t)1U],
   12568       -3277672);
   12569   }
   12570 }
   12571 
   12572 /**
   12573 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12574 with const generics
   12575 - OFFSET= 10
   12576 - STEP_BY= 1
   12577 - ZETA= -1399561
   12578 */
   12579 static KRML_MUSTINLINE void
   12580 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_1d(Eurydice_arr_a3 *re)
   12581 {
   12582   for (size_t i = (size_t)10U; i < (size_t)10U + (size_t)1U; i++)
   12583   {
   12584     size_t j = i;
   12585     Eurydice_arr_4d rej = re->data[j];
   12586     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12587     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12588     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12589     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12590         (size_t)1U],
   12591       -1399561);
   12592   }
   12593 }
   12594 
   12595 /**
   12596 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12597 with const generics
   12598 - OFFSET= 12
   12599 - STEP_BY= 1
   12600 - ZETA= -3859737
   12601 */
   12602 static KRML_MUSTINLINE void
   12603 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_ea(Eurydice_arr_a3 *re)
   12604 {
   12605   for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)1U; i++)
   12606   {
   12607     size_t j = i;
   12608     Eurydice_arr_4d rej = re->data[j];
   12609     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12610     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12611     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12612     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12613         (size_t)1U],
   12614       -3859737);
   12615   }
   12616 }
   12617 
   12618 /**
   12619 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12620 with const generics
   12621 - OFFSET= 14
   12622 - STEP_BY= 1
   12623 - ZETA= -2118186
   12624 */
   12625 static KRML_MUSTINLINE void
   12626 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_d8(Eurydice_arr_a3 *re)
   12627 {
   12628   for (size_t i = (size_t)14U; i < (size_t)14U + (size_t)1U; i++)
   12629   {
   12630     size_t j = i;
   12631     Eurydice_arr_4d rej = re->data[j];
   12632     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12633     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12634     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12635     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12636         (size_t)1U],
   12637       -2118186);
   12638   }
   12639 }
   12640 
   12641 /**
   12642 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12643 with const generics
   12644 - OFFSET= 16
   12645 - STEP_BY= 1
   12646 - ZETA= -2108549
   12647 */
   12648 static KRML_MUSTINLINE void
   12649 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_42(Eurydice_arr_a3 *re)
   12650 {
   12651   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)1U; i++)
   12652   {
   12653     size_t j = i;
   12654     Eurydice_arr_4d rej = re->data[j];
   12655     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12656     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12657     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12658     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12659         (size_t)1U],
   12660       -2108549);
   12661   }
   12662 }
   12663 
   12664 /**
   12665 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12666 with const generics
   12667 - OFFSET= 18
   12668 - STEP_BY= 1
   12669 - ZETA= 2619752
   12670 */
   12671 static KRML_MUSTINLINE void
   12672 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_60(Eurydice_arr_a3 *re)
   12673 {
   12674   for (size_t i = (size_t)18U; i < (size_t)18U + (size_t)1U; i++)
   12675   {
   12676     size_t j = i;
   12677     Eurydice_arr_4d rej = re->data[j];
   12678     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12679     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12680     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12681     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12682         (size_t)1U],
   12683       2619752);
   12684   }
   12685 }
   12686 
   12687 /**
   12688 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12689 with const generics
   12690 - OFFSET= 20
   12691 - STEP_BY= 1
   12692 - ZETA= -1119584
   12693 */
   12694 static KRML_MUSTINLINE void
   12695 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_61(Eurydice_arr_a3 *re)
   12696 {
   12697   for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)1U; i++)
   12698   {
   12699     size_t j = i;
   12700     Eurydice_arr_4d rej = re->data[j];
   12701     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12702     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12703     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12704     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12705         (size_t)1U],
   12706       -1119584);
   12707   }
   12708 }
   12709 
   12710 /**
   12711 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12712 with const generics
   12713 - OFFSET= 22
   12714 - STEP_BY= 1
   12715 - ZETA= -549488
   12716 */
   12717 static KRML_MUSTINLINE void
   12718 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_29(Eurydice_arr_a3 *re)
   12719 {
   12720   for (size_t i = (size_t)22U; i < (size_t)22U + (size_t)1U; i++)
   12721   {
   12722     size_t j = i;
   12723     Eurydice_arr_4d rej = re->data[j];
   12724     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12725     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12726     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12727     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12728         (size_t)1U],
   12729       -549488);
   12730   }
   12731 }
   12732 
   12733 /**
   12734 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12735 with const generics
   12736 - OFFSET= 24
   12737 - STEP_BY= 1
   12738 - ZETA= 3585928
   12739 */
   12740 static KRML_MUSTINLINE void
   12741 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_fe(Eurydice_arr_a3 *re)
   12742 {
   12743   for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)1U; i++)
   12744   {
   12745     size_t j = i;
   12746     Eurydice_arr_4d rej = re->data[j];
   12747     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12748     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12749     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12750     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12751         (size_t)1U],
   12752       3585928);
   12753   }
   12754 }
   12755 
   12756 /**
   12757 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12758 with const generics
   12759 - OFFSET= 26
   12760 - STEP_BY= 1
   12761 - ZETA= -1079900
   12762 */
   12763 static KRML_MUSTINLINE void
   12764 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_9d(Eurydice_arr_a3 *re)
   12765 {
   12766   for (size_t i = (size_t)26U; i < (size_t)26U + (size_t)1U; i++)
   12767   {
   12768     size_t j = i;
   12769     Eurydice_arr_4d rej = re->data[j];
   12770     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12771     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12772     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12773     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12774         (size_t)1U],
   12775       -1079900);
   12776   }
   12777 }
   12778 
   12779 /**
   12780 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12781 with const generics
   12782 - OFFSET= 28
   12783 - STEP_BY= 1
   12784 - ZETA= 1024112
   12785 */
   12786 static KRML_MUSTINLINE void
   12787 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_38(Eurydice_arr_a3 *re)
   12788 {
   12789   for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)1U; i++)
   12790   {
   12791     size_t j = i;
   12792     Eurydice_arr_4d rej = re->data[j];
   12793     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12794     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12795     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12796     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12797         (size_t)1U],
   12798       1024112);
   12799   }
   12800 }
   12801 
   12802 /**
   12803 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12804 with const generics
   12805 - OFFSET= 30
   12806 - STEP_BY= 1
   12807 - ZETA= 2725464
   12808 */
   12809 static KRML_MUSTINLINE void
   12810 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_5f(Eurydice_arr_a3 *re)
   12811 {
   12812   for (size_t i = (size_t)30U; i < (size_t)30U + (size_t)1U; i++)
   12813   {
   12814     size_t j = i;
   12815     Eurydice_arr_4d rej = re->data[j];
   12816     Eurydice_arr_4d rejs = re->data[j + (size_t)1U];
   12817     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12818     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)1U], &rej);
   12819     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12820         (size_t)1U],
   12821       2725464);
   12822   }
   12823 }
   12824 
   12825 static KRML_MUSTINLINE void
   12826 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_3(Eurydice_arr_a3 *re)
   12827 {
   12828   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_30(re);
   12829   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_25(re);
   12830   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_43(re);
   12831   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_f4(re);
   12832   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_82(re);
   12833   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_1d(re);
   12834   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_ea(re);
   12835   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_d8(re);
   12836   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_42(re);
   12837   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_60(re);
   12838   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_61(re);
   12839   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_29(re);
   12840   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_fe(re);
   12841   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_9d(re);
   12842   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_38(re);
   12843   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_5f(re);
   12844 }
   12845 
   12846 /**
   12847 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12848 with const generics
   12849 - OFFSET= 0
   12850 - STEP_BY= 2
   12851 - ZETA= 2680103
   12852 */
   12853 static KRML_MUSTINLINE void
   12854 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_300(Eurydice_arr_a3 *re)
   12855 {
   12856   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)2U; i++)
   12857   {
   12858     size_t j = i;
   12859     Eurydice_arr_4d rej = re->data[j];
   12860     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   12861     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12862     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   12863     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12864         (size_t)2U],
   12865       2680103);
   12866   }
   12867 }
   12868 
   12869 /**
   12870 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12871 with const generics
   12872 - OFFSET= 4
   12873 - STEP_BY= 2
   12874 - ZETA= 3111497
   12875 */
   12876 static KRML_MUSTINLINE void
   12877 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_430(Eurydice_arr_a3 *re)
   12878 {
   12879   for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)2U; i++)
   12880   {
   12881     size_t j = i;
   12882     Eurydice_arr_4d rej = re->data[j];
   12883     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   12884     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12885     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   12886     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12887         (size_t)2U],
   12888       3111497);
   12889   }
   12890 }
   12891 
   12892 /**
   12893 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12894 with const generics
   12895 - OFFSET= 8
   12896 - STEP_BY= 2
   12897 - ZETA= -2884855
   12898 */
   12899 static KRML_MUSTINLINE void
   12900 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_820(Eurydice_arr_a3 *re)
   12901 {
   12902   for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)2U; i++)
   12903   {
   12904     size_t j = i;
   12905     Eurydice_arr_4d rej = re->data[j];
   12906     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   12907     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12908     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   12909     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12910         (size_t)2U],
   12911       -2884855);
   12912   }
   12913 }
   12914 
   12915 /**
   12916 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12917 with const generics
   12918 - OFFSET= 12
   12919 - STEP_BY= 2
   12920 - ZETA= 3119733
   12921 */
   12922 static KRML_MUSTINLINE void
   12923 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_ea0(Eurydice_arr_a3 *re)
   12924 {
   12925   for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)2U; i++)
   12926   {
   12927     size_t j = i;
   12928     Eurydice_arr_4d rej = re->data[j];
   12929     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   12930     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12931     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   12932     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12933         (size_t)2U],
   12934       3119733);
   12935   }
   12936 }
   12937 
   12938 /**
   12939 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12940 with const generics
   12941 - OFFSET= 16
   12942 - STEP_BY= 2
   12943 - ZETA= -2091905
   12944 */
   12945 static KRML_MUSTINLINE void
   12946 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_420(Eurydice_arr_a3 *re)
   12947 {
   12948   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)2U; i++)
   12949   {
   12950     size_t j = i;
   12951     Eurydice_arr_4d rej = re->data[j];
   12952     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   12953     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12954     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   12955     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12956         (size_t)2U],
   12957       -2091905);
   12958   }
   12959 }
   12960 
   12961 /**
   12962 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12963 with const generics
   12964 - OFFSET= 20
   12965 - STEP_BY= 2
   12966 - ZETA= -359251
   12967 */
   12968 static KRML_MUSTINLINE void
   12969 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_610(Eurydice_arr_a3 *re)
   12970 {
   12971   for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)2U; i++)
   12972   {
   12973     size_t j = i;
   12974     Eurydice_arr_4d rej = re->data[j];
   12975     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   12976     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   12977     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   12978     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   12979         (size_t)2U],
   12980       -359251);
   12981   }
   12982 }
   12983 
   12984 /**
   12985 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   12986 with const generics
   12987 - OFFSET= 24
   12988 - STEP_BY= 2
   12989 - ZETA= 2353451
   12990 */
   12991 static KRML_MUSTINLINE void
   12992 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_fe0(Eurydice_arr_a3 *re)
   12993 {
   12994   for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)2U; i++)
   12995   {
   12996     size_t j = i;
   12997     Eurydice_arr_4d rej = re->data[j];
   12998     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   12999     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13000     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   13001     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13002         (size_t)2U],
   13003       2353451);
   13004   }
   13005 }
   13006 
   13007 /**
   13008 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13009 with const generics
   13010 - OFFSET= 28
   13011 - STEP_BY= 2
   13012 - ZETA= 1826347
   13013 */
   13014 static KRML_MUSTINLINE void
   13015 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_380(Eurydice_arr_a3 *re)
   13016 {
   13017   for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)2U; i++)
   13018   {
   13019     size_t j = i;
   13020     Eurydice_arr_4d rej = re->data[j];
   13021     Eurydice_arr_4d rejs = re->data[j + (size_t)2U];
   13022     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13023     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)2U], &rej);
   13024     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13025         (size_t)2U],
   13026       1826347);
   13027   }
   13028 }
   13029 
   13030 static KRML_MUSTINLINE void
   13031 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_4(Eurydice_arr_a3 *re)
   13032 {
   13033   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_300(re);
   13034   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_430(re);
   13035   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_820(re);
   13036   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_ea0(re);
   13037   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_420(re);
   13038   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_610(re);
   13039   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_fe0(re);
   13040   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_380(re);
   13041 }
   13042 
   13043 /**
   13044 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13045 with const generics
   13046 - OFFSET= 0
   13047 - STEP_BY= 4
   13048 - ZETA= 466468
   13049 */
   13050 static KRML_MUSTINLINE void
   13051 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_301(Eurydice_arr_a3 *re)
   13052 {
   13053   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)4U; i++)
   13054   {
   13055     size_t j = i;
   13056     Eurydice_arr_4d rej = re->data[j];
   13057     Eurydice_arr_4d rejs = re->data[j + (size_t)4U];
   13058     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13059     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)4U], &rej);
   13060     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13061         (size_t)4U],
   13062       466468);
   13063   }
   13064 }
   13065 
   13066 /**
   13067 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13068 with const generics
   13069 - OFFSET= 8
   13070 - STEP_BY= 4
   13071 - ZETA= -876248
   13072 */
   13073 static KRML_MUSTINLINE void
   13074 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_821(Eurydice_arr_a3 *re)
   13075 {
   13076   for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)4U; i++)
   13077   {
   13078     size_t j = i;
   13079     Eurydice_arr_4d rej = re->data[j];
   13080     Eurydice_arr_4d rejs = re->data[j + (size_t)4U];
   13081     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13082     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)4U], &rej);
   13083     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13084         (size_t)4U],
   13085       -876248);
   13086   }
   13087 }
   13088 
   13089 /**
   13090 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13091 with const generics
   13092 - OFFSET= 16
   13093 - STEP_BY= 4
   13094 - ZETA= -777960
   13095 */
   13096 static KRML_MUSTINLINE void
   13097 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_421(Eurydice_arr_a3 *re)
   13098 {
   13099   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)4U; i++)
   13100   {
   13101     size_t j = i;
   13102     Eurydice_arr_4d rej = re->data[j];
   13103     Eurydice_arr_4d rejs = re->data[j + (size_t)4U];
   13104     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13105     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)4U], &rej);
   13106     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13107         (size_t)4U],
   13108       -777960);
   13109   }
   13110 }
   13111 
   13112 /**
   13113 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13114 with const generics
   13115 - OFFSET= 24
   13116 - STEP_BY= 4
   13117 - ZETA= 237124
   13118 */
   13119 static KRML_MUSTINLINE void
   13120 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_fe1(Eurydice_arr_a3 *re)
   13121 {
   13122   for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)4U; i++)
   13123   {
   13124     size_t j = i;
   13125     Eurydice_arr_4d rej = re->data[j];
   13126     Eurydice_arr_4d rejs = re->data[j + (size_t)4U];
   13127     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13128     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)4U], &rej);
   13129     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13130         (size_t)4U],
   13131       237124);
   13132   }
   13133 }
   13134 
   13135 static KRML_MUSTINLINE void
   13136 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_5(Eurydice_arr_a3 *re)
   13137 {
   13138   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_301(re);
   13139   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_821(re);
   13140   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_421(re);
   13141   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_fe1(re);
   13142 }
   13143 
   13144 /**
   13145 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13146 with const generics
   13147 - OFFSET= 0
   13148 - STEP_BY= 8
   13149 - ZETA= -518909
   13150 */
   13151 static KRML_MUSTINLINE void
   13152 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_302(Eurydice_arr_a3 *re)
   13153 {
   13154   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)8U; i++)
   13155   {
   13156     size_t j = i;
   13157     Eurydice_arr_4d rej = re->data[j];
   13158     Eurydice_arr_4d rejs = re->data[j + (size_t)8U];
   13159     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13160     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)8U], &rej);
   13161     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13162         (size_t)8U],
   13163       -518909);
   13164   }
   13165 }
   13166 
   13167 /**
   13168 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13169 with const generics
   13170 - OFFSET= 16
   13171 - STEP_BY= 8
   13172 - ZETA= -2608894
   13173 */
   13174 static KRML_MUSTINLINE void
   13175 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_422(Eurydice_arr_a3 *re)
   13176 {
   13177   for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)8U; i++)
   13178   {
   13179     size_t j = i;
   13180     Eurydice_arr_4d rej = re->data[j];
   13181     Eurydice_arr_4d rejs = re->data[j + (size_t)8U];
   13182     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13183     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)8U], &rej);
   13184     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13185         (size_t)8U],
   13186       -2608894);
   13187   }
   13188 }
   13189 
   13190 static KRML_MUSTINLINE void
   13191 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_6(Eurydice_arr_a3 *re)
   13192 {
   13193   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_302(re);
   13194   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_422(re);
   13195 }
   13196 
   13197 /**
   13198 A monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus
   13199 with const generics
   13200 - OFFSET= 0
   13201 - STEP_BY= 16
   13202 - ZETA= 25847
   13203 */
   13204 static KRML_MUSTINLINE void
   13205 libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_303(Eurydice_arr_a3 *re)
   13206 {
   13207   for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)16U; i++)
   13208   {
   13209     size_t j = i;
   13210     Eurydice_arr_4d rej = re->data[j];
   13211     Eurydice_arr_4d rejs = re->data[j + (size_t)16U];
   13212     libcrux_ml_dsa_simd_portable_arithmetic_add(&re->data[j], &rejs);
   13213     libcrux_ml_dsa_simd_portable_arithmetic_subtract(&re->data[j + (size_t)16U], &rej);
   13214     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[j +
   13215         (size_t)16U],
   13216       25847);
   13217   }
   13218 }
   13219 
   13220 static KRML_MUSTINLINE void
   13221 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_7(Eurydice_arr_a3 *re)
   13222 {
   13223   libcrux_ml_dsa_simd_portable_invntt_outer_3_plus_303(re);
   13224 }
   13225 
   13226 static KRML_MUSTINLINE void
   13227 libcrux_ml_dsa_simd_portable_invntt_invert_ntt_montgomery(Eurydice_arr_a3 *re)
   13228 {
   13229   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_0(re);
   13230   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_1(re);
   13231   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_2(re);
   13232   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_3(re);
   13233   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_4(re);
   13234   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_5(re);
   13235   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_6(re);
   13236   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_at_layer_7(re);
   13237   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   13238   {
   13239     size_t i0 = i;
   13240     libcrux_ml_dsa_simd_portable_arithmetic_montgomery_multiply_by_constant(&re->data[i0], 41978);
   13241   }
   13242 }
   13243 
   13244 /**
   13245 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   13246 */
   13247 static inline void
   13248 libcrux_ml_dsa_simd_portable_invert_ntt_montgomery_65(Eurydice_arr_a3 *simd_units)
   13249 {
   13250   libcrux_ml_dsa_simd_portable_invntt_invert_ntt_montgomery(simd_units);
   13251 }
   13252 
   13253 /**
   13254 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   13255 */
   13256 static inline void
   13257 libcrux_ml_dsa_simd_portable_barrett_reduce_simd_unit_65(Eurydice_arr_4d *simd_unit)
   13258 {
   13259   libcrux_ml_dsa_simd_portable_arithmetic_barrett_reduce_simd_unit(simd_unit);
   13260 }
   13261 
   13262 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_error_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_ERROR_COEFFICIENT))
   13263 
   13264 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_commitment_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_COMMITMENT_COEFFICIENT))
   13265 
   13266 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA (libcrux_ml_dsa_constants_beta(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA))
   13267 
   13268 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_gamma1_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_GAMMA1_COEFFICIENT))
   13269 
   13270 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_VERIFICATION_KEY_SIZE (libcrux_ml_dsa_constants_verification_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A))
   13271 
   13272 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_SIGNATURE_SIZE (libcrux_ml_dsa_constants_signature_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_GAMMA1_COEFFICIENT))
   13273 
   13274 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_error_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_ERROR_COEFFICIENT))
   13275 
   13276 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_commitment_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_COMMITMENT_COEFFICIENT))
   13277 
   13278 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA (libcrux_ml_dsa_constants_beta(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA))
   13279 
   13280 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_gamma1_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_GAMMA1_COEFFICIENT))
   13281 
   13282 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_VERIFICATION_KEY_SIZE (libcrux_ml_dsa_constants_verification_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A))
   13283 
   13284 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_SIGNATURE_SIZE (libcrux_ml_dsa_constants_signature_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_GAMMA1_COEFFICIENT))
   13285 
   13286 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_VECTOR_SIZE (libcrux_ml_dsa_constants_commitment_vector_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_COMMITMENT_COEFFICIENT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A))
   13287 
   13288 /**
   13289 A monomorphic instance of libcrux_ml_dsa.types.MLDSASigningKey
   13290 with const generics
   13291 - $2560size_t
   13292 */
   13293 typedef Eurydice_arr_10 libcrux_ml_dsa_types_MLDSASigningKey_11;
   13294 
   13295 typedef Eurydice_arr_10 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44SigningKey;
   13296 
   13297 /**
   13298 A monomorphic instance of libcrux_ml_dsa.types.MLDSAVerificationKey
   13299 with const generics
   13300 - $1312size_t
   13301 */
   13302 typedef Eurydice_arr_02 libcrux_ml_dsa_types_MLDSAVerificationKey_1d;
   13303 
   13304 typedef Eurydice_arr_02 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44VerificationKey;
   13305 
   13306 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ROW_COLUMN (LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A + LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A)
   13307 
   13308 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ROW_X_COLUMN (LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A * LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A)
   13309 
   13310 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_SIGNING_KEY_SIZE (libcrux_ml_dsa_constants_signing_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A, LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE))
   13311 
   13312 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_VECTOR_SIZE (libcrux_ml_dsa_constants_commitment_vector_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_COMMITMENT_COEFFICIENT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A))
   13313 
   13314 /**
   13315 A monomorphic instance of libcrux_ml_dsa.types.MLDSASigningKey
   13316 with const generics
   13317 - $4032size_t
   13318 */
   13319 typedef Eurydice_arr_24 libcrux_ml_dsa_types_MLDSASigningKey_8e;
   13320 
   13321 typedef Eurydice_arr_24 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65SigningKey;
   13322 
   13323 /**
   13324 A monomorphic instance of libcrux_ml_dsa.types.MLDSAVerificationKey
   13325 with const generics
   13326 - $1952size_t
   13327 */
   13328 typedef Eurydice_arr_29 libcrux_ml_dsa_types_MLDSAVerificationKey_c8;
   13329 
   13330 typedef Eurydice_arr_29 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65VerificationKey;
   13331 
   13332 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ROW_COLUMN (LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A + LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A)
   13333 
   13334 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ROW_X_COLUMN (LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A * LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A)
   13335 
   13336 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_SIGNING_KEY_SIZE (libcrux_ml_dsa_constants_signing_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A, LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE))
   13337 
   13338 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_VECTOR_SIZE (libcrux_ml_dsa_constants_commitment_vector_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_COMMITMENT_COEFFICIENT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A))
   13339 
   13340 /**
   13341 A monomorphic instance of libcrux_ml_dsa.types.MLDSASigningKey
   13342 with const generics
   13343 - $4896size_t
   13344 */
   13345 typedef Eurydice_arr_e2 libcrux_ml_dsa_types_MLDSASigningKey_b8;
   13346 
   13347 typedef Eurydice_arr_e2 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87SigningKey;
   13348 
   13349 /**
   13350 A monomorphic instance of libcrux_ml_dsa.types.MLDSAVerificationKey
   13351 with const generics
   13352 - $2592size_t
   13353 */
   13354 typedef Eurydice_arr_43 libcrux_ml_dsa_types_MLDSAVerificationKey_e9;
   13355 
   13356 typedef Eurydice_arr_43 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87VerificationKey;
   13357 
   13358 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ROW_COLUMN (LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A + LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A)
   13359 
   13360 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ROW_X_COLUMN (LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A * LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A)
   13361 
   13362 #define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_SIGNING_KEY_SIZE (libcrux_ml_dsa_constants_signing_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A, LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE))
   13363 
   13364 #define LIBCRUX_ML_DSA_PRE_HASH_PRE_HASH_OID_LEN ((size_t)11U)
   13365 
   13366 typedef Eurydice_arr_c9 libcrux_ml_dsa_pre_hash_PreHashOID;
   13367 
   13368 typedef core_result_Result_a8 libcrux_ml_dsa_pre_hash_PreHashResult;
   13369 
   13370 /**
   13371 This function found in impl {core::convert::From<libcrux_ml_dsa::pre_hash::DomainSeparationError> for libcrux_ml_dsa::types::SigningError}
   13372 */
   13373 static inline libcrux_ml_dsa_types_SigningError
   13374 libcrux_ml_dsa_pre_hash_from_96(libcrux_ml_dsa_pre_hash_DomainSeparationError e)
   13375 {
   13376   return libcrux_ml_dsa_types_SigningError_ContextTooLongError;
   13377 }
   13378 
   13379 /**
   13380 This function found in impl {core::convert::From<libcrux_ml_dsa::pre_hash::DomainSeparationError> for libcrux_ml_dsa::types::VerificationError}
   13381 */
   13382 static inline libcrux_ml_dsa_types_VerificationError
   13383 libcrux_ml_dsa_pre_hash_from_bf(libcrux_ml_dsa_pre_hash_DomainSeparationError e)
   13384 {
   13385   return libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError;
   13386 }
   13387 
   13388 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_3_STEP ((size_t)8U)
   13389 
   13390 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_3_STEP_BY ((size_t)1U)
   13391 
   13392 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_4_STEP ((size_t)16U)
   13393 
   13394 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_4_STEP_BY ((size_t)2U)
   13395 
   13396 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_5_STEP ((size_t)32U)
   13397 
   13398 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_5_STEP_BY ((size_t)4U)
   13399 
   13400 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_6_STEP ((size_t)64U)
   13401 
   13402 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_6_STEP_BY ((size_t)8U)
   13403 
   13404 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_7_STEP ((size_t)128U)
   13405 
   13406 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_INVNTT_INVERT_NTT_AT_LAYER_7_STEP_BY ((size_t)16U)
   13407 
   13408 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_3_STEP ((size_t)8U)
   13409 
   13410 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_3_STEP_BY ((size_t)1U)
   13411 
   13412 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_4_STEP ((size_t)16U)
   13413 
   13414 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_4_STEP_BY ((size_t)2U)
   13415 
   13416 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_5_STEP ((size_t)32U)
   13417 
   13418 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_5_STEP_BY ((size_t)4U)
   13419 
   13420 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_6_STEP ((size_t)64U)
   13421 
   13422 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_6_STEP_BY ((size_t)8U)
   13423 
   13424 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_7_STEP ((size_t)128U)
   13425 
   13426 #define LIBCRUX_ML_DSA_SIMD_PORTABLE_NTT_NTT_AT_LAYER_7_STEP_BY ((size_t)16U)
   13427 
   13428 typedef int32_t libcrux_ml_dsa_simd_portable_vector_type_FieldElement;
   13429 
   13430 /**
   13431 This function found in impl {core::clone::Clone for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   13432 */
   13433 static inline Eurydice_arr_4d
   13434 libcrux_ml_dsa_simd_portable_vector_type_clone_a5(const Eurydice_arr_4d *self)
   13435 {
   13436   return self[0U];
   13437 }
   13438 
   13439 typedef int32_t libcrux_ml_dsa_simd_traits_FieldElementTimesMontgomeryR;
   13440 
   13441 typedef Eurydice_arr_93 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87Signature;
   13442 
   13443 /**
   13444  A reference to the raw byte array.
   13445 */
   13446 /**
   13447 This function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}
   13448 */
   13449 /**
   13450 A monomorphic instance of libcrux_ml_dsa.types.as_ref_c5
   13451 with const generics
   13452 - SIZE= 4627
   13453 */
   13454 static inline const
   13455 Eurydice_arr_93
   13456 *libcrux_ml_dsa_types_as_ref_c5_f1(const Eurydice_arr_93 *self)
   13457 {
   13458   return self;
   13459 }
   13460 
   13461 /**
   13462  A reference to the raw byte array.
   13463 */
   13464 /**
   13465 This function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}
   13466 */
   13467 /**
   13468 A monomorphic instance of libcrux_ml_dsa.types.as_ref_7f
   13469 with const generics
   13470 - SIZE= 2592
   13471 */
   13472 static inline const
   13473 Eurydice_arr_43
   13474 *libcrux_ml_dsa_types_as_ref_7f_c6(const Eurydice_arr_43 *self)
   13475 {
   13476   return self;
   13477 }
   13478 
   13479 /**
   13480  A reference to the raw byte array.
   13481 */
   13482 /**
   13483 This function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}
   13484 */
   13485 /**
   13486 A monomorphic instance of libcrux_ml_dsa.types.as_ref_9b
   13487 with const generics
   13488 - SIZE= 4896
   13489 */
   13490 static inline const
   13491 Eurydice_arr_e2
   13492 *libcrux_ml_dsa_types_as_ref_9b_72(const Eurydice_arr_e2 *self)
   13493 {
   13494   return self;
   13495 }
   13496 
   13497 /**
   13498  Build
   13499 */
   13500 /**
   13501 This function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}
   13502 */
   13503 /**
   13504 A monomorphic instance of libcrux_ml_dsa.types.new_7f
   13505 with const generics
   13506 - SIZE= 2592
   13507 */
   13508 static inline Eurydice_arr_43 libcrux_ml_dsa_types_new_7f_c6(Eurydice_arr_43 value)
   13509 {
   13510   return value;
   13511 }
   13512 
   13513 /**
   13514  Build
   13515 */
   13516 /**
   13517 This function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}
   13518 */
   13519 /**
   13520 A monomorphic instance of libcrux_ml_dsa.types.new_9b
   13521 with const generics
   13522 - SIZE= 4896
   13523 */
   13524 static inline Eurydice_arr_e2 libcrux_ml_dsa_types_new_9b_72(Eurydice_arr_e2 value)
   13525 {
   13526   return value;
   13527 }
   13528 
   13529 typedef Eurydice_arr_85 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44Signature;
   13530 
   13531 /**
   13532  A reference to the raw byte array.
   13533 */
   13534 /**
   13535 This function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}
   13536 */
   13537 /**
   13538 A monomorphic instance of libcrux_ml_dsa.types.as_ref_c5
   13539 with const generics
   13540 - SIZE= 2420
   13541 */
   13542 static inline const
   13543 Eurydice_arr_85
   13544 *libcrux_ml_dsa_types_as_ref_c5_37(const Eurydice_arr_85 *self)
   13545 {
   13546   return self;
   13547 }
   13548 
   13549 /**
   13550  A reference to the raw byte array.
   13551 */
   13552 /**
   13553 This function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}
   13554 */
   13555 /**
   13556 A monomorphic instance of libcrux_ml_dsa.types.as_ref_7f
   13557 with const generics
   13558 - SIZE= 1312
   13559 */
   13560 static inline const
   13561 Eurydice_arr_02
   13562 *libcrux_ml_dsa_types_as_ref_7f_7d(const Eurydice_arr_02 *self)
   13563 {
   13564   return self;
   13565 }
   13566 
   13567 /**
   13568  A reference to the raw byte array.
   13569 */
   13570 /**
   13571 This function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}
   13572 */
   13573 /**
   13574 A monomorphic instance of libcrux_ml_dsa.types.as_ref_9b
   13575 with const generics
   13576 - SIZE= 2560
   13577 */
   13578 static inline const
   13579 Eurydice_arr_10
   13580 *libcrux_ml_dsa_types_as_ref_9b_ab(const Eurydice_arr_10 *self)
   13581 {
   13582   return self;
   13583 }
   13584 
   13585 /**
   13586  Build
   13587 */
   13588 /**
   13589 This function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}
   13590 */
   13591 /**
   13592 A monomorphic instance of libcrux_ml_dsa.types.new_7f
   13593 with const generics
   13594 - SIZE= 1312
   13595 */
   13596 static inline Eurydice_arr_02 libcrux_ml_dsa_types_new_7f_7d(Eurydice_arr_02 value)
   13597 {
   13598   return value;
   13599 }
   13600 
   13601 /**
   13602  Build
   13603 */
   13604 /**
   13605 This function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}
   13606 */
   13607 /**
   13608 A monomorphic instance of libcrux_ml_dsa.types.new_9b
   13609 with const generics
   13610 - SIZE= 2560
   13611 */
   13612 static inline Eurydice_arr_10 libcrux_ml_dsa_types_new_9b_ab(Eurydice_arr_10 value)
   13613 {
   13614   return value;
   13615 }
   13616 
   13617 typedef Eurydice_arr_0c libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65Signature;
   13618 
   13619 /**
   13620  A reference to the raw byte array.
   13621 */
   13622 /**
   13623 This function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}
   13624 */
   13625 /**
   13626 A monomorphic instance of libcrux_ml_dsa.types.as_ref_c5
   13627 with const generics
   13628 - SIZE= 3309
   13629 */
   13630 static inline const
   13631 Eurydice_arr_0c
   13632 *libcrux_ml_dsa_types_as_ref_c5_5c(const Eurydice_arr_0c *self)
   13633 {
   13634   return self;
   13635 }
   13636 
   13637 /**
   13638  A reference to the raw byte array.
   13639 */
   13640 /**
   13641 This function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}
   13642 */
   13643 /**
   13644 A monomorphic instance of libcrux_ml_dsa.types.as_ref_7f
   13645 with const generics
   13646 - SIZE= 1952
   13647 */
   13648 static inline const
   13649 Eurydice_arr_29
   13650 *libcrux_ml_dsa_types_as_ref_7f_a2(const Eurydice_arr_29 *self)
   13651 {
   13652   return self;
   13653 }
   13654 
   13655 /**
   13656  A reference to the raw byte array.
   13657 */
   13658 /**
   13659 This function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}
   13660 */
   13661 /**
   13662 A monomorphic instance of libcrux_ml_dsa.types.as_ref_9b
   13663 with const generics
   13664 - SIZE= 4032
   13665 */
   13666 static inline const
   13667 Eurydice_arr_24
   13668 *libcrux_ml_dsa_types_as_ref_9b_e5(const Eurydice_arr_24 *self)
   13669 {
   13670   return self;
   13671 }
   13672 
   13673 /**
   13674  Build
   13675 */
   13676 /**
   13677 This function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}
   13678 */
   13679 /**
   13680 A monomorphic instance of libcrux_ml_dsa.types.new_7f
   13681 with const generics
   13682 - SIZE= 1952
   13683 */
   13684 static inline Eurydice_arr_29 libcrux_ml_dsa_types_new_7f_a2(Eurydice_arr_29 value)
   13685 {
   13686   return value;
   13687 }
   13688 
   13689 /**
   13690  Build
   13691 */
   13692 /**
   13693 This function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}
   13694 */
   13695 /**
   13696 A monomorphic instance of libcrux_ml_dsa.types.new_9b
   13697 with const generics
   13698 - SIZE= 4032
   13699 */
   13700 static inline Eurydice_arr_24 libcrux_ml_dsa_types_new_9b_e5(Eurydice_arr_24 value)
   13701 {
   13702   return value;
   13703 }
   13704 
   13705 /**
   13706 A monomorphic instance of core.result.Result
   13707 with types libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87Signature, libcrux_ml_dsa_types_SigningError
   13708 
   13709 */
   13710 typedef struct core_result_Result_8b_s
   13711 {
   13712   core_result_Result_57_tags tag;
   13713   union {
   13714     Eurydice_arr_93 case_Ok;
   13715     libcrux_ml_dsa_types_SigningError case_Err;
   13716   }
   13717   val;
   13718 }
   13719 core_result_Result_8b;
   13720 
   13721 /**
   13722 A monomorphic instance of libcrux_ml_dsa.polynomial.PolynomialRingElement
   13723 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13724 
   13725 */
   13726 typedef Eurydice_arr_a3 libcrux_ml_dsa_polynomial_PolynomialRingElement_e8;
   13727 
   13728 /**
   13729 A monomorphic instance of Eurydice.arr
   13730 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   13731 with const generics
   13732 - $7size_t
   13733 */
   13734 typedef struct Eurydice_arr_bb_s { Eurydice_arr_a3 data[7U]; } Eurydice_arr_bb;
   13735 
   13736 /**
   13737 A monomorphic instance of core.option.Option
   13738 with types Eurydice_arr_bb
   13739 
   13740 */
   13741 typedef struct core_option_Option_2d_s
   13742 {
   13743   core_option_Option_45_tags tag;
   13744   Eurydice_arr_bb f0;
   13745 }
   13746 core_option_Option_2d;
   13747 
   13748 /**
   13749 A monomorphic instance of Eurydice.dst_ref_shared
   13750 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8, size_t
   13751 
   13752 */
   13753 typedef struct Eurydice_dst_ref_shared_44_s
   13754 {
   13755   const Eurydice_arr_a3 *ptr;
   13756   size_t meta;
   13757 }
   13758 Eurydice_dst_ref_shared_44;
   13759 
   13760 /**
   13761 A monomorphic instance of Eurydice.arr
   13762 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   13763 with const generics
   13764 - $56size_t
   13765 */
   13766 typedef struct Eurydice_arr_0f_s { Eurydice_arr_a3 data[56U]; } Eurydice_arr_0f;
   13767 
   13768 /**
   13769 A monomorphic instance of Eurydice.array_to_slice_shared
   13770 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13771 with const generics
   13772 - N= 56
   13773 */
   13774 static inline Eurydice_dst_ref_shared_44
   13775 Eurydice_array_to_slice_shared_208(const Eurydice_arr_0f *a)
   13776 {
   13777   Eurydice_dst_ref_shared_44 lit;
   13778   lit.ptr = a->data;
   13779   lit.meta = (size_t)56U;
   13780   return lit;
   13781 }
   13782 
   13783 /**
   13784  Init with zero
   13785 */
   13786 /**
   13787 This function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}
   13788 */
   13789 /**
   13790 A monomorphic instance of libcrux_ml_dsa.types.zero_c5
   13791 with const generics
   13792 - SIZE= 4627
   13793 */
   13794 static inline Eurydice_arr_93 libcrux_ml_dsa_types_zero_c5_f1(void)
   13795 {
   13796   return (KRML_CLITERAL(Eurydice_arr_93){ .data = { 0U } });
   13797 }
   13798 
   13799 /**
   13800 A monomorphic instance of Eurydice.arr
   13801 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   13802 with const generics
   13803 - $8size_t
   13804 */
   13805 typedef struct Eurydice_arr_8f_s { Eurydice_arr_a3 data[8U]; } Eurydice_arr_8f;
   13806 
   13807 /**
   13808  Declassify secret memory.
   13809 
   13810  No-op if `valgrind_ct_test` cfg is not enabled.
   13811 */
   13812 /**
   13813 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   13814 with types Eurydice_arr libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients[[$8size_t]]
   13815 
   13816 */
   13817 static KRML_MUSTINLINE void
   13818 libcrux_secrets_mem_requests_ct_declassify_6a(const Eurydice_arr_8f *val)
   13819 {
   13820 
   13821 }
   13822 
   13823 /**
   13824 A monomorphic instance of Eurydice.arr
   13825 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   13826 with const generics
   13827 - $15size_t
   13828 */
   13829 typedef struct Eurydice_arr_92_s { Eurydice_arr_a3 data[15U]; } Eurydice_arr_92;
   13830 
   13831 /**
   13832 A monomorphic instance of Eurydice.array_to_slice_shared
   13833 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13834 with const generics
   13835 - N= 15
   13836 */
   13837 static inline Eurydice_dst_ref_shared_44
   13838 Eurydice_array_to_slice_shared_207(const Eurydice_arr_92 *a)
   13839 {
   13840   Eurydice_dst_ref_shared_44 lit;
   13841   lit.ptr = a->data;
   13842   lit.meta = (size_t)15U;
   13843   return lit;
   13844 }
   13845 
   13846 /**
   13847 A monomorphic instance of Eurydice.array_to_slice_shared
   13848 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13849 with const generics
   13850 - N= 7
   13851 */
   13852 static inline Eurydice_dst_ref_shared_44
   13853 Eurydice_array_to_slice_shared_206(const Eurydice_arr_bb *a)
   13854 {
   13855   Eurydice_dst_ref_shared_44 lit;
   13856   lit.ptr = a->data;
   13857   lit.meta = (size_t)7U;
   13858   return lit;
   13859 }
   13860 
   13861 /**
   13862 A monomorphic instance of Eurydice.array_to_subslice_shared
   13863 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13864 with const generics
   13865 - N= 15
   13866 */
   13867 static inline Eurydice_dst_ref_shared_44
   13868 Eurydice_array_to_subslice_shared_251(const Eurydice_arr_92 *a, core_ops_range_Range_87 r)
   13869 {
   13870   return
   13871     (
   13872       KRML_CLITERAL(Eurydice_dst_ref_shared_44){ .ptr = a->data + r.start, .meta = r.end - r.start }
   13873     );
   13874 }
   13875 
   13876 /**
   13877 A monomorphic instance of Eurydice.dst_ref_mut
   13878 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8, size_t
   13879 
   13880 */
   13881 typedef struct Eurydice_dst_ref_mut_44_s
   13882 {
   13883   Eurydice_arr_a3 *ptr;
   13884   size_t meta;
   13885 }
   13886 Eurydice_dst_ref_mut_44;
   13887 
   13888 /**
   13889 A monomorphic instance of Eurydice.array_to_slice_mut
   13890 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13891 with const generics
   13892 - N= 7
   13893 */
   13894 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_208(Eurydice_arr_bb *a)
   13895 {
   13896   Eurydice_dst_ref_mut_44 lit;
   13897   lit.ptr = a->data;
   13898   lit.meta = (size_t)7U;
   13899   return lit;
   13900 }
   13901 
   13902 /**
   13903 A monomorphic instance of Eurydice.array_to_slice_mut
   13904 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13905 with const generics
   13906 - N= 56
   13907 */
   13908 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_207(Eurydice_arr_0f *a)
   13909 {
   13910   Eurydice_dst_ref_mut_44 lit;
   13911   lit.ptr = a->data;
   13912   lit.meta = (size_t)56U;
   13913   return lit;
   13914 }
   13915 
   13916 /**
   13917 A monomorphic instance of Eurydice.array_to_slice_mut
   13918 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13919 with const generics
   13920 - N= 15
   13921 */
   13922 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_206(Eurydice_arr_92 *a)
   13923 {
   13924   Eurydice_dst_ref_mut_44 lit;
   13925   lit.ptr = a->data;
   13926   lit.meta = (size_t)15U;
   13927   return lit;
   13928 }
   13929 
   13930 /**
   13931 A monomorphic instance of core.result.Result
   13932 with types libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65Signature, libcrux_ml_dsa_types_SigningError
   13933 
   13934 */
   13935 typedef struct core_result_Result_8c_s
   13936 {
   13937   core_result_Result_57_tags tag;
   13938   union {
   13939     Eurydice_arr_0c case_Ok;
   13940     libcrux_ml_dsa_types_SigningError case_Err;
   13941   }
   13942   val;
   13943 }
   13944 core_result_Result_8c;
   13945 
   13946 /**
   13947 A monomorphic instance of Eurydice.arr
   13948 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   13949 with const generics
   13950 - $5size_t
   13951 */
   13952 typedef struct Eurydice_arr_5d_s { Eurydice_arr_a3 data[5U]; } Eurydice_arr_5d;
   13953 
   13954 /**
   13955 A monomorphic instance of core.option.Option
   13956 with types Eurydice_arr_5d
   13957 
   13958 */
   13959 typedef struct core_option_Option_1e_s
   13960 {
   13961   core_option_Option_45_tags tag;
   13962   Eurydice_arr_5d f0;
   13963 }
   13964 core_option_Option_1e;
   13965 
   13966 /**
   13967 A monomorphic instance of Eurydice.arr
   13968 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   13969 with const generics
   13970 - $30size_t
   13971 */
   13972 typedef struct Eurydice_arr_5a_s { Eurydice_arr_a3 data[30U]; } Eurydice_arr_5a;
   13973 
   13974 /**
   13975 A monomorphic instance of Eurydice.array_to_slice_shared
   13976 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   13977 with const generics
   13978 - N= 30
   13979 */
   13980 static inline Eurydice_dst_ref_shared_44
   13981 Eurydice_array_to_slice_shared_205(const Eurydice_arr_5a *a)
   13982 {
   13983   Eurydice_dst_ref_shared_44 lit;
   13984   lit.ptr = a->data;
   13985   lit.meta = (size_t)30U;
   13986   return lit;
   13987 }
   13988 
   13989 /**
   13990  Init with zero
   13991 */
   13992 /**
   13993 This function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}
   13994 */
   13995 /**
   13996 A monomorphic instance of libcrux_ml_dsa.types.zero_c5
   13997 with const generics
   13998 - SIZE= 3309
   13999 */
   14000 static inline Eurydice_arr_0c libcrux_ml_dsa_types_zero_c5_5c(void)
   14001 {
   14002   return (KRML_CLITERAL(Eurydice_arr_0c){ .data = { 0U } });
   14003 }
   14004 
   14005 /**
   14006 A monomorphic instance of Eurydice.arr
   14007 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   14008 with const generics
   14009 - $6size_t
   14010 */
   14011 typedef struct Eurydice_arr_dc1_s { Eurydice_arr_a3 data[6U]; } Eurydice_arr_dc1;
   14012 
   14013 /**
   14014 A monomorphic instance of Eurydice.array_to_slice_shared
   14015 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14016 with const generics
   14017 - N= 6
   14018 */
   14019 static inline Eurydice_dst_ref_shared_44
   14020 Eurydice_array_to_slice_shared_204(const Eurydice_arr_dc1 *a)
   14021 {
   14022   Eurydice_dst_ref_shared_44 lit;
   14023   lit.ptr = a->data;
   14024   lit.meta = (size_t)6U;
   14025   return lit;
   14026 }
   14027 
   14028 /**
   14029  Declassify secret memory.
   14030 
   14031  No-op if `valgrind_ct_test` cfg is not enabled.
   14032 */
   14033 /**
   14034 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   14035 with types Eurydice_arr libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients[[$6size_t]]
   14036 
   14037 */
   14038 static KRML_MUSTINLINE void
   14039 libcrux_secrets_mem_requests_ct_declassify_b2(const Eurydice_arr_dc1 *val)
   14040 {
   14041 
   14042 }
   14043 
   14044 /**
   14045 A monomorphic instance of Eurydice.array_to_slice_mut
   14046 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14047 with const generics
   14048 - N= 6
   14049 */
   14050 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_205(Eurydice_arr_dc1 *a)
   14051 {
   14052   Eurydice_dst_ref_mut_44 lit;
   14053   lit.ptr = a->data;
   14054   lit.meta = (size_t)6U;
   14055   return lit;
   14056 }
   14057 
   14058 /**
   14059 A monomorphic instance of Eurydice.arr
   14060 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   14061 with const generics
   14062 - $11size_t
   14063 */
   14064 typedef struct Eurydice_arr_47_s { Eurydice_arr_a3 data[11U]; } Eurydice_arr_47;
   14065 
   14066 /**
   14067 A monomorphic instance of Eurydice.array_to_slice_shared
   14068 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14069 with const generics
   14070 - N= 11
   14071 */
   14072 static inline Eurydice_dst_ref_shared_44
   14073 Eurydice_array_to_slice_shared_203(const Eurydice_arr_47 *a)
   14074 {
   14075   Eurydice_dst_ref_shared_44 lit;
   14076   lit.ptr = a->data;
   14077   lit.meta = (size_t)11U;
   14078   return lit;
   14079 }
   14080 
   14081 /**
   14082 A monomorphic instance of Eurydice.array_to_slice_shared
   14083 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14084 with const generics
   14085 - N= 5
   14086 */
   14087 static inline Eurydice_dst_ref_shared_44
   14088 Eurydice_array_to_slice_shared_202(const Eurydice_arr_5d *a)
   14089 {
   14090   Eurydice_dst_ref_shared_44 lit;
   14091   lit.ptr = a->data;
   14092   lit.meta = (size_t)5U;
   14093   return lit;
   14094 }
   14095 
   14096 /**
   14097 A monomorphic instance of Eurydice.array_to_subslice_shared
   14098 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14099 with const generics
   14100 - N= 11
   14101 */
   14102 static inline Eurydice_dst_ref_shared_44
   14103 Eurydice_array_to_subslice_shared_250(const Eurydice_arr_47 *a, core_ops_range_Range_87 r)
   14104 {
   14105   return
   14106     (
   14107       KRML_CLITERAL(Eurydice_dst_ref_shared_44){ .ptr = a->data + r.start, .meta = r.end - r.start }
   14108     );
   14109 }
   14110 
   14111 /**
   14112 A monomorphic instance of Eurydice.array_to_slice_mut
   14113 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14114 with const generics
   14115 - N= 5
   14116 */
   14117 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_204(Eurydice_arr_5d *a)
   14118 {
   14119   Eurydice_dst_ref_mut_44 lit;
   14120   lit.ptr = a->data;
   14121   lit.meta = (size_t)5U;
   14122   return lit;
   14123 }
   14124 
   14125 /**
   14126 A monomorphic instance of Eurydice.array_to_slice_mut
   14127 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14128 with const generics
   14129 - N= 30
   14130 */
   14131 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_203(Eurydice_arr_5a *a)
   14132 {
   14133   Eurydice_dst_ref_mut_44 lit;
   14134   lit.ptr = a->data;
   14135   lit.meta = (size_t)30U;
   14136   return lit;
   14137 }
   14138 
   14139 /**
   14140 A monomorphic instance of Eurydice.array_to_slice_mut
   14141 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14142 with const generics
   14143 - N= 11
   14144 */
   14145 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_202(Eurydice_arr_47 *a)
   14146 {
   14147   Eurydice_dst_ref_mut_44 lit;
   14148   lit.ptr = a->data;
   14149   lit.meta = (size_t)11U;
   14150   return lit;
   14151 }
   14152 
   14153 /**
   14154 This function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}
   14155 */
   14156 /**
   14157 A monomorphic instance of libcrux_ml_dsa.polynomial.zero_ff
   14158 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14159 with const generics
   14160 
   14161 */
   14162 static inline Eurydice_arr_a3 libcrux_ml_dsa_polynomial_zero_ff_37(void)
   14163 {
   14164   Eurydice_arr_a3 lit;
   14165   Eurydice_arr_4d repeat_expression[32U];
   14166   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14167   {
   14168     repeat_expression[i] = libcrux_ml_dsa_simd_portable_zero_65();
   14169   }
   14170   memcpy(lit.data, repeat_expression, (size_t)32U * sizeof (Eurydice_arr_4d));
   14171   return lit;
   14172 }
   14173 
   14174 /**
   14175 This function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}
   14176 */
   14177 /**
   14178 A monomorphic instance of libcrux_ml_dsa.polynomial.from_i32_array_ff
   14179 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14180 with const generics
   14181 
   14182 */
   14183 static inline void
   14184 libcrux_ml_dsa_polynomial_from_i32_array_ff_37(
   14185   Eurydice_dst_ref_shared_83 array,
   14186   Eurydice_arr_a3 *result
   14187 )
   14188 {
   14189   for (size_t i = (size_t)0U; i < LIBCRUX_ML_DSA_SIMD_TRAITS_SIMD_UNITS_IN_RING_ELEMENT; i++)
   14190   {
   14191     size_t i0 = i;
   14192     libcrux_ml_dsa_simd_portable_from_coefficient_array_65(Eurydice_slice_subslice_shared_47(array,
   14193         (
   14194           KRML_CLITERAL(core_ops_range_Range_87){
   14195             .start = i0 * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT,
   14196             .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT
   14197           }
   14198         )),
   14199       &result->data[i0]);
   14200   }
   14201 }
   14202 
   14203 /**
   14204 A monomorphic instance of libcrux_ml_dsa.arithmetic.use_hint
   14205 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14206 with const generics
   14207 
   14208 */
   14209 static KRML_MUSTINLINE void
   14210 libcrux_ml_dsa_arithmetic_use_hint_37(
   14211   int32_t gamma2,
   14212   Eurydice_dst_ref_shared_20 hint,
   14213   Eurydice_dst_ref_mut_44 re_vector
   14214 )
   14215 {
   14216   for (size_t i0 = (size_t)0U; i0 < re_vector.meta; i0++)
   14217   {
   14218     size_t i1 = i0;
   14219     Eurydice_arr_a3 tmp = libcrux_ml_dsa_polynomial_zero_ff_37();
   14220     libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_af(&hint.ptr[i1]),
   14221       &tmp);
   14222     for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14223     {
   14224       size_t j = i;
   14225       libcrux_ml_dsa_simd_portable_use_hint_65(gamma2, &re_vector.ptr[i1].data[j], &tmp.data[j]);
   14226     }
   14227     re_vector.ptr[i1] = tmp;
   14228   }
   14229 }
   14230 
   14231 /**
   14232 A monomorphic instance of libcrux_ml_dsa.ntt.ntt_multiply_montgomery
   14233 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14234 with const generics
   14235 
   14236 */
   14237 static KRML_MUSTINLINE void
   14238 libcrux_ml_dsa_ntt_ntt_multiply_montgomery_37(Eurydice_arr_a3 *lhs, const Eurydice_arr_a3 *rhs)
   14239 {
   14240   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14241   {
   14242     size_t i0 = i;
   14243     libcrux_ml_dsa_simd_portable_montgomery_multiply_65(&lhs->data[i0], &rhs->data[i0]);
   14244   }
   14245 }
   14246 
   14247 /**
   14248 This function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}
   14249 */
   14250 /**
   14251 A monomorphic instance of libcrux_ml_dsa.polynomial.add_ff
   14252 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14253 with const generics
   14254 
   14255 */
   14256 static KRML_MUSTINLINE void
   14257 libcrux_ml_dsa_polynomial_add_ff_37(Eurydice_arr_a3 *self, const Eurydice_arr_a3 *rhs)
   14258 {
   14259   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14260   {
   14261     size_t i0 = i;
   14262     libcrux_ml_dsa_simd_portable_add_65(&self->data[i0], &rhs->data[i0]);
   14263   }
   14264 }
   14265 
   14266 /**
   14267 A monomorphic instance of libcrux_ml_dsa.simd.portable.arithmetic.shift_left_then_reduce
   14268 with const generics
   14269 - SHIFT_BY= 13
   14270 */
   14271 static KRML_MUSTINLINE void
   14272 libcrux_ml_dsa_simd_portable_arithmetic_shift_left_then_reduce_84(Eurydice_arr_4d *simd_unit)
   14273 {
   14274   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   14275   {
   14276     size_t i0 = i;
   14277     simd_unit->data[i0] = (int32_t)((uint32_t)simd_unit->data[i0] << (uint32_t)13);
   14278   }
   14279   libcrux_ml_dsa_simd_portable_arithmetic_barrett_reduce_simd_unit(simd_unit);
   14280 }
   14281 
   14282 /**
   14283 This function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}
   14284 */
   14285 /**
   14286 A monomorphic instance of libcrux_ml_dsa.simd.portable.shift_left_then_reduce_65
   14287 with const generics
   14288 - SHIFT_BY= 13
   14289 */
   14290 static inline void
   14291 libcrux_ml_dsa_simd_portable_shift_left_then_reduce_65_84(Eurydice_arr_4d *simd_unit)
   14292 {
   14293   libcrux_ml_dsa_simd_portable_arithmetic_shift_left_then_reduce_84(simd_unit);
   14294 }
   14295 
   14296 /**
   14297 A monomorphic instance of libcrux_ml_dsa.arithmetic.shift_left_then_reduce
   14298 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14299 with const generics
   14300 - SHIFT_BY= 13
   14301 */
   14302 static KRML_MUSTINLINE void
   14303 libcrux_ml_dsa_arithmetic_shift_left_then_reduce_68(Eurydice_arr_a3 *re)
   14304 {
   14305   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14306   {
   14307     size_t i0 = i;
   14308     libcrux_ml_dsa_simd_portable_shift_left_then_reduce_65_84(&re->data[i0]);
   14309   }
   14310 }
   14311 
   14312 /**
   14313 A monomorphic instance of libcrux_ml_dsa.ntt.ntt
   14314 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14315 with const generics
   14316 
   14317 */
   14318 static KRML_MUSTINLINE void libcrux_ml_dsa_ntt_ntt_37(Eurydice_arr_a3 *re)
   14319 {
   14320   libcrux_ml_dsa_simd_portable_ntt_65(re);
   14321 }
   14322 
   14323 /**
   14324 This function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}
   14325 */
   14326 /**
   14327 A monomorphic instance of libcrux_ml_dsa.polynomial.subtract_ff
   14328 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14329 with const generics
   14330 
   14331 */
   14332 static KRML_MUSTINLINE void
   14333 libcrux_ml_dsa_polynomial_subtract_ff_37(Eurydice_arr_a3 *self, const Eurydice_arr_a3 *rhs)
   14334 {
   14335   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14336   {
   14337     size_t i0 = i;
   14338     libcrux_ml_dsa_simd_portable_subtract_65(&self->data[i0], &rhs->data[i0]);
   14339   }
   14340 }
   14341 
   14342 /**
   14343 This function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}
   14344 */
   14345 /**
   14346 A monomorphic instance of libcrux_ml_dsa.polynomial.barrett_reduce_ff
   14347 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14348 with const generics
   14349 
   14350 */
   14351 static KRML_MUSTINLINE void
   14352 libcrux_ml_dsa_polynomial_barrett_reduce_ff_37(Eurydice_arr_a3 *self)
   14353 {
   14354   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14355   {
   14356     size_t i0 = i;
   14357     libcrux_ml_dsa_simd_portable_barrett_reduce_simd_unit_65(&self->data[i0]);
   14358   }
   14359 }
   14360 
   14361 /**
   14362 A monomorphic instance of libcrux_ml_dsa.ntt.invert_ntt_montgomery
   14363 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14364 with const generics
   14365 
   14366 */
   14367 static KRML_MUSTINLINE void libcrux_ml_dsa_ntt_invert_ntt_montgomery_37(Eurydice_arr_a3 *re)
   14368 {
   14369   libcrux_ml_dsa_simd_portable_invert_ntt_montgomery_65(re);
   14370 }
   14371 
   14372 /**
   14373  Compute InvertNTT(   -   NTT(t2))
   14374 */
   14375 /**
   14376 A monomorphic instance of libcrux_ml_dsa.matrix.compute_w_approx
   14377 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14378 with const generics
   14379 
   14380 */
   14381 static KRML_MUSTINLINE void
   14382 libcrux_ml_dsa_matrix_compute_w_approx_37(
   14383   size_t rows_in_a,
   14384   size_t columns_in_a,
   14385   Eurydice_dst_ref_shared_44 matrix,
   14386   Eurydice_dst_ref_shared_44 signer_response,
   14387   const Eurydice_arr_a3 *verifier_challenge_as_ntt,
   14388   Eurydice_dst_ref_mut_44 t1
   14389 )
   14390 {
   14391   for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)
   14392   {
   14393     size_t i1 = i0;
   14394     Eurydice_arr_a3 inner_result = libcrux_ml_dsa_polynomial_zero_ff_37();
   14395     for (size_t i = (size_t)0U; i < columns_in_a; i++)
   14396     {
   14397       size_t j = i;
   14398       Eurydice_arr_a3 product = matrix.ptr[i1 * columns_in_a + j];
   14399       libcrux_ml_dsa_ntt_ntt_multiply_montgomery_37(&product, &signer_response.ptr[j]);
   14400       libcrux_ml_dsa_polynomial_add_ff_37(&inner_result, &product);
   14401     }
   14402     libcrux_ml_dsa_arithmetic_shift_left_then_reduce_68(&t1.ptr[i1]);
   14403     libcrux_ml_dsa_ntt_ntt_37(&t1.ptr[i1]);
   14404     libcrux_ml_dsa_ntt_ntt_multiply_montgomery_37(&t1.ptr[i1], verifier_challenge_as_ntt);
   14405     libcrux_ml_dsa_polynomial_subtract_ff_37(&inner_result, &t1.ptr[i1]);
   14406     t1.ptr[i1] = inner_result;
   14407     libcrux_ml_dsa_polynomial_barrett_reduce_ff_37(&t1.ptr[i1]);
   14408     libcrux_ml_dsa_ntt_invert_ntt_montgomery_37(&t1.ptr[i1]);
   14409   }
   14410 }
   14411 
   14412 /**
   14413 A monomorphic instance of core.result.Result
   14414 with types (), libcrux_ml_dsa_types_VerificationError
   14415 
   14416 */
   14417 typedef struct core_result_Result_41_s
   14418 {
   14419   core_result_Result_57_tags tag;
   14420   libcrux_ml_dsa_types_VerificationError f0;
   14421 }
   14422 core_result_Result_41;
   14423 
   14424 /**
   14425 A monomorphic instance of libcrux_ml_dsa.encoding.gamma1.deserialize
   14426 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14427 with const generics
   14428 
   14429 */
   14430 static KRML_MUSTINLINE void
   14431 libcrux_ml_dsa_encoding_gamma1_deserialize_37(
   14432   size_t gamma1_exponent,
   14433   Eurydice_borrow_slice_u8 serialized,
   14434   Eurydice_arr_a3 *result
   14435 )
   14436 {
   14437   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14438   {
   14439     size_t i0 = i;
   14440     libcrux_ml_dsa_simd_portable_gamma1_deserialize_65(Eurydice_slice_subslice_shared_c8(serialized,
   14441         (
   14442           KRML_CLITERAL(core_ops_range_Range_87){
   14443             .start = i0 * (gamma1_exponent + (size_t)1U),
   14444             .end = (i0 + (size_t)1U) * (gamma1_exponent + (size_t)1U)
   14445           }
   14446         )),
   14447       &result->data[i0],
   14448       gamma1_exponent);
   14449   }
   14450 }
   14451 
   14452 /**
   14453 A monomorphic instance of libcrux_ml_dsa.encoding.signature.deserialize
   14454 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14455 with const generics
   14456 
   14457 */
   14458 static KRML_MUSTINLINE core_result_Result_41
   14459 libcrux_ml_dsa_encoding_signature_deserialize_37(
   14460   size_t columns_in_a,
   14461   size_t rows_in_a,
   14462   size_t commitment_hash_size,
   14463   size_t gamma1_exponent,
   14464   size_t gamma1_ring_element_size,
   14465   size_t max_ones_in_hint,
   14466   size_t signature_size,
   14467   Eurydice_borrow_slice_u8 serialized,
   14468   Eurydice_mut_borrow_slice_u8 out_commitment_hash,
   14469   Eurydice_dst_ref_mut_44 out_signer_response,
   14470   Eurydice_dst_ref_mut_20 out_hint
   14471 )
   14472 {
   14473   Eurydice_borrow_slice_u8_x2
   14474   uu____0 =
   14475     Eurydice_slice_split_at(serialized,
   14476       commitment_hash_size,
   14477       uint8_t,
   14478       Eurydice_borrow_slice_u8_x2);
   14479   Eurydice_borrow_slice_u8 commitment_hash = uu____0.fst;
   14480   Eurydice_borrow_slice_u8 rest_of_serialized = uu____0.snd;
   14481   Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out_commitment_hash,
   14482       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = commitment_hash_size })),
   14483     commitment_hash,
   14484     uint8_t);
   14485   Eurydice_borrow_slice_u8_x2
   14486   uu____1 =
   14487     Eurydice_slice_split_at(rest_of_serialized,
   14488       gamma1_ring_element_size * columns_in_a,
   14489       uint8_t,
   14490       Eurydice_borrow_slice_u8_x2);
   14491   Eurydice_borrow_slice_u8 signer_response_serialized = uu____1.fst;
   14492   Eurydice_borrow_slice_u8 hint_serialized = uu____1.snd;
   14493   for (size_t i = (size_t)0U; i < columns_in_a; i++)
   14494   {
   14495     size_t i0 = i;
   14496     libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   14497       Eurydice_slice_subslice_shared_c8(signer_response_serialized,
   14498         (
   14499           KRML_CLITERAL(core_ops_range_Range_87){
   14500             .start = i0 * gamma1_ring_element_size,
   14501             .end = (i0 + (size_t)1U) * gamma1_ring_element_size
   14502           }
   14503         )),
   14504       &out_signer_response.ptr[i0]);
   14505   }
   14506   size_t previous_true_hints_seen = (size_t)0U;
   14507   bool malformed_hint = false;
   14508   for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)
   14509   {
   14510     size_t i1 = i0;
   14511     size_t current_true_hints_seen = (size_t)(uint32_t)hint_serialized.ptr[max_ones_in_hint + i1];
   14512     if (current_true_hints_seen < previous_true_hints_seen)
   14513     {
   14514       malformed_hint = true;
   14515       break;
   14516     }
   14517     if (current_true_hints_seen > max_ones_in_hint)
   14518     {
   14519       malformed_hint = true;
   14520       break;
   14521     }
   14522     for (size_t i = previous_true_hints_seen; i < current_true_hints_seen; i++)
   14523     {
   14524       size_t j = i;
   14525       if (j > previous_true_hints_seen)
   14526       {
   14527         if (hint_serialized.ptr[j] <= hint_serialized.ptr[j - (size_t)1U])
   14528         {
   14529           malformed_hint = true;
   14530           break;
   14531         }
   14532       }
   14533       libcrux_ml_dsa_encoding_signature_set_hint(out_hint,
   14534         i1,
   14535         (size_t)(uint32_t)hint_serialized.ptr[j]);
   14536     }
   14537     if (malformed_hint)
   14538     {
   14539       break;
   14540     }
   14541     previous_true_hints_seen = current_true_hints_seen;
   14542   }
   14543   for (size_t i = previous_true_hints_seen; i < max_ones_in_hint; i++)
   14544   {
   14545     size_t j = i;
   14546     if (hint_serialized.ptr[j] != 0U)
   14547     {
   14548       malformed_hint = true;
   14549       break;
   14550     }
   14551   }
   14552   core_result_Result_41 uu____2;
   14553   if (malformed_hint)
   14554   {
   14555     uu____2 =
   14556       (
   14557         KRML_CLITERAL(core_result_Result_41){
   14558           .tag = core_result_Err,
   14559           .f0 = libcrux_ml_dsa_types_VerificationError_MalformedHintError
   14560         }
   14561       );
   14562   }
   14563   else
   14564   {
   14565     uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });
   14566   }
   14567   return uu____2;
   14568 }
   14569 
   14570 /**
   14571 A monomorphic instance of libcrux_ml_dsa.encoding.t1.deserialize
   14572 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14573 with const generics
   14574 
   14575 */
   14576 static inline void
   14577 libcrux_ml_dsa_encoding_t1_deserialize_37(
   14578   Eurydice_borrow_slice_u8 serialized,
   14579   Eurydice_arr_a3 *result
   14580 )
   14581 {
   14582   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14583   {
   14584     size_t i0 = i;
   14585     libcrux_ml_dsa_simd_portable_t1_deserialize_65(Eurydice_slice_subslice_shared_c8(serialized,
   14586         (
   14587           KRML_CLITERAL(core_ops_range_Range_87){
   14588             .start = i0 * LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW,
   14589             .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW
   14590           }
   14591         )),
   14592       &result->data[i0]);
   14593   }
   14594 }
   14595 
   14596 /**
   14597 A monomorphic instance of libcrux_ml_dsa.encoding.verification_key.deserialize
   14598 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14599 with const generics
   14600 
   14601 */
   14602 static KRML_MUSTINLINE void
   14603 libcrux_ml_dsa_encoding_verification_key_deserialize_37(
   14604   size_t rows_in_a,
   14605   size_t verification_key_size,
   14606   Eurydice_borrow_slice_u8 serialized,
   14607   Eurydice_dst_ref_mut_44 t1
   14608 )
   14609 {
   14610   for (size_t i = (size_t)0U; i < rows_in_a; i++)
   14611   {
   14612     size_t i0 = i;
   14613     libcrux_ml_dsa_encoding_t1_deserialize_37(Eurydice_slice_subslice_shared_c8(serialized,
   14614         (
   14615           KRML_CLITERAL(core_ops_range_Range_87){
   14616             .start = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE,
   14617             .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE
   14618           }
   14619         )),
   14620       &t1.ptr[i0]);
   14621   }
   14622 }
   14623 
   14624 /**
   14625 A monomorphic instance of core.result.Result
   14626 with types libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44Signature, libcrux_ml_dsa_types_SigningError
   14627 
   14628 */
   14629 typedef struct core_result_Result_48_s
   14630 {
   14631   core_result_Result_57_tags tag;
   14632   union {
   14633     Eurydice_arr_85 case_Ok;
   14634     libcrux_ml_dsa_types_SigningError case_Err;
   14635   }
   14636   val;
   14637 }
   14638 core_result_Result_48;
   14639 
   14640 /**
   14641 A monomorphic instance of Eurydice.arr
   14642 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   14643 with const generics
   14644 - $4size_t
   14645 */
   14646 typedef struct Eurydice_arr_9d_s { Eurydice_arr_a3 data[4U]; } Eurydice_arr_9d;
   14647 
   14648 /**
   14649 A monomorphic instance of core.option.Option
   14650 with types Eurydice_arr_9d
   14651 
   14652 */
   14653 typedef struct core_option_Option_d9_s
   14654 {
   14655   core_option_Option_45_tags tag;
   14656   Eurydice_arr_9d f0;
   14657 }
   14658 core_option_Option_d9;
   14659 
   14660 /**
   14661 A monomorphic instance of core.result.Result
   14662 with types (), libcrux_ml_dsa_types_SigningError
   14663 
   14664 */
   14665 typedef struct core_result_Result_53_s
   14666 {
   14667   core_result_Result_57_tags tag;
   14668   libcrux_ml_dsa_types_SigningError f0;
   14669 }
   14670 core_result_Result_53;
   14671 
   14672 /**
   14673 A monomorphic instance of libcrux_ml_dsa.encoding.gamma1.serialize
   14674 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14675 with const generics
   14676 
   14677 */
   14678 static KRML_MUSTINLINE void
   14679 libcrux_ml_dsa_encoding_gamma1_serialize_37(
   14680   const Eurydice_arr_a3 *re,
   14681   Eurydice_mut_borrow_slice_u8 serialized,
   14682   size_t gamma1_exponent
   14683 )
   14684 {
   14685   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14686   {
   14687     size_t i0 = i;
   14688     const Eurydice_arr_4d *simd_unit = &re->data[i0];
   14689     libcrux_ml_dsa_simd_portable_gamma1_serialize_65(simd_unit,
   14690       Eurydice_slice_subslice_mut_c8(serialized,
   14691         (
   14692           KRML_CLITERAL(core_ops_range_Range_87){
   14693             .start = i0 * (gamma1_exponent + (size_t)1U),
   14694             .end = (i0 + (size_t)1U) * (gamma1_exponent + (size_t)1U)
   14695           }
   14696         )),
   14697       gamma1_exponent);
   14698   }
   14699 }
   14700 
   14701 /**
   14702 A monomorphic instance of libcrux_ml_dsa.encoding.signature.serialize
   14703 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14704 with const generics
   14705 
   14706 */
   14707 static KRML_MUSTINLINE void
   14708 libcrux_ml_dsa_encoding_signature_serialize_37(
   14709   Eurydice_borrow_slice_u8 commitment_hash,
   14710   Eurydice_dst_ref_shared_44 signer_response,
   14711   Eurydice_dst_ref_shared_20 hint,
   14712   size_t commitment_hash_size,
   14713   size_t columns_in_a,
   14714   size_t rows_in_a,
   14715   size_t gamma1_exponent,
   14716   size_t gamma1_ring_element_size,
   14717   size_t max_ones_in_hint,
   14718   Eurydice_mut_borrow_slice_u8 signature
   14719 )
   14720 {
   14721   size_t offset = (size_t)0U;
   14722   Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(signature,
   14723       (
   14724         KRML_CLITERAL(core_ops_range_Range_87){
   14725           .start = offset,
   14726           .end = offset + commitment_hash_size
   14727         }
   14728       )),
   14729     commitment_hash,
   14730     uint8_t);
   14731   offset += commitment_hash_size;
   14732   for (size_t i = (size_t)0U; i < columns_in_a; i++)
   14733   {
   14734     size_t i0 = i;
   14735     libcrux_ml_dsa_encoding_gamma1_serialize_37(&signer_response.ptr[i0],
   14736       Eurydice_slice_subslice_mut_c8(signature,
   14737         (
   14738           KRML_CLITERAL(core_ops_range_Range_87){
   14739             .start = offset,
   14740             .end = offset + gamma1_ring_element_size
   14741           }
   14742         )),
   14743       gamma1_exponent);
   14744     offset += gamma1_ring_element_size;
   14745   }
   14746   size_t true_hints_seen = (size_t)0U;
   14747   for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)
   14748   {
   14749     size_t i1 = i0;
   14750     for (size_t i = (size_t)0U; i < (size_t)256U; i++)
   14751     {
   14752       size_t j = i;
   14753       if (hint.ptr[i1].data[j] == 1)
   14754       {
   14755         signature.ptr[offset + true_hints_seen] = (uint8_t)j;
   14756         true_hints_seen++;
   14757       }
   14758     }
   14759     signature.ptr[offset + max_ones_in_hint + i1] = (uint8_t)true_hints_seen;
   14760   }
   14761 }
   14762 
   14763 /**
   14764 This function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}
   14765 */
   14766 /**
   14767 A monomorphic instance of libcrux_ml_dsa.polynomial.to_i32_array_ff
   14768 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14769 with const generics
   14770 
   14771 */
   14772 static inline Eurydice_arr_6c
   14773 libcrux_ml_dsa_polynomial_to_i32_array_ff_37(const Eurydice_arr_a3 *self)
   14774 {
   14775   Eurydice_arr_6c result = { .data = { 0U } };
   14776   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14777   {
   14778     size_t i0 = i;
   14779     libcrux_ml_dsa_simd_portable_to_coefficient_array_65(&self->data[i0],
   14780       Eurydice_array_to_subslice_mut_44(&result,
   14781         (
   14782           KRML_CLITERAL(core_ops_range_Range_87){
   14783             .start = i0 * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT,
   14784             .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT
   14785           }
   14786         )));
   14787   }
   14788   return result;
   14789 }
   14790 
   14791 /**
   14792 A monomorphic instance of libcrux_ml_dsa.arithmetic.make_hint
   14793 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14794 with const generics
   14795 
   14796 */
   14797 static KRML_MUSTINLINE size_t
   14798 libcrux_ml_dsa_arithmetic_make_hint_37(
   14799   Eurydice_dst_ref_shared_44 low,
   14800   Eurydice_dst_ref_shared_44 high,
   14801   int32_t gamma2,
   14802   Eurydice_dst_ref_mut_20 hint
   14803 )
   14804 {
   14805   size_t true_hints = (size_t)0U;
   14806   Eurydice_arr_a3 hint_simd = libcrux_ml_dsa_polynomial_zero_ff_37();
   14807   for (size_t i0 = (size_t)0U; i0 < low.meta; i0++)
   14808   {
   14809     size_t i1 = i0;
   14810     for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14811     {
   14812       size_t j = i;
   14813       size_t
   14814       one_hints_count =
   14815         libcrux_ml_dsa_simd_portable_compute_hint_65(&low.ptr[i1].data[j],
   14816           &high.ptr[i1].data[j],
   14817           gamma2,
   14818           &hint_simd.data[j]);
   14819       true_hints += one_hints_count;
   14820     }
   14821     Eurydice_arr_6c uu____0 = libcrux_ml_dsa_polynomial_to_i32_array_ff_37(&hint_simd);
   14822     hint.ptr[i1] = uu____0;
   14823   }
   14824   return true_hints;
   14825 }
   14826 
   14827 /**
   14828  CAUTION: This function must only be called with inputs for
   14829  which it is safe to leak the index of a violating coefficient.
   14830 
   14831  For all norm checks during ML-DSA signature generation it is
   14832  safe to leak the index of a violating coefficient.
   14833 */
   14834 /**
   14835 This function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}
   14836 */
   14837 /**
   14838 A monomorphic instance of libcrux_ml_dsa.polynomial.infinity_norm_exceeds_ff
   14839 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14840 with const generics
   14841 
   14842 */
   14843 static KRML_MUSTINLINE bool
   14844 libcrux_ml_dsa_polynomial_infinity_norm_exceeds_ff_37(
   14845   const Eurydice_arr_a3 *self,
   14846   int32_t bound
   14847 )
   14848 {
   14849   bool result = false;
   14850   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14851   {
   14852     size_t i0 = i;
   14853     bool
   14854     coeff_exceeds = libcrux_ml_dsa_simd_portable_infinity_norm_exceeds_65(&self->data[i0], bound);
   14855     bool uu____0;
   14856     if (result)
   14857     {
   14858       uu____0 = true;
   14859     }
   14860     else
   14861     {
   14862       uu____0 = coeff_exceeds;
   14863     }
   14864     result = uu____0;
   14865   }
   14866   return result;
   14867 }
   14868 
   14869 /**
   14870  CAUTION: This function must only be called with inputs for
   14871  which it is safe to leak the index of a violating coefficient.
   14872 
   14873  For all norm checks during ML-DSA signature generation it is
   14874  safe to leak the index of a violating coefficient.
   14875 */
   14876 /**
   14877 A monomorphic instance of libcrux_ml_dsa.arithmetic.vector_infinity_norm_exceeds
   14878 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14879 with const generics
   14880 
   14881 */
   14882 static KRML_MUSTINLINE bool
   14883 libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(
   14884   Eurydice_dst_ref_shared_44 vector,
   14885   int32_t bound
   14886 )
   14887 {
   14888   bool result = false;
   14889   for (size_t i = (size_t)0U; i < vector.meta; i++)
   14890   {
   14891     size_t i0 = i;
   14892     bool uu____0;
   14893     if (result)
   14894     {
   14895       uu____0 = true;
   14896     }
   14897     else
   14898     {
   14899       uu____0 = libcrux_ml_dsa_polynomial_infinity_norm_exceeds_ff_37(&vector.ptr[i0], bound);
   14900     }
   14901     result = uu____0;
   14902   }
   14903   return result;
   14904 }
   14905 
   14906 /**
   14907 A monomorphic instance of libcrux_ml_dsa.matrix.subtract_vectors
   14908 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14909 with const generics
   14910 
   14911 */
   14912 static KRML_MUSTINLINE void
   14913 libcrux_ml_dsa_matrix_subtract_vectors_37(
   14914   size_t dimension,
   14915   Eurydice_dst_ref_mut_44 lhs,
   14916   Eurydice_dst_ref_shared_44 rhs
   14917 )
   14918 {
   14919   for (size_t i = (size_t)0U; i < dimension; i++)
   14920   {
   14921     size_t i0 = i;
   14922     libcrux_ml_dsa_polynomial_subtract_ff_37(&lhs.ptr[i0], &rhs.ptr[i0]);
   14923   }
   14924 }
   14925 
   14926 /**
   14927 A monomorphic instance of libcrux_ml_dsa.matrix.add_vectors
   14928 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14929 with const generics
   14930 
   14931 */
   14932 static KRML_MUSTINLINE void
   14933 libcrux_ml_dsa_matrix_add_vectors_37(
   14934   size_t dimension,
   14935   Eurydice_dst_ref_mut_44 lhs,
   14936   Eurydice_dst_ref_shared_44 rhs
   14937 )
   14938 {
   14939   for (size_t i = (size_t)0U; i < dimension; i++)
   14940   {
   14941     size_t i0 = i;
   14942     libcrux_ml_dsa_polynomial_add_ff_37(&lhs.ptr[i0], &rhs.ptr[i0]);
   14943   }
   14944 }
   14945 
   14946 /**
   14947 A monomorphic instance of libcrux_ml_dsa.matrix.vector_times_ring_element
   14948 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14949 with const generics
   14950 
   14951 */
   14952 static KRML_MUSTINLINE void
   14953 libcrux_ml_dsa_matrix_vector_times_ring_element_37(
   14954   Eurydice_dst_ref_mut_44 vector,
   14955   const Eurydice_arr_a3 *ring_element
   14956 )
   14957 {
   14958   for (size_t i = (size_t)0U; i < vector.meta; i++)
   14959   {
   14960     size_t i0 = i;
   14961     libcrux_ml_dsa_ntt_ntt_multiply_montgomery_37(&vector.ptr[i0], ring_element);
   14962     libcrux_ml_dsa_ntt_invert_ntt_montgomery_37(&vector.ptr[i0]);
   14963   }
   14964 }
   14965 
   14966 /**
   14967 A monomorphic instance of libcrux_ml_dsa.encoding.commitment.serialize
   14968 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14969 with const generics
   14970 
   14971 */
   14972 static KRML_MUSTINLINE void
   14973 libcrux_ml_dsa_encoding_commitment_serialize_37(
   14974   const Eurydice_arr_a3 *re,
   14975   Eurydice_mut_borrow_slice_u8 serialized
   14976 )
   14977 {
   14978   size_t output_bytes_per_simd_unit = serialized.meta / ((size_t)8U * (size_t)4U);
   14979   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   14980   {
   14981     size_t i0 = i;
   14982     const Eurydice_arr_4d *simd_unit = &re->data[i0];
   14983     libcrux_ml_dsa_simd_portable_commitment_serialize_65(simd_unit,
   14984       Eurydice_slice_subslice_mut_c8(serialized,
   14985         (
   14986           KRML_CLITERAL(core_ops_range_Range_87){
   14987             .start = i0 * output_bytes_per_simd_unit,
   14988             .end = (i0 + (size_t)1U) * output_bytes_per_simd_unit
   14989           }
   14990         )));
   14991   }
   14992 }
   14993 
   14994 /**
   14995 A monomorphic instance of libcrux_ml_dsa.encoding.commitment.serialize_vector
   14996 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   14997 with const generics
   14998 
   14999 */
   15000 static KRML_MUSTINLINE void
   15001 libcrux_ml_dsa_encoding_commitment_serialize_vector_37(
   15002   size_t ring_element_size,
   15003   Eurydice_dst_ref_shared_44 vector,
   15004   Eurydice_mut_borrow_slice_u8 serialized
   15005 )
   15006 {
   15007   size_t offset = (size_t)0U;
   15008   for (size_t i = (size_t)0U; i < vector.meta; i++)
   15009   {
   15010     size_t _cloop_j = i;
   15011     const Eurydice_arr_a3 *ring_element = &vector.ptr[_cloop_j];
   15012     libcrux_ml_dsa_encoding_commitment_serialize_37(ring_element,
   15013       Eurydice_slice_subslice_mut_c8(serialized,
   15014         (
   15015           KRML_CLITERAL(core_ops_range_Range_87){
   15016             .start = offset,
   15017             .end = offset + ring_element_size
   15018           }
   15019         )));
   15020     offset += ring_element_size;
   15021   }
   15022 }
   15023 
   15024 /**
   15025 A monomorphic instance of libcrux_ml_dsa.arithmetic.decompose_vector
   15026 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15027 with const generics
   15028 
   15029 */
   15030 static KRML_MUSTINLINE void
   15031 libcrux_ml_dsa_arithmetic_decompose_vector_37(
   15032   size_t dimension,
   15033   int32_t gamma2,
   15034   Eurydice_dst_ref_shared_44 t,
   15035   Eurydice_dst_ref_mut_44 low,
   15036   Eurydice_dst_ref_mut_44 high
   15037 )
   15038 {
   15039   for (size_t i0 = (size_t)0U; i0 < dimension; i0++)
   15040   {
   15041     size_t i1 = i0;
   15042     for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   15043     {
   15044       size_t j = i;
   15045       libcrux_ml_dsa_simd_portable_decompose_65(gamma2,
   15046         &t.ptr[i1].data[j],
   15047         &low.ptr[i1].data[j],
   15048         &high.ptr[i1].data[j]);
   15049     }
   15050   }
   15051 }
   15052 
   15053 /**
   15054 A monomorphic instance of Eurydice.arr
   15055 with types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8
   15056 with const generics
   15057 - $16size_t
   15058 */
   15059 typedef struct Eurydice_arr_2f_s { Eurydice_arr_a3 data[16U]; } Eurydice_arr_2f;
   15060 
   15061 /**
   15062 A monomorphic instance of Eurydice.array_to_slice_shared
   15063 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15064 with const generics
   15065 - N= 16
   15066 */
   15067 static inline Eurydice_dst_ref_shared_44
   15068 Eurydice_array_to_slice_shared_201(const Eurydice_arr_2f *a)
   15069 {
   15070   Eurydice_dst_ref_shared_44 lit;
   15071   lit.ptr = a->data;
   15072   lit.meta = (size_t)16U;
   15073   return lit;
   15074 }
   15075 
   15076 /**
   15077  Compute InvertNTT(  )
   15078 */
   15079 /**
   15080 A monomorphic instance of libcrux_ml_dsa.matrix.compute_matrix_x_mask
   15081 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15082 with const generics
   15083 
   15084 */
   15085 static KRML_MUSTINLINE void
   15086 libcrux_ml_dsa_matrix_compute_matrix_x_mask_37(
   15087   size_t rows_in_a,
   15088   size_t columns_in_a,
   15089   Eurydice_dst_ref_shared_44 matrix,
   15090   Eurydice_dst_ref_shared_44 mask,
   15091   Eurydice_dst_ref_mut_44 result
   15092 )
   15093 {
   15094   for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)
   15095   {
   15096     size_t i1 = i0;
   15097     for (size_t i = (size_t)0U; i < columns_in_a; i++)
   15098     {
   15099       size_t j = i;
   15100       Eurydice_arr_a3 product = mask.ptr[j];
   15101       libcrux_ml_dsa_ntt_ntt_multiply_montgomery_37(&product, &matrix.ptr[i1 * columns_in_a + j]);
   15102       libcrux_ml_dsa_polynomial_add_ff_37(&result.ptr[i1], &product);
   15103     }
   15104     libcrux_ml_dsa_polynomial_barrett_reduce_ff_37(&result.ptr[i1]);
   15105     libcrux_ml_dsa_ntt_invert_ntt_montgomery_37(&result.ptr[i1]);
   15106   }
   15107 }
   15108 
   15109 /**
   15110 A monomorphic instance of core.option.Option
   15111 with types libcrux_ml_dsa_pre_hash_DomainSeparationContext
   15112 
   15113 */
   15114 typedef struct core_option_Option_84_s
   15115 {
   15116   core_option_Option_45_tags tag;
   15117   libcrux_ml_dsa_pre_hash_DomainSeparationContext f0;
   15118 }
   15119 core_option_Option_84;
   15120 
   15121 /**
   15122 A monomorphic instance of libcrux_ml_dsa.encoding.t0.deserialize
   15123 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15124 with const generics
   15125 
   15126 */
   15127 static KRML_MUSTINLINE void
   15128 libcrux_ml_dsa_encoding_t0_deserialize_37(
   15129   Eurydice_borrow_slice_u8 serialized,
   15130   Eurydice_arr_a3 *result
   15131 )
   15132 {
   15133   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   15134   {
   15135     size_t i0 = i;
   15136     libcrux_ml_dsa_simd_portable_t0_deserialize_65(Eurydice_slice_subslice_shared_c8(serialized,
   15137         (
   15138           KRML_CLITERAL(core_ops_range_Range_87){
   15139             .start = i0 * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT,
   15140             .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT
   15141           }
   15142         )),
   15143       &result->data[i0]);
   15144   }
   15145 }
   15146 
   15147 /**
   15148 A monomorphic instance of libcrux_ml_dsa.encoding.t0.deserialize_to_vector_then_ntt
   15149 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15150 with const generics
   15151 
   15152 */
   15153 static KRML_MUSTINLINE void
   15154 libcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(
   15155   Eurydice_borrow_slice_u8 serialized,
   15156   Eurydice_dst_ref_mut_44 ring_elements
   15157 )
   15158 {
   15159   for
   15160   (size_t
   15161     i = (size_t)0U;
   15162     i < serialized.meta / LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE;
   15163     i++)
   15164   {
   15165     size_t i0 = i;
   15166     Eurydice_borrow_slice_u8
   15167     bytes =
   15168       Eurydice_slice_subslice_shared_c8(serialized,
   15169         (
   15170           KRML_CLITERAL(core_ops_range_Range_87){
   15171             .start = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE,
   15172             .end = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE +
   15173               LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE
   15174           }
   15175         ));
   15176     libcrux_ml_dsa_encoding_t0_deserialize_37(bytes, &ring_elements.ptr[i0]);
   15177     libcrux_ml_dsa_ntt_ntt_37(&ring_elements.ptr[i0]);
   15178   }
   15179 }
   15180 
   15181 /**
   15182 A monomorphic instance of libcrux_ml_dsa.encoding.error.deserialize
   15183 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15184 with const generics
   15185 
   15186 */
   15187 static KRML_MUSTINLINE void
   15188 libcrux_ml_dsa_encoding_error_deserialize_37(
   15189   libcrux_ml_dsa_constants_Eta eta,
   15190   Eurydice_borrow_slice_u8 serialized,
   15191   Eurydice_arr_a3 *result
   15192 )
   15193 {
   15194   size_t chunk_size = libcrux_ml_dsa_encoding_error_chunk_size(eta);
   15195   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   15196   {
   15197     size_t i0 = i;
   15198     libcrux_ml_dsa_simd_portable_error_deserialize_65(eta,
   15199       Eurydice_slice_subslice_shared_c8(serialized,
   15200         (
   15201           KRML_CLITERAL(core_ops_range_Range_87){
   15202             .start = i0 * chunk_size,
   15203             .end = (i0 + (size_t)1U) * chunk_size
   15204           }
   15205         )),
   15206       &result->data[i0]);
   15207   }
   15208 }
   15209 
   15210 /**
   15211 A monomorphic instance of libcrux_ml_dsa.encoding.error.deserialize_to_vector_then_ntt
   15212 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15213 with const generics
   15214 
   15215 */
   15216 static KRML_MUSTINLINE void
   15217 libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(
   15218   libcrux_ml_dsa_constants_Eta eta,
   15219   size_t ring_element_size,
   15220   Eurydice_borrow_slice_u8 serialized,
   15221   Eurydice_dst_ref_mut_44 ring_elements
   15222 )
   15223 {
   15224   for (size_t i = (size_t)0U; i < serialized.meta / ring_element_size; i++)
   15225   {
   15226     size_t i0 = i;
   15227     Eurydice_borrow_slice_u8
   15228     bytes =
   15229       Eurydice_slice_subslice_shared_c8(serialized,
   15230         (
   15231           KRML_CLITERAL(core_ops_range_Range_87){
   15232             .start = i0 * ring_element_size,
   15233             .end = i0 * ring_element_size + ring_element_size
   15234           }
   15235         ));
   15236     libcrux_ml_dsa_encoding_error_deserialize_37(eta, bytes, &ring_elements.ptr[i0]);
   15237     libcrux_ml_dsa_ntt_ntt_37(&ring_elements.ptr[i0]);
   15238   }
   15239 }
   15240 
   15241 /**
   15242  Init with zero
   15243 */
   15244 /**
   15245 This function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}
   15246 */
   15247 /**
   15248 A monomorphic instance of libcrux_ml_dsa.types.zero_c5
   15249 with const generics
   15250 - SIZE= 2420
   15251 */
   15252 static inline Eurydice_arr_85 libcrux_ml_dsa_types_zero_c5_37(void)
   15253 {
   15254   return (KRML_CLITERAL(Eurydice_arr_85){ .data = { 0U } });
   15255 }
   15256 
   15257 /**
   15258 A monomorphic instance of libcrux_ml_dsa.encoding.t0.serialize
   15259 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15260 with const generics
   15261 
   15262 */
   15263 static KRML_MUSTINLINE void
   15264 libcrux_ml_dsa_encoding_t0_serialize_37(
   15265   const Eurydice_arr_a3 *re,
   15266   Eurydice_mut_borrow_slice_u8 serialized
   15267 )
   15268 {
   15269   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   15270   {
   15271     size_t i0 = i;
   15272     const Eurydice_arr_4d *simd_unit = &re->data[i0];
   15273     libcrux_ml_dsa_simd_portable_t0_serialize_65(simd_unit,
   15274       Eurydice_slice_subslice_mut_c8(serialized,
   15275         (
   15276           KRML_CLITERAL(core_ops_range_Range_87){
   15277             .start = i0 * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT,
   15278             .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT
   15279           }
   15280         )));
   15281   }
   15282 }
   15283 
   15284 /**
   15285 A monomorphic instance of libcrux_ml_dsa.encoding.error.serialize
   15286 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15287 with const generics
   15288 
   15289 */
   15290 static KRML_MUSTINLINE void
   15291 libcrux_ml_dsa_encoding_error_serialize_37(
   15292   libcrux_ml_dsa_constants_Eta eta,
   15293   const Eurydice_arr_a3 *re,
   15294   Eurydice_mut_borrow_slice_u8 serialized
   15295 )
   15296 {
   15297   size_t output_bytes_per_simd_unit = libcrux_ml_dsa_encoding_error_chunk_size(eta);
   15298   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   15299   {
   15300     size_t i0 = i;
   15301     const Eurydice_arr_4d *simd_unit = &re->data[i0];
   15302     libcrux_ml_dsa_simd_portable_error_serialize_65(eta,
   15303       simd_unit,
   15304       Eurydice_slice_subslice_mut_c8(serialized,
   15305         (
   15306           KRML_CLITERAL(core_ops_range_Range_87){
   15307             .start = i0 * output_bytes_per_simd_unit,
   15308             .end = (i0 + (size_t)1U) * output_bytes_per_simd_unit
   15309           }
   15310         )));
   15311   }
   15312 }
   15313 
   15314 /**
   15315 A monomorphic instance of libcrux_ml_dsa.encoding.t1.serialize
   15316 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15317 with const generics
   15318 
   15319 */
   15320 static KRML_MUSTINLINE void
   15321 libcrux_ml_dsa_encoding_t1_serialize_37(
   15322   const Eurydice_arr_a3 *re,
   15323   Eurydice_mut_borrow_slice_u8 serialized
   15324 )
   15325 {
   15326   for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   15327   {
   15328     size_t i0 = i;
   15329     const Eurydice_arr_4d *simd_unit = &re->data[i0];
   15330     libcrux_ml_dsa_simd_portable_t1_serialize_65(simd_unit,
   15331       Eurydice_slice_subslice_mut_c8(serialized,
   15332         (
   15333           KRML_CLITERAL(core_ops_range_Range_87){
   15334             .start = i0 * LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT,
   15335             .end = (i0 + (size_t)1U) *
   15336               LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT
   15337           }
   15338         )));
   15339   }
   15340 }
   15341 
   15342 /**
   15343 A monomorphic instance of libcrux_ml_dsa.encoding.verification_key.generate_serialized
   15344 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15345 with const generics
   15346 
   15347 */
   15348 static KRML_MUSTINLINE void
   15349 libcrux_ml_dsa_encoding_verification_key_generate_serialized_37(
   15350   Eurydice_borrow_slice_u8 seed,
   15351   Eurydice_dst_ref_shared_44 t1,
   15352   Eurydice_mut_borrow_slice_u8 verification_key_serialized
   15353 )
   15354 {
   15355   Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(verification_key_serialized,
   15356       (
   15357         KRML_CLITERAL(core_ops_range_Range_87){
   15358           .start = (size_t)0U,
   15359           .end = LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE
   15360         }
   15361       )),
   15362     seed,
   15363     uint8_t);
   15364   for (size_t i = (size_t)0U; i < t1.meta; i++)
   15365   {
   15366     size_t i0 = i;
   15367     const Eurydice_arr_a3 *ring_element = &t1.ptr[i0];
   15368     size_t
   15369     offset =
   15370       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE +
   15371         i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE;
   15372     libcrux_ml_dsa_encoding_t1_serialize_37(ring_element,
   15373       Eurydice_slice_subslice_mut_c8(verification_key_serialized,
   15374         (
   15375           KRML_CLITERAL(core_ops_range_Range_87){
   15376             .start = offset,
   15377             .end = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE
   15378           }
   15379         )));
   15380   }
   15381 }
   15382 
   15383 /**
   15384 A monomorphic instance of libcrux_ml_dsa.arithmetic.power2round_vector
   15385 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15386 with const generics
   15387 
   15388 */
   15389 static KRML_MUSTINLINE void
   15390 libcrux_ml_dsa_arithmetic_power2round_vector_37(
   15391   Eurydice_dst_ref_mut_44 t,
   15392   Eurydice_dst_ref_mut_44 t1
   15393 )
   15394 {
   15395   for (size_t i0 = (size_t)0U; i0 < t.meta; i0++)
   15396   {
   15397     size_t i1 = i0;
   15398     for (size_t i = (size_t)0U; i < (size_t)32U; i++)
   15399     {
   15400       size_t j = i;
   15401       libcrux_ml_dsa_simd_portable_power2round_65(&t.ptr[i1].data[j], &t1.ptr[i1].data[j]);
   15402     }
   15403   }
   15404 }
   15405 
   15406 /**
   15407  Declassify secret memory.
   15408 
   15409  No-op if `valgrind_ct_test` cfg is not enabled.
   15410 */
   15411 /**
   15412 A monomorphic instance of libcrux_secrets.mem_requests.ct_declassify
   15413 with types Eurydice_arr libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients[[$4size_t]]
   15414 
   15415 */
   15416 static KRML_MUSTINLINE void
   15417 libcrux_secrets_mem_requests_ct_declassify_f5(const Eurydice_arr_9d *val)
   15418 {
   15419 
   15420 }
   15421 
   15422 /**
   15423 A monomorphic instance of Eurydice.array_to_slice_shared
   15424 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15425 with const generics
   15426 - N= 8
   15427 */
   15428 static inline Eurydice_dst_ref_shared_44
   15429 Eurydice_array_to_slice_shared_200(const Eurydice_arr_8f *a)
   15430 {
   15431   Eurydice_dst_ref_shared_44 lit;
   15432   lit.ptr = a->data;
   15433   lit.meta = (size_t)8U;
   15434   return lit;
   15435 }
   15436 
   15437 /**
   15438 A monomorphic instance of Eurydice.array_to_slice_shared
   15439 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15440 with const generics
   15441 - N= 4
   15442 */
   15443 static inline Eurydice_dst_ref_shared_44
   15444 Eurydice_array_to_slice_shared_20(const Eurydice_arr_9d *a)
   15445 {
   15446   Eurydice_dst_ref_shared_44 lit;
   15447   lit.ptr = a->data;
   15448   lit.meta = (size_t)4U;
   15449   return lit;
   15450 }
   15451 
   15452 /**
   15453  Compute InvertNTT(  ) + s
   15454 */
   15455 /**
   15456 A monomorphic instance of libcrux_ml_dsa.matrix.compute_as1_plus_s2
   15457 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15458 with const generics
   15459 
   15460 */
   15461 static KRML_MUSTINLINE void
   15462 libcrux_ml_dsa_matrix_compute_as1_plus_s2_37(
   15463   size_t rows_in_a,
   15464   size_t columns_in_a,
   15465   Eurydice_dst_ref_mut_44 a_as_ntt,
   15466   Eurydice_dst_ref_shared_44 s1_ntt,
   15467   Eurydice_dst_ref_shared_44 s1_s2,
   15468   Eurydice_dst_ref_mut_44 result
   15469 )
   15470 {
   15471   for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)
   15472   {
   15473     size_t i1 = i0;
   15474     for (size_t i = (size_t)0U; i < columns_in_a; i++)
   15475     {
   15476       size_t j = i;
   15477       libcrux_ml_dsa_ntt_ntt_multiply_montgomery_37(&a_as_ntt.ptr[i1 * columns_in_a + j],
   15478         &s1_ntt.ptr[j]);
   15479       libcrux_ml_dsa_polynomial_add_ff_37(&result.ptr[i1], &a_as_ntt.ptr[i1 * columns_in_a + j]);
   15480     }
   15481   }
   15482   for (size_t i = (size_t)0U; i < result.meta; i++)
   15483   {
   15484     size_t i0 = i;
   15485     libcrux_ml_dsa_polynomial_barrett_reduce_ff_37(&result.ptr[i0]);
   15486     libcrux_ml_dsa_ntt_invert_ntt_montgomery_37(&result.ptr[i0]);
   15487     libcrux_ml_dsa_polynomial_add_ff_37(&result.ptr[i0], &s1_s2.ptr[columns_in_a + i0]);
   15488   }
   15489 }
   15490 
   15491 /**
   15492 A monomorphic instance of Eurydice.array_to_subslice_shared
   15493 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15494 with const generics
   15495 - N= 8
   15496 */
   15497 static inline Eurydice_dst_ref_shared_44
   15498 Eurydice_array_to_subslice_shared_25(const Eurydice_arr_8f *a, core_ops_range_Range_87 r)
   15499 {
   15500   return
   15501     (
   15502       KRML_CLITERAL(Eurydice_dst_ref_shared_44){ .ptr = a->data + r.start, .meta = r.end - r.start }
   15503     );
   15504 }
   15505 
   15506 /**
   15507 A monomorphic instance of Eurydice.array_to_slice_mut
   15508 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15509 with const generics
   15510 - N= 4
   15511 */
   15512 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_201(Eurydice_arr_9d *a)
   15513 {
   15514   Eurydice_dst_ref_mut_44 lit;
   15515   lit.ptr = a->data;
   15516   lit.meta = (size_t)4U;
   15517   return lit;
   15518 }
   15519 
   15520 /**
   15521 A monomorphic instance of Eurydice.array_to_slice_mut
   15522 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15523 with const generics
   15524 - N= 16
   15525 */
   15526 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_200(Eurydice_arr_2f *a)
   15527 {
   15528   Eurydice_dst_ref_mut_44 lit;
   15529   lit.ptr = a->data;
   15530   lit.meta = (size_t)16U;
   15531   return lit;
   15532 }
   15533 
   15534 /**
   15535 A monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_field_modulus
   15536 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15537 with const generics
   15538 
   15539 */
   15540 static KRML_MUSTINLINE bool
   15541 libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(
   15542   Eurydice_borrow_slice_u8 randomness,
   15543   size_t *sampled_coefficients,
   15544   Eurydice_arr_d0 *out
   15545 )
   15546 {
   15547   bool done = false;
   15548   for (size_t i = (size_t)0U; i < randomness.meta / (size_t)24U; i++)
   15549   {
   15550     size_t _cloop_i = i;
   15551     Eurydice_borrow_slice_u8
   15552     random_bytes =
   15553       Eurydice_slice_subslice_shared_c8(randomness,
   15554         (
   15555           KRML_CLITERAL(core_ops_range_Range_87){
   15556             .start = _cloop_i * (size_t)24U,
   15557             .end = _cloop_i * (size_t)24U + (size_t)24U
   15558           }
   15559         ));
   15560     if (!done)
   15561     {
   15562       size_t
   15563       sampled =
   15564         libcrux_ml_dsa_simd_portable_rejection_sample_less_than_field_modulus_65(random_bytes,
   15565           Eurydice_array_to_subslice_from_mut_11(out, sampled_coefficients[0U]));
   15566       sampled_coefficients[0U] += sampled;
   15567       if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)
   15568       {
   15569         done = true;
   15570       }
   15571     }
   15572   }
   15573   return done;
   15574 }
   15575 
   15576 /**
   15577 A monomorphic instance of Eurydice.array_to_slice_mut
   15578 with types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15579 with const generics
   15580 - N= 8
   15581 */
   15582 static inline Eurydice_dst_ref_mut_44 Eurydice_array_to_slice_mut_20(Eurydice_arr_8f *a)
   15583 {
   15584   Eurydice_dst_ref_mut_44 lit;
   15585   lit.ptr = a->data;
   15586   lit.meta = (size_t)8U;
   15587   return lit;
   15588 }
   15589 
   15590 /**
   15591 A monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta_equals_4
   15592 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15593 with const generics
   15594 
   15595 */
   15596 static KRML_MUSTINLINE bool
   15597 libcrux_ml_dsa_sample_rejection_sample_less_than_eta_equals_4_37(
   15598   Eurydice_borrow_slice_u8 randomness,
   15599   size_t *sampled_coefficients,
   15600   Eurydice_arr_d0 *out
   15601 )
   15602 {
   15603   bool done = false;
   15604   for (size_t i = (size_t)0U; i < randomness.meta / (size_t)4U; i++)
   15605   {
   15606     size_t _cloop_i = i;
   15607     Eurydice_borrow_slice_u8
   15608     random_bytes =
   15609       Eurydice_slice_subslice_shared_c8(randomness,
   15610         (
   15611           KRML_CLITERAL(core_ops_range_Range_87){
   15612             .start = _cloop_i * (size_t)4U,
   15613             .end = _cloop_i * (size_t)4U + (size_t)4U
   15614           }
   15615         ));
   15616     if (!done)
   15617     {
   15618       size_t
   15619       sampled =
   15620         libcrux_ml_dsa_simd_portable_rejection_sample_less_than_eta_equals_4_65(random_bytes,
   15621           Eurydice_array_to_subslice_from_mut_11(out, sampled_coefficients[0U]));
   15622       sampled_coefficients[0U] += sampled;
   15623       if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)
   15624       {
   15625         done = true;
   15626       }
   15627     }
   15628   }
   15629   return done;
   15630 }
   15631 
   15632 /**
   15633 A monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta_equals_2
   15634 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15635 with const generics
   15636 
   15637 */
   15638 static KRML_MUSTINLINE bool
   15639 libcrux_ml_dsa_sample_rejection_sample_less_than_eta_equals_2_37(
   15640   Eurydice_borrow_slice_u8 randomness,
   15641   size_t *sampled_coefficients,
   15642   Eurydice_arr_d0 *out
   15643 )
   15644 {
   15645   bool done = false;
   15646   for (size_t i = (size_t)0U; i < randomness.meta / (size_t)4U; i++)
   15647   {
   15648     size_t _cloop_i = i;
   15649     Eurydice_borrow_slice_u8
   15650     random_bytes =
   15651       Eurydice_slice_subslice_shared_c8(randomness,
   15652         (
   15653           KRML_CLITERAL(core_ops_range_Range_87){
   15654             .start = _cloop_i * (size_t)4U,
   15655             .end = _cloop_i * (size_t)4U + (size_t)4U
   15656           }
   15657         ));
   15658     if (!done)
   15659     {
   15660       size_t
   15661       sampled =
   15662         libcrux_ml_dsa_simd_portable_rejection_sample_less_than_eta_equals_2_65(random_bytes,
   15663           Eurydice_array_to_subslice_from_mut_11(out, sampled_coefficients[0U]));
   15664       sampled_coefficients[0U] += sampled;
   15665       if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)
   15666       {
   15667         done = true;
   15668       }
   15669     }
   15670   }
   15671   return done;
   15672 }
   15673 
   15674 /**
   15675 A monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta
   15676 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   15677 with const generics
   15678 
   15679 */
   15680 static KRML_MUSTINLINE bool
   15681 libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(
   15682   libcrux_ml_dsa_constants_Eta eta,
   15683   Eurydice_borrow_slice_u8 randomness,
   15684   size_t *sampled,
   15685   Eurydice_arr_d0 *out
   15686 )
   15687 {
   15688   switch (eta)
   15689   {
   15690     case libcrux_ml_dsa_constants_Eta_Two:
   15691       {
   15692         break;
   15693       }
   15694     case libcrux_ml_dsa_constants_Eta_Four:
   15695       {
   15696         return
   15697           libcrux_ml_dsa_sample_rejection_sample_less_than_eta_equals_4_37(randomness,
   15698             sampled,
   15699             out);
   15700       }
   15701     default:
   15702       {
   15703         KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__);
   15704         KRML_HOST_EXIT(253U);
   15705       }
   15706   }
   15707   return
   15708     libcrux_ml_dsa_sample_rejection_sample_less_than_eta_equals_2_37(randomness,
   15709       sampled,
   15710       out);
   15711 }
   15712 
   15713 typedef struct libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair_s
   15714 {
   15715   Eurydice_arr_e2 signing_key;
   15716   Eurydice_arr_43 verification_key;
   15717 }
   15718 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair;
   15719 
   15720 typedef struct libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair_s
   15721 {
   15722   Eurydice_arr_24 signing_key;
   15723   Eurydice_arr_29 verification_key;
   15724 }
   15725 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair;
   15726 
   15727 typedef struct libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair_s
   15728 {
   15729   Eurydice_arr_10 signing_key;
   15730   Eurydice_arr_02 verification_key;
   15731 }
   15732 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair;
   15733 
   15734 #if defined(__cplusplus)
   15735 }
   15736 #endif
   15737 
   15738 #define libcrux_mldsa_core_H_DEFINED
   15739 #endif /* libcrux_mldsa_core_H */
   15740 
   15741 /* from libcrux/combined_extraction/generated/libcrux_ct_ops.h */
   15742 /*
   15743  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   15744  *
   15745  * SPDX-License-Identifier: MIT or Apache-2.0
   15746  *
   15747  * This code was generated with the following revisions:
   15748  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   15749  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   15750  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   15751  * F*: unset
   15752  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   15753  */
   15754 
   15755 
   15756 #ifndef libcrux_ct_ops_H
   15757 #define libcrux_ct_ops_H
   15758 
   15759 
   15760 
   15761 #if defined(__cplusplus)
   15762 extern "C" {
   15763 #endif
   15764 
   15765 
   15766 /**
   15767  Return 1 if `value` is not zero and 0 otherwise.
   15768 */
   15769 static KRML_NOINLINE uint8_t libcrux_ml_kem_constant_time_ops_inz(uint8_t value)
   15770 {
   15771   uint16_t value0 = (uint16_t)(uint32_t)value;
   15772   uint8_t result = (uint8_t)((uint32_t)core_num__u16__wrapping_add(~value0, 1U) >> 8U & 0xFFFFU);
   15773   return (uint32_t)result & 1U;
   15774 }
   15775 
   15776 static KRML_NOINLINE uint8_t libcrux_ml_kem_constant_time_ops_is_non_zero(uint8_t value)
   15777 {
   15778   return libcrux_ml_kem_constant_time_ops_inz(value);
   15779 }
   15780 
   15781 /**
   15782  Return 1 if the bytes of `lhs` and `rhs` do not exactly
   15783  match and 0 otherwise.
   15784 */
   15785 static KRML_NOINLINE uint8_t
   15786 libcrux_ml_kem_constant_time_ops_compare(
   15787   Eurydice_borrow_slice_u8 lhs,
   15788   Eurydice_borrow_slice_u8 rhs
   15789 )
   15790 {
   15791   uint8_t r = 0U;
   15792   for (size_t i = (size_t)0U; i < lhs.meta; i++)
   15793   {
   15794     size_t i0 = i;
   15795     uint8_t nr = (uint32_t)r | ((uint32_t)lhs.ptr[i0] ^ (uint32_t)rhs.ptr[i0]);
   15796     r = nr;
   15797   }
   15798   return libcrux_ml_kem_constant_time_ops_is_non_zero(r);
   15799 }
   15800 
   15801 static KRML_NOINLINE uint8_t
   15802 libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(
   15803   Eurydice_borrow_slice_u8 lhs,
   15804   Eurydice_borrow_slice_u8 rhs
   15805 )
   15806 {
   15807   return libcrux_ml_kem_constant_time_ops_compare(lhs, rhs);
   15808 }
   15809 
   15810 /**
   15811  If `selector` is not zero, return the bytes in `rhs`; return the bytes in
   15812  `lhs` otherwise.
   15813 */
   15814 static KRML_NOINLINE Eurydice_arr_ec
   15815 libcrux_ml_kem_constant_time_ops_select_ct(
   15816   Eurydice_borrow_slice_u8 lhs,
   15817   Eurydice_borrow_slice_u8 rhs,
   15818   uint8_t selector
   15819 )
   15820 {
   15821   uint8_t
   15822   mask = core_num__u8__wrapping_sub(libcrux_ml_kem_constant_time_ops_is_non_zero(selector), 1U);
   15823   Eurydice_arr_ec out = { .data = { 0U } };
   15824   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE; i++)
   15825   {
   15826     size_t i0 = i;
   15827     uint8_t
   15828     outi =
   15829       ((uint32_t)lhs.ptr[i0] & (uint32_t)mask) | ((uint32_t)rhs.ptr[i0] & (~(uint32_t)mask & 0xFFU));
   15830     out.data[i0] = outi;
   15831   }
   15832   return out;
   15833 }
   15834 
   15835 static KRML_NOINLINE Eurydice_arr_ec
   15836 libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(
   15837   Eurydice_borrow_slice_u8 lhs,
   15838   Eurydice_borrow_slice_u8 rhs,
   15839   uint8_t selector
   15840 )
   15841 {
   15842   return libcrux_ml_kem_constant_time_ops_select_ct(lhs, rhs, selector);
   15843 }
   15844 
   15845 static KRML_NOINLINE Eurydice_arr_ec
   15846 libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(
   15847   Eurydice_borrow_slice_u8 lhs_c,
   15848   Eurydice_borrow_slice_u8 rhs_c,
   15849   Eurydice_borrow_slice_u8 lhs_s,
   15850   Eurydice_borrow_slice_u8 rhs_s
   15851 )
   15852 {
   15853   uint8_t
   15854   selector = libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(lhs_c, rhs_c);
   15855   return
   15856     libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(lhs_s,
   15857       rhs_s,
   15858       selector);
   15859 }
   15860 
   15861 #if defined(__cplusplus)
   15862 }
   15863 #endif
   15864 
   15865 #define libcrux_ct_ops_H_DEFINED
   15866 #endif /* libcrux_ct_ops_H */
   15867 
   15868 /* from libcrux/combined_extraction/generated/libcrux_mldsa_portable.h */
   15869 /*
   15870  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   15871  *
   15872  * SPDX-License-Identifier: MIT or Apache-2.0
   15873  *
   15874  * This code was generated with the following revisions:
   15875  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   15876  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   15877  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   15878  * F*: unset
   15879  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   15880  */
   15881 
   15882 
   15883 #ifndef libcrux_mldsa_portable_H
   15884 #define libcrux_mldsa_portable_H
   15885 
   15886 
   15887 
   15888 #if defined(__cplusplus)
   15889 extern "C" {
   15890 #endif
   15891 
   15892 
   15893 typedef struct libcrux_ml_dsa_hash_functions_portable_Shake128X4_s
   15894 {
   15895   Eurydice_arr_7c state0;
   15896   Eurydice_arr_7c state1;
   15897   Eurydice_arr_7c state2;
   15898   Eurydice_arr_7c state3;
   15899 }
   15900 libcrux_ml_dsa_hash_functions_portable_Shake128X4;
   15901 
   15902 typedef libcrux_sha3_portable_KeccakState libcrux_ml_dsa_hash_functions_portable_Shake256;
   15903 
   15904 typedef struct libcrux_ml_dsa_hash_functions_portable_Shake256X4_s
   15905 {
   15906   Eurydice_arr_7c state0;
   15907   Eurydice_arr_7c state1;
   15908   Eurydice_arr_7c state2;
   15909   Eurydice_arr_7c state3;
   15910 }
   15911 libcrux_ml_dsa_hash_functions_portable_Shake256X4;
   15912 
   15913 typedef libcrux_sha3_portable_incremental_Shake256Xof
   15914 libcrux_ml_dsa_hash_functions_portable_Shake256Xof;
   15915 
   15916 static KRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake128X4
   15917 libcrux_ml_dsa_hash_functions_portable_init_absorb(
   15918   Eurydice_borrow_slice_u8 input0,
   15919   Eurydice_borrow_slice_u8 input1,
   15920   Eurydice_borrow_slice_u8 input2,
   15921   Eurydice_borrow_slice_u8 input3
   15922 )
   15923 {
   15924   Eurydice_arr_7c state0 = libcrux_sha3_portable_incremental_shake128_init();
   15925   libcrux_sha3_portable_incremental_shake128_absorb_final(&state0, input0);
   15926   Eurydice_arr_7c state1 = libcrux_sha3_portable_incremental_shake128_init();
   15927   libcrux_sha3_portable_incremental_shake128_absorb_final(&state1, input1);
   15928   Eurydice_arr_7c state2 = libcrux_sha3_portable_incremental_shake128_init();
   15929   libcrux_sha3_portable_incremental_shake128_absorb_final(&state2, input2);
   15930   Eurydice_arr_7c state3 = libcrux_sha3_portable_incremental_shake128_init();
   15931   libcrux_sha3_portable_incremental_shake128_absorb_final(&state3, input3);
   15932   return
   15933     (
   15934       KRML_CLITERAL(libcrux_ml_dsa_hash_functions_portable_Shake128X4){
   15935         .state0 = state0,
   15936         .state1 = state1,
   15937         .state2 = state2,
   15938         .state3 = state3
   15939       }
   15940     );
   15941 }
   15942 
   15943 static KRML_MUSTINLINE Eurydice_arr_7c
   15944 libcrux_ml_dsa_hash_functions_portable_init_absorb_final_shake256(
   15945   Eurydice_borrow_slice_u8 input
   15946 )
   15947 {
   15948   Eurydice_arr_7c state = libcrux_sha3_portable_incremental_shake256_init();
   15949   libcrux_sha3_portable_incremental_shake256_absorb_final(&state, input);
   15950   return state;
   15951 }
   15952 
   15953 static KRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake256X4
   15954 libcrux_ml_dsa_hash_functions_portable_init_absorb_x4(
   15955   Eurydice_borrow_slice_u8 input0,
   15956   Eurydice_borrow_slice_u8 input1,
   15957   Eurydice_borrow_slice_u8 input2,
   15958   Eurydice_borrow_slice_u8 input3
   15959 )
   15960 {
   15961   Eurydice_arr_7c state0 = libcrux_sha3_portable_incremental_shake256_init();
   15962   libcrux_sha3_portable_incremental_shake256_absorb_final(&state0, input0);
   15963   Eurydice_arr_7c state1 = libcrux_sha3_portable_incremental_shake256_init();
   15964   libcrux_sha3_portable_incremental_shake256_absorb_final(&state1, input1);
   15965   Eurydice_arr_7c state2 = libcrux_sha3_portable_incremental_shake256_init();
   15966   libcrux_sha3_portable_incremental_shake256_absorb_final(&state2, input2);
   15967   Eurydice_arr_7c state3 = libcrux_sha3_portable_incremental_shake256_init();
   15968   libcrux_sha3_portable_incremental_shake256_absorb_final(&state3, input3);
   15969   return
   15970     (
   15971       KRML_CLITERAL(libcrux_ml_dsa_hash_functions_portable_Shake256X4){
   15972         .state0 = state0,
   15973         .state1 = state1,
   15974         .state2 = state2,
   15975         .state3 = state3
   15976       }
   15977     );
   15978 }
   15979 
   15980 static KRML_MUSTINLINE void
   15981 libcrux_ml_dsa_hash_functions_portable_shake128(
   15982   Eurydice_borrow_slice_u8 input,
   15983   Eurydice_mut_borrow_slice_u8 out
   15984 )
   15985 {
   15986   libcrux_sha3_portable_shake128(out, input);
   15987 }
   15988 
   15989 static KRML_MUSTINLINE Eurydice_arr_ff
   15990 libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_shake256(Eurydice_arr_7c *state)
   15991 {
   15992   Eurydice_arr_ff out = { .data = { 0U } };
   15993   libcrux_sha3_portable_incremental_shake256_squeeze_first_block(state,
   15994     Eurydice_array_to_slice_mut_58(&out));
   15995   return out;
   15996 }
   15997 
   15998 static KRML_MUSTINLINE Eurydice_arr_ff_x4
   15999 libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4(
   16000   libcrux_ml_dsa_hash_functions_portable_Shake256X4 *state
   16001 )
   16002 {
   16003   Eurydice_arr_ff out0 = { .data = { 0U } };
   16004   libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state0,
   16005     Eurydice_array_to_slice_mut_58(&out0));
   16006   Eurydice_arr_ff out1 = { .data = { 0U } };
   16007   libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state1,
   16008     Eurydice_array_to_slice_mut_58(&out1));
   16009   Eurydice_arr_ff out2 = { .data = { 0U } };
   16010   libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state2,
   16011     Eurydice_array_to_slice_mut_58(&out2));
   16012   Eurydice_arr_ff out3 = { .data = { 0U } };
   16013   libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state3,
   16014     Eurydice_array_to_slice_mut_58(&out3));
   16015   return
   16016     (KRML_CLITERAL(Eurydice_arr_ff_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });
   16017 }
   16018 
   16019 static KRML_MUSTINLINE void
   16020 libcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks(
   16021   libcrux_ml_dsa_hash_functions_portable_Shake128X4 *state,
   16022   Eurydice_arr_d10 *out0,
   16023   Eurydice_arr_d10 *out1,
   16024   Eurydice_arr_d10 *out2,
   16025   Eurydice_arr_d10 *out3
   16026 )
   16027 {
   16028   libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state0,
   16029     Eurydice_array_to_slice_mut_4c(out0));
   16030   libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state1,
   16031     Eurydice_array_to_slice_mut_4c(out1));
   16032   libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state2,
   16033     Eurydice_array_to_slice_mut_4c(out2));
   16034   libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state3,
   16035     Eurydice_array_to_slice_mut_4c(out3));
   16036 }
   16037 
   16038 static KRML_MUSTINLINE Eurydice_arr_c5_x4
   16039 libcrux_ml_dsa_hash_functions_portable_squeeze_next_block(
   16040   libcrux_ml_dsa_hash_functions_portable_Shake128X4 *state
   16041 )
   16042 {
   16043   Eurydice_arr_c5 out0 = { .data = { 0U } };
   16044   libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state0,
   16045     Eurydice_array_to_slice_mut_2c(&out0));
   16046   Eurydice_arr_c5 out1 = { .data = { 0U } };
   16047   libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state1,
   16048     Eurydice_array_to_slice_mut_2c(&out1));
   16049   Eurydice_arr_c5 out2 = { .data = { 0U } };
   16050   libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state2,
   16051     Eurydice_array_to_slice_mut_2c(&out2));
   16052   Eurydice_arr_c5 out3 = { .data = { 0U } };
   16053   libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state3,
   16054     Eurydice_array_to_slice_mut_2c(&out3));
   16055   return
   16056     (KRML_CLITERAL(Eurydice_arr_c5_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });
   16057 }
   16058 
   16059 static KRML_MUSTINLINE Eurydice_arr_ff
   16060 libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_shake256(Eurydice_arr_7c *state)
   16061 {
   16062   Eurydice_arr_ff out = { .data = { 0U } };
   16063   libcrux_sha3_portable_incremental_shake256_squeeze_next_block(state,
   16064     Eurydice_array_to_slice_mut_58(&out));
   16065   return out;
   16066 }
   16067 
   16068 static KRML_MUSTINLINE Eurydice_arr_ff_x4
   16069 libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4(
   16070   libcrux_ml_dsa_hash_functions_portable_Shake256X4 *state
   16071 )
   16072 {
   16073   Eurydice_arr_ff out0 = { .data = { 0U } };
   16074   libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state0,
   16075     Eurydice_array_to_slice_mut_58(&out0));
   16076   Eurydice_arr_ff out1 = { .data = { 0U } };
   16077   libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state1,
   16078     Eurydice_array_to_slice_mut_58(&out1));
   16079   Eurydice_arr_ff out2 = { .data = { 0U } };
   16080   libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state2,
   16081     Eurydice_array_to_slice_mut_58(&out2));
   16082   Eurydice_arr_ff out3 = { .data = { 0U } };
   16083   libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state3,
   16084     Eurydice_array_to_slice_mut_58(&out3));
   16085   return
   16086     (KRML_CLITERAL(Eurydice_arr_ff_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });
   16087 }
   16088 
   16089 /**
   16090 This function found in impl {libcrux_ml_dsa::hash_functions::shake128::Xof for libcrux_ml_dsa::hash_functions::portable::Shake128}
   16091 */
   16092 static KRML_MUSTINLINE void
   16093 libcrux_ml_dsa_hash_functions_portable_shake128_7b(
   16094   Eurydice_borrow_slice_u8 input,
   16095   Eurydice_mut_borrow_slice_u8 out
   16096 )
   16097 {
   16098   libcrux_ml_dsa_hash_functions_portable_shake128(input, out);
   16099 }
   16100 
   16101 /**
   16102 This function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}
   16103 */
   16104 static KRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake128X4
   16105 libcrux_ml_dsa_hash_functions_portable_init_absorb_11(
   16106   Eurydice_borrow_slice_u8 input0,
   16107   Eurydice_borrow_slice_u8 input1,
   16108   Eurydice_borrow_slice_u8 input2,
   16109   Eurydice_borrow_slice_u8 input3
   16110 )
   16111 {
   16112   return libcrux_ml_dsa_hash_functions_portable_init_absorb(input0, input1, input2, input3);
   16113 }
   16114 
   16115 /**
   16116 This function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}
   16117 */
   16118 static KRML_MUSTINLINE void
   16119 libcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks_11(
   16120   libcrux_ml_dsa_hash_functions_portable_Shake128X4 *self,
   16121   Eurydice_arr_d10 *out0,
   16122   Eurydice_arr_d10 *out1,
   16123   Eurydice_arr_d10 *out2,
   16124   Eurydice_arr_d10 *out3
   16125 )
   16126 {
   16127   libcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks(self, out0, out1, out2, out3);
   16128 }
   16129 
   16130 /**
   16131 This function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}
   16132 */
   16133 static KRML_MUSTINLINE Eurydice_arr_c5_x4
   16134 libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(
   16135   libcrux_ml_dsa_hash_functions_portable_Shake128X4 *self
   16136 )
   16137 {
   16138   return libcrux_ml_dsa_hash_functions_portable_squeeze_next_block(self);
   16139 }
   16140 
   16141 /**
   16142 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}
   16143 */
   16144 static KRML_MUSTINLINE Eurydice_arr_7c
   16145 libcrux_ml_dsa_hash_functions_portable_init_absorb_final_61(Eurydice_borrow_slice_u8 input)
   16146 {
   16147   return libcrux_ml_dsa_hash_functions_portable_init_absorb_final_shake256(input);
   16148 }
   16149 
   16150 /**
   16151 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}
   16152 */
   16153 static KRML_MUSTINLINE Eurydice_arr_ff
   16154 libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_61(Eurydice_arr_7c *self)
   16155 {
   16156   return libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_shake256(self);
   16157 }
   16158 
   16159 /**
   16160 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}
   16161 */
   16162 static KRML_MUSTINLINE Eurydice_arr_ff
   16163 libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_61(Eurydice_arr_7c *self)
   16164 {
   16165   return libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_shake256(self);
   16166 }
   16167 
   16168 /**
   16169 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}
   16170 */
   16171 static inline void
   16172 libcrux_ml_dsa_hash_functions_portable_absorb_26(
   16173   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   16174   Eurydice_borrow_slice_u8 input
   16175 )
   16176 {
   16177   libcrux_sha3_portable_incremental_absorb_42(self, input);
   16178 }
   16179 
   16180 /**
   16181 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}
   16182 */
   16183 static inline void
   16184 libcrux_ml_dsa_hash_functions_portable_absorb_final_26(
   16185   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   16186   Eurydice_borrow_slice_u8 input
   16187 )
   16188 {
   16189   libcrux_sha3_portable_incremental_absorb_final_42(self, input);
   16190 }
   16191 
   16192 /**
   16193 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}
   16194 */
   16195 static inline libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   16196 libcrux_ml_dsa_hash_functions_portable_init_26(void)
   16197 {
   16198   return libcrux_sha3_portable_incremental_new_42();
   16199 }
   16200 
   16201 /**
   16202 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}
   16203 */
   16204 static inline void
   16205 libcrux_ml_dsa_hash_functions_portable_squeeze_26(
   16206   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *self,
   16207   Eurydice_mut_borrow_slice_u8 out
   16208 )
   16209 {
   16210   libcrux_sha3_portable_incremental_squeeze_42(self, out);
   16211 }
   16212 
   16213 /**
   16214 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}
   16215 */
   16216 static KRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake256X4
   16217 libcrux_ml_dsa_hash_functions_portable_init_absorb_x4_9b(
   16218   Eurydice_borrow_slice_u8 input0,
   16219   Eurydice_borrow_slice_u8 input1,
   16220   Eurydice_borrow_slice_u8 input2,
   16221   Eurydice_borrow_slice_u8 input3
   16222 )
   16223 {
   16224   return libcrux_ml_dsa_hash_functions_portable_init_absorb_x4(input0, input1, input2, input3);
   16225 }
   16226 
   16227 /**
   16228 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}
   16229 */
   16230 static KRML_MUSTINLINE Eurydice_arr_ff_x4
   16231 libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4_9b(
   16232   libcrux_ml_dsa_hash_functions_portable_Shake256X4 *self
   16233 )
   16234 {
   16235   return libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4(self);
   16236 }
   16237 
   16238 /**
   16239 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}
   16240 */
   16241 static KRML_MUSTINLINE Eurydice_arr_ff_x4
   16242 libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(
   16243   libcrux_ml_dsa_hash_functions_portable_Shake256X4 *self
   16244 )
   16245 {
   16246   return libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4(self);
   16247 }
   16248 
   16249 /**
   16250 A monomorphic instance of libcrux_ml_dsa.sample.sample_four_error_ring_elements
   16251 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   16252 with const generics
   16253 
   16254 */
   16255 static KRML_MUSTINLINE void
   16256 libcrux_ml_dsa_sample_sample_four_error_ring_elements_29(
   16257   libcrux_ml_dsa_constants_Eta eta,
   16258   Eurydice_borrow_slice_u8 seed,
   16259   uint16_t start_index,
   16260   Eurydice_dst_ref_mut_44 re
   16261 )
   16262 {
   16263   Eurydice_arr_91 seed0 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, start_index);
   16264   Eurydice_arr_91
   16265   seed1 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 1U);
   16266   Eurydice_arr_91
   16267   seed2 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 2U);
   16268   Eurydice_arr_91
   16269   seed3 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 3U);
   16270   libcrux_ml_dsa_hash_functions_portable_Shake256X4
   16271   state =
   16272     libcrux_ml_dsa_hash_functions_portable_init_absorb_x4_9b(Eurydice_array_to_slice_shared_f1(&seed0),
   16273       Eurydice_array_to_slice_shared_f1(&seed1),
   16274       Eurydice_array_to_slice_shared_f1(&seed2),
   16275       Eurydice_array_to_slice_shared_f1(&seed3));
   16276   Eurydice_arr_ff_x4
   16277   randomnesses0 = libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4_9b(&state);
   16278   Eurydice_arr_930
   16279   out =
   16280     { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };
   16281   size_t sampled0 = (size_t)0U;
   16282   size_t sampled1 = (size_t)0U;
   16283   size_t sampled2 = (size_t)0U;
   16284   size_t sampled3 = (size_t)0U;
   16285   libcrux_ml_dsa_constants_Eta uu____0 = eta;
   16286   bool
   16287   done0 =
   16288     libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____0,
   16289       Eurydice_array_to_slice_shared_58(&randomnesses0.fst),
   16290       &sampled0,
   16291       out.data);
   16292   libcrux_ml_dsa_constants_Eta uu____1 = eta;
   16293   bool
   16294   done1 =
   16295     libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____1,
   16296       Eurydice_array_to_slice_shared_58(&randomnesses0.snd),
   16297       &sampled1,
   16298       &out.data[1U]);
   16299   libcrux_ml_dsa_constants_Eta uu____2 = eta;
   16300   bool
   16301   done2 =
   16302     libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____2,
   16303       Eurydice_array_to_slice_shared_58(&randomnesses0.thd),
   16304       &sampled2,
   16305       &out.data[2U]);
   16306   libcrux_ml_dsa_constants_Eta uu____3 = eta;
   16307   bool
   16308   done3 =
   16309     libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____3,
   16310       Eurydice_array_to_slice_shared_58(&randomnesses0.f3),
   16311       &sampled3,
   16312       &out.data[3U]);
   16313   while (true)
   16314   {
   16315     if (done0)
   16316     {
   16317       if (done1)
   16318       {
   16319         if (done2)
   16320         {
   16321           if (done3)
   16322           {
   16323             break;
   16324           }
   16325           else
   16326           {
   16327             Eurydice_arr_ff_x4
   16328             randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);
   16329             if (!done0)
   16330             {
   16331               libcrux_ml_dsa_constants_Eta uu____4 = eta;
   16332               done0 =
   16333                 libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____4,
   16334                   Eurydice_array_to_slice_shared_58(&randomnesses.fst),
   16335                   &sampled0,
   16336                   out.data);
   16337             }
   16338             if (!done1)
   16339             {
   16340               libcrux_ml_dsa_constants_Eta uu____5 = eta;
   16341               done1 =
   16342                 libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____5,
   16343                   Eurydice_array_to_slice_shared_58(&randomnesses.snd),
   16344                   &sampled1,
   16345                   &out.data[1U]);
   16346             }
   16347             if (!done2)
   16348             {
   16349               libcrux_ml_dsa_constants_Eta uu____6 = eta;
   16350               done2 =
   16351                 libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____6,
   16352                   Eurydice_array_to_slice_shared_58(&randomnesses.thd),
   16353                   &sampled2,
   16354                   &out.data[2U]);
   16355             }
   16356             if (!done3)
   16357             {
   16358               libcrux_ml_dsa_constants_Eta uu____7 = eta;
   16359               done3 =
   16360                 libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____7,
   16361                   Eurydice_array_to_slice_shared_58(&randomnesses.f3),
   16362                   &sampled3,
   16363                   &out.data[3U]);
   16364             }
   16365           }
   16366         }
   16367         else
   16368         {
   16369           Eurydice_arr_ff_x4
   16370           randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);
   16371           if (!done0)
   16372           {
   16373             libcrux_ml_dsa_constants_Eta uu____8 = eta;
   16374             done0 =
   16375               libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____8,
   16376                 Eurydice_array_to_slice_shared_58(&randomnesses.fst),
   16377                 &sampled0,
   16378                 out.data);
   16379           }
   16380           if (!done1)
   16381           {
   16382             libcrux_ml_dsa_constants_Eta uu____9 = eta;
   16383             done1 =
   16384               libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____9,
   16385                 Eurydice_array_to_slice_shared_58(&randomnesses.snd),
   16386                 &sampled1,
   16387                 &out.data[1U]);
   16388           }
   16389           if (!done2)
   16390           {
   16391             libcrux_ml_dsa_constants_Eta uu____10 = eta;
   16392             done2 =
   16393               libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____10,
   16394                 Eurydice_array_to_slice_shared_58(&randomnesses.thd),
   16395                 &sampled2,
   16396                 &out.data[2U]);
   16397           }
   16398           if (!done3)
   16399           {
   16400             libcrux_ml_dsa_constants_Eta uu____11 = eta;
   16401             done3 =
   16402               libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____11,
   16403                 Eurydice_array_to_slice_shared_58(&randomnesses.f3),
   16404                 &sampled3,
   16405                 &out.data[3U]);
   16406           }
   16407         }
   16408       }
   16409       else
   16410       {
   16411         Eurydice_arr_ff_x4
   16412         randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);
   16413         if (!done0)
   16414         {
   16415           libcrux_ml_dsa_constants_Eta uu____12 = eta;
   16416           done0 =
   16417             libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____12,
   16418               Eurydice_array_to_slice_shared_58(&randomnesses.fst),
   16419               &sampled0,
   16420               out.data);
   16421         }
   16422         if (!done1)
   16423         {
   16424           libcrux_ml_dsa_constants_Eta uu____13 = eta;
   16425           done1 =
   16426             libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____13,
   16427               Eurydice_array_to_slice_shared_58(&randomnesses.snd),
   16428               &sampled1,
   16429               &out.data[1U]);
   16430         }
   16431         if (!done2)
   16432         {
   16433           libcrux_ml_dsa_constants_Eta uu____14 = eta;
   16434           done2 =
   16435             libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____14,
   16436               Eurydice_array_to_slice_shared_58(&randomnesses.thd),
   16437               &sampled2,
   16438               &out.data[2U]);
   16439         }
   16440         if (!done3)
   16441         {
   16442           libcrux_ml_dsa_constants_Eta uu____15 = eta;
   16443           done3 =
   16444             libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____15,
   16445               Eurydice_array_to_slice_shared_58(&randomnesses.f3),
   16446               &sampled3,
   16447               &out.data[3U]);
   16448         }
   16449       }
   16450     }
   16451     else
   16452     {
   16453       Eurydice_arr_ff_x4
   16454       randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);
   16455       if (!done0)
   16456       {
   16457         libcrux_ml_dsa_constants_Eta uu____16 = eta;
   16458         done0 =
   16459           libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____16,
   16460             Eurydice_array_to_slice_shared_58(&randomnesses.fst),
   16461             &sampled0,
   16462             out.data);
   16463       }
   16464       if (!done1)
   16465       {
   16466         libcrux_ml_dsa_constants_Eta uu____17 = eta;
   16467         done1 =
   16468           libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____17,
   16469             Eurydice_array_to_slice_shared_58(&randomnesses.snd),
   16470             &sampled1,
   16471             &out.data[1U]);
   16472       }
   16473       if (!done2)
   16474       {
   16475         libcrux_ml_dsa_constants_Eta uu____18 = eta;
   16476         done2 =
   16477           libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____18,
   16478             Eurydice_array_to_slice_shared_58(&randomnesses.thd),
   16479             &sampled2,
   16480             &out.data[2U]);
   16481       }
   16482       if (!done3)
   16483       {
   16484         libcrux_ml_dsa_constants_Eta uu____19 = eta;
   16485         done3 =
   16486           libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____19,
   16487             Eurydice_array_to_slice_shared_58(&randomnesses.f3),
   16488             &sampled3,
   16489             &out.data[3U]);
   16490       }
   16491     }
   16492   }
   16493   size_t max0 = (size_t)(uint32_t)start_index + (size_t)4U;
   16494   size_t max;
   16495   if (re.meta < max0)
   16496   {
   16497     max = re.meta;
   16498   }
   16499   else
   16500   {
   16501     max = max0;
   16502   }
   16503   for (size_t i = (size_t)(uint32_t)start_index; i < max; i++)
   16504   {
   16505     size_t i0 = i;
   16506     libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_2c0(&out.data[i0
   16507         % (size_t)4U]),
   16508       &re.ptr[i0]);
   16509   }
   16510 }
   16511 
   16512 /**
   16513 A monomorphic instance of libcrux_ml_dsa.samplex4.sample_s1_and_s2
   16514 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   16515 with const generics
   16516 
   16517 */
   16518 static KRML_MUSTINLINE void
   16519 libcrux_ml_dsa_samplex4_sample_s1_and_s2_29(
   16520   libcrux_ml_dsa_constants_Eta eta,
   16521   Eurydice_borrow_slice_u8 seed,
   16522   Eurydice_dst_ref_mut_44 s1_s2
   16523 )
   16524 {
   16525   size_t len = s1_s2.meta;
   16526   for (size_t i = (size_t)0U; i < len / (size_t)4U; i++)
   16527   {
   16528     size_t i0 = i;
   16529     libcrux_ml_dsa_sample_sample_four_error_ring_elements_29(eta,
   16530       seed,
   16531       4U * (uint32_t)(uint16_t)i0,
   16532       s1_s2);
   16533   }
   16534   size_t remainder = len % (size_t)4U;
   16535   if (remainder != (size_t)0U)
   16536   {
   16537     libcrux_ml_dsa_sample_sample_four_error_ring_elements_29(eta,
   16538       seed,
   16539       (uint16_t)(len - remainder),
   16540       s1_s2);
   16541   }
   16542 }
   16543 
   16544 /**
   16545  Sample and write out up to four ring elements.
   16546 
   16547  If i <= `elements_requested`, a field element with domain separated
   16548  seed according to the provided index is generated in
   16549  `tmp_stack[i]`. After successful rejection sampling in
   16550  `tmp_stack[i]`, the ring element is written to `matrix` at the
   16551  provided index in `indices[i]`.
   16552  `rand_stack` is a working buffer that holds initial Shake output.
   16553 */
   16554 /**
   16555 A monomorphic instance of libcrux_ml_dsa.sample.sample_up_to_four_ring_elements_flat
   16556 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake128X4
   16557 with const generics
   16558 
   16559 */
   16560 static KRML_MUSTINLINE void
   16561 libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_63(
   16562   size_t columns,
   16563   Eurydice_borrow_slice_u8 seed,
   16564   Eurydice_dst_ref_mut_44 matrix,
   16565   Eurydice_arr_d10 *rand_stack0,
   16566   Eurydice_arr_d10 *rand_stack1,
   16567   Eurydice_arr_d10 *rand_stack2,
   16568   Eurydice_arr_d10 *rand_stack3,
   16569   Eurydice_dst_ref_mut_33 tmp_stack,
   16570   size_t start_index,
   16571   size_t elements_requested
   16572 )
   16573 {
   16574   Eurydice_arr_31
   16575   seed0 =
   16576     libcrux_ml_dsa_sample_add_domain_separator(seed,
   16577       libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index, columns));
   16578   Eurydice_arr_31
   16579   seed1 =
   16580     libcrux_ml_dsa_sample_add_domain_separator(seed,
   16581       libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)1U,
   16582         columns));
   16583   Eurydice_arr_31
   16584   seed2 =
   16585     libcrux_ml_dsa_sample_add_domain_separator(seed,
   16586       libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)2U,
   16587         columns));
   16588   Eurydice_arr_31
   16589   seed3 =
   16590     libcrux_ml_dsa_sample_add_domain_separator(seed,
   16591       libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)3U,
   16592         columns));
   16593   libcrux_ml_dsa_hash_functions_portable_Shake128X4
   16594   state =
   16595     libcrux_ml_dsa_hash_functions_portable_init_absorb_11(Eurydice_array_to_slice_shared_e9(&seed0),
   16596       Eurydice_array_to_slice_shared_e9(&seed1),
   16597       Eurydice_array_to_slice_shared_e9(&seed2),
   16598       Eurydice_array_to_slice_shared_e9(&seed3));
   16599   libcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks_11(&state,
   16600     rand_stack0,
   16601     rand_stack1,
   16602     rand_stack2,
   16603     rand_stack3);
   16604   size_t sampled0 = (size_t)0U;
   16605   size_t sampled1 = (size_t)0U;
   16606   size_t sampled2 = (size_t)0U;
   16607   size_t sampled3 = (size_t)0U;
   16608   bool
   16609   done0 =
   16610     libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_4c(rand_stack0),
   16611       &sampled0,
   16612       tmp_stack.ptr);
   16613   bool
   16614   done1 =
   16615     libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_4c(rand_stack1),
   16616       &sampled1,
   16617       &tmp_stack.ptr[1U]);
   16618   bool
   16619   done2 =
   16620     libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_4c(rand_stack2),
   16621       &sampled2,
   16622       &tmp_stack.ptr[2U]);
   16623   bool
   16624   done3 =
   16625     libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_4c(rand_stack3),
   16626       &sampled3,
   16627       &tmp_stack.ptr[3U]);
   16628   while (true)
   16629   {
   16630     if (done0)
   16631     {
   16632       if (done1)
   16633       {
   16634         if (done2)
   16635         {
   16636           if (done3)
   16637           {
   16638             break;
   16639           }
   16640           else
   16641           {
   16642             Eurydice_arr_c5_x4
   16643             randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);
   16644             if (!done0)
   16645             {
   16646               done0 =
   16647                 libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.fst),
   16648                   &sampled0,
   16649                   tmp_stack.ptr);
   16650             }
   16651             if (!done1)
   16652             {
   16653               done1 =
   16654                 libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.snd),
   16655                   &sampled1,
   16656                   &tmp_stack.ptr[1U]);
   16657             }
   16658             if (!done2)
   16659             {
   16660               done2 =
   16661                 libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.thd),
   16662                   &sampled2,
   16663                   &tmp_stack.ptr[2U]);
   16664             }
   16665             if (!done3)
   16666             {
   16667               done3 =
   16668                 libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.f3),
   16669                   &sampled3,
   16670                   &tmp_stack.ptr[3U]);
   16671             }
   16672           }
   16673         }
   16674         else
   16675         {
   16676           Eurydice_arr_c5_x4
   16677           randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);
   16678           if (!done0)
   16679           {
   16680             done0 =
   16681               libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.fst),
   16682                 &sampled0,
   16683                 tmp_stack.ptr);
   16684           }
   16685           if (!done1)
   16686           {
   16687             done1 =
   16688               libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.snd),
   16689                 &sampled1,
   16690                 &tmp_stack.ptr[1U]);
   16691           }
   16692           if (!done2)
   16693           {
   16694             done2 =
   16695               libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.thd),
   16696                 &sampled2,
   16697                 &tmp_stack.ptr[2U]);
   16698           }
   16699           if (!done3)
   16700           {
   16701             done3 =
   16702               libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.f3),
   16703                 &sampled3,
   16704                 &tmp_stack.ptr[3U]);
   16705           }
   16706         }
   16707       }
   16708       else
   16709       {
   16710         Eurydice_arr_c5_x4
   16711         randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);
   16712         if (!done0)
   16713         {
   16714           done0 =
   16715             libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.fst),
   16716               &sampled0,
   16717               tmp_stack.ptr);
   16718         }
   16719         if (!done1)
   16720         {
   16721           done1 =
   16722             libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.snd),
   16723               &sampled1,
   16724               &tmp_stack.ptr[1U]);
   16725         }
   16726         if (!done2)
   16727         {
   16728           done2 =
   16729             libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.thd),
   16730               &sampled2,
   16731               &tmp_stack.ptr[2U]);
   16732         }
   16733         if (!done3)
   16734         {
   16735           done3 =
   16736             libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.f3),
   16737               &sampled3,
   16738               &tmp_stack.ptr[3U]);
   16739         }
   16740       }
   16741     }
   16742     else
   16743     {
   16744       Eurydice_arr_c5_x4
   16745       randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);
   16746       if (!done0)
   16747       {
   16748         done0 =
   16749           libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.fst),
   16750             &sampled0,
   16751             tmp_stack.ptr);
   16752       }
   16753       if (!done1)
   16754       {
   16755         done1 =
   16756           libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.snd),
   16757             &sampled1,
   16758             &tmp_stack.ptr[1U]);
   16759       }
   16760       if (!done2)
   16761       {
   16762         done2 =
   16763           libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.thd),
   16764             &sampled2,
   16765             &tmp_stack.ptr[2U]);
   16766       }
   16767       if (!done3)
   16768       {
   16769         done3 =
   16770           libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_2c(&randomnesses.f3),
   16771             &sampled3,
   16772             &tmp_stack.ptr[3U]);
   16773       }
   16774     }
   16775   }
   16776   for (size_t i = (size_t)0U; i < elements_requested; i++)
   16777   {
   16778     size_t k = i;
   16779     libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_2c0(&tmp_stack.ptr[k]),
   16780       &matrix.ptr[start_index + k]);
   16781   }
   16782 }
   16783 
   16784 /**
   16785 A monomorphic instance of libcrux_ml_dsa.samplex4.matrix_flat
   16786 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake128X4
   16787 with const generics
   16788 
   16789 */
   16790 static KRML_MUSTINLINE void
   16791 libcrux_ml_dsa_samplex4_matrix_flat_63(
   16792   size_t columns,
   16793   Eurydice_borrow_slice_u8 seed,
   16794   Eurydice_dst_ref_mut_44 matrix
   16795 )
   16796 {
   16797   Eurydice_arr_d10 rand_stack0 = { .data = { 0U } };
   16798   Eurydice_arr_d10 rand_stack1 = { .data = { 0U } };
   16799   Eurydice_arr_d10 rand_stack2 = { .data = { 0U } };
   16800   Eurydice_arr_d10 rand_stack3 = { .data = { 0U } };
   16801   Eurydice_arr_930
   16802   tmp_stack =
   16803     { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };
   16804   for (size_t i = (size_t)0U; i < matrix.meta / (size_t)4U + (size_t)1U; i++)
   16805   {
   16806     size_t start_index = i;
   16807     size_t start_index0 = start_index * (size_t)4U;
   16808     if (start_index0 >= matrix.meta)
   16809     {
   16810       break;
   16811     }
   16812     size_t elements_requested;
   16813     if (start_index0 + (size_t)4U <= matrix.meta)
   16814     {
   16815       elements_requested = (size_t)4U;
   16816     }
   16817     else
   16818     {
   16819       elements_requested = matrix.meta - start_index0;
   16820     }
   16821     libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_63(columns,
   16822       seed,
   16823       matrix,
   16824       &rand_stack0,
   16825       &rand_stack1,
   16826       &rand_stack2,
   16827       &rand_stack3,
   16828       Eurydice_array_to_slice_mut_7e(&tmp_stack),
   16829       start_index0,
   16830       elements_requested);
   16831   }
   16832 }
   16833 
   16834 /**
   16835 This function found in impl {libcrux_ml_dsa::samplex4::X4Sampler for libcrux_ml_dsa::samplex4::portable::PortableSampler}
   16836 */
   16837 /**
   16838 A monomorphic instance of libcrux_ml_dsa.samplex4.portable.matrix_flat_a8
   16839 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients
   16840 with const generics
   16841 
   16842 */
   16843 static inline void
   16844 libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(
   16845   size_t columns,
   16846   Eurydice_borrow_slice_u8 seed,
   16847   Eurydice_dst_ref_mut_44 matrix
   16848 )
   16849 {
   16850   libcrux_ml_dsa_samplex4_matrix_flat_63(columns, seed, matrix);
   16851 }
   16852 
   16853 /**
   16854 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256
   16855 with const generics
   16856 - OUTPUT_LENGTH= 64
   16857 */
   16858 static KRML_MUSTINLINE void
   16859 libcrux_ml_dsa_hash_functions_portable_shake256_c9(
   16860   Eurydice_borrow_slice_u8 input,
   16861   Eurydice_arr_c7 *out
   16862 )
   16863 {
   16864   libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_17(out), input);
   16865 }
   16866 
   16867 /**
   16868 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}
   16869 */
   16870 /**
   16871 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61
   16872 with const generics
   16873 - OUTPUT_LENGTH= 64
   16874 */
   16875 static KRML_MUSTINLINE void
   16876 libcrux_ml_dsa_hash_functions_portable_shake256_61_c9(
   16877   Eurydice_borrow_slice_u8 input,
   16878   Eurydice_arr_c7 *out
   16879 )
   16880 {
   16881   libcrux_ml_dsa_hash_functions_portable_shake256_c9(input, out);
   16882 }
   16883 
   16884 /**
   16885 A monomorphic instance of libcrux_ml_dsa.encoding.signing_key.generate_serialized
   16886 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256
   16887 with const generics
   16888 
   16889 */
   16890 static KRML_MUSTINLINE void
   16891 libcrux_ml_dsa_encoding_signing_key_generate_serialized_2e(
   16892   libcrux_ml_dsa_constants_Eta eta,
   16893   size_t error_ring_element_size,
   16894   Eurydice_borrow_slice_u8 seed_matrix,
   16895   Eurydice_borrow_slice_u8 seed_signing,
   16896   Eurydice_borrow_slice_u8 verification_key,
   16897   Eurydice_dst_ref_shared_44 s1_2,
   16898   Eurydice_dst_ref_shared_44 t0,
   16899   Eurydice_mut_borrow_slice_u8 signing_key_serialized
   16900 )
   16901 {
   16902   size_t offset = (size_t)0U;
   16903   Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(signing_key_serialized,
   16904       (
   16905         KRML_CLITERAL(core_ops_range_Range_87){
   16906           .start = offset,
   16907           .end = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE
   16908         }
   16909       )),
   16910     seed_matrix,
   16911     uint8_t);
   16912   offset += LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE;
   16913   Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(signing_key_serialized,
   16914       (
   16915         KRML_CLITERAL(core_ops_range_Range_87){
   16916           .start = offset,
   16917           .end = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE
   16918         }
   16919       )),
   16920     seed_signing,
   16921     uint8_t);
   16922   offset += LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE;
   16923   Eurydice_arr_c7 verification_key_hash = { .data = { 0U } };
   16924   libcrux_ml_dsa_hash_functions_portable_shake256_61_c9(verification_key,
   16925     &verification_key_hash);
   16926   Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(signing_key_serialized,
   16927       (
   16928         KRML_CLITERAL(core_ops_range_Range_87){
   16929           .start = offset,
   16930           .end = offset + LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH
   16931         }
   16932       )),
   16933     Eurydice_array_to_slice_shared_17(&verification_key_hash),
   16934     uint8_t);
   16935   offset += LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH;
   16936   for (size_t i = (size_t)0U; i < s1_2.meta; i++)
   16937   {
   16938     size_t i0 = i;
   16939     libcrux_ml_dsa_encoding_error_serialize_37(eta,
   16940       &s1_2.ptr[i0],
   16941       Eurydice_slice_subslice_mut_c8(signing_key_serialized,
   16942         (
   16943           KRML_CLITERAL(core_ops_range_Range_87){
   16944             .start = offset,
   16945             .end = offset + error_ring_element_size
   16946           }
   16947         )));
   16948     offset += error_ring_element_size;
   16949   }
   16950   for (size_t i = (size_t)0U; i < t0.meta; i++)
   16951   {
   16952     size_t _cloop_j = i;
   16953     const Eurydice_arr_a3 *ring_element = &t0.ptr[_cloop_j];
   16954     libcrux_ml_dsa_encoding_t0_serialize_37(ring_element,
   16955       Eurydice_slice_subslice_mut_c8(signing_key_serialized,
   16956         (
   16957           KRML_CLITERAL(core_ops_range_Range_87){
   16958             .start = offset,
   16959             .end = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE
   16960           }
   16961         )));
   16962     offset += LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE;
   16963   }
   16964 }
   16965 
   16966 /**
   16967 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.generate_key_pair
   16968 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   16969 with const generics
   16970 
   16971 */
   16972 static KRML_MUSTINLINE void
   16973 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_generate_key_pair_5a(
   16974   Eurydice_arr_ec randomness,
   16975   Eurydice_mut_borrow_slice_u8 signing_key,
   16976   Eurydice_mut_borrow_slice_u8 verification_key
   16977 )
   16978 {
   16979   Eurydice_arr_89 seed_expanded0 = { .data = { 0U } };
   16980   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   16981   shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   16982   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   16983     Eurydice_array_to_slice_shared_01(&randomness));
   16984   /* original Rust expression is not an lvalue in C */
   16985   Eurydice_array_u8x2
   16986   lvalue =
   16987     {
   16988       .data = {
   16989         (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   16990         (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A
   16991       }
   16992     };
   16993   libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   16994     Eurydice_array_to_slice_shared_82(&lvalue));
   16995   libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   16996     Eurydice_array_to_slice_mut_78(&seed_expanded0));
   16997   Eurydice_borrow_slice_u8_x2
   16998   uu____0 =
   16999     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_78(&seed_expanded0),
   17000       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   17001       uint8_t,
   17002       Eurydice_borrow_slice_u8_x2);
   17003   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   17004   Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;
   17005   Eurydice_borrow_slice_u8_x2
   17006   uu____1 =
   17007     Eurydice_slice_split_at(seed_expanded,
   17008       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,
   17009       uint8_t,
   17010       Eurydice_borrow_slice_u8_x2);
   17011   Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;
   17012   Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;
   17013   Eurydice_arr_8f s1_s2;
   17014   Eurydice_arr_a3 repeat_expression0[8U];
   17015   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   17016   {
   17017     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17018   }
   17019   memcpy(s1_s2.data, repeat_expression0, (size_t)8U * sizeof (Eurydice_arr_a3));
   17020   libcrux_ml_dsa_samplex4_sample_s1_and_s2_29(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,
   17021     seed_for_error_vectors,
   17022     Eurydice_array_to_slice_mut_20(&s1_s2));
   17023   Eurydice_arr_9d t0;
   17024   Eurydice_arr_a3 repeat_expression1[4U];
   17025   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17026   {
   17027     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17028   }
   17029   memcpy(t0.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_a3));
   17030   Eurydice_arr_2f a_as_ntt;
   17031   Eurydice_arr_a3 repeat_expression2[16U];
   17032   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   17033   {
   17034     repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17035   }
   17036   memcpy(a_as_ntt.data, repeat_expression2, (size_t)16U * sizeof (Eurydice_arr_a3));
   17037   libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17038     seed_for_a,
   17039     Eurydice_array_to_slice_mut_200(&a_as_ntt));
   17040   Eurydice_arr_9d s1_ntt;
   17041   Eurydice_arr_a3 repeat_expression3[4U];
   17042   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17043   {
   17044     repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17045   }
   17046   memcpy(s1_ntt.data, repeat_expression3, (size_t)4U * sizeof (Eurydice_arr_a3));
   17047   Eurydice_slice_copy(Eurydice_array_to_slice_mut_201(&s1_ntt),
   17048     Eurydice_array_to_subslice_shared_25(&s1_s2,
   17049       (
   17050         KRML_CLITERAL(core_ops_range_Range_87){
   17051           .start = (size_t)0U,
   17052           .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A
   17053         }
   17054       )),
   17055     Eurydice_arr_a3);
   17056   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17057   {
   17058     size_t i0 = i;
   17059     libcrux_ml_dsa_ntt_ntt_37(&s1_ntt.data[i0]);
   17060   }
   17061   libcrux_ml_dsa_matrix_compute_as1_plus_s2_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   17062     LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17063     Eurydice_array_to_slice_mut_200(&a_as_ntt),
   17064     Eurydice_array_to_slice_shared_20(&s1_ntt),
   17065     Eurydice_array_to_slice_shared_200(&s1_s2),
   17066     Eurydice_array_to_slice_mut_201(&t0));
   17067   Eurydice_arr_9d t1;
   17068   Eurydice_arr_a3 repeat_expression[4U];
   17069   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17070   {
   17071     repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17072   }
   17073   memcpy(t1.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_a3));
   17074   libcrux_ml_dsa_arithmetic_power2round_vector_37(Eurydice_array_to_slice_mut_201(&t0),
   17075     Eurydice_array_to_slice_mut_201(&t1));
   17076   libcrux_ml_dsa_encoding_verification_key_generate_serialized_37(seed_for_a,
   17077     Eurydice_array_to_slice_shared_20(&t1),
   17078     verification_key);
   17079   libcrux_ml_dsa_encoding_signing_key_generate_serialized_2e(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,
   17080     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,
   17081     seed_for_a,
   17082     seed_for_signing,
   17083     (
   17084       KRML_CLITERAL(Eurydice_borrow_slice_u8){
   17085         .ptr = verification_key.ptr,
   17086         .meta = verification_key.meta
   17087       }
   17088     ),
   17089     Eurydice_array_to_slice_shared_200(&s1_s2),
   17090     Eurydice_array_to_slice_shared_20(&t0),
   17091     signing_key);
   17092 }
   17093 
   17094 /**
   17095  Generate key pair.
   17096 */
   17097 static inline void
   17098 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_generate_key_pair(
   17099   Eurydice_arr_ec randomness,
   17100   Eurydice_arr_10 *signing_key,
   17101   Eurydice_arr_02 *verification_key
   17102 )
   17103 {
   17104   libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_generate_key_pair_5a(randomness,
   17105     Eurydice_array_to_slice_mut_34(signing_key),
   17106     Eurydice_array_to_slice_mut_9f0(verification_key));
   17107 }
   17108 
   17109 /**
   17110  This corresponds to line 6 in algorithm 7 in FIPS 204 (line 7 in algorithm
   17111  8, resp.).
   17112 
   17113  If `domain_separation_context` is supplied, applies domain
   17114  separation and length encoding to the context string,
   17115  before appending the message (in the regular variant) or the
   17116  pre-hash OID as well as the pre-hashed message digest. Otherwise,
   17117  it is assumed that `message` already contains domain separation
   17118  information.
   17119 
   17120  In FIPS 204 M' is the concatenation of the domain separated context, any
   17121  potential pre-hash OID and the message (or the message pre-hash). We do not
   17122  explicitely construct the concatenation in memory since it is of statically unknown
   17123  length, but feed its components directly into the incremental XOF.
   17124 
   17125  Refer to line 10 of Algorithm 2 (and line 5 of Algorithm 3, resp.) in [FIPS
   17126  204](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf#section.5)
   17127  for details on the domain separation for regular ML-DSA. Line
   17128  23 of Algorithm 4 (and line 18 of Algorithm 5,resp.) describe domain separation for the HashMl-DSA
   17129  variant.
   17130 */
   17131 /**
   17132 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.derive_message_representative
   17133 with types libcrux_ml_dsa_hash_functions_portable_Shake256Xof
   17134 with const generics
   17135 
   17136 */
   17137 static KRML_MUSTINLINE void
   17138 libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(
   17139   Eurydice_borrow_slice_u8 verification_key_hash,
   17140   const core_option_Option_84 *domain_separation_context,
   17141   Eurydice_borrow_slice_u8 message,
   17142   Eurydice_arr_c7 *message_representative
   17143 )
   17144 {
   17145   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   17146   shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   17147   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake, verification_key_hash);
   17148   if (domain_separation_context->tag == core_option_Some)
   17149   {
   17150     const
   17151     libcrux_ml_dsa_pre_hash_DomainSeparationContext
   17152     *domain_separation_context0 = &domain_separation_context->f0;
   17153     libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *uu____0 = &shake;
   17154     /* original Rust expression is not an lvalue in C */
   17155     Eurydice_arr_82
   17156     lvalue0 =
   17157       {
   17158         .data = {
   17159           (uint8_t)core_option__core__option__Option_T__TraitClause_0___is_some(libcrux_ml_dsa_pre_hash_pre_hash_oid_88(domain_separation_context0),
   17160             Eurydice_arr_c9,
   17161             bool)
   17162         }
   17163       };
   17164     libcrux_ml_dsa_hash_functions_portable_absorb_26(uu____0,
   17165       Eurydice_array_to_slice_shared_79(&lvalue0));
   17166     libcrux_sha3_generic_keccak_xof_KeccakXofState_8d *uu____1 = &shake;
   17167     /* original Rust expression is not an lvalue in C */
   17168     Eurydice_arr_82
   17169     lvalue =
   17170       { .data = { (uint8_t)libcrux_ml_dsa_pre_hash_context_88(domain_separation_context0).meta } };
   17171     libcrux_ml_dsa_hash_functions_portable_absorb_26(uu____1,
   17172       Eurydice_array_to_slice_shared_79(&lvalue));
   17173     libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   17174       libcrux_ml_dsa_pre_hash_context_88(domain_separation_context0));
   17175     const
   17176     core_option_Option_57
   17177     *uu____2 = libcrux_ml_dsa_pre_hash_pre_hash_oid_88(domain_separation_context0);
   17178     if (uu____2->tag == core_option_Some)
   17179     {
   17180       const Eurydice_arr_c9 *pre_hash_oid = &uu____2->f0;
   17181       libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   17182         Eurydice_array_to_slice_shared_2f(pre_hash_oid));
   17183     }
   17184   }
   17185   libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake, message);
   17186   libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   17187     Eurydice_array_to_slice_mut_17(message_representative));
   17188 }
   17189 
   17190 /**
   17191 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256
   17192 with const generics
   17193 - OUTPUT_LENGTH= 576
   17194 */
   17195 static KRML_MUSTINLINE void
   17196 libcrux_ml_dsa_hash_functions_portable_shake256_5a(
   17197   Eurydice_borrow_slice_u8 input,
   17198   Eurydice_arr_220 *out
   17199 )
   17200 {
   17201   libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_8a(out), input);
   17202 }
   17203 
   17204 /**
   17205 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}
   17206 */
   17207 /**
   17208 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_x4_9b
   17209 with const generics
   17210 - OUT_LEN= 576
   17211 */
   17212 static KRML_MUSTINLINE void
   17213 libcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_5a(
   17214   Eurydice_borrow_slice_u8 input0,
   17215   Eurydice_borrow_slice_u8 input1,
   17216   Eurydice_borrow_slice_u8 input2,
   17217   Eurydice_borrow_slice_u8 input3,
   17218   Eurydice_arr_220 *out0,
   17219   Eurydice_arr_220 *out1,
   17220   Eurydice_arr_220 *out2,
   17221   Eurydice_arr_220 *out3
   17222 )
   17223 {
   17224   libcrux_ml_dsa_hash_functions_portable_shake256_5a(input0, out0);
   17225   libcrux_ml_dsa_hash_functions_portable_shake256_5a(input1, out1);
   17226   libcrux_ml_dsa_hash_functions_portable_shake256_5a(input2, out2);
   17227   libcrux_ml_dsa_hash_functions_portable_shake256_5a(input3, out3);
   17228 }
   17229 
   17230 /**
   17231 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256
   17232 with const generics
   17233 - OUTPUT_LENGTH= 640
   17234 */
   17235 static KRML_MUSTINLINE void
   17236 libcrux_ml_dsa_hash_functions_portable_shake256_0e(
   17237   Eurydice_borrow_slice_u8 input,
   17238   Eurydice_arr_20 *out
   17239 )
   17240 {
   17241   libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_4f(out), input);
   17242 }
   17243 
   17244 /**
   17245 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}
   17246 */
   17247 /**
   17248 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_x4_9b
   17249 with const generics
   17250 - OUT_LEN= 640
   17251 */
   17252 static KRML_MUSTINLINE void
   17253 libcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_0e(
   17254   Eurydice_borrow_slice_u8 input0,
   17255   Eurydice_borrow_slice_u8 input1,
   17256   Eurydice_borrow_slice_u8 input2,
   17257   Eurydice_borrow_slice_u8 input3,
   17258   Eurydice_arr_20 *out0,
   17259   Eurydice_arr_20 *out1,
   17260   Eurydice_arr_20 *out2,
   17261   Eurydice_arr_20 *out3
   17262 )
   17263 {
   17264   libcrux_ml_dsa_hash_functions_portable_shake256_0e(input0, out0);
   17265   libcrux_ml_dsa_hash_functions_portable_shake256_0e(input1, out1);
   17266   libcrux_ml_dsa_hash_functions_portable_shake256_0e(input2, out2);
   17267   libcrux_ml_dsa_hash_functions_portable_shake256_0e(input3, out3);
   17268 }
   17269 
   17270 /**
   17271 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}
   17272 */
   17273 /**
   17274 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61
   17275 with const generics
   17276 - OUTPUT_LENGTH= 640
   17277 */
   17278 static KRML_MUSTINLINE void
   17279 libcrux_ml_dsa_hash_functions_portable_shake256_61_0e(
   17280   Eurydice_borrow_slice_u8 input,
   17281   Eurydice_arr_20 *out
   17282 )
   17283 {
   17284   libcrux_ml_dsa_hash_functions_portable_shake256_0e(input, out);
   17285 }
   17286 
   17287 /**
   17288 This function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}
   17289 */
   17290 /**
   17291 A monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61
   17292 with const generics
   17293 - OUTPUT_LENGTH= 576
   17294 */
   17295 static KRML_MUSTINLINE void
   17296 libcrux_ml_dsa_hash_functions_portable_shake256_61_5a(
   17297   Eurydice_borrow_slice_u8 input,
   17298   Eurydice_arr_220 *out
   17299 )
   17300 {
   17301   libcrux_ml_dsa_hash_functions_portable_shake256_5a(input, out);
   17302 }
   17303 
   17304 /**
   17305 A monomorphic instance of libcrux_ml_dsa.sample.sample_mask_ring_element
   17306 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256
   17307 with const generics
   17308 
   17309 */
   17310 static KRML_MUSTINLINE void
   17311 libcrux_ml_dsa_sample_sample_mask_ring_element_2e(
   17312   const Eurydice_arr_91 *seed,
   17313   Eurydice_arr_a3 *result,
   17314   size_t gamma1_exponent
   17315 )
   17316 {
   17317   switch (gamma1_exponent)
   17318   {
   17319     case 17U:
   17320       {
   17321         break;
   17322       }
   17323     case 19U:
   17324       {
   17325         Eurydice_arr_20 out = { .data = { 0U } };
   17326         libcrux_ml_dsa_hash_functions_portable_shake256_61_0e(Eurydice_array_to_slice_shared_f1(seed),
   17327           &out);
   17328         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17329           Eurydice_array_to_slice_shared_4f(&out),
   17330           result);
   17331         return;
   17332       }
   17333     default:
   17334       {
   17335         KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!");
   17336         KRML_HOST_EXIT(255U);
   17337       }
   17338   }
   17339   Eurydice_arr_220 out = { .data = { 0U } };
   17340   libcrux_ml_dsa_hash_functions_portable_shake256_61_5a(Eurydice_array_to_slice_shared_f1(seed),
   17341     &out);
   17342   libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17343     Eurydice_array_to_slice_shared_8a(&out),
   17344     result);
   17345 }
   17346 
   17347 /**
   17348 A monomorphic instance of libcrux_ml_dsa.sample.sample_mask_vector
   17349 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   17350 with const generics
   17351 
   17352 */
   17353 static KRML_MUSTINLINE void
   17354 libcrux_ml_dsa_sample_sample_mask_vector_67(
   17355   size_t dimension,
   17356   size_t gamma1_exponent,
   17357   const Eurydice_arr_c7 *seed,
   17358   uint16_t *domain_separator,
   17359   Eurydice_dst_ref_mut_44 mask
   17360 )
   17361 {
   17362   Eurydice_arr_91
   17363   seed0 =
   17364     libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_17(seed),
   17365       domain_separator[0U]);
   17366   Eurydice_arr_91
   17367   seed1 =
   17368     libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_17(seed),
   17369       (uint32_t)domain_separator[0U] + 1U);
   17370   Eurydice_arr_91
   17371   seed2 =
   17372     libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_17(seed),
   17373       (uint32_t)domain_separator[0U] + 2U);
   17374   Eurydice_arr_91
   17375   seed3 =
   17376     libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_17(seed),
   17377       (uint32_t)domain_separator[0U] + 3U);
   17378   domain_separator[0U] = (uint32_t)domain_separator[0U] + 4U;
   17379   switch (gamma1_exponent)
   17380   {
   17381     case 17U:
   17382       {
   17383         Eurydice_arr_220 out0 = { .data = { 0U } };
   17384         Eurydice_arr_220 out1 = { .data = { 0U } };
   17385         Eurydice_arr_220 out2 = { .data = { 0U } };
   17386         Eurydice_arr_220 out3 = { .data = { 0U } };
   17387         libcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_5a(Eurydice_array_to_slice_shared_f1(&seed0),
   17388           Eurydice_array_to_slice_shared_f1(&seed1),
   17389           Eurydice_array_to_slice_shared_f1(&seed2),
   17390           Eurydice_array_to_slice_shared_f1(&seed3),
   17391           &out0,
   17392           &out1,
   17393           &out2,
   17394           &out3);
   17395         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17396           Eurydice_array_to_slice_shared_8a(&out0),
   17397           mask.ptr);
   17398         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17399           Eurydice_array_to_slice_shared_8a(&out1),
   17400           &mask.ptr[1U]);
   17401         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17402           Eurydice_array_to_slice_shared_8a(&out2),
   17403           &mask.ptr[2U]);
   17404         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17405           Eurydice_array_to_slice_shared_8a(&out3),
   17406           &mask.ptr[3U]);
   17407         break;
   17408       }
   17409     case 19U:
   17410       {
   17411         Eurydice_arr_20 out0 = { .data = { 0U } };
   17412         Eurydice_arr_20 out1 = { .data = { 0U } };
   17413         Eurydice_arr_20 out2 = { .data = { 0U } };
   17414         Eurydice_arr_20 out3 = { .data = { 0U } };
   17415         libcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_0e(Eurydice_array_to_slice_shared_f1(&seed0),
   17416           Eurydice_array_to_slice_shared_f1(&seed1),
   17417           Eurydice_array_to_slice_shared_f1(&seed2),
   17418           Eurydice_array_to_slice_shared_f1(&seed3),
   17419           &out0,
   17420           &out1,
   17421           &out2,
   17422           &out3);
   17423         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17424           Eurydice_array_to_slice_shared_4f(&out0),
   17425           mask.ptr);
   17426         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17427           Eurydice_array_to_slice_shared_4f(&out1),
   17428           &mask.ptr[1U]);
   17429         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17430           Eurydice_array_to_slice_shared_4f(&out2),
   17431           &mask.ptr[2U]);
   17432         libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,
   17433           Eurydice_array_to_slice_shared_4f(&out3),
   17434           &mask.ptr[3U]);
   17435         break;
   17436       }
   17437     default:
   17438       {
   17439         KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!");
   17440         KRML_HOST_EXIT(255U);
   17441       }
   17442   }
   17443   for (size_t i = (size_t)4U; i < dimension; i++)
   17444   {
   17445     size_t i0 = i;
   17446     Eurydice_arr_91
   17447     seed4 =
   17448       libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_17(seed),
   17449         domain_separator[0U]);
   17450     domain_separator[0U] = (uint32_t)domain_separator[0U] + 1U;
   17451     libcrux_ml_dsa_sample_sample_mask_ring_element_2e(&seed4, &mask.ptr[i0], gamma1_exponent);
   17452   }
   17453 }
   17454 
   17455 /**
   17456 A monomorphic instance of libcrux_ml_dsa.sample.sample_challenge_ring_element
   17457 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256
   17458 with const generics
   17459 
   17460 */
   17461 static KRML_MUSTINLINE void
   17462 libcrux_ml_dsa_sample_sample_challenge_ring_element_2e(
   17463   Eurydice_borrow_slice_u8 seed,
   17464   size_t number_of_ones,
   17465   Eurydice_arr_a3 *re
   17466 )
   17467 {
   17468   Eurydice_arr_7c state = libcrux_ml_dsa_hash_functions_portable_init_absorb_final_61(seed);
   17469   Eurydice_arr_ff
   17470   randomness0 = libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_61(&state);
   17471   Eurydice_array_u8x8 arr;
   17472   memcpy(arr.data,
   17473     Eurydice_array_to_subslice_shared_d40(&randomness0,
   17474       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })).ptr,
   17475     (size_t)8U * sizeof (uint8_t));
   17476   uint64_t
   17477   signs =
   17478     core_num__u64__from_le_bytes(core_result_unwrap_26_e0((
   17479           KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   17480         )));
   17481   Eurydice_arr_6c result = { .data = { 0U } };
   17482   size_t out_index = (size_t)256U - number_of_ones;
   17483   bool
   17484   done =
   17485     libcrux_ml_dsa_sample_inside_out_shuffle(Eurydice_array_to_subslice_from_shared_5f(&randomness0,
   17486         (size_t)8U),
   17487       &out_index,
   17488       &signs,
   17489       &result);
   17490   while (true)
   17491   {
   17492     if (done)
   17493     {
   17494       break;
   17495     }
   17496     else
   17497     {
   17498       Eurydice_arr_ff
   17499       randomness = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_61(&state);
   17500       done =
   17501         libcrux_ml_dsa_sample_inside_out_shuffle(Eurydice_array_to_slice_shared_58(&randomness),
   17502           &out_index,
   17503           &signs,
   17504           &result);
   17505     }
   17506   }
   17507   libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_af(&result), re);
   17508 }
   17509 
   17510 /**
   17511 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_internal
   17512 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   17513 with const generics
   17514 
   17515 */
   17516 static KRML_MUSTINLINE core_result_Result_53
   17517 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_internal_5a(
   17518   Eurydice_borrow_slice_u8 signing_key,
   17519   Eurydice_borrow_slice_u8 message,
   17520   core_option_Option_84 domain_separation_context,
   17521   Eurydice_arr_ec randomness,
   17522   Eurydice_arr_85 *signature
   17523 )
   17524 {
   17525   Eurydice_borrow_slice_u8_x2
   17526   uu____0 =
   17527     Eurydice_slice_split_at(signing_key,
   17528       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   17529       uint8_t,
   17530       Eurydice_borrow_slice_u8_x2);
   17531   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   17532   Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;
   17533   Eurydice_borrow_slice_u8_x2
   17534   uu____1 =
   17535     Eurydice_slice_split_at(remaining_serialized0,
   17536       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,
   17537       uint8_t,
   17538       Eurydice_borrow_slice_u8_x2);
   17539   Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;
   17540   Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;
   17541   Eurydice_borrow_slice_u8_x2
   17542   uu____2 =
   17543     Eurydice_slice_split_at(remaining_serialized1,
   17544       LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,
   17545       uint8_t,
   17546       Eurydice_borrow_slice_u8_x2);
   17547   Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;
   17548   Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;
   17549   Eurydice_borrow_slice_u8_x2
   17550   uu____3 =
   17551     Eurydice_slice_split_at(remaining_serialized2,
   17552       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE *
   17553         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17554       uint8_t,
   17555       Eurydice_borrow_slice_u8_x2);
   17556   Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;
   17557   Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;
   17558   Eurydice_borrow_slice_u8_x2
   17559   uu____4 =
   17560     Eurydice_slice_split_at(remaining_serialized,
   17561       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE *
   17562         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   17563       uint8_t,
   17564       Eurydice_borrow_slice_u8_x2);
   17565   Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;
   17566   Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;
   17567   Eurydice_arr_9d s1_as_ntt;
   17568   Eurydice_arr_a3 repeat_expression0[4U];
   17569   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17570   {
   17571     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17572   }
   17573   memcpy(s1_as_ntt.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_a3));
   17574   Eurydice_arr_9d s2_as_ntt;
   17575   Eurydice_arr_a3 repeat_expression1[4U];
   17576   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17577   {
   17578     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17579   }
   17580   memcpy(s2_as_ntt.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_a3));
   17581   Eurydice_arr_9d t0_as_ntt;
   17582   Eurydice_arr_a3 repeat_expression2[4U];
   17583   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17584   {
   17585     repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17586   }
   17587   memcpy(t0_as_ntt.data, repeat_expression2, (size_t)4U * sizeof (Eurydice_arr_a3));
   17588   libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,
   17589     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,
   17590     s1_serialized,
   17591     Eurydice_array_to_slice_mut_201(&s1_as_ntt));
   17592   libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,
   17593     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,
   17594     s2_serialized,
   17595     Eurydice_array_to_slice_mut_201(&s2_as_ntt));
   17596   libcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(t0_serialized,
   17597     Eurydice_array_to_slice_mut_201(&t0_as_ntt));
   17598   Eurydice_arr_2f matrix;
   17599   Eurydice_arr_a3 repeat_expression3[16U];
   17600   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   17601   {
   17602     repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17603   }
   17604   memcpy(matrix.data, repeat_expression3, (size_t)16U * sizeof (Eurydice_arr_a3));
   17605   libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17606     seed_for_a,
   17607     Eurydice_array_to_slice_mut_200(&matrix));
   17608   Eurydice_arr_c7 message_representative = { .data = { 0U } };
   17609   libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,
   17610     &domain_separation_context,
   17611     message,
   17612     &message_representative);
   17613   Eurydice_arr_c7 mask_seed = { .data = { 0U } };
   17614   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   17615   shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();
   17616   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);
   17617   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,
   17618     Eurydice_array_to_slice_shared_01(&randomness));
   17619   libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,
   17620     Eurydice_array_to_slice_shared_17(&message_representative));
   17621   libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,
   17622     Eurydice_array_to_slice_mut_17(&mask_seed));
   17623   uint16_t domain_separator_for_mask = 0U;
   17624   size_t attempt = (size_t)0U;
   17625   core_option_Option_14 commitment_hash0 = { .tag = core_option_None };
   17626   core_option_Option_d9 signer_response0 = { .tag = core_option_None };
   17627   core_option_Option_51 hint0 = { .tag = core_option_None };
   17628   while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)
   17629   {
   17630     attempt++;
   17631     Eurydice_arr_9d mask;
   17632     Eurydice_arr_a3 repeat_expression4[4U];
   17633     for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17634     {
   17635       repeat_expression4[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17636     }
   17637     memcpy(mask.data, repeat_expression4, (size_t)4U * sizeof (Eurydice_arr_a3));
   17638     Eurydice_arr_9d w0;
   17639     Eurydice_arr_a3 repeat_expression5[4U];
   17640     for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17641     {
   17642       repeat_expression5[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17643     }
   17644     memcpy(w0.data, repeat_expression5, (size_t)4U * sizeof (Eurydice_arr_a3));
   17645     Eurydice_arr_9d commitment;
   17646     Eurydice_arr_a3 repeat_expression6[4U];
   17647     for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17648     {
   17649       repeat_expression6[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17650     }
   17651     memcpy(commitment.data, repeat_expression6, (size_t)4U * sizeof (Eurydice_arr_a3));
   17652     libcrux_ml_dsa_sample_sample_mask_vector_67(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17653       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,
   17654       &mask_seed,
   17655       &domain_separator_for_mask,
   17656       Eurydice_array_to_slice_mut_201(&mask));
   17657     Eurydice_arr_9d a_x_mask;
   17658     Eurydice_arr_a3 repeat_expression[4U];
   17659     for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17660     {
   17661       repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   17662     }
   17663     memcpy(a_x_mask.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_a3));
   17664     Eurydice_arr_9d
   17665     mask_ntt =
   17666       core_array__core__clone__Clone_for__T__N___clone((size_t)4U,
   17667         &mask,
   17668         Eurydice_arr_a3,
   17669         Eurydice_arr_9d);
   17670     for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   17671     {
   17672       size_t i0 = i;
   17673       libcrux_ml_dsa_ntt_ntt_37(&mask_ntt.data[i0]);
   17674     }
   17675     libcrux_ml_dsa_matrix_compute_matrix_x_mask_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   17676       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17677       Eurydice_array_to_slice_shared_201(&matrix),
   17678       Eurydice_array_to_slice_shared_20(&mask_ntt),
   17679       Eurydice_array_to_slice_mut_201(&a_x_mask));
   17680     libcrux_ml_dsa_arithmetic_decompose_vector_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   17681       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,
   17682       Eurydice_array_to_slice_shared_20(&a_x_mask),
   17683       Eurydice_array_to_slice_mut_201(&w0),
   17684       Eurydice_array_to_slice_mut_201(&commitment));
   17685     Eurydice_arr_ec commitment_hash_candidate = { .data = { 0U } };
   17686     Eurydice_arr_d2 commitment_serialized = { .data = { 0U } };
   17687     libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE,
   17688       Eurydice_array_to_slice_shared_20(&commitment),
   17689       Eurydice_array_to_slice_mut_27(&commitment_serialized));
   17690     libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   17691     shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   17692     libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   17693       Eurydice_array_to_slice_shared_17(&message_representative));
   17694     libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   17695       Eurydice_array_to_slice_shared_27(&commitment_serialized));
   17696     libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   17697       Eurydice_array_to_slice_mut_01(&commitment_hash_candidate));
   17698     Eurydice_arr_a3 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();
   17699     libcrux_ml_dsa_sample_sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_01(&commitment_hash_candidate),
   17700       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE,
   17701       &verifier_challenge);
   17702     libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);
   17703     Eurydice_arr_9d
   17704     challenge_times_s1 =
   17705       core_array__core__clone__Clone_for__T__N___clone((size_t)4U,
   17706         &s1_as_ntt,
   17707         Eurydice_arr_a3,
   17708         Eurydice_arr_9d);
   17709     Eurydice_arr_9d
   17710     challenge_times_s2 =
   17711       core_array__core__clone__Clone_for__T__N___clone((size_t)4U,
   17712         &s2_as_ntt,
   17713         Eurydice_arr_a3,
   17714         Eurydice_arr_9d);
   17715     libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_201(&challenge_times_s1),
   17716       &verifier_challenge);
   17717     libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_201(&challenge_times_s2),
   17718       &verifier_challenge);
   17719     libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17720       Eurydice_array_to_slice_mut_201(&mask),
   17721       Eurydice_array_to_slice_shared_20(&challenge_times_s1));
   17722     libcrux_ml_dsa_matrix_subtract_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   17723       Eurydice_array_to_slice_mut_201(&w0),
   17724       Eurydice_array_to_slice_shared_20(&challenge_times_s2));
   17725     if
   17726     (
   17727       !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_20(&mask),
   17728         (int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT) -
   17729           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)
   17730     )
   17731     {
   17732       if
   17733       (
   17734         !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_20(&w0),
   17735           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)
   17736       )
   17737       {
   17738         Eurydice_arr_9d
   17739         challenge_times_t0 =
   17740           core_array__core__clone__Clone_for__T__N___clone((size_t)4U,
   17741             &t0_as_ntt,
   17742             Eurydice_arr_a3,
   17743             Eurydice_arr_9d);
   17744         libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_201(&challenge_times_t0),
   17745           &verifier_challenge);
   17746         if
   17747         (
   17748           !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_20(&challenge_times_t0),
   17749             LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2)
   17750         )
   17751         {
   17752           libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   17753             Eurydice_array_to_slice_mut_201(&w0),
   17754             Eurydice_array_to_slice_shared_20(&challenge_times_t0));
   17755           Eurydice_arr_b7
   17756           hint_candidate =
   17757             {
   17758               .data = {
   17759                 { .data = { 0U } },
   17760                 { .data = { 0U } },
   17761                 { .data = { 0U } },
   17762                 { .data = { 0U } }
   17763               }
   17764             };
   17765           size_t
   17766           ones_in_hint =
   17767             libcrux_ml_dsa_arithmetic_make_hint_37(Eurydice_array_to_slice_shared_20(&w0),
   17768               Eurydice_array_to_slice_shared_20(&commitment),
   17769               LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,
   17770               Eurydice_array_to_slice_mut_86(&hint_candidate));
   17771           if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT))
   17772           {
   17773             attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;
   17774             commitment_hash0 =
   17775               (
   17776                 KRML_CLITERAL(core_option_Option_14){
   17777                   .tag = core_option_Some,
   17778                   .f0 = commitment_hash_candidate
   17779                 }
   17780               );
   17781             signer_response0 =
   17782               (KRML_CLITERAL(core_option_Option_d9){ .tag = core_option_Some, .f0 = mask });
   17783             hint0 =
   17784               (
   17785                 KRML_CLITERAL(core_option_Option_51){
   17786                   .tag = core_option_Some,
   17787                   .f0 = hint_candidate
   17788                 }
   17789               );
   17790           }
   17791         }
   17792       }
   17793     }
   17794   }
   17795   core_result_Result_53 uu____5;
   17796   if (commitment_hash0.tag == core_option_None)
   17797   {
   17798     uu____5 =
   17799       (
   17800         KRML_CLITERAL(core_result_Result_53){
   17801           .tag = core_result_Err,
   17802           .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   17803         }
   17804       );
   17805   }
   17806   else
   17807   {
   17808     Eurydice_arr_ec commitment_hash = commitment_hash0.f0;
   17809     Eurydice_arr_ec commitment_hash1 = commitment_hash;
   17810     if (signer_response0.tag == core_option_None)
   17811     {
   17812       uu____5 =
   17813         (
   17814           KRML_CLITERAL(core_result_Result_53){
   17815             .tag = core_result_Err,
   17816             .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   17817           }
   17818         );
   17819     }
   17820     else
   17821     {
   17822       Eurydice_arr_9d signer_response = signer_response0.f0;
   17823       Eurydice_arr_9d signer_response1 = signer_response;
   17824       if (!(hint0.tag == core_option_None))
   17825       {
   17826         Eurydice_arr_b7 hint = hint0.f0;
   17827         Eurydice_arr_b7 hint1 = hint;
   17828         libcrux_ml_dsa_encoding_signature_serialize_37(Eurydice_array_to_slice_shared_01(&commitment_hash1),
   17829           Eurydice_array_to_slice_shared_20(&signer_response1),
   17830           Eurydice_array_to_slice_shared_86(&hint1),
   17831           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE,
   17832           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   17833           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   17834           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,
   17835           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE,
   17836           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT,
   17837           Eurydice_array_to_slice_mut_0d(signature));
   17838         return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });
   17839       }
   17840       uu____5 =
   17841         (
   17842           KRML_CLITERAL(core_result_Result_53){
   17843             .tag = core_result_Err,
   17844             .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   17845           }
   17846         );
   17847     }
   17848   }
   17849   return uu____5;
   17850 }
   17851 
   17852 /**
   17853 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_mut
   17854 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   17855 with const generics
   17856 
   17857 */
   17858 static KRML_MUSTINLINE core_result_Result_53
   17859 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_mut_5a(
   17860   Eurydice_borrow_slice_u8 signing_key,
   17861   Eurydice_borrow_slice_u8 message,
   17862   Eurydice_borrow_slice_u8 context,
   17863   Eurydice_arr_ec randomness,
   17864   Eurydice_arr_85 *signature
   17865 )
   17866 {
   17867   core_result_Result_a8
   17868   uu____0 =
   17869     libcrux_ml_dsa_pre_hash_new_88(context,
   17870       (KRML_CLITERAL(core_option_Option_57){ .tag = core_option_None }));
   17871   if (!(uu____0.tag == core_result_Ok))
   17872   {
   17873     return
   17874       (
   17875         KRML_CLITERAL(core_result_Result_53){
   17876           .tag = core_result_Err,
   17877           .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   17878         }
   17879       );
   17880   }
   17881   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   17882   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   17883   return
   17884     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_internal_5a(signing_key,
   17885       message,
   17886       (
   17887         KRML_CLITERAL(core_option_Option_84){
   17888           .tag = core_option_Some,
   17889           .f0 = domain_separation_context
   17890         }
   17891       ),
   17892       randomness,
   17893       signature);
   17894 }
   17895 
   17896 /**
   17897 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign
   17898 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   17899 with const generics
   17900 
   17901 */
   17902 static KRML_MUSTINLINE core_result_Result_48
   17903 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_5a(
   17904   Eurydice_borrow_slice_u8 signing_key,
   17905   Eurydice_borrow_slice_u8 message,
   17906   Eurydice_borrow_slice_u8 context,
   17907   Eurydice_arr_ec randomness
   17908 )
   17909 {
   17910   Eurydice_arr_85 signature = libcrux_ml_dsa_types_zero_c5_37();
   17911   core_result_Result_53
   17912   uu____0 =
   17913     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_mut_5a(signing_key,
   17914       message,
   17915       context,
   17916       randomness,
   17917       &signature);
   17918   core_result_Result_48 uu____1;
   17919   if (uu____0.tag == core_result_Ok)
   17920   {
   17921     uu____1 =
   17922       (
   17923         KRML_CLITERAL(core_result_Result_48){
   17924           .tag = core_result_Ok,
   17925           .val = { .case_Ok = signature }
   17926         }
   17927       );
   17928   }
   17929   else
   17930   {
   17931     libcrux_ml_dsa_types_SigningError e = uu____0.f0;
   17932     uu____1 =
   17933       (KRML_CLITERAL(core_result_Result_48){ .tag = core_result_Err, .val = { .case_Err = e } });
   17934   }
   17935   return uu____1;
   17936 }
   17937 
   17938 /**
   17939  Sign.
   17940 */
   17941 static inline core_result_Result_48
   17942 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign(
   17943   const Eurydice_arr_10 *signing_key,
   17944   Eurydice_borrow_slice_u8 message,
   17945   Eurydice_borrow_slice_u8 context,
   17946   Eurydice_arr_ec randomness
   17947 )
   17948 {
   17949   return
   17950     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_5a(Eurydice_array_to_slice_shared_34(signing_key),
   17951       message,
   17952       context,
   17953       randomness);
   17954 }
   17955 
   17956 /**
   17957  Sign.
   17958 */
   17959 static inline core_result_Result_53
   17960 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_mut(
   17961   const Eurydice_arr_10 *signing_key,
   17962   Eurydice_borrow_slice_u8 message,
   17963   Eurydice_borrow_slice_u8 context,
   17964   Eurydice_arr_ec randomness,
   17965   Eurydice_arr_85 *signature
   17966 )
   17967 {
   17968   return
   17969     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_mut_5a(Eurydice_array_to_slice_shared_34(signing_key),
   17970       message,
   17971       context,
   17972       randomness,
   17973       signature);
   17974 }
   17975 
   17976 /**
   17977 This function found in impl {libcrux_ml_dsa::pre_hash::PreHash for libcrux_ml_dsa::pre_hash::SHAKE128_PH}
   17978 */
   17979 /**
   17980 A monomorphic instance of libcrux_ml_dsa.pre_hash.hash_30
   17981 with types libcrux_ml_dsa_hash_functions_portable_Shake128
   17982 with const generics
   17983 
   17984 */
   17985 static KRML_MUSTINLINE void
   17986 libcrux_ml_dsa_pre_hash_hash_30_83(
   17987   Eurydice_borrow_slice_u8 message,
   17988   Eurydice_mut_borrow_slice_u8 output
   17989 )
   17990 {
   17991   libcrux_ml_dsa_hash_functions_portable_shake128_7b(message, output);
   17992 }
   17993 
   17994 /**
   17995 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_pre_hashed_mut
   17996 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   17997 with const generics
   17998 
   17999 */
   18000 static KRML_MUSTINLINE core_result_Result_53
   18001 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_pre_hashed_mut_3f(
   18002   Eurydice_borrow_slice_u8 signing_key,
   18003   Eurydice_borrow_slice_u8 message,
   18004   Eurydice_borrow_slice_u8 context,
   18005   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   18006   Eurydice_arr_ec randomness,
   18007   Eurydice_arr_85 *signature
   18008 )
   18009 {
   18010   if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))
   18011   {
   18012     libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);
   18013     core_result_Result_a8
   18014     uu____0 =
   18015       libcrux_ml_dsa_pre_hash_new_88(context,
   18016         (
   18017           KRML_CLITERAL(core_option_Option_57){
   18018             .tag = core_option_Some,
   18019             .f0 = libcrux_ml_dsa_pre_hash_oid_30()
   18020           }
   18021         ));
   18022     if (!(uu____0.tag == core_result_Ok))
   18023     {
   18024       return
   18025         (
   18026           KRML_CLITERAL(core_result_Result_53){
   18027             .tag = core_result_Err,
   18028             .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   18029           }
   18030         );
   18031     }
   18032     libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   18033     libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   18034     return
   18035       libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_internal_5a(signing_key,
   18036         (
   18037           KRML_CLITERAL(Eurydice_borrow_slice_u8){
   18038             .ptr = pre_hash_buffer.ptr,
   18039             .meta = pre_hash_buffer.meta
   18040           }
   18041         ),
   18042         (
   18043           KRML_CLITERAL(core_option_Option_84){
   18044             .tag = core_option_Some,
   18045             .f0 = domain_separation_context
   18046           }
   18047         ),
   18048         randomness,
   18049         signature);
   18050   }
   18051   return
   18052     (
   18053       KRML_CLITERAL(core_result_Result_53){
   18054         .tag = core_result_Err,
   18055         .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   18056       }
   18057     );
   18058 }
   18059 
   18060 /**
   18061 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_pre_hashed
   18062 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   18063 with const generics
   18064 
   18065 */
   18066 static KRML_MUSTINLINE core_result_Result_48
   18067 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_pre_hashed_3f(
   18068   Eurydice_borrow_slice_u8 signing_key,
   18069   Eurydice_borrow_slice_u8 message,
   18070   Eurydice_borrow_slice_u8 context,
   18071   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   18072   Eurydice_arr_ec randomness
   18073 )
   18074 {
   18075   Eurydice_arr_85 signature = libcrux_ml_dsa_types_zero_c5_37();
   18076   core_result_Result_53
   18077   uu____0 =
   18078     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_pre_hashed_mut_3f(signing_key,
   18079       message,
   18080       context,
   18081       pre_hash_buffer,
   18082       randomness,
   18083       &signature);
   18084   core_result_Result_48 uu____1;
   18085   if (uu____0.tag == core_result_Ok)
   18086   {
   18087     uu____1 =
   18088       (
   18089         KRML_CLITERAL(core_result_Result_48){
   18090           .tag = core_result_Ok,
   18091           .val = { .case_Ok = signature }
   18092         }
   18093       );
   18094   }
   18095   else
   18096   {
   18097     libcrux_ml_dsa_types_SigningError e = uu____0.f0;
   18098     uu____1 =
   18099       (KRML_CLITERAL(core_result_Result_48){ .tag = core_result_Err, .val = { .case_Err = e } });
   18100   }
   18101   return uu____1;
   18102 }
   18103 
   18104 /**
   18105  Sign (pre-hashed).
   18106 */
   18107 static inline core_result_Result_48
   18108 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_pre_hashed_shake128(
   18109   const Eurydice_arr_10 *signing_key,
   18110   Eurydice_borrow_slice_u8 message,
   18111   Eurydice_borrow_slice_u8 context,
   18112   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   18113   Eurydice_arr_ec randomness
   18114 )
   18115 {
   18116   return
   18117     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_sign_pre_hashed_3f(Eurydice_array_to_slice_shared_34(signing_key),
   18118       message,
   18119       context,
   18120       pre_hash_buffer,
   18121       randomness);
   18122 }
   18123 
   18124 /**
   18125  The internal verification API.
   18126 
   18127  If no `domain_separation_context` is supplied, it is assumed that
   18128  `message` already contains the domain separation.
   18129 */
   18130 /**
   18131 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify_internal
   18132 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof
   18133 with const generics
   18134 
   18135 */
   18136 static KRML_MUSTINLINE core_result_Result_41
   18137 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_verify_internal_5a(
   18138   const Eurydice_arr_02 *verification_key,
   18139   Eurydice_borrow_slice_u8 message,
   18140   core_option_Option_84 domain_separation_context,
   18141   const Eurydice_arr_85 *signature_serialized
   18142 )
   18143 {
   18144   Eurydice_borrow_slice_u8_x2
   18145   uu____0 =
   18146     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_9f(verification_key),
   18147       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   18148       uint8_t,
   18149       Eurydice_borrow_slice_u8_x2);
   18150   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   18151   Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;
   18152   Eurydice_arr_9d t1;
   18153   Eurydice_arr_a3 repeat_expression0[4U];
   18154   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   18155   {
   18156     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18157   }
   18158   memcpy(t1.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_a3));
   18159   libcrux_ml_dsa_encoding_verification_key_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   18160     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_VERIFICATION_KEY_SIZE,
   18161     t1_serialized,
   18162     Eurydice_array_to_slice_mut_201(&t1));
   18163   Eurydice_arr_ec deserialized_commitment_hash = { .data = { 0U } };
   18164   Eurydice_arr_9d deserialized_signer_response;
   18165   Eurydice_arr_a3 repeat_expression1[4U];
   18166   for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   18167   {
   18168     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18169   }
   18170   memcpy(deserialized_signer_response.data,
   18171     repeat_expression1,
   18172     (size_t)4U * sizeof (Eurydice_arr_a3));
   18173   Eurydice_arr_b7
   18174   deserialized_hint =
   18175     { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };
   18176   core_result_Result_41
   18177   uu____1 =
   18178     libcrux_ml_dsa_encoding_signature_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   18179       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   18180       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE,
   18181       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,
   18182       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE,
   18183       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT,
   18184       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_SIGNATURE_SIZE,
   18185       Eurydice_array_to_slice_shared_0d(signature_serialized),
   18186       Eurydice_array_to_slice_mut_01(&deserialized_commitment_hash),
   18187       Eurydice_array_to_slice_mut_201(&deserialized_signer_response),
   18188       Eurydice_array_to_slice_mut_86(&deserialized_hint));
   18189   core_result_Result_41 uu____2;
   18190   if (uu____1.tag == core_result_Ok)
   18191   {
   18192     if
   18193     (
   18194       libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_20(&deserialized_signer_response),
   18195         (int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT) -
   18196           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)
   18197     )
   18198     {
   18199       uu____2 =
   18200         (
   18201           KRML_CLITERAL(core_result_Result_41){
   18202             .tag = core_result_Err,
   18203             .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError
   18204           }
   18205         );
   18206     }
   18207     else
   18208     {
   18209       Eurydice_arr_2f matrix;
   18210       Eurydice_arr_a3 repeat_expression[16U];
   18211       for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   18212       {
   18213         repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18214       }
   18215       memcpy(matrix.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_a3));
   18216       libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   18217         seed_for_a,
   18218         Eurydice_array_to_slice_mut_200(&matrix));
   18219       Eurydice_arr_c7 verification_key_hash = { .data = { 0U } };
   18220       libcrux_ml_dsa_hash_functions_portable_shake256_61_c9(Eurydice_array_to_slice_shared_9f(verification_key),
   18221         &verification_key_hash);
   18222       Eurydice_arr_c7 message_representative = { .data = { 0U } };
   18223       libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_17(&verification_key_hash),
   18224         &domain_separation_context,
   18225         message,
   18226         &message_representative);
   18227       Eurydice_arr_a3 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();
   18228       libcrux_ml_dsa_sample_sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_01(&deserialized_commitment_hash),
   18229         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE,
   18230         &verifier_challenge);
   18231       libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);
   18232       for (size_t i = (size_t)0U; i < (size_t)4U; i++)
   18233       {
   18234         size_t i0 = i;
   18235         libcrux_ml_dsa_ntt_ntt_37(&deserialized_signer_response.data[i0]);
   18236       }
   18237       libcrux_ml_dsa_matrix_compute_w_approx_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,
   18238         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,
   18239         Eurydice_array_to_slice_shared_201(&matrix),
   18240         Eurydice_array_to_slice_shared_20(&deserialized_signer_response),
   18241         &verifier_challenge,
   18242         Eurydice_array_to_slice_mut_201(&t1));
   18243       Eurydice_arr_ec recomputed_commitment_hash = { .data = { 0U } };
   18244       libcrux_ml_dsa_arithmetic_use_hint_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,
   18245         Eurydice_array_to_slice_shared_86(&deserialized_hint),
   18246         Eurydice_array_to_slice_mut_201(&t1));
   18247       Eurydice_arr_d2 commitment_serialized = { .data = { 0U } };
   18248       libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE,
   18249         Eurydice_array_to_slice_shared_20(&t1),
   18250         Eurydice_array_to_slice_mut_27(&commitment_serialized));
   18251       libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   18252       shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   18253       libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   18254         Eurydice_array_to_slice_shared_17(&message_representative));
   18255       libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   18256         Eurydice_array_to_slice_shared_27(&commitment_serialized));
   18257       libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   18258         Eurydice_array_to_slice_mut_01(&recomputed_commitment_hash));
   18259       if
   18260       (
   18261         Eurydice_array_eq((size_t)32U,
   18262           &deserialized_commitment_hash,
   18263           &recomputed_commitment_hash,
   18264           uint8_t)
   18265       )
   18266       {
   18267         uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });
   18268       }
   18269       else
   18270       {
   18271         uu____2 =
   18272           (
   18273             KRML_CLITERAL(core_result_Result_41){
   18274               .tag = core_result_Err,
   18275               .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError
   18276             }
   18277           );
   18278       }
   18279     }
   18280   }
   18281   else
   18282   {
   18283     libcrux_ml_dsa_types_VerificationError e = uu____1.f0;
   18284     uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });
   18285   }
   18286   return uu____2;
   18287 }
   18288 
   18289 /**
   18290 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify
   18291 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof
   18292 with const generics
   18293 
   18294 */
   18295 static KRML_MUSTINLINE core_result_Result_41
   18296 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_verify_5a(
   18297   const Eurydice_arr_02 *verification_key_serialized,
   18298   Eurydice_borrow_slice_u8 message,
   18299   Eurydice_borrow_slice_u8 context,
   18300   const Eurydice_arr_85 *signature_serialized
   18301 )
   18302 {
   18303   core_result_Result_a8
   18304   uu____0 =
   18305     libcrux_ml_dsa_pre_hash_new_88(context,
   18306       (KRML_CLITERAL(core_option_Option_57){ .tag = core_option_None }));
   18307   if (!(uu____0.tag == core_result_Ok))
   18308   {
   18309     return
   18310       (
   18311         KRML_CLITERAL(core_result_Result_41){
   18312           .tag = core_result_Err,
   18313           .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError
   18314         }
   18315       );
   18316   }
   18317   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   18318   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   18319   return
   18320     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_verify_internal_5a(verification_key_serialized,
   18321       message,
   18322       (
   18323         KRML_CLITERAL(core_option_Option_84){
   18324           .tag = core_option_Some,
   18325           .f0 = domain_separation_context
   18326         }
   18327       ),
   18328       signature_serialized);
   18329 }
   18330 
   18331 /**
   18332  Verify.
   18333 */
   18334 static inline core_result_Result_41
   18335 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify(
   18336   const Eurydice_arr_02 *verification_key,
   18337   Eurydice_borrow_slice_u8 message,
   18338   Eurydice_borrow_slice_u8 context,
   18339   const Eurydice_arr_85 *signature
   18340 )
   18341 {
   18342   return
   18343     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_verify_5a(verification_key,
   18344       message,
   18345       context,
   18346       signature);
   18347 }
   18348 
   18349 /**
   18350 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify_pre_hashed
   18351 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   18352 with const generics
   18353 
   18354 */
   18355 static KRML_MUSTINLINE core_result_Result_41
   18356 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_verify_pre_hashed_3f(
   18357   const Eurydice_arr_02 *verification_key_serialized,
   18358   Eurydice_borrow_slice_u8 message,
   18359   Eurydice_borrow_slice_u8 context,
   18360   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   18361   const Eurydice_arr_85 *signature_serialized
   18362 )
   18363 {
   18364   libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);
   18365   core_result_Result_a8
   18366   uu____0 =
   18367     libcrux_ml_dsa_pre_hash_new_88(context,
   18368       (
   18369         KRML_CLITERAL(core_option_Option_57){
   18370           .tag = core_option_Some,
   18371           .f0 = libcrux_ml_dsa_pre_hash_oid_30()
   18372         }
   18373       ));
   18374   if (!(uu____0.tag == core_result_Ok))
   18375   {
   18376     return
   18377       (
   18378         KRML_CLITERAL(core_result_Result_41){
   18379           .tag = core_result_Err,
   18380           .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError
   18381         }
   18382       );
   18383   }
   18384   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   18385   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   18386   return
   18387     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_verify_internal_5a(verification_key_serialized,
   18388       (
   18389         KRML_CLITERAL(Eurydice_borrow_slice_u8){
   18390           .ptr = pre_hash_buffer.ptr,
   18391           .meta = pre_hash_buffer.meta
   18392         }
   18393       ),
   18394       (
   18395         KRML_CLITERAL(core_option_Option_84){
   18396           .tag = core_option_Some,
   18397           .f0 = domain_separation_context
   18398         }
   18399       ),
   18400       signature_serialized);
   18401 }
   18402 
   18403 /**
   18404  Verify (pre-hashed with SHAKE-128).
   18405 */
   18406 static inline core_result_Result_41
   18407 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify_pre_hashed_shake128(
   18408   const Eurydice_arr_02 *verification_key,
   18409   Eurydice_borrow_slice_u8 message,
   18410   Eurydice_borrow_slice_u8 context,
   18411   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   18412   const Eurydice_arr_85 *signature
   18413 )
   18414 {
   18415   return
   18416     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_verify_pre_hashed_3f(verification_key,
   18417       message,
   18418       context,
   18419       pre_hash_buffer,
   18420       signature);
   18421 }
   18422 
   18423 /**
   18424 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.generate_key_pair
   18425 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   18426 with const generics
   18427 
   18428 */
   18429 static KRML_MUSTINLINE void
   18430 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_generate_key_pair_5a(
   18431   Eurydice_arr_ec randomness,
   18432   Eurydice_mut_borrow_slice_u8 signing_key,
   18433   Eurydice_mut_borrow_slice_u8 verification_key
   18434 )
   18435 {
   18436   Eurydice_arr_89 seed_expanded0 = { .data = { 0U } };
   18437   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   18438   shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   18439   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   18440     Eurydice_array_to_slice_shared_01(&randomness));
   18441   /* original Rust expression is not an lvalue in C */
   18442   Eurydice_array_u8x2
   18443   lvalue =
   18444     {
   18445       .data = {
   18446         (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18447         (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A
   18448       }
   18449     };
   18450   libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   18451     Eurydice_array_to_slice_shared_82(&lvalue));
   18452   libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   18453     Eurydice_array_to_slice_mut_78(&seed_expanded0));
   18454   Eurydice_borrow_slice_u8_x2
   18455   uu____0 =
   18456     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_78(&seed_expanded0),
   18457       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   18458       uint8_t,
   18459       Eurydice_borrow_slice_u8_x2);
   18460   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   18461   Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;
   18462   Eurydice_borrow_slice_u8_x2
   18463   uu____1 =
   18464     Eurydice_slice_split_at(seed_expanded,
   18465       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,
   18466       uint8_t,
   18467       Eurydice_borrow_slice_u8_x2);
   18468   Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;
   18469   Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;
   18470   Eurydice_arr_47 s1_s2;
   18471   Eurydice_arr_a3 repeat_expression0[11U];
   18472   for (size_t i = (size_t)0U; i < (size_t)11U; i++)
   18473   {
   18474     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18475   }
   18476   memcpy(s1_s2.data, repeat_expression0, (size_t)11U * sizeof (Eurydice_arr_a3));
   18477   libcrux_ml_dsa_samplex4_sample_s1_and_s2_29(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,
   18478     seed_for_error_vectors,
   18479     Eurydice_array_to_slice_mut_202(&s1_s2));
   18480   Eurydice_arr_dc1 t0;
   18481   Eurydice_arr_a3 repeat_expression1[6U];
   18482   for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   18483   {
   18484     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18485   }
   18486   memcpy(t0.data, repeat_expression1, (size_t)6U * sizeof (Eurydice_arr_a3));
   18487   Eurydice_arr_5a a_as_ntt;
   18488   Eurydice_arr_a3 repeat_expression2[30U];
   18489   for (size_t i = (size_t)0U; i < (size_t)30U; i++)
   18490   {
   18491     repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18492   }
   18493   memcpy(a_as_ntt.data, repeat_expression2, (size_t)30U * sizeof (Eurydice_arr_a3));
   18494   libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18495     seed_for_a,
   18496     Eurydice_array_to_slice_mut_203(&a_as_ntt));
   18497   Eurydice_arr_5d s1_ntt;
   18498   Eurydice_arr_a3 repeat_expression3[5U];
   18499   for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   18500   {
   18501     repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18502   }
   18503   memcpy(s1_ntt.data, repeat_expression3, (size_t)5U * sizeof (Eurydice_arr_a3));
   18504   Eurydice_slice_copy(Eurydice_array_to_slice_mut_204(&s1_ntt),
   18505     Eurydice_array_to_subslice_shared_250(&s1_s2,
   18506       (
   18507         KRML_CLITERAL(core_ops_range_Range_87){
   18508           .start = (size_t)0U,
   18509           .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A
   18510         }
   18511       )),
   18512     Eurydice_arr_a3);
   18513   for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   18514   {
   18515     size_t i0 = i;
   18516     libcrux_ml_dsa_ntt_ntt_37(&s1_ntt.data[i0]);
   18517   }
   18518   libcrux_ml_dsa_matrix_compute_as1_plus_s2_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18519     LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18520     Eurydice_array_to_slice_mut_203(&a_as_ntt),
   18521     Eurydice_array_to_slice_shared_202(&s1_ntt),
   18522     Eurydice_array_to_slice_shared_203(&s1_s2),
   18523     Eurydice_array_to_slice_mut_205(&t0));
   18524   Eurydice_arr_dc1 t1;
   18525   Eurydice_arr_a3 repeat_expression[6U];
   18526   for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   18527   {
   18528     repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18529   }
   18530   memcpy(t1.data, repeat_expression, (size_t)6U * sizeof (Eurydice_arr_a3));
   18531   libcrux_ml_dsa_arithmetic_power2round_vector_37(Eurydice_array_to_slice_mut_205(&t0),
   18532     Eurydice_array_to_slice_mut_205(&t1));
   18533   libcrux_ml_dsa_encoding_verification_key_generate_serialized_37(seed_for_a,
   18534     Eurydice_array_to_slice_shared_204(&t1),
   18535     verification_key);
   18536   libcrux_ml_dsa_encoding_signing_key_generate_serialized_2e(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,
   18537     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,
   18538     seed_for_a,
   18539     seed_for_signing,
   18540     (
   18541       KRML_CLITERAL(Eurydice_borrow_slice_u8){
   18542         .ptr = verification_key.ptr,
   18543         .meta = verification_key.meta
   18544       }
   18545     ),
   18546     Eurydice_array_to_slice_shared_203(&s1_s2),
   18547     Eurydice_array_to_slice_shared_204(&t0),
   18548     signing_key);
   18549 }
   18550 
   18551 /**
   18552  Generate key pair.
   18553 */
   18554 static inline void
   18555 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_generate_key_pair(
   18556   Eurydice_arr_ec randomness,
   18557   Eurydice_arr_24 *signing_key,
   18558   Eurydice_arr_29 *verification_key
   18559 )
   18560 {
   18561   libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_generate_key_pair_5a(randomness,
   18562     Eurydice_array_to_slice_mut_98(signing_key),
   18563     Eurydice_array_to_slice_mut_37(verification_key));
   18564 }
   18565 
   18566 /**
   18567 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_internal
   18568 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   18569 with const generics
   18570 
   18571 */
   18572 static KRML_MUSTINLINE core_result_Result_53
   18573 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_internal_5a(
   18574   Eurydice_borrow_slice_u8 signing_key,
   18575   Eurydice_borrow_slice_u8 message,
   18576   core_option_Option_84 domain_separation_context,
   18577   Eurydice_arr_ec randomness,
   18578   Eurydice_arr_0c *signature
   18579 )
   18580 {
   18581   Eurydice_borrow_slice_u8_x2
   18582   uu____0 =
   18583     Eurydice_slice_split_at(signing_key,
   18584       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   18585       uint8_t,
   18586       Eurydice_borrow_slice_u8_x2);
   18587   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   18588   Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;
   18589   Eurydice_borrow_slice_u8_x2
   18590   uu____1 =
   18591     Eurydice_slice_split_at(remaining_serialized0,
   18592       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,
   18593       uint8_t,
   18594       Eurydice_borrow_slice_u8_x2);
   18595   Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;
   18596   Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;
   18597   Eurydice_borrow_slice_u8_x2
   18598   uu____2 =
   18599     Eurydice_slice_split_at(remaining_serialized1,
   18600       LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,
   18601       uint8_t,
   18602       Eurydice_borrow_slice_u8_x2);
   18603   Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;
   18604   Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;
   18605   Eurydice_borrow_slice_u8_x2
   18606   uu____3 =
   18607     Eurydice_slice_split_at(remaining_serialized2,
   18608       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE *
   18609         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18610       uint8_t,
   18611       Eurydice_borrow_slice_u8_x2);
   18612   Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;
   18613   Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;
   18614   Eurydice_borrow_slice_u8_x2
   18615   uu____4 =
   18616     Eurydice_slice_split_at(remaining_serialized,
   18617       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE *
   18618         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18619       uint8_t,
   18620       Eurydice_borrow_slice_u8_x2);
   18621   Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;
   18622   Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;
   18623   Eurydice_arr_5d s1_as_ntt;
   18624   Eurydice_arr_a3 repeat_expression0[5U];
   18625   for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   18626   {
   18627     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18628   }
   18629   memcpy(s1_as_ntt.data, repeat_expression0, (size_t)5U * sizeof (Eurydice_arr_a3));
   18630   Eurydice_arr_dc1 s2_as_ntt;
   18631   Eurydice_arr_a3 repeat_expression1[6U];
   18632   for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   18633   {
   18634     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18635   }
   18636   memcpy(s2_as_ntt.data, repeat_expression1, (size_t)6U * sizeof (Eurydice_arr_a3));
   18637   Eurydice_arr_dc1 t0_as_ntt;
   18638   Eurydice_arr_a3 repeat_expression2[6U];
   18639   for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   18640   {
   18641     repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18642   }
   18643   memcpy(t0_as_ntt.data, repeat_expression2, (size_t)6U * sizeof (Eurydice_arr_a3));
   18644   libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,
   18645     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,
   18646     s1_serialized,
   18647     Eurydice_array_to_slice_mut_204(&s1_as_ntt));
   18648   libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,
   18649     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,
   18650     s2_serialized,
   18651     Eurydice_array_to_slice_mut_205(&s2_as_ntt));
   18652   libcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(t0_serialized,
   18653     Eurydice_array_to_slice_mut_205(&t0_as_ntt));
   18654   Eurydice_arr_5a matrix;
   18655   Eurydice_arr_a3 repeat_expression3[30U];
   18656   for (size_t i = (size_t)0U; i < (size_t)30U; i++)
   18657   {
   18658     repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18659   }
   18660   memcpy(matrix.data, repeat_expression3, (size_t)30U * sizeof (Eurydice_arr_a3));
   18661   libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18662     seed_for_a,
   18663     Eurydice_array_to_slice_mut_203(&matrix));
   18664   Eurydice_arr_c7 message_representative = { .data = { 0U } };
   18665   libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,
   18666     &domain_separation_context,
   18667     message,
   18668     &message_representative);
   18669   Eurydice_arr_c7 mask_seed = { .data = { 0U } };
   18670   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   18671   shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();
   18672   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);
   18673   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,
   18674     Eurydice_array_to_slice_shared_01(&randomness));
   18675   libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,
   18676     Eurydice_array_to_slice_shared_17(&message_representative));
   18677   libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,
   18678     Eurydice_array_to_slice_mut_17(&mask_seed));
   18679   uint16_t domain_separator_for_mask = 0U;
   18680   size_t attempt = (size_t)0U;
   18681   core_option_Option_81 commitment_hash0 = { .tag = core_option_None };
   18682   core_option_Option_1e signer_response0 = { .tag = core_option_None };
   18683   core_option_Option_05 hint0 = { .tag = core_option_None };
   18684   while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)
   18685   {
   18686     attempt++;
   18687     Eurydice_arr_5d mask;
   18688     Eurydice_arr_a3 repeat_expression4[5U];
   18689     for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   18690     {
   18691       repeat_expression4[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18692     }
   18693     memcpy(mask.data, repeat_expression4, (size_t)5U * sizeof (Eurydice_arr_a3));
   18694     Eurydice_arr_dc1 w0;
   18695     Eurydice_arr_a3 repeat_expression5[6U];
   18696     for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   18697     {
   18698       repeat_expression5[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18699     }
   18700     memcpy(w0.data, repeat_expression5, (size_t)6U * sizeof (Eurydice_arr_a3));
   18701     Eurydice_arr_dc1 commitment;
   18702     Eurydice_arr_a3 repeat_expression6[6U];
   18703     for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   18704     {
   18705       repeat_expression6[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18706     }
   18707     memcpy(commitment.data, repeat_expression6, (size_t)6U * sizeof (Eurydice_arr_a3));
   18708     libcrux_ml_dsa_sample_sample_mask_vector_67(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18709       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,
   18710       &mask_seed,
   18711       &domain_separator_for_mask,
   18712       Eurydice_array_to_slice_mut_204(&mask));
   18713     Eurydice_arr_dc1 a_x_mask;
   18714     Eurydice_arr_a3 repeat_expression[6U];
   18715     for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   18716     {
   18717       repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   18718     }
   18719     memcpy(a_x_mask.data, repeat_expression, (size_t)6U * sizeof (Eurydice_arr_a3));
   18720     Eurydice_arr_5d
   18721     mask_ntt =
   18722       core_array__core__clone__Clone_for__T__N___clone((size_t)5U,
   18723         &mask,
   18724         Eurydice_arr_a3,
   18725         Eurydice_arr_5d);
   18726     for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   18727     {
   18728       size_t i0 = i;
   18729       libcrux_ml_dsa_ntt_ntt_37(&mask_ntt.data[i0]);
   18730     }
   18731     libcrux_ml_dsa_matrix_compute_matrix_x_mask_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18732       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18733       Eurydice_array_to_slice_shared_205(&matrix),
   18734       Eurydice_array_to_slice_shared_202(&mask_ntt),
   18735       Eurydice_array_to_slice_mut_205(&a_x_mask));
   18736     libcrux_ml_dsa_arithmetic_decompose_vector_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18737       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,
   18738       Eurydice_array_to_slice_shared_204(&a_x_mask),
   18739       Eurydice_array_to_slice_mut_205(&w0),
   18740       Eurydice_array_to_slice_mut_205(&commitment));
   18741     Eurydice_arr_65 commitment_hash_candidate = { .data = { 0U } };
   18742     Eurydice_arr_d2 commitment_serialized = { .data = { 0U } };
   18743     libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE,
   18744       Eurydice_array_to_slice_shared_204(&commitment),
   18745       Eurydice_array_to_slice_mut_27(&commitment_serialized));
   18746     libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   18747     shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   18748     libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   18749       Eurydice_array_to_slice_shared_17(&message_representative));
   18750     libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   18751       Eurydice_array_to_slice_shared_27(&commitment_serialized));
   18752     libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   18753       Eurydice_array_to_slice_mut_9f(&commitment_hash_candidate));
   18754     Eurydice_arr_a3 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();
   18755     libcrux_ml_dsa_sample_sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_9f0(&commitment_hash_candidate),
   18756       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE,
   18757       &verifier_challenge);
   18758     libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);
   18759     Eurydice_arr_5d
   18760     challenge_times_s1 =
   18761       core_array__core__clone__Clone_for__T__N___clone((size_t)5U,
   18762         &s1_as_ntt,
   18763         Eurydice_arr_a3,
   18764         Eurydice_arr_5d);
   18765     Eurydice_arr_dc1
   18766     challenge_times_s2 =
   18767       core_array__core__clone__Clone_for__T__N___clone((size_t)6U,
   18768         &s2_as_ntt,
   18769         Eurydice_arr_a3,
   18770         Eurydice_arr_dc1);
   18771     libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_204(&challenge_times_s1),
   18772       &verifier_challenge);
   18773     libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_205(&challenge_times_s2),
   18774       &verifier_challenge);
   18775     libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18776       Eurydice_array_to_slice_mut_204(&mask),
   18777       Eurydice_array_to_slice_shared_202(&challenge_times_s1));
   18778     libcrux_ml_dsa_matrix_subtract_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18779       Eurydice_array_to_slice_mut_205(&w0),
   18780       Eurydice_array_to_slice_shared_204(&challenge_times_s2));
   18781     if
   18782     (
   18783       !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_202(&mask),
   18784         (int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT) -
   18785           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)
   18786     )
   18787     {
   18788       if
   18789       (
   18790         !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_204(&w0),
   18791           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)
   18792       )
   18793       {
   18794         Eurydice_arr_dc1
   18795         challenge_times_t0 =
   18796           core_array__core__clone__Clone_for__T__N___clone((size_t)6U,
   18797             &t0_as_ntt,
   18798             Eurydice_arr_a3,
   18799             Eurydice_arr_dc1);
   18800         libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_205(&challenge_times_t0),
   18801           &verifier_challenge);
   18802         if
   18803         (
   18804           !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_204(&challenge_times_t0),
   18805             LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2)
   18806         )
   18807         {
   18808           libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18809             Eurydice_array_to_slice_mut_205(&w0),
   18810             Eurydice_array_to_slice_shared_204(&challenge_times_t0));
   18811           Eurydice_arr_5d0
   18812           hint_candidate =
   18813             {
   18814               .data = {
   18815                 { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },
   18816                 { .data = { 0U } }, { .data = { 0U } }
   18817               }
   18818             };
   18819           size_t
   18820           ones_in_hint =
   18821             libcrux_ml_dsa_arithmetic_make_hint_37(Eurydice_array_to_slice_shared_204(&w0),
   18822               Eurydice_array_to_slice_shared_204(&commitment),
   18823               LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,
   18824               Eurydice_array_to_slice_mut_860(&hint_candidate));
   18825           if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT))
   18826           {
   18827             attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;
   18828             commitment_hash0 =
   18829               (
   18830                 KRML_CLITERAL(core_option_Option_81){
   18831                   .tag = core_option_Some,
   18832                   .f0 = commitment_hash_candidate
   18833                 }
   18834               );
   18835             signer_response0 =
   18836               (KRML_CLITERAL(core_option_Option_1e){ .tag = core_option_Some, .f0 = mask });
   18837             hint0 =
   18838               (
   18839                 KRML_CLITERAL(core_option_Option_05){
   18840                   .tag = core_option_Some,
   18841                   .f0 = hint_candidate
   18842                 }
   18843               );
   18844           }
   18845         }
   18846       }
   18847     }
   18848   }
   18849   core_result_Result_53 uu____5;
   18850   if (commitment_hash0.tag == core_option_None)
   18851   {
   18852     uu____5 =
   18853       (
   18854         KRML_CLITERAL(core_result_Result_53){
   18855           .tag = core_result_Err,
   18856           .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   18857         }
   18858       );
   18859   }
   18860   else
   18861   {
   18862     Eurydice_arr_65 commitment_hash = commitment_hash0.f0;
   18863     Eurydice_arr_65 commitment_hash1 = commitment_hash;
   18864     if (signer_response0.tag == core_option_None)
   18865     {
   18866       uu____5 =
   18867         (
   18868           KRML_CLITERAL(core_result_Result_53){
   18869             .tag = core_result_Err,
   18870             .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   18871           }
   18872         );
   18873     }
   18874     else
   18875     {
   18876       Eurydice_arr_5d signer_response = signer_response0.f0;
   18877       Eurydice_arr_5d signer_response1 = signer_response;
   18878       if (!(hint0.tag == core_option_None))
   18879       {
   18880         Eurydice_arr_5d0 hint = hint0.f0;
   18881         Eurydice_arr_5d0 hint1 = hint;
   18882         libcrux_ml_dsa_encoding_signature_serialize_37(Eurydice_array_to_slice_shared_9f0(&commitment_hash1),
   18883           Eurydice_array_to_slice_shared_202(&signer_response1),
   18884           Eurydice_array_to_slice_shared_860(&hint1),
   18885           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE,
   18886           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   18887           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   18888           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,
   18889           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE,
   18890           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT,
   18891           Eurydice_array_to_slice_mut_6b(signature));
   18892         return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });
   18893       }
   18894       uu____5 =
   18895         (
   18896           KRML_CLITERAL(core_result_Result_53){
   18897             .tag = core_result_Err,
   18898             .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   18899           }
   18900         );
   18901     }
   18902   }
   18903   return uu____5;
   18904 }
   18905 
   18906 /**
   18907 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_mut
   18908 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   18909 with const generics
   18910 
   18911 */
   18912 static KRML_MUSTINLINE core_result_Result_53
   18913 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_mut_5a(
   18914   Eurydice_borrow_slice_u8 signing_key,
   18915   Eurydice_borrow_slice_u8 message,
   18916   Eurydice_borrow_slice_u8 context,
   18917   Eurydice_arr_ec randomness,
   18918   Eurydice_arr_0c *signature
   18919 )
   18920 {
   18921   core_result_Result_a8
   18922   uu____0 =
   18923     libcrux_ml_dsa_pre_hash_new_88(context,
   18924       (KRML_CLITERAL(core_option_Option_57){ .tag = core_option_None }));
   18925   if (!(uu____0.tag == core_result_Ok))
   18926   {
   18927     return
   18928       (
   18929         KRML_CLITERAL(core_result_Result_53){
   18930           .tag = core_result_Err,
   18931           .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   18932         }
   18933       );
   18934   }
   18935   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   18936   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   18937   return
   18938     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_internal_5a(signing_key,
   18939       message,
   18940       (
   18941         KRML_CLITERAL(core_option_Option_84){
   18942           .tag = core_option_Some,
   18943           .f0 = domain_separation_context
   18944         }
   18945       ),
   18946       randomness,
   18947       signature);
   18948 }
   18949 
   18950 /**
   18951 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign
   18952 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   18953 with const generics
   18954 
   18955 */
   18956 static KRML_MUSTINLINE core_result_Result_8c
   18957 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_5a(
   18958   Eurydice_borrow_slice_u8 signing_key,
   18959   Eurydice_borrow_slice_u8 message,
   18960   Eurydice_borrow_slice_u8 context,
   18961   Eurydice_arr_ec randomness
   18962 )
   18963 {
   18964   Eurydice_arr_0c signature = libcrux_ml_dsa_types_zero_c5_5c();
   18965   core_result_Result_53
   18966   uu____0 =
   18967     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_mut_5a(signing_key,
   18968       message,
   18969       context,
   18970       randomness,
   18971       &signature);
   18972   core_result_Result_8c uu____1;
   18973   if (uu____0.tag == core_result_Ok)
   18974   {
   18975     uu____1 =
   18976       (
   18977         KRML_CLITERAL(core_result_Result_8c){
   18978           .tag = core_result_Ok,
   18979           .val = { .case_Ok = signature }
   18980         }
   18981       );
   18982   }
   18983   else
   18984   {
   18985     libcrux_ml_dsa_types_SigningError e = uu____0.f0;
   18986     uu____1 =
   18987       (KRML_CLITERAL(core_result_Result_8c){ .tag = core_result_Err, .val = { .case_Err = e } });
   18988   }
   18989   return uu____1;
   18990 }
   18991 
   18992 /**
   18993  Sign.
   18994 */
   18995 static inline core_result_Result_8c
   18996 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign(
   18997   const Eurydice_arr_24 *signing_key,
   18998   Eurydice_borrow_slice_u8 message,
   18999   Eurydice_borrow_slice_u8 context,
   19000   Eurydice_arr_ec randomness
   19001 )
   19002 {
   19003   return
   19004     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_5a(Eurydice_array_to_slice_shared_98(signing_key),
   19005       message,
   19006       context,
   19007       randomness);
   19008 }
   19009 
   19010 /**
   19011  Sign.
   19012 */
   19013 static inline core_result_Result_53
   19014 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_mut(
   19015   const Eurydice_arr_24 *signing_key,
   19016   Eurydice_borrow_slice_u8 message,
   19017   Eurydice_borrow_slice_u8 context,
   19018   Eurydice_arr_ec randomness,
   19019   Eurydice_arr_0c *signature
   19020 )
   19021 {
   19022   return
   19023     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_mut_5a(Eurydice_array_to_slice_shared_98(signing_key),
   19024       message,
   19025       context,
   19026       randomness,
   19027       signature);
   19028 }
   19029 
   19030 /**
   19031 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_pre_hashed_mut
   19032 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   19033 with const generics
   19034 
   19035 */
   19036 static KRML_MUSTINLINE core_result_Result_53
   19037 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_pre_hashed_mut_3f(
   19038   Eurydice_borrow_slice_u8 signing_key,
   19039   Eurydice_borrow_slice_u8 message,
   19040   Eurydice_borrow_slice_u8 context,
   19041   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   19042   Eurydice_arr_ec randomness,
   19043   Eurydice_arr_0c *signature
   19044 )
   19045 {
   19046   if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))
   19047   {
   19048     libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);
   19049     core_result_Result_a8
   19050     uu____0 =
   19051       libcrux_ml_dsa_pre_hash_new_88(context,
   19052         (
   19053           KRML_CLITERAL(core_option_Option_57){
   19054             .tag = core_option_Some,
   19055             .f0 = libcrux_ml_dsa_pre_hash_oid_30()
   19056           }
   19057         ));
   19058     if (!(uu____0.tag == core_result_Ok))
   19059     {
   19060       return
   19061         (
   19062           KRML_CLITERAL(core_result_Result_53){
   19063             .tag = core_result_Err,
   19064             .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   19065           }
   19066         );
   19067     }
   19068     libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   19069     libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   19070     return
   19071       libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_internal_5a(signing_key,
   19072         (
   19073           KRML_CLITERAL(Eurydice_borrow_slice_u8){
   19074             .ptr = pre_hash_buffer.ptr,
   19075             .meta = pre_hash_buffer.meta
   19076           }
   19077         ),
   19078         (
   19079           KRML_CLITERAL(core_option_Option_84){
   19080             .tag = core_option_Some,
   19081             .f0 = domain_separation_context
   19082           }
   19083         ),
   19084         randomness,
   19085         signature);
   19086   }
   19087   return
   19088     (
   19089       KRML_CLITERAL(core_result_Result_53){
   19090         .tag = core_result_Err,
   19091         .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   19092       }
   19093     );
   19094 }
   19095 
   19096 /**
   19097 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_pre_hashed
   19098 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   19099 with const generics
   19100 
   19101 */
   19102 static KRML_MUSTINLINE core_result_Result_8c
   19103 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_pre_hashed_3f(
   19104   Eurydice_borrow_slice_u8 signing_key,
   19105   Eurydice_borrow_slice_u8 message,
   19106   Eurydice_borrow_slice_u8 context,
   19107   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   19108   Eurydice_arr_ec randomness
   19109 )
   19110 {
   19111   Eurydice_arr_0c signature = libcrux_ml_dsa_types_zero_c5_5c();
   19112   core_result_Result_53
   19113   uu____0 =
   19114     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_pre_hashed_mut_3f(signing_key,
   19115       message,
   19116       context,
   19117       pre_hash_buffer,
   19118       randomness,
   19119       &signature);
   19120   core_result_Result_8c uu____1;
   19121   if (uu____0.tag == core_result_Ok)
   19122   {
   19123     uu____1 =
   19124       (
   19125         KRML_CLITERAL(core_result_Result_8c){
   19126           .tag = core_result_Ok,
   19127           .val = { .case_Ok = signature }
   19128         }
   19129       );
   19130   }
   19131   else
   19132   {
   19133     libcrux_ml_dsa_types_SigningError e = uu____0.f0;
   19134     uu____1 =
   19135       (KRML_CLITERAL(core_result_Result_8c){ .tag = core_result_Err, .val = { .case_Err = e } });
   19136   }
   19137   return uu____1;
   19138 }
   19139 
   19140 /**
   19141  Sign (pre-hashed).
   19142 */
   19143 static inline core_result_Result_8c
   19144 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_pre_hashed_shake128(
   19145   const Eurydice_arr_24 *signing_key,
   19146   Eurydice_borrow_slice_u8 message,
   19147   Eurydice_borrow_slice_u8 context,
   19148   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   19149   Eurydice_arr_ec randomness
   19150 )
   19151 {
   19152   return
   19153     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_sign_pre_hashed_3f(Eurydice_array_to_slice_shared_98(signing_key),
   19154       message,
   19155       context,
   19156       pre_hash_buffer,
   19157       randomness);
   19158 }
   19159 
   19160 /**
   19161  The internal verification API.
   19162 
   19163  If no `domain_separation_context` is supplied, it is assumed that
   19164  `message` already contains the domain separation.
   19165 */
   19166 /**
   19167 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify_internal
   19168 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof
   19169 with const generics
   19170 
   19171 */
   19172 static KRML_MUSTINLINE core_result_Result_41
   19173 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_verify_internal_5a(
   19174   const Eurydice_arr_29 *verification_key,
   19175   Eurydice_borrow_slice_u8 message,
   19176   core_option_Option_84 domain_separation_context,
   19177   const Eurydice_arr_0c *signature_serialized
   19178 )
   19179 {
   19180   Eurydice_borrow_slice_u8_x2
   19181   uu____0 =
   19182     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_37(verification_key),
   19183       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   19184       uint8_t,
   19185       Eurydice_borrow_slice_u8_x2);
   19186   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   19187   Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;
   19188   Eurydice_arr_dc1 t1;
   19189   Eurydice_arr_a3 repeat_expression0[6U];
   19190   for (size_t i = (size_t)0U; i < (size_t)6U; i++)
   19191   {
   19192     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19193   }
   19194   memcpy(t1.data, repeat_expression0, (size_t)6U * sizeof (Eurydice_arr_a3));
   19195   libcrux_ml_dsa_encoding_verification_key_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   19196     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_VERIFICATION_KEY_SIZE,
   19197     t1_serialized,
   19198     Eurydice_array_to_slice_mut_205(&t1));
   19199   Eurydice_arr_65 deserialized_commitment_hash = { .data = { 0U } };
   19200   Eurydice_arr_5d deserialized_signer_response;
   19201   Eurydice_arr_a3 repeat_expression1[5U];
   19202   for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   19203   {
   19204     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19205   }
   19206   memcpy(deserialized_signer_response.data,
   19207     repeat_expression1,
   19208     (size_t)5U * sizeof (Eurydice_arr_a3));
   19209   Eurydice_arr_5d0
   19210   deserialized_hint =
   19211     {
   19212       .data = {
   19213         { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },
   19214         { .data = { 0U } }, { .data = { 0U } }
   19215       }
   19216     };
   19217   core_result_Result_41
   19218   uu____1 =
   19219     libcrux_ml_dsa_encoding_signature_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   19220       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   19221       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE,
   19222       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,
   19223       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE,
   19224       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT,
   19225       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_SIGNATURE_SIZE,
   19226       Eurydice_array_to_slice_shared_6b(signature_serialized),
   19227       Eurydice_array_to_slice_mut_9f(&deserialized_commitment_hash),
   19228       Eurydice_array_to_slice_mut_204(&deserialized_signer_response),
   19229       Eurydice_array_to_slice_mut_860(&deserialized_hint));
   19230   core_result_Result_41 uu____2;
   19231   if (uu____1.tag == core_result_Ok)
   19232   {
   19233     if
   19234     (
   19235       libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_202(&deserialized_signer_response),
   19236         (int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT) -
   19237           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)
   19238     )
   19239     {
   19240       uu____2 =
   19241         (
   19242           KRML_CLITERAL(core_result_Result_41){
   19243             .tag = core_result_Err,
   19244             .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError
   19245           }
   19246         );
   19247     }
   19248     else
   19249     {
   19250       Eurydice_arr_5a matrix;
   19251       Eurydice_arr_a3 repeat_expression[30U];
   19252       for (size_t i = (size_t)0U; i < (size_t)30U; i++)
   19253       {
   19254         repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19255       }
   19256       memcpy(matrix.data, repeat_expression, (size_t)30U * sizeof (Eurydice_arr_a3));
   19257       libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   19258         seed_for_a,
   19259         Eurydice_array_to_slice_mut_203(&matrix));
   19260       Eurydice_arr_c7 verification_key_hash = { .data = { 0U } };
   19261       libcrux_ml_dsa_hash_functions_portable_shake256_61_c9(Eurydice_array_to_slice_shared_37(verification_key),
   19262         &verification_key_hash);
   19263       Eurydice_arr_c7 message_representative = { .data = { 0U } };
   19264       libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_17(&verification_key_hash),
   19265         &domain_separation_context,
   19266         message,
   19267         &message_representative);
   19268       Eurydice_arr_a3 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();
   19269       libcrux_ml_dsa_sample_sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_9f0(&deserialized_commitment_hash),
   19270         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE,
   19271         &verifier_challenge);
   19272       libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);
   19273       for (size_t i = (size_t)0U; i < (size_t)5U; i++)
   19274       {
   19275         size_t i0 = i;
   19276         libcrux_ml_dsa_ntt_ntt_37(&deserialized_signer_response.data[i0]);
   19277       }
   19278       libcrux_ml_dsa_matrix_compute_w_approx_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,
   19279         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,
   19280         Eurydice_array_to_slice_shared_205(&matrix),
   19281         Eurydice_array_to_slice_shared_202(&deserialized_signer_response),
   19282         &verifier_challenge,
   19283         Eurydice_array_to_slice_mut_205(&t1));
   19284       Eurydice_arr_65 recomputed_commitment_hash = { .data = { 0U } };
   19285       libcrux_ml_dsa_arithmetic_use_hint_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,
   19286         Eurydice_array_to_slice_shared_860(&deserialized_hint),
   19287         Eurydice_array_to_slice_mut_205(&t1));
   19288       Eurydice_arr_d2 commitment_serialized = { .data = { 0U } };
   19289       libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE,
   19290         Eurydice_array_to_slice_shared_204(&t1),
   19291         Eurydice_array_to_slice_mut_27(&commitment_serialized));
   19292       libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   19293       shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   19294       libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   19295         Eurydice_array_to_slice_shared_17(&message_representative));
   19296       libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   19297         Eurydice_array_to_slice_shared_27(&commitment_serialized));
   19298       libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   19299         Eurydice_array_to_slice_mut_9f(&recomputed_commitment_hash));
   19300       if
   19301       (
   19302         Eurydice_array_eq((size_t)48U,
   19303           &deserialized_commitment_hash,
   19304           &recomputed_commitment_hash,
   19305           uint8_t)
   19306       )
   19307       {
   19308         uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });
   19309       }
   19310       else
   19311       {
   19312         uu____2 =
   19313           (
   19314             KRML_CLITERAL(core_result_Result_41){
   19315               .tag = core_result_Err,
   19316               .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError
   19317             }
   19318           );
   19319       }
   19320     }
   19321   }
   19322   else
   19323   {
   19324     libcrux_ml_dsa_types_VerificationError e = uu____1.f0;
   19325     uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });
   19326   }
   19327   return uu____2;
   19328 }
   19329 
   19330 /**
   19331 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify
   19332 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof
   19333 with const generics
   19334 
   19335 */
   19336 static KRML_MUSTINLINE core_result_Result_41
   19337 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_verify_5a(
   19338   const Eurydice_arr_29 *verification_key_serialized,
   19339   Eurydice_borrow_slice_u8 message,
   19340   Eurydice_borrow_slice_u8 context,
   19341   const Eurydice_arr_0c *signature_serialized
   19342 )
   19343 {
   19344   core_result_Result_a8
   19345   uu____0 =
   19346     libcrux_ml_dsa_pre_hash_new_88(context,
   19347       (KRML_CLITERAL(core_option_Option_57){ .tag = core_option_None }));
   19348   if (!(uu____0.tag == core_result_Ok))
   19349   {
   19350     return
   19351       (
   19352         KRML_CLITERAL(core_result_Result_41){
   19353           .tag = core_result_Err,
   19354           .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError
   19355         }
   19356       );
   19357   }
   19358   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   19359   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   19360   return
   19361     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_verify_internal_5a(verification_key_serialized,
   19362       message,
   19363       (
   19364         KRML_CLITERAL(core_option_Option_84){
   19365           .tag = core_option_Some,
   19366           .f0 = domain_separation_context
   19367         }
   19368       ),
   19369       signature_serialized);
   19370 }
   19371 
   19372 /**
   19373  Verify.
   19374 */
   19375 static inline core_result_Result_41
   19376 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify(
   19377   const Eurydice_arr_29 *verification_key,
   19378   Eurydice_borrow_slice_u8 message,
   19379   Eurydice_borrow_slice_u8 context,
   19380   const Eurydice_arr_0c *signature
   19381 )
   19382 {
   19383   return
   19384     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_verify_5a(verification_key,
   19385       message,
   19386       context,
   19387       signature);
   19388 }
   19389 
   19390 /**
   19391 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify_pre_hashed
   19392 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   19393 with const generics
   19394 
   19395 */
   19396 static KRML_MUSTINLINE core_result_Result_41
   19397 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_verify_pre_hashed_3f(
   19398   const Eurydice_arr_29 *verification_key_serialized,
   19399   Eurydice_borrow_slice_u8 message,
   19400   Eurydice_borrow_slice_u8 context,
   19401   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   19402   const Eurydice_arr_0c *signature_serialized
   19403 )
   19404 {
   19405   libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);
   19406   core_result_Result_a8
   19407   uu____0 =
   19408     libcrux_ml_dsa_pre_hash_new_88(context,
   19409       (
   19410         KRML_CLITERAL(core_option_Option_57){
   19411           .tag = core_option_Some,
   19412           .f0 = libcrux_ml_dsa_pre_hash_oid_30()
   19413         }
   19414       ));
   19415   if (!(uu____0.tag == core_result_Ok))
   19416   {
   19417     return
   19418       (
   19419         KRML_CLITERAL(core_result_Result_41){
   19420           .tag = core_result_Err,
   19421           .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError
   19422         }
   19423       );
   19424   }
   19425   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   19426   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   19427   return
   19428     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_verify_internal_5a(verification_key_serialized,
   19429       (
   19430         KRML_CLITERAL(Eurydice_borrow_slice_u8){
   19431           .ptr = pre_hash_buffer.ptr,
   19432           .meta = pre_hash_buffer.meta
   19433         }
   19434       ),
   19435       (
   19436         KRML_CLITERAL(core_option_Option_84){
   19437           .tag = core_option_Some,
   19438           .f0 = domain_separation_context
   19439         }
   19440       ),
   19441       signature_serialized);
   19442 }
   19443 
   19444 /**
   19445  Verify (pre-hashed with SHAKE-128).
   19446 */
   19447 static inline core_result_Result_41
   19448 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify_pre_hashed_shake128(
   19449   const Eurydice_arr_29 *verification_key,
   19450   Eurydice_borrow_slice_u8 message,
   19451   Eurydice_borrow_slice_u8 context,
   19452   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   19453   const Eurydice_arr_0c *signature
   19454 )
   19455 {
   19456   return
   19457     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_verify_pre_hashed_3f(verification_key,
   19458       message,
   19459       context,
   19460       pre_hash_buffer,
   19461       signature);
   19462 }
   19463 
   19464 /**
   19465 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.generate_key_pair
   19466 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   19467 with const generics
   19468 
   19469 */
   19470 static KRML_MUSTINLINE void
   19471 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_generate_key_pair_5a(
   19472   Eurydice_arr_ec randomness,
   19473   Eurydice_mut_borrow_slice_u8 signing_key,
   19474   Eurydice_mut_borrow_slice_u8 verification_key
   19475 )
   19476 {
   19477   Eurydice_arr_89 seed_expanded0 = { .data = { 0U } };
   19478   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   19479   shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   19480   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   19481     Eurydice_array_to_slice_shared_01(&randomness));
   19482   /* original Rust expression is not an lvalue in C */
   19483   Eurydice_array_u8x2
   19484   lvalue =
   19485     {
   19486       .data = {
   19487         (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19488         (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A
   19489       }
   19490     };
   19491   libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   19492     Eurydice_array_to_slice_shared_82(&lvalue));
   19493   libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   19494     Eurydice_array_to_slice_mut_78(&seed_expanded0));
   19495   Eurydice_borrow_slice_u8_x2
   19496   uu____0 =
   19497     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_78(&seed_expanded0),
   19498       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   19499       uint8_t,
   19500       Eurydice_borrow_slice_u8_x2);
   19501   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   19502   Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;
   19503   Eurydice_borrow_slice_u8_x2
   19504   uu____1 =
   19505     Eurydice_slice_split_at(seed_expanded,
   19506       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,
   19507       uint8_t,
   19508       Eurydice_borrow_slice_u8_x2);
   19509   Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;
   19510   Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;
   19511   Eurydice_arr_92 s1_s2;
   19512   Eurydice_arr_a3 repeat_expression0[15U];
   19513   for (size_t i = (size_t)0U; i < (size_t)15U; i++)
   19514   {
   19515     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19516   }
   19517   memcpy(s1_s2.data, repeat_expression0, (size_t)15U * sizeof (Eurydice_arr_a3));
   19518   libcrux_ml_dsa_samplex4_sample_s1_and_s2_29(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,
   19519     seed_for_error_vectors,
   19520     Eurydice_array_to_slice_mut_206(&s1_s2));
   19521   Eurydice_arr_8f t0;
   19522   Eurydice_arr_a3 repeat_expression1[8U];
   19523   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   19524   {
   19525     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19526   }
   19527   memcpy(t0.data, repeat_expression1, (size_t)8U * sizeof (Eurydice_arr_a3));
   19528   Eurydice_arr_0f a_as_ntt;
   19529   Eurydice_arr_a3 repeat_expression2[56U];
   19530   for (size_t i = (size_t)0U; i < (size_t)56U; i++)
   19531   {
   19532     repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19533   }
   19534   memcpy(a_as_ntt.data, repeat_expression2, (size_t)56U * sizeof (Eurydice_arr_a3));
   19535   libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19536     seed_for_a,
   19537     Eurydice_array_to_slice_mut_207(&a_as_ntt));
   19538   Eurydice_arr_bb s1_ntt;
   19539   Eurydice_arr_a3 repeat_expression3[7U];
   19540   for (size_t i = (size_t)0U; i < (size_t)7U; i++)
   19541   {
   19542     repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19543   }
   19544   memcpy(s1_ntt.data, repeat_expression3, (size_t)7U * sizeof (Eurydice_arr_a3));
   19545   Eurydice_slice_copy(Eurydice_array_to_slice_mut_208(&s1_ntt),
   19546     Eurydice_array_to_subslice_shared_251(&s1_s2,
   19547       (
   19548         KRML_CLITERAL(core_ops_range_Range_87){
   19549           .start = (size_t)0U,
   19550           .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A
   19551         }
   19552       )),
   19553     Eurydice_arr_a3);
   19554   for (size_t i = (size_t)0U; i < (size_t)7U; i++)
   19555   {
   19556     size_t i0 = i;
   19557     libcrux_ml_dsa_ntt_ntt_37(&s1_ntt.data[i0]);
   19558   }
   19559   libcrux_ml_dsa_matrix_compute_as1_plus_s2_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19560     LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19561     Eurydice_array_to_slice_mut_207(&a_as_ntt),
   19562     Eurydice_array_to_slice_shared_206(&s1_ntt),
   19563     Eurydice_array_to_slice_shared_207(&s1_s2),
   19564     Eurydice_array_to_slice_mut_20(&t0));
   19565   Eurydice_arr_8f t1;
   19566   Eurydice_arr_a3 repeat_expression[8U];
   19567   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   19568   {
   19569     repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19570   }
   19571   memcpy(t1.data, repeat_expression, (size_t)8U * sizeof (Eurydice_arr_a3));
   19572   libcrux_ml_dsa_arithmetic_power2round_vector_37(Eurydice_array_to_slice_mut_20(&t0),
   19573     Eurydice_array_to_slice_mut_20(&t1));
   19574   libcrux_ml_dsa_encoding_verification_key_generate_serialized_37(seed_for_a,
   19575     Eurydice_array_to_slice_shared_200(&t1),
   19576     verification_key);
   19577   libcrux_ml_dsa_encoding_signing_key_generate_serialized_2e(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,
   19578     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,
   19579     seed_for_a,
   19580     seed_for_signing,
   19581     (
   19582       KRML_CLITERAL(Eurydice_borrow_slice_u8){
   19583         .ptr = verification_key.ptr,
   19584         .meta = verification_key.meta
   19585       }
   19586     ),
   19587     Eurydice_array_to_slice_shared_207(&s1_s2),
   19588     Eurydice_array_to_slice_shared_200(&t0),
   19589     signing_key);
   19590 }
   19591 
   19592 /**
   19593  Generate key pair.
   19594 */
   19595 static inline void
   19596 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_generate_key_pair(
   19597   Eurydice_arr_ec randomness,
   19598   Eurydice_arr_e2 *signing_key,
   19599   Eurydice_arr_43 *verification_key
   19600 )
   19601 {
   19602   libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_generate_key_pair_5a(randomness,
   19603     Eurydice_array_to_slice_mut_f7(signing_key),
   19604     Eurydice_array_to_slice_mut_fc(verification_key));
   19605 }
   19606 
   19607 /**
   19608 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_internal
   19609 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   19610 with const generics
   19611 
   19612 */
   19613 static KRML_MUSTINLINE core_result_Result_53
   19614 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_internal_5a(
   19615   Eurydice_borrow_slice_u8 signing_key,
   19616   Eurydice_borrow_slice_u8 message,
   19617   core_option_Option_84 domain_separation_context,
   19618   Eurydice_arr_ec randomness,
   19619   Eurydice_arr_93 *signature
   19620 )
   19621 {
   19622   Eurydice_borrow_slice_u8_x2
   19623   uu____0 =
   19624     Eurydice_slice_split_at(signing_key,
   19625       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   19626       uint8_t,
   19627       Eurydice_borrow_slice_u8_x2);
   19628   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   19629   Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;
   19630   Eurydice_borrow_slice_u8_x2
   19631   uu____1 =
   19632     Eurydice_slice_split_at(remaining_serialized0,
   19633       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,
   19634       uint8_t,
   19635       Eurydice_borrow_slice_u8_x2);
   19636   Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;
   19637   Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;
   19638   Eurydice_borrow_slice_u8_x2
   19639   uu____2 =
   19640     Eurydice_slice_split_at(remaining_serialized1,
   19641       LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,
   19642       uint8_t,
   19643       Eurydice_borrow_slice_u8_x2);
   19644   Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;
   19645   Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;
   19646   Eurydice_borrow_slice_u8_x2
   19647   uu____3 =
   19648     Eurydice_slice_split_at(remaining_serialized2,
   19649       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE *
   19650         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19651       uint8_t,
   19652       Eurydice_borrow_slice_u8_x2);
   19653   Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;
   19654   Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;
   19655   Eurydice_borrow_slice_u8_x2
   19656   uu____4 =
   19657     Eurydice_slice_split_at(remaining_serialized,
   19658       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE *
   19659         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19660       uint8_t,
   19661       Eurydice_borrow_slice_u8_x2);
   19662   Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;
   19663   Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;
   19664   Eurydice_arr_bb s1_as_ntt;
   19665   Eurydice_arr_a3 repeat_expression0[7U];
   19666   for (size_t i = (size_t)0U; i < (size_t)7U; i++)
   19667   {
   19668     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19669   }
   19670   memcpy(s1_as_ntt.data, repeat_expression0, (size_t)7U * sizeof (Eurydice_arr_a3));
   19671   Eurydice_arr_8f s2_as_ntt;
   19672   Eurydice_arr_a3 repeat_expression1[8U];
   19673   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   19674   {
   19675     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19676   }
   19677   memcpy(s2_as_ntt.data, repeat_expression1, (size_t)8U * sizeof (Eurydice_arr_a3));
   19678   Eurydice_arr_8f t0_as_ntt;
   19679   Eurydice_arr_a3 repeat_expression2[8U];
   19680   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   19681   {
   19682     repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19683   }
   19684   memcpy(t0_as_ntt.data, repeat_expression2, (size_t)8U * sizeof (Eurydice_arr_a3));
   19685   libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,
   19686     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,
   19687     s1_serialized,
   19688     Eurydice_array_to_slice_mut_208(&s1_as_ntt));
   19689   libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,
   19690     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,
   19691     s2_serialized,
   19692     Eurydice_array_to_slice_mut_20(&s2_as_ntt));
   19693   libcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(t0_serialized,
   19694     Eurydice_array_to_slice_mut_20(&t0_as_ntt));
   19695   Eurydice_arr_0f matrix;
   19696   Eurydice_arr_a3 repeat_expression3[56U];
   19697   for (size_t i = (size_t)0U; i < (size_t)56U; i++)
   19698   {
   19699     repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19700   }
   19701   memcpy(matrix.data, repeat_expression3, (size_t)56U * sizeof (Eurydice_arr_a3));
   19702   libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19703     seed_for_a,
   19704     Eurydice_array_to_slice_mut_207(&matrix));
   19705   Eurydice_arr_c7 message_representative = { .data = { 0U } };
   19706   libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,
   19707     &domain_separation_context,
   19708     message,
   19709     &message_representative);
   19710   Eurydice_arr_c7 mask_seed = { .data = { 0U } };
   19711   libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   19712   shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();
   19713   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);
   19714   libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,
   19715     Eurydice_array_to_slice_shared_01(&randomness));
   19716   libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,
   19717     Eurydice_array_to_slice_shared_17(&message_representative));
   19718   libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,
   19719     Eurydice_array_to_slice_mut_17(&mask_seed));
   19720   uint16_t domain_separator_for_mask = 0U;
   19721   size_t attempt = (size_t)0U;
   19722   core_option_Option_b2 commitment_hash0 = { .tag = core_option_None };
   19723   core_option_Option_2d signer_response0 = { .tag = core_option_None };
   19724   core_option_Option_45 hint0 = { .tag = core_option_None };
   19725   while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)
   19726   {
   19727     attempt++;
   19728     Eurydice_arr_bb mask;
   19729     Eurydice_arr_a3 repeat_expression4[7U];
   19730     for (size_t i = (size_t)0U; i < (size_t)7U; i++)
   19731     {
   19732       repeat_expression4[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19733     }
   19734     memcpy(mask.data, repeat_expression4, (size_t)7U * sizeof (Eurydice_arr_a3));
   19735     Eurydice_arr_8f w0;
   19736     Eurydice_arr_a3 repeat_expression5[8U];
   19737     for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   19738     {
   19739       repeat_expression5[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19740     }
   19741     memcpy(w0.data, repeat_expression5, (size_t)8U * sizeof (Eurydice_arr_a3));
   19742     Eurydice_arr_8f commitment;
   19743     Eurydice_arr_a3 repeat_expression6[8U];
   19744     for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   19745     {
   19746       repeat_expression6[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19747     }
   19748     memcpy(commitment.data, repeat_expression6, (size_t)8U * sizeof (Eurydice_arr_a3));
   19749     libcrux_ml_dsa_sample_sample_mask_vector_67(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19750       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,
   19751       &mask_seed,
   19752       &domain_separator_for_mask,
   19753       Eurydice_array_to_slice_mut_208(&mask));
   19754     Eurydice_arr_8f a_x_mask;
   19755     Eurydice_arr_a3 repeat_expression[8U];
   19756     for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   19757     {
   19758       repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   19759     }
   19760     memcpy(a_x_mask.data, repeat_expression, (size_t)8U * sizeof (Eurydice_arr_a3));
   19761     Eurydice_arr_bb
   19762     mask_ntt =
   19763       core_array__core__clone__Clone_for__T__N___clone((size_t)7U,
   19764         &mask,
   19765         Eurydice_arr_a3,
   19766         Eurydice_arr_bb);
   19767     for (size_t i = (size_t)0U; i < (size_t)7U; i++)
   19768     {
   19769       size_t i0 = i;
   19770       libcrux_ml_dsa_ntt_ntt_37(&mask_ntt.data[i0]);
   19771     }
   19772     libcrux_ml_dsa_matrix_compute_matrix_x_mask_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19773       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19774       Eurydice_array_to_slice_shared_208(&matrix),
   19775       Eurydice_array_to_slice_shared_206(&mask_ntt),
   19776       Eurydice_array_to_slice_mut_20(&a_x_mask));
   19777     libcrux_ml_dsa_arithmetic_decompose_vector_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19778       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,
   19779       Eurydice_array_to_slice_shared_200(&a_x_mask),
   19780       Eurydice_array_to_slice_mut_20(&w0),
   19781       Eurydice_array_to_slice_mut_20(&commitment));
   19782     Eurydice_arr_c7 commitment_hash_candidate = { .data = { 0U } };
   19783     Eurydice_arr_1b commitment_serialized = { .data = { 0U } };
   19784     libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE,
   19785       Eurydice_array_to_slice_shared_200(&commitment),
   19786       Eurydice_array_to_slice_mut_68(&commitment_serialized));
   19787     libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   19788     shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   19789     libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   19790       Eurydice_array_to_slice_shared_17(&message_representative));
   19791     libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   19792       Eurydice_array_to_slice_shared_68(&commitment_serialized));
   19793     libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   19794       Eurydice_array_to_slice_mut_17(&commitment_hash_candidate));
   19795     Eurydice_arr_a3 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();
   19796     libcrux_ml_dsa_sample_sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_17(&commitment_hash_candidate),
   19797       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE,
   19798       &verifier_challenge);
   19799     libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);
   19800     Eurydice_arr_bb
   19801     challenge_times_s1 =
   19802       core_array__core__clone__Clone_for__T__N___clone((size_t)7U,
   19803         &s1_as_ntt,
   19804         Eurydice_arr_a3,
   19805         Eurydice_arr_bb);
   19806     Eurydice_arr_8f
   19807     challenge_times_s2 =
   19808       core_array__core__clone__Clone_for__T__N___clone((size_t)8U,
   19809         &s2_as_ntt,
   19810         Eurydice_arr_a3,
   19811         Eurydice_arr_8f);
   19812     libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_208(&challenge_times_s1),
   19813       &verifier_challenge);
   19814     libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_20(&challenge_times_s2),
   19815       &verifier_challenge);
   19816     libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19817       Eurydice_array_to_slice_mut_208(&mask),
   19818       Eurydice_array_to_slice_shared_206(&challenge_times_s1));
   19819     libcrux_ml_dsa_matrix_subtract_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19820       Eurydice_array_to_slice_mut_20(&w0),
   19821       Eurydice_array_to_slice_shared_200(&challenge_times_s2));
   19822     if
   19823     (
   19824       !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_206(&mask),
   19825         (int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT) -
   19826           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)
   19827     )
   19828     {
   19829       if
   19830       (
   19831         !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_200(&w0),
   19832           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)
   19833       )
   19834       {
   19835         Eurydice_arr_8f
   19836         challenge_times_t0 =
   19837           core_array__core__clone__Clone_for__T__N___clone((size_t)8U,
   19838             &t0_as_ntt,
   19839             Eurydice_arr_a3,
   19840             Eurydice_arr_8f);
   19841         libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_20(&challenge_times_t0),
   19842           &verifier_challenge);
   19843         if
   19844         (
   19845           !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_200(&challenge_times_t0),
   19846             LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2)
   19847         )
   19848         {
   19849           libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19850             Eurydice_array_to_slice_mut_20(&w0),
   19851             Eurydice_array_to_slice_shared_200(&challenge_times_t0));
   19852           Eurydice_arr_81
   19853           hint_candidate =
   19854             {
   19855               .data = {
   19856                 { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },
   19857                 { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }
   19858               }
   19859             };
   19860           size_t
   19861           ones_in_hint =
   19862             libcrux_ml_dsa_arithmetic_make_hint_37(Eurydice_array_to_slice_shared_200(&w0),
   19863               Eurydice_array_to_slice_shared_200(&commitment),
   19864               LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,
   19865               Eurydice_array_to_slice_mut_861(&hint_candidate));
   19866           if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT))
   19867           {
   19868             attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;
   19869             commitment_hash0 =
   19870               (
   19871                 KRML_CLITERAL(core_option_Option_b2){
   19872                   .tag = core_option_Some,
   19873                   .f0 = commitment_hash_candidate
   19874                 }
   19875               );
   19876             signer_response0 =
   19877               (KRML_CLITERAL(core_option_Option_2d){ .tag = core_option_Some, .f0 = mask });
   19878             hint0 =
   19879               (
   19880                 KRML_CLITERAL(core_option_Option_45){
   19881                   .tag = core_option_Some,
   19882                   .f0 = hint_candidate
   19883                 }
   19884               );
   19885           }
   19886         }
   19887       }
   19888     }
   19889   }
   19890   core_result_Result_53 uu____5;
   19891   if (commitment_hash0.tag == core_option_None)
   19892   {
   19893     uu____5 =
   19894       (
   19895         KRML_CLITERAL(core_result_Result_53){
   19896           .tag = core_result_Err,
   19897           .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   19898         }
   19899       );
   19900   }
   19901   else
   19902   {
   19903     Eurydice_arr_c7 commitment_hash = commitment_hash0.f0;
   19904     Eurydice_arr_c7 commitment_hash1 = commitment_hash;
   19905     if (signer_response0.tag == core_option_None)
   19906     {
   19907       uu____5 =
   19908         (
   19909           KRML_CLITERAL(core_result_Result_53){
   19910             .tag = core_result_Err,
   19911             .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   19912           }
   19913         );
   19914     }
   19915     else
   19916     {
   19917       Eurydice_arr_bb signer_response = signer_response0.f0;
   19918       Eurydice_arr_bb signer_response1 = signer_response;
   19919       if (!(hint0.tag == core_option_None))
   19920       {
   19921         Eurydice_arr_81 hint = hint0.f0;
   19922         Eurydice_arr_81 hint1 = hint;
   19923         libcrux_ml_dsa_encoding_signature_serialize_37(Eurydice_array_to_slice_shared_17(&commitment_hash1),
   19924           Eurydice_array_to_slice_shared_206(&signer_response1),
   19925           Eurydice_array_to_slice_shared_861(&hint1),
   19926           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE,
   19927           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   19928           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   19929           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,
   19930           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE,
   19931           LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT,
   19932           Eurydice_array_to_slice_mut_11(signature));
   19933         return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });
   19934       }
   19935       uu____5 =
   19936         (
   19937           KRML_CLITERAL(core_result_Result_53){
   19938             .tag = core_result_Err,
   19939             .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError
   19940           }
   19941         );
   19942     }
   19943   }
   19944   return uu____5;
   19945 }
   19946 
   19947 /**
   19948 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_mut
   19949 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   19950 with const generics
   19951 
   19952 */
   19953 static KRML_MUSTINLINE core_result_Result_53
   19954 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_mut_5a(
   19955   Eurydice_borrow_slice_u8 signing_key,
   19956   Eurydice_borrow_slice_u8 message,
   19957   Eurydice_borrow_slice_u8 context,
   19958   Eurydice_arr_ec randomness,
   19959   Eurydice_arr_93 *signature
   19960 )
   19961 {
   19962   core_result_Result_a8
   19963   uu____0 =
   19964     libcrux_ml_dsa_pre_hash_new_88(context,
   19965       (KRML_CLITERAL(core_option_Option_57){ .tag = core_option_None }));
   19966   if (!(uu____0.tag == core_result_Ok))
   19967   {
   19968     return
   19969       (
   19970         KRML_CLITERAL(core_result_Result_53){
   19971           .tag = core_result_Err,
   19972           .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   19973         }
   19974       );
   19975   }
   19976   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   19977   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   19978   return
   19979     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_internal_5a(signing_key,
   19980       message,
   19981       (
   19982         KRML_CLITERAL(core_option_Option_84){
   19983           .tag = core_option_Some,
   19984           .f0 = domain_separation_context
   19985         }
   19986       ),
   19987       randomness,
   19988       signature);
   19989 }
   19990 
   19991 /**
   19992 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign
   19993 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4
   19994 with const generics
   19995 
   19996 */
   19997 static KRML_MUSTINLINE core_result_Result_8b
   19998 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_5a(
   19999   Eurydice_borrow_slice_u8 signing_key,
   20000   Eurydice_borrow_slice_u8 message,
   20001   Eurydice_borrow_slice_u8 context,
   20002   Eurydice_arr_ec randomness
   20003 )
   20004 {
   20005   Eurydice_arr_93 signature = libcrux_ml_dsa_types_zero_c5_f1();
   20006   core_result_Result_53
   20007   uu____0 =
   20008     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_mut_5a(signing_key,
   20009       message,
   20010       context,
   20011       randomness,
   20012       &signature);
   20013   core_result_Result_8b uu____1;
   20014   if (uu____0.tag == core_result_Ok)
   20015   {
   20016     uu____1 =
   20017       (
   20018         KRML_CLITERAL(core_result_Result_8b){
   20019           .tag = core_result_Ok,
   20020           .val = { .case_Ok = signature }
   20021         }
   20022       );
   20023   }
   20024   else
   20025   {
   20026     libcrux_ml_dsa_types_SigningError e = uu____0.f0;
   20027     uu____1 =
   20028       (KRML_CLITERAL(core_result_Result_8b){ .tag = core_result_Err, .val = { .case_Err = e } });
   20029   }
   20030   return uu____1;
   20031 }
   20032 
   20033 /**
   20034  Sign.
   20035 */
   20036 static inline core_result_Result_8b
   20037 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign(
   20038   const Eurydice_arr_e2 *signing_key,
   20039   Eurydice_borrow_slice_u8 message,
   20040   Eurydice_borrow_slice_u8 context,
   20041   Eurydice_arr_ec randomness
   20042 )
   20043 {
   20044   return
   20045     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_5a(Eurydice_array_to_slice_shared_f7(signing_key),
   20046       message,
   20047       context,
   20048       randomness);
   20049 }
   20050 
   20051 /**
   20052  Sign.
   20053 */
   20054 static inline core_result_Result_53
   20055 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_mut(
   20056   const Eurydice_arr_e2 *signing_key,
   20057   Eurydice_borrow_slice_u8 message,
   20058   Eurydice_borrow_slice_u8 context,
   20059   Eurydice_arr_ec randomness,
   20060   Eurydice_arr_93 *signature
   20061 )
   20062 {
   20063   return
   20064     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_mut_5a(Eurydice_array_to_slice_shared_f7(signing_key),
   20065       message,
   20066       context,
   20067       randomness,
   20068       signature);
   20069 }
   20070 
   20071 /**
   20072 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_pre_hashed_mut
   20073 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   20074 with const generics
   20075 
   20076 */
   20077 static KRML_MUSTINLINE core_result_Result_53
   20078 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_pre_hashed_mut_3f(
   20079   Eurydice_borrow_slice_u8 signing_key,
   20080   Eurydice_borrow_slice_u8 message,
   20081   Eurydice_borrow_slice_u8 context,
   20082   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   20083   Eurydice_arr_ec randomness,
   20084   Eurydice_arr_93 *signature
   20085 )
   20086 {
   20087   if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))
   20088   {
   20089     libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);
   20090     core_result_Result_a8
   20091     uu____0 =
   20092       libcrux_ml_dsa_pre_hash_new_88(context,
   20093         (
   20094           KRML_CLITERAL(core_option_Option_57){
   20095             .tag = core_option_Some,
   20096             .f0 = libcrux_ml_dsa_pre_hash_oid_30()
   20097           }
   20098         ));
   20099     if (!(uu____0.tag == core_result_Ok))
   20100     {
   20101       return
   20102         (
   20103           KRML_CLITERAL(core_result_Result_53){
   20104             .tag = core_result_Err,
   20105             .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   20106           }
   20107         );
   20108     }
   20109     libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   20110     libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   20111     return
   20112       libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_internal_5a(signing_key,
   20113         (
   20114           KRML_CLITERAL(Eurydice_borrow_slice_u8){
   20115             .ptr = pre_hash_buffer.ptr,
   20116             .meta = pre_hash_buffer.meta
   20117           }
   20118         ),
   20119         (
   20120           KRML_CLITERAL(core_option_Option_84){
   20121             .tag = core_option_Some,
   20122             .f0 = domain_separation_context
   20123           }
   20124         ),
   20125         randomness,
   20126         signature);
   20127   }
   20128   return
   20129     (
   20130       KRML_CLITERAL(core_result_Result_53){
   20131         .tag = core_result_Err,
   20132         .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError
   20133       }
   20134     );
   20135 }
   20136 
   20137 /**
   20138 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_pre_hashed
   20139 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   20140 with const generics
   20141 
   20142 */
   20143 static KRML_MUSTINLINE core_result_Result_8b
   20144 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_pre_hashed_3f(
   20145   Eurydice_borrow_slice_u8 signing_key,
   20146   Eurydice_borrow_slice_u8 message,
   20147   Eurydice_borrow_slice_u8 context,
   20148   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   20149   Eurydice_arr_ec randomness
   20150 )
   20151 {
   20152   Eurydice_arr_93 signature = libcrux_ml_dsa_types_zero_c5_f1();
   20153   core_result_Result_53
   20154   uu____0 =
   20155     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_pre_hashed_mut_3f(signing_key,
   20156       message,
   20157       context,
   20158       pre_hash_buffer,
   20159       randomness,
   20160       &signature);
   20161   core_result_Result_8b uu____1;
   20162   if (uu____0.tag == core_result_Ok)
   20163   {
   20164     uu____1 =
   20165       (
   20166         KRML_CLITERAL(core_result_Result_8b){
   20167           .tag = core_result_Ok,
   20168           .val = { .case_Ok = signature }
   20169         }
   20170       );
   20171   }
   20172   else
   20173   {
   20174     libcrux_ml_dsa_types_SigningError e = uu____0.f0;
   20175     uu____1 =
   20176       (KRML_CLITERAL(core_result_Result_8b){ .tag = core_result_Err, .val = { .case_Err = e } });
   20177   }
   20178   return uu____1;
   20179 }
   20180 
   20181 /**
   20182  Sign (pre-hashed).
   20183 */
   20184 static inline core_result_Result_8b
   20185 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_pre_hashed_shake128(
   20186   const Eurydice_arr_e2 *signing_key,
   20187   Eurydice_borrow_slice_u8 message,
   20188   Eurydice_borrow_slice_u8 context,
   20189   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   20190   Eurydice_arr_ec randomness
   20191 )
   20192 {
   20193   return
   20194     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_sign_pre_hashed_3f(Eurydice_array_to_slice_shared_f7(signing_key),
   20195       message,
   20196       context,
   20197       pre_hash_buffer,
   20198       randomness);
   20199 }
   20200 
   20201 /**
   20202  The internal verification API.
   20203 
   20204  If no `domain_separation_context` is supplied, it is assumed that
   20205  `message` already contains the domain separation.
   20206 */
   20207 /**
   20208 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify_internal
   20209 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof
   20210 with const generics
   20211 
   20212 */
   20213 static KRML_MUSTINLINE core_result_Result_41
   20214 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_verify_internal_5a(
   20215   const Eurydice_arr_43 *verification_key,
   20216   Eurydice_borrow_slice_u8 message,
   20217   core_option_Option_84 domain_separation_context,
   20218   const Eurydice_arr_93 *signature_serialized
   20219 )
   20220 {
   20221   Eurydice_borrow_slice_u8_x2
   20222   uu____0 =
   20223     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_fc(verification_key),
   20224       LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,
   20225       uint8_t,
   20226       Eurydice_borrow_slice_u8_x2);
   20227   Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;
   20228   Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;
   20229   Eurydice_arr_8f t1;
   20230   Eurydice_arr_a3 repeat_expression0[8U];
   20231   for (size_t i = (size_t)0U; i < (size_t)8U; i++)
   20232   {
   20233     repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   20234   }
   20235   memcpy(t1.data, repeat_expression0, (size_t)8U * sizeof (Eurydice_arr_a3));
   20236   libcrux_ml_dsa_encoding_verification_key_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   20237     LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_VERIFICATION_KEY_SIZE,
   20238     t1_serialized,
   20239     Eurydice_array_to_slice_mut_20(&t1));
   20240   Eurydice_arr_c7 deserialized_commitment_hash = { .data = { 0U } };
   20241   Eurydice_arr_bb deserialized_signer_response;
   20242   Eurydice_arr_a3 repeat_expression1[7U];
   20243   for (size_t i = (size_t)0U; i < (size_t)7U; i++)
   20244   {
   20245     repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   20246   }
   20247   memcpy(deserialized_signer_response.data,
   20248     repeat_expression1,
   20249     (size_t)7U * sizeof (Eurydice_arr_a3));
   20250   Eurydice_arr_81
   20251   deserialized_hint =
   20252     {
   20253       .data = {
   20254         { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },
   20255         { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }
   20256       }
   20257     };
   20258   core_result_Result_41
   20259   uu____1 =
   20260     libcrux_ml_dsa_encoding_signature_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   20261       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   20262       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE,
   20263       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,
   20264       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE,
   20265       LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT,
   20266       LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_SIGNATURE_SIZE,
   20267       Eurydice_array_to_slice_shared_11(signature_serialized),
   20268       Eurydice_array_to_slice_mut_17(&deserialized_commitment_hash),
   20269       Eurydice_array_to_slice_mut_208(&deserialized_signer_response),
   20270       Eurydice_array_to_slice_mut_861(&deserialized_hint));
   20271   core_result_Result_41 uu____2;
   20272   if (uu____1.tag == core_result_Ok)
   20273   {
   20274     if
   20275     (
   20276       libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_206(&deserialized_signer_response),
   20277         (int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT) -
   20278           LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)
   20279     )
   20280     {
   20281       uu____2 =
   20282         (
   20283           KRML_CLITERAL(core_result_Result_41){
   20284             .tag = core_result_Err,
   20285             .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError
   20286           }
   20287         );
   20288     }
   20289     else
   20290     {
   20291       Eurydice_arr_0f matrix;
   20292       Eurydice_arr_a3 repeat_expression[56U];
   20293       for (size_t i = (size_t)0U; i < (size_t)56U; i++)
   20294       {
   20295         repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();
   20296       }
   20297       memcpy(matrix.data, repeat_expression, (size_t)56U * sizeof (Eurydice_arr_a3));
   20298       libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   20299         seed_for_a,
   20300         Eurydice_array_to_slice_mut_207(&matrix));
   20301       Eurydice_arr_c7 verification_key_hash = { .data = { 0U } };
   20302       libcrux_ml_dsa_hash_functions_portable_shake256_61_c9(Eurydice_array_to_slice_shared_fc(verification_key),
   20303         &verification_key_hash);
   20304       Eurydice_arr_c7 message_representative = { .data = { 0U } };
   20305       libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_17(&verification_key_hash),
   20306         &domain_separation_context,
   20307         message,
   20308         &message_representative);
   20309       Eurydice_arr_a3 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();
   20310       libcrux_ml_dsa_sample_sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_17(&deserialized_commitment_hash),
   20311         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE,
   20312         &verifier_challenge);
   20313       libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);
   20314       for (size_t i = (size_t)0U; i < (size_t)7U; i++)
   20315       {
   20316         size_t i0 = i;
   20317         libcrux_ml_dsa_ntt_ntt_37(&deserialized_signer_response.data[i0]);
   20318       }
   20319       libcrux_ml_dsa_matrix_compute_w_approx_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,
   20320         LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,
   20321         Eurydice_array_to_slice_shared_208(&matrix),
   20322         Eurydice_array_to_slice_shared_206(&deserialized_signer_response),
   20323         &verifier_challenge,
   20324         Eurydice_array_to_slice_mut_20(&t1));
   20325       Eurydice_arr_c7 recomputed_commitment_hash = { .data = { 0U } };
   20326       libcrux_ml_dsa_arithmetic_use_hint_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,
   20327         Eurydice_array_to_slice_shared_861(&deserialized_hint),
   20328         Eurydice_array_to_slice_mut_20(&t1));
   20329       Eurydice_arr_1b commitment_serialized = { .data = { 0U } };
   20330       libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE,
   20331         Eurydice_array_to_slice_shared_200(&t1),
   20332         Eurydice_array_to_slice_mut_68(&commitment_serialized));
   20333       libcrux_sha3_generic_keccak_xof_KeccakXofState_8d
   20334       shake = libcrux_ml_dsa_hash_functions_portable_init_26();
   20335       libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,
   20336         Eurydice_array_to_slice_shared_17(&message_representative));
   20337       libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,
   20338         Eurydice_array_to_slice_shared_68(&commitment_serialized));
   20339       libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,
   20340         Eurydice_array_to_slice_mut_17(&recomputed_commitment_hash));
   20341       if
   20342       (
   20343         Eurydice_array_eq((size_t)64U,
   20344           &deserialized_commitment_hash,
   20345           &recomputed_commitment_hash,
   20346           uint8_t)
   20347       )
   20348       {
   20349         uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });
   20350       }
   20351       else
   20352       {
   20353         uu____2 =
   20354           (
   20355             KRML_CLITERAL(core_result_Result_41){
   20356               .tag = core_result_Err,
   20357               .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError
   20358             }
   20359           );
   20360       }
   20361     }
   20362   }
   20363   else
   20364   {
   20365     libcrux_ml_dsa_types_VerificationError e = uu____1.f0;
   20366     uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });
   20367   }
   20368   return uu____2;
   20369 }
   20370 
   20371 /**
   20372 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify
   20373 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof
   20374 with const generics
   20375 
   20376 */
   20377 static KRML_MUSTINLINE core_result_Result_41
   20378 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_verify_5a(
   20379   const Eurydice_arr_43 *verification_key_serialized,
   20380   Eurydice_borrow_slice_u8 message,
   20381   Eurydice_borrow_slice_u8 context,
   20382   const Eurydice_arr_93 *signature_serialized
   20383 )
   20384 {
   20385   core_result_Result_a8
   20386   uu____0 =
   20387     libcrux_ml_dsa_pre_hash_new_88(context,
   20388       (KRML_CLITERAL(core_option_Option_57){ .tag = core_option_None }));
   20389   if (!(uu____0.tag == core_result_Ok))
   20390   {
   20391     return
   20392       (
   20393         KRML_CLITERAL(core_result_Result_41){
   20394           .tag = core_result_Err,
   20395           .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError
   20396         }
   20397       );
   20398   }
   20399   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   20400   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   20401   return
   20402     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_verify_internal_5a(verification_key_serialized,
   20403       message,
   20404       (
   20405         KRML_CLITERAL(core_option_Option_84){
   20406           .tag = core_option_Some,
   20407           .f0 = domain_separation_context
   20408         }
   20409       ),
   20410       signature_serialized);
   20411 }
   20412 
   20413 /**
   20414  Verify.
   20415 */
   20416 static inline core_result_Result_41
   20417 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify(
   20418   const Eurydice_arr_43 *verification_key,
   20419   Eurydice_borrow_slice_u8 message,
   20420   Eurydice_borrow_slice_u8 context,
   20421   const Eurydice_arr_93 *signature
   20422 )
   20423 {
   20424   return
   20425     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_verify_5a(verification_key,
   20426       message,
   20427       context,
   20428       signature);
   20429 }
   20430 
   20431 /**
   20432 A monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify_pre_hashed
   20433 with types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH
   20434 with const generics
   20435 
   20436 */
   20437 static KRML_MUSTINLINE core_result_Result_41
   20438 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_verify_pre_hashed_3f(
   20439   const Eurydice_arr_43 *verification_key_serialized,
   20440   Eurydice_borrow_slice_u8 message,
   20441   Eurydice_borrow_slice_u8 context,
   20442   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   20443   const Eurydice_arr_93 *signature_serialized
   20444 )
   20445 {
   20446   libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);
   20447   core_result_Result_a8
   20448   uu____0 =
   20449     libcrux_ml_dsa_pre_hash_new_88(context,
   20450       (
   20451         KRML_CLITERAL(core_option_Option_57){
   20452           .tag = core_option_Some,
   20453           .f0 = libcrux_ml_dsa_pre_hash_oid_30()
   20454         }
   20455       ));
   20456   if (!(uu____0.tag == core_result_Ok))
   20457   {
   20458     return
   20459       (
   20460         KRML_CLITERAL(core_result_Result_41){
   20461           .tag = core_result_Err,
   20462           .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError
   20463         }
   20464       );
   20465   }
   20466   libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;
   20467   libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;
   20468   return
   20469     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_verify_internal_5a(verification_key_serialized,
   20470       (
   20471         KRML_CLITERAL(Eurydice_borrow_slice_u8){
   20472           .ptr = pre_hash_buffer.ptr,
   20473           .meta = pre_hash_buffer.meta
   20474         }
   20475       ),
   20476       (
   20477         KRML_CLITERAL(core_option_Option_84){
   20478           .tag = core_option_Some,
   20479           .f0 = domain_separation_context
   20480         }
   20481       ),
   20482       signature_serialized);
   20483 }
   20484 
   20485 /**
   20486  Verify (pre-hashed with SHAKE-128).
   20487 */
   20488 static inline core_result_Result_41
   20489 libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify_pre_hashed_shake128(
   20490   const Eurydice_arr_43 *verification_key,
   20491   Eurydice_borrow_slice_u8 message,
   20492   Eurydice_borrow_slice_u8 context,
   20493   Eurydice_mut_borrow_slice_u8 pre_hash_buffer,
   20494   const Eurydice_arr_93 *signature
   20495 )
   20496 {
   20497   return
   20498     libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_verify_pre_hashed_3f(verification_key,
   20499       message,
   20500       context,
   20501       pre_hash_buffer,
   20502       signature);
   20503 }
   20504 
   20505 #if defined(__cplusplus)
   20506 }
   20507 #endif
   20508 
   20509 #define libcrux_mldsa_portable_H_DEFINED
   20510 #endif /* libcrux_mldsa_portable_H */
   20511 
   20512 /* from libcrux/combined_extraction/generated/libcrux_mldsa44_portable.h */
   20513 /*
   20514  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   20515  *
   20516  * SPDX-License-Identifier: MIT or Apache-2.0
   20517  *
   20518  * This code was generated with the following revisions:
   20519  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   20520  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   20521  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   20522  * F*: unset
   20523  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   20524  */
   20525 
   20526 
   20527 #ifndef libcrux_mldsa44_portable_H
   20528 #define libcrux_mldsa44_portable_H
   20529 
   20530 
   20531 
   20532 #if defined(__cplusplus)
   20533 extern "C" {
   20534 #endif
   20535 
   20536 
   20537 /**
   20538  Generate an ML-DSA-44 Key Pair
   20539 */
   20540 static inline libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair
   20541 libcrux_ml_dsa_ml_dsa_44_portable_generate_key_pair(Eurydice_arr_ec randomness)
   20542 {
   20543   Eurydice_arr_10 signing_key = { .data = { 0U } };
   20544   Eurydice_arr_02 verification_key = { .data = { 0U } };
   20545   libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_generate_key_pair(randomness,
   20546     &signing_key,
   20547     &verification_key);
   20548   return
   20549     (
   20550       KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair){
   20551         .signing_key = libcrux_ml_dsa_types_new_9b_ab(signing_key),
   20552         .verification_key = libcrux_ml_dsa_types_new_7f_7d(verification_key)
   20553       }
   20554     );
   20555 }
   20556 
   20557 /**
   20558  Generate an ML-DSA-44 Signature
   20559 
   20560  The parameter `context` is used for domain separation
   20561  and is a byte string of length at most 255 bytes. It
   20562  may also be empty.
   20563 */
   20564 static inline core_result_Result_48
   20565 libcrux_ml_dsa_ml_dsa_44_portable_sign(
   20566   const Eurydice_arr_10 *signing_key,
   20567   Eurydice_borrow_slice_u8 message,
   20568   Eurydice_borrow_slice_u8 context,
   20569   Eurydice_arr_ec randomness
   20570 )
   20571 {
   20572   return
   20573     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign(libcrux_ml_dsa_types_as_ref_9b_ab(signing_key),
   20574       message,
   20575       context,
   20576       randomness);
   20577 }
   20578 
   20579 /**
   20580  Generate an ML-DSA-44 Signature
   20581 
   20582  The parameter `context` is used for domain separation
   20583  and is a byte string of length at most 255 bytes. It
   20584  may also be empty.
   20585 */
   20586 static inline core_result_Result_53
   20587 libcrux_ml_dsa_ml_dsa_44_portable_sign_mut(
   20588   const Eurydice_arr_10 *signing_key,
   20589   Eurydice_borrow_slice_u8 message,
   20590   Eurydice_borrow_slice_u8 context,
   20591   Eurydice_arr_ec randomness,
   20592   Eurydice_arr_85 *signature
   20593 )
   20594 {
   20595   return
   20596     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_mut(libcrux_ml_dsa_types_as_ref_9b_ab(signing_key),
   20597       message,
   20598       context,
   20599       randomness,
   20600       signature);
   20601 }
   20602 
   20603 /**
   20604  Generate a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing
   20605 
   20606  The parameter `context` is used for domain separation
   20607  and is a byte string of length at most 255 bytes. It
   20608  may also be empty.
   20609 */
   20610 static inline core_result_Result_48
   20611 libcrux_ml_dsa_ml_dsa_44_portable_sign_pre_hashed_shake128(
   20612   const Eurydice_arr_10 *signing_key,
   20613   Eurydice_borrow_slice_u8 message,
   20614   Eurydice_borrow_slice_u8 context,
   20615   Eurydice_arr_ec randomness
   20616 )
   20617 {
   20618   Eurydice_arr_ec pre_hash_buffer = { .data = { 0U } };
   20619   const Eurydice_arr_10 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_ab(signing_key);
   20620   return
   20621     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_pre_hashed_shake128(uu____0,
   20622       message,
   20623       context,
   20624       Eurydice_array_to_slice_mut_01(&pre_hash_buffer),
   20625       randomness);
   20626 }
   20627 
   20628 /**
   20629  Verify an ML-DSA-44 Signature
   20630 
   20631  The parameter `context` is used for domain separation
   20632  and is a byte string of length at most 255 bytes. It
   20633  may also be empty.
   20634 */
   20635 static inline core_result_Result_41
   20636 libcrux_ml_dsa_ml_dsa_44_portable_verify(
   20637   const Eurydice_arr_02 *verification_key,
   20638   Eurydice_borrow_slice_u8 message,
   20639   Eurydice_borrow_slice_u8 context,
   20640   const Eurydice_arr_85 *signature
   20641 )
   20642 {
   20643   return
   20644     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify(libcrux_ml_dsa_types_as_ref_7f_7d(verification_key),
   20645       message,
   20646       context,
   20647       libcrux_ml_dsa_types_as_ref_c5_37(signature));
   20648 }
   20649 
   20650 /**
   20651  Verify a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing
   20652 
   20653  The parameter `context` is used for domain separation
   20654  and is a byte string of length at most 255 bytes. It
   20655  may also be empty.
   20656 */
   20657 static inline core_result_Result_41
   20658 libcrux_ml_dsa_ml_dsa_44_portable_verify_pre_hashed_shake128(
   20659   const Eurydice_arr_02 *verification_key,
   20660   Eurydice_borrow_slice_u8 message,
   20661   Eurydice_borrow_slice_u8 context,
   20662   const Eurydice_arr_85 *signature
   20663 )
   20664 {
   20665   Eurydice_arr_ec pre_hash_buffer = { .data = { 0U } };
   20666   const Eurydice_arr_02 *uu____0 = libcrux_ml_dsa_types_as_ref_7f_7d(verification_key);
   20667   Eurydice_borrow_slice_u8 uu____1 = message;
   20668   Eurydice_borrow_slice_u8 uu____2 = context;
   20669   Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_01(&pre_hash_buffer);
   20670   return
   20671     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify_pre_hashed_shake128(uu____0,
   20672       uu____1,
   20673       uu____2,
   20674       uu____3,
   20675       libcrux_ml_dsa_types_as_ref_c5_37(signature));
   20676 }
   20677 
   20678 #if defined(__cplusplus)
   20679 }
   20680 #endif
   20681 
   20682 #define libcrux_mldsa44_portable_H_DEFINED
   20683 #endif /* libcrux_mldsa44_portable_H */
   20684 
   20685 /* from libcrux/combined_extraction/generated/libcrux_mldsa65_portable.h */
   20686 /*
   20687  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   20688  *
   20689  * SPDX-License-Identifier: MIT or Apache-2.0
   20690  *
   20691  * This code was generated with the following revisions:
   20692  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   20693  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   20694  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   20695  * F*: unset
   20696  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   20697  */
   20698 
   20699 
   20700 #ifndef libcrux_mldsa65_portable_H
   20701 #define libcrux_mldsa65_portable_H
   20702 
   20703 
   20704 
   20705 #if defined(__cplusplus)
   20706 extern "C" {
   20707 #endif
   20708 
   20709 
   20710 /**
   20711  Generate an ML-DSA-65 Key Pair
   20712 */
   20713 static inline libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair
   20714 libcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair(Eurydice_arr_ec randomness)
   20715 {
   20716   Eurydice_arr_24 signing_key = { .data = { 0U } };
   20717   Eurydice_arr_29 verification_key = { .data = { 0U } };
   20718   libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_generate_key_pair(randomness,
   20719     &signing_key,
   20720     &verification_key);
   20721   return
   20722     (
   20723       KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair){
   20724         .signing_key = libcrux_ml_dsa_types_new_9b_e5(signing_key),
   20725         .verification_key = libcrux_ml_dsa_types_new_7f_a2(verification_key)
   20726       }
   20727     );
   20728 }
   20729 
   20730 /**
   20731  Generate an ML-DSA-65 Key Pair
   20732 */
   20733 static inline void
   20734 libcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair_mut(
   20735   Eurydice_arr_ec randomness,
   20736   Eurydice_arr_24 *signing_key,
   20737   Eurydice_arr_29 *verification_key
   20738 )
   20739 {
   20740   libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_generate_key_pair(randomness,
   20741     signing_key,
   20742     verification_key);
   20743 }
   20744 
   20745 /**
   20746  Generate an ML-DSA-65 Signature
   20747 
   20748  The parameter `context` is used for domain separation
   20749  and is a byte string of length at most 255 bytes. It
   20750  may also be empty.
   20751 */
   20752 static inline core_result_Result_8c
   20753 libcrux_ml_dsa_ml_dsa_65_portable_sign(
   20754   const Eurydice_arr_24 *signing_key,
   20755   Eurydice_borrow_slice_u8 message,
   20756   Eurydice_borrow_slice_u8 context,
   20757   Eurydice_arr_ec randomness
   20758 )
   20759 {
   20760   return
   20761     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign(libcrux_ml_dsa_types_as_ref_9b_e5(signing_key),
   20762       message,
   20763       context,
   20764       randomness);
   20765 }
   20766 
   20767 /**
   20768  Generate an ML-DSA-65 Signature
   20769 
   20770  The parameter `context` is used for domain separation
   20771  and is a byte string of length at most 255 bytes. It
   20772  may also be empty.
   20773 */
   20774 static inline core_result_Result_53
   20775 libcrux_ml_dsa_ml_dsa_65_portable_sign_mut(
   20776   const Eurydice_arr_24 *signing_key,
   20777   Eurydice_borrow_slice_u8 message,
   20778   Eurydice_borrow_slice_u8 context,
   20779   Eurydice_arr_ec randomness,
   20780   Eurydice_arr_0c *signature
   20781 )
   20782 {
   20783   return
   20784     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_mut(signing_key,
   20785       message,
   20786       context,
   20787       randomness,
   20788       signature);
   20789 }
   20790 
   20791 /**
   20792  Generate a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing
   20793 
   20794  The parameter `context` is used for domain separation
   20795  and is a byte string of length at most 255 bytes. It
   20796  may also be empty.
   20797 */
   20798 static inline core_result_Result_8c
   20799 libcrux_ml_dsa_ml_dsa_65_portable_sign_pre_hashed_shake128(
   20800   const Eurydice_arr_24 *signing_key,
   20801   Eurydice_borrow_slice_u8 message,
   20802   Eurydice_borrow_slice_u8 context,
   20803   Eurydice_arr_ec randomness
   20804 )
   20805 {
   20806   Eurydice_arr_ec pre_hash_buffer = { .data = { 0U } };
   20807   const Eurydice_arr_24 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_e5(signing_key);
   20808   return
   20809     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_pre_hashed_shake128(uu____0,
   20810       message,
   20811       context,
   20812       Eurydice_array_to_slice_mut_01(&pre_hash_buffer),
   20813       randomness);
   20814 }
   20815 
   20816 /**
   20817  Verify an ML-DSA-65 Signature
   20818 
   20819  The parameter `context` is used for domain separation
   20820  and is a byte string of length at most 255 bytes. It
   20821  may also be empty.
   20822 */
   20823 static inline core_result_Result_41
   20824 libcrux_ml_dsa_ml_dsa_65_portable_verify(
   20825   const Eurydice_arr_29 *verification_key,
   20826   Eurydice_borrow_slice_u8 message,
   20827   Eurydice_borrow_slice_u8 context,
   20828   const Eurydice_arr_0c *signature
   20829 )
   20830 {
   20831   return
   20832     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify(libcrux_ml_dsa_types_as_ref_7f_a2(verification_key),
   20833       message,
   20834       context,
   20835       libcrux_ml_dsa_types_as_ref_c5_5c(signature));
   20836 }
   20837 
   20838 /**
   20839  Verify a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing
   20840 
   20841  The parameter `context` is used for domain separation
   20842  and is a byte string of length at most 255 bytes. It
   20843  may also be empty.
   20844 */
   20845 static inline core_result_Result_41
   20846 libcrux_ml_dsa_ml_dsa_65_portable_verify_pre_hashed_shake128(
   20847   const Eurydice_arr_29 *verification_key,
   20848   Eurydice_borrow_slice_u8 message,
   20849   Eurydice_borrow_slice_u8 context,
   20850   const Eurydice_arr_0c *signature
   20851 )
   20852 {
   20853   Eurydice_arr_ec pre_hash_buffer = { .data = { 0U } };
   20854   const Eurydice_arr_29 *uu____0 = libcrux_ml_dsa_types_as_ref_7f_a2(verification_key);
   20855   Eurydice_borrow_slice_u8 uu____1 = message;
   20856   Eurydice_borrow_slice_u8 uu____2 = context;
   20857   Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_01(&pre_hash_buffer);
   20858   return
   20859     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify_pre_hashed_shake128(uu____0,
   20860       uu____1,
   20861       uu____2,
   20862       uu____3,
   20863       libcrux_ml_dsa_types_as_ref_c5_5c(signature));
   20864 }
   20865 
   20866 #if defined(__cplusplus)
   20867 }
   20868 #endif
   20869 
   20870 #define libcrux_mldsa65_portable_H_DEFINED
   20871 #endif /* libcrux_mldsa65_portable_H */
   20872 
   20873 /* from libcrux/combined_extraction/generated/libcrux_mldsa87_portable.h */
   20874 /*
   20875  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   20876  *
   20877  * SPDX-License-Identifier: MIT or Apache-2.0
   20878  *
   20879  * This code was generated with the following revisions:
   20880  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   20881  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   20882  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   20883  * F*: unset
   20884  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   20885  */
   20886 
   20887 
   20888 #ifndef libcrux_mldsa87_portable_H
   20889 #define libcrux_mldsa87_portable_H
   20890 
   20891 
   20892 
   20893 #if defined(__cplusplus)
   20894 extern "C" {
   20895 #endif
   20896 
   20897 
   20898 /**
   20899  Generate an ML-DSA-87 Key Pair
   20900 */
   20901 static inline libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair
   20902 libcrux_ml_dsa_ml_dsa_87_portable_generate_key_pair(Eurydice_arr_ec randomness)
   20903 {
   20904   Eurydice_arr_e2 signing_key = { .data = { 0U } };
   20905   Eurydice_arr_43 verification_key = { .data = { 0U } };
   20906   libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_generate_key_pair(randomness,
   20907     &signing_key,
   20908     &verification_key);
   20909   return
   20910     (
   20911       KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair){
   20912         .signing_key = libcrux_ml_dsa_types_new_9b_72(signing_key),
   20913         .verification_key = libcrux_ml_dsa_types_new_7f_c6(verification_key)
   20914       }
   20915     );
   20916 }
   20917 
   20918 /**
   20919  Generate an ML-DSA-87 Signature
   20920 
   20921  The parameter `context` is used for domain separation
   20922  and is a byte string of length at most 255 bytes. It
   20923  may also be empty.
   20924 */
   20925 static inline core_result_Result_8b
   20926 libcrux_ml_dsa_ml_dsa_87_portable_sign(
   20927   const Eurydice_arr_e2 *signing_key,
   20928   Eurydice_borrow_slice_u8 message,
   20929   Eurydice_borrow_slice_u8 context,
   20930   Eurydice_arr_ec randomness
   20931 )
   20932 {
   20933   return
   20934     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign(libcrux_ml_dsa_types_as_ref_9b_72(signing_key),
   20935       message,
   20936       context,
   20937       randomness);
   20938 }
   20939 
   20940 /**
   20941  Generate an ML-DSA-87 Signature
   20942 
   20943  The parameter `context` is used for domain separation
   20944  and is a byte string of length at most 255 bytes. It
   20945  may also be empty.
   20946 */
   20947 static inline core_result_Result_53
   20948 libcrux_ml_dsa_ml_dsa_87_portable_sign_mut(
   20949   const Eurydice_arr_e2 *signing_key,
   20950   Eurydice_borrow_slice_u8 message,
   20951   Eurydice_borrow_slice_u8 context,
   20952   Eurydice_arr_ec randomness,
   20953   Eurydice_arr_93 *signature
   20954 )
   20955 {
   20956   return
   20957     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_mut(libcrux_ml_dsa_types_as_ref_9b_72(signing_key),
   20958       message,
   20959       context,
   20960       randomness,
   20961       signature);
   20962 }
   20963 
   20964 /**
   20965  Generate a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing
   20966 
   20967  The parameter `context` is used for domain separation
   20968  and is a byte string of length at most 255 bytes. It
   20969  may also be empty.
   20970 */
   20971 static inline core_result_Result_8b
   20972 libcrux_ml_dsa_ml_dsa_87_portable_sign_pre_hashed_shake128(
   20973   const Eurydice_arr_e2 *signing_key,
   20974   Eurydice_borrow_slice_u8 message,
   20975   Eurydice_borrow_slice_u8 context,
   20976   Eurydice_arr_ec randomness
   20977 )
   20978 {
   20979   Eurydice_arr_ec pre_hash_buffer = { .data = { 0U } };
   20980   const Eurydice_arr_e2 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_72(signing_key);
   20981   return
   20982     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_pre_hashed_shake128(uu____0,
   20983       message,
   20984       context,
   20985       Eurydice_array_to_slice_mut_01(&pre_hash_buffer),
   20986       randomness);
   20987 }
   20988 
   20989 /**
   20990  Verify an ML-DSA-87 Signature
   20991 
   20992  The parameter `context` is used for domain separation
   20993  and is a byte string of length at most 255 bytes. It
   20994  may also be empty.
   20995 */
   20996 static inline core_result_Result_41
   20997 libcrux_ml_dsa_ml_dsa_87_portable_verify(
   20998   const Eurydice_arr_43 *verification_key,
   20999   Eurydice_borrow_slice_u8 message,
   21000   Eurydice_borrow_slice_u8 context,
   21001   const Eurydice_arr_93 *signature
   21002 )
   21003 {
   21004   return
   21005     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify(libcrux_ml_dsa_types_as_ref_7f_c6(verification_key),
   21006       message,
   21007       context,
   21008       libcrux_ml_dsa_types_as_ref_c5_f1(signature));
   21009 }
   21010 
   21011 /**
   21012  Verify a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing
   21013 
   21014  The parameter `context` is used for domain separation
   21015  and is a byte string of length at most 255 bytes. It
   21016  may also be empty.
   21017 */
   21018 static inline core_result_Result_41
   21019 libcrux_ml_dsa_ml_dsa_87_portable_verify_pre_hashed_shake128(
   21020   const Eurydice_arr_43 *verification_key,
   21021   Eurydice_borrow_slice_u8 message,
   21022   Eurydice_borrow_slice_u8 context,
   21023   const Eurydice_arr_93 *signature
   21024 )
   21025 {
   21026   Eurydice_arr_ec pre_hash_buffer = { .data = { 0U } };
   21027   const Eurydice_arr_43 *uu____0 = libcrux_ml_dsa_types_as_ref_7f_c6(verification_key);
   21028   Eurydice_borrow_slice_u8 uu____1 = message;
   21029   Eurydice_borrow_slice_u8 uu____2 = context;
   21030   Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_01(&pre_hash_buffer);
   21031   return
   21032     libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify_pre_hashed_shake128(uu____0,
   21033       uu____1,
   21034       uu____2,
   21035       uu____3,
   21036       libcrux_ml_dsa_types_as_ref_c5_f1(signature));
   21037 }
   21038 
   21039 #if defined(__cplusplus)
   21040 }
   21041 #endif
   21042 
   21043 #define libcrux_mldsa87_portable_H_DEFINED
   21044 #endif /* libcrux_mldsa87_portable_H */
   21045 
   21046 /* from libcrux/combined_extraction/generated/libcrux_mlkem768_portable.h */
   21047 /*
   21048  * SPDX-FileCopyrightText: 2025 Cryspen Sarl <info (at) cryspen.com>
   21049  *
   21050  * SPDX-License-Identifier: MIT or Apache-2.0
   21051  *
   21052  * This code was generated with the following revisions:
   21053  * Charon: e656e17bff6ca5efac8ab6919b9b74cb9a8dd8ad
   21054  * Eurydice: aaa9fa657fb6f09802edb890252040d94cd93982
   21055  * Karamel: 8c19d41458ce5cbfea029ebc03334ba96d149039
   21056  * F*: unset
   21057  * Libcrux: c4e5e5e511bbc4c53f826163f57bfd10e9228911
   21058  */
   21059 
   21060 
   21061 #ifndef libcrux_mlkem768_portable_H
   21062 #define libcrux_mlkem768_portable_H
   21063 
   21064 
   21065 
   21066 #if defined(__cplusplus)
   21067 extern "C" {
   21068 #endif
   21069 
   21070 
   21071 static inline Eurydice_arr_c7
   21072 libcrux_ml_kem_hash_functions_portable_G(Eurydice_borrow_slice_u8 input)
   21073 {
   21074   Eurydice_arr_c7 digest = { .data = { 0U } };
   21075   libcrux_sha3_portable_sha512(Eurydice_array_to_slice_mut_17(&digest), input);
   21076   return digest;
   21077 }
   21078 
   21079 static inline Eurydice_arr_ec
   21080 libcrux_ml_kem_hash_functions_portable_H(Eurydice_borrow_slice_u8 input)
   21081 {
   21082   Eurydice_arr_ec digest = { .data = { 0U } };
   21083   libcrux_sha3_portable_sha256(Eurydice_array_to_slice_mut_01(&digest), input);
   21084   return digest;
   21085 }
   21086 
   21087 #define LIBCRUX_ML_KEM_POLYNOMIAL_ZETAS_TIMES_MONTGOMERY_R ((KRML_CLITERAL(Eurydice_arr_34){ .data = { -1044, -758, -359, -1517, 1493, 1422, 287, 202, -171, 622, 1577, 182, 962, -1202, -1474, 1468, 573, -1325, 264, 383, -829, 1458, -1602, -130, -681, 1017, 732, 608, -1542, 411, -205, -1571, 1223, 652, -552, 1015, -1293, 1491, -282, -1544, 516, -8, -320, -666, -1618, -1162, 126, 1469, -853, -90, -271, 830, 107, -1421, -247, -951, -398, 961, -1508, -725, 448, -1065, 677, -1275, -1103, 430, 555, 843, -1251, 871, 1550, 105, 422, 587, 177, -235, -291, -460, 1574, 1653, -246, 778, 1159, -147, -777, 1483, -602, 1119, -1590, 644, -872, 349, 418, 329, -156, -75, 817, 1097, 603, 610, 1322, -1285, -1465, 384, -1215, -136, 1218, -1335, -874, 220, -1187, -1659, -1185, -1530, -1278, 794, -1510, -854, -870, 478, -108, -308, 996, 991, 958, -1460, 1522, 1628 } }))
   21088 
   21089 static KRML_MUSTINLINE int16_t libcrux_ml_kem_polynomial_zeta(size_t i)
   21090 {
   21091   return LIBCRUX_ML_KEM_POLYNOMIAL_ZETAS_TIMES_MONTGOMERY_R.data[i];
   21092 }
   21093 
   21094 #define LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT ((size_t)16U)
   21095 
   21096 #define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR ((size_t)16U)
   21097 
   21098 #define LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS (1353)
   21099 
   21100 #define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS (3329)
   21101 
   21102 #define LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R (62209U)
   21103 
   21104 static KRML_MUSTINLINE Eurydice_arr_d6
   21105 libcrux_ml_kem_vector_portable_vector_type_from_i16_array(Eurydice_borrow_slice_i16 array)
   21106 {
   21107   Eurydice_arr_d6 arr;
   21108   memcpy(arr.data,
   21109     Eurydice_slice_subslice_shared_a6(array,
   21110       (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })).ptr,
   21111     (size_t)16U * sizeof (int16_t));
   21112   return
   21113     core_result_unwrap_26_d3((
   21114         KRML_CLITERAL(core_result_Result_ec){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   21115       ));
   21116 }
   21117 
   21118 /**
   21119 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21120 */
   21121 static inline Eurydice_arr_d6
   21122 libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_borrow_slice_i16 array)
   21123 {
   21124   return
   21125     libcrux_ml_kem_vector_portable_vector_type_from_i16_array(libcrux_secrets_int_classify_public_classify_ref_6d_39(array));
   21126 }
   21127 
   21128 static KRML_MUSTINLINE Eurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_zero(void)
   21129 {
   21130   return
   21131     libcrux_secrets_int_public_integers_classify_27_4b((
   21132         KRML_CLITERAL(Eurydice_arr_d6){ .data = { 0U } }
   21133       ));
   21134 }
   21135 
   21136 /**
   21137 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21138 */
   21139 static inline Eurydice_arr_d6 libcrux_ml_kem_vector_portable_ZERO_b8(void)
   21140 {
   21141   return libcrux_ml_kem_vector_portable_vector_type_zero();
   21142 }
   21143 
   21144 static KRML_MUSTINLINE Eurydice_arr_d6
   21145 libcrux_ml_kem_vector_portable_arithmetic_add(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)
   21146 {
   21147   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21148   {
   21149     size_t i0 = i;
   21150     size_t uu____0 = i0;
   21151     lhs.data[uu____0] += rhs->data[i0];
   21152   }
   21153   return lhs;
   21154 }
   21155 
   21156 /**
   21157 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21158 */
   21159 static inline Eurydice_arr_d6
   21160 libcrux_ml_kem_vector_portable_add_b8(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)
   21161 {
   21162   return libcrux_ml_kem_vector_portable_arithmetic_add(lhs, rhs);
   21163 }
   21164 
   21165 static KRML_MUSTINLINE Eurydice_arr_d6
   21166 libcrux_ml_kem_vector_portable_arithmetic_sub(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)
   21167 {
   21168   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21169   {
   21170     size_t i0 = i;
   21171     size_t uu____0 = i0;
   21172     lhs.data[uu____0] -= rhs->data[i0];
   21173   }
   21174   return lhs;
   21175 }
   21176 
   21177 /**
   21178 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21179 */
   21180 static inline Eurydice_arr_d6
   21181 libcrux_ml_kem_vector_portable_sub_b8(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)
   21182 {
   21183   return libcrux_ml_kem_vector_portable_arithmetic_sub(lhs, rhs);
   21184 }
   21185 
   21186 static KRML_MUSTINLINE Eurydice_arr_d6
   21187 libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(Eurydice_arr_d6 vec, int16_t c)
   21188 {
   21189   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21190   {
   21191     size_t i0 = i;
   21192     size_t uu____0 = i0;
   21193     vec.data[uu____0] *= c;
   21194   }
   21195   return vec;
   21196 }
   21197 
   21198 /**
   21199 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21200 */
   21201 static inline Eurydice_arr_d6
   21202 libcrux_ml_kem_vector_portable_multiply_by_constant_b8(Eurydice_arr_d6 vec, int16_t c)
   21203 {
   21204   return libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(vec, c);
   21205 }
   21206 
   21207 /**
   21208  Note: This function is not secret independent
   21209  Only use with public values.
   21210 */
   21211 static KRML_MUSTINLINE Eurydice_arr_d6
   21212 libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(Eurydice_arr_d6 vec)
   21213 {
   21214   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21215   {
   21216     size_t i0 = i;
   21217     if (libcrux_secrets_int_public_integers_declassify_d8_39(vec.data[i0]) >= 3329)
   21218     {
   21219       size_t uu____0 = i0;
   21220       vec.data[uu____0] -= 3329;
   21221     }
   21222   }
   21223   return vec;
   21224 }
   21225 
   21226 /**
   21227 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21228 */
   21229 static inline Eurydice_arr_d6
   21230 libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(Eurydice_arr_d6 v)
   21231 {
   21232   return libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(v);
   21233 }
   21234 
   21235 #define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER (20159)
   21236 
   21237 #define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT (26)
   21238 
   21239 #define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R ((int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT))
   21240 
   21241 /**
   21242  Signed Barrett Reduction
   21243 
   21244  Given an input `value`, `barrett_reduce` outputs a representative `result`
   21245  such that:
   21246 
   21247  - result  value (mod FIELD_MODULUS)
   21248  - the absolute value of `result` is bound as follows:
   21249 
   21250  `|result|  FIELD_MODULUS / 2  (|value|/BARRETT_R + 1)
   21251 
   21252  Note: The input bound is 28296 to prevent overflow in the multiplication of quotient by FIELD_MODULUS
   21253 
   21254 */
   21255 static inline int16_t
   21256 libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(int16_t value)
   21257 {
   21258   int32_t
   21259   t =
   21260     libcrux_secrets_int_as_i32_f5(value) *
   21261       LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER
   21262     + (LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R >> 1U);
   21263   int16_t
   21264   quotient =
   21265     libcrux_secrets_int_as_i16_36(t >> (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT);
   21266   return value - quotient * LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
   21267 }
   21268 
   21269 static KRML_MUSTINLINE Eurydice_arr_d6
   21270 libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(Eurydice_arr_d6 vec)
   21271 {
   21272   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21273   {
   21274     size_t i0 = i;
   21275     int16_t vi = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(vec.data[i0]);
   21276     vec.data[i0] = vi;
   21277   }
   21278   return vec;
   21279 }
   21280 
   21281 /**
   21282 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21283 */
   21284 static inline Eurydice_arr_d6
   21285 libcrux_ml_kem_vector_portable_barrett_reduce_b8(Eurydice_arr_d6 vector)
   21286 {
   21287   return libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(vector);
   21288 }
   21289 
   21290 #define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT (16U)
   21291 
   21292 /**
   21293  Signed Montgomery Reduction
   21294 
   21295  Given an input `value`, `montgomery_reduce` outputs a representative `o`
   21296  such that:
   21297 
   21298  - o  value  MONTGOMERY_R^(-1) (mod FIELD_MODULUS)
   21299  - the absolute value of `o` is bound as follows:
   21300 
   21301  `|result|  ceil(|value| / MONTGOMERY_R) + 1665
   21302 
   21303  In particular, if `|value|  FIELD_MODULUS-1 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS-1`.
   21304  And, if `|value|  pow2 16 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS + 1664
   21305 
   21306 */
   21307 static inline int16_t
   21308 libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(int32_t value)
   21309 {
   21310   int32_t
   21311   k =
   21312     libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(value)) *
   21313       libcrux_secrets_int_as_i32_b8(libcrux_secrets_int_public_integers_classify_27_df(LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));
   21314   int32_t
   21315   k_times_modulus =
   21316     libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(k)) *
   21317       libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));
   21318   int16_t
   21319   c =
   21320     libcrux_secrets_int_as_i16_36(k_times_modulus >>
   21321         (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);
   21322   int16_t
   21323   value_high =
   21324     libcrux_secrets_int_as_i16_36(value >>
   21325         (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);
   21326   return value_high - c;
   21327 }
   21328 
   21329 /**
   21330  If `fe` is some field element 'x' of the Kyber field and `fer` is congruent to
   21331  `y  MONTGOMERY_R`, this procedure outputs a value that is congruent to
   21332  `x  y`, as follows:
   21333 
   21334     `fe  fer  x  y  MONTGOMERY_R (mod FIELD_MODULUS)`
   21335 
   21336  `montgomery_reduce` takes the value `x  y  MONTGOMERY_R` and outputs a representative
   21337  `x  y  MONTGOMERY_R * MONTGOMERY_R^{-1}  x  y (mod FIELD_MODULUS)`.
   21338 */
   21339 static KRML_MUSTINLINE int16_t
   21340 libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(
   21341   int16_t fe,
   21342   int16_t fer
   21343 )
   21344 {
   21345   int32_t product = libcrux_secrets_int_as_i32_f5(fe) * libcrux_secrets_int_as_i32_f5(fer);
   21346   return libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(product);
   21347 }
   21348 
   21349 static KRML_MUSTINLINE Eurydice_arr_d6
   21350 libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(
   21351   Eurydice_arr_d6 vec,
   21352   int16_t c
   21353 )
   21354 {
   21355   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21356   {
   21357     size_t i0 = i;
   21358     vec.data[i0] =
   21359       libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(vec.data[i0],
   21360         c);
   21361   }
   21362   return vec;
   21363 }
   21364 
   21365 /**
   21366 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21367 */
   21368 static inline Eurydice_arr_d6
   21369 libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(
   21370   Eurydice_arr_d6 vector,
   21371   int16_t constant
   21372 )
   21373 {
   21374   return
   21375     libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(vector,
   21376       libcrux_secrets_int_public_integers_classify_27_39(constant));
   21377 }
   21378 
   21379 static KRML_MUSTINLINE Eurydice_arr_d6
   21380 libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(
   21381   Eurydice_arr_d6 vec,
   21382   int16_t c
   21383 )
   21384 {
   21385   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21386   {
   21387     size_t i0 = i;
   21388     size_t uu____0 = i0;
   21389     vec.data[uu____0] &= c;
   21390   }
   21391   return vec;
   21392 }
   21393 
   21394 /**
   21395 A monomorphic instance of libcrux_ml_kem.vector.portable.arithmetic.shift_right
   21396 with const generics
   21397 - SHIFT_BY= 15
   21398 */
   21399 static KRML_MUSTINLINE Eurydice_arr_d6
   21400 libcrux_ml_kem_vector_portable_arithmetic_shift_right_ef(Eurydice_arr_d6 vec)
   21401 {
   21402   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21403   {
   21404     size_t i0 = i;
   21405     vec.data[i0] >>= (uint32_t)15;
   21406   }
   21407   return vec;
   21408 }
   21409 
   21410 static KRML_MUSTINLINE Eurydice_arr_d6
   21411 libcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(Eurydice_arr_d6 a)
   21412 {
   21413   Eurydice_arr_d6 t = libcrux_ml_kem_vector_portable_arithmetic_shift_right_ef(a);
   21414   Eurydice_arr_d6
   21415   fm =
   21416     libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(t,
   21417       LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);
   21418   return libcrux_ml_kem_vector_portable_arithmetic_add(a, &fm);
   21419 }
   21420 
   21421 /**
   21422 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21423 */
   21424 static inline Eurydice_arr_d6
   21425 libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(Eurydice_arr_d6 a)
   21426 {
   21427   return libcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(a);
   21428 }
   21429 
   21430 /**
   21431  The `compress_*` functions implement the `Compress` function specified in the NIST FIPS
   21432  203 standard (Page 18, Expression 4.5), which is defined as:
   21433 
   21434  ```plaintext
   21435  Compress_d: q -> _{2}
   21436  Compress_d(x) = (2/q)x
   21437  ```
   21438 
   21439  Since `x = x + 1/2` we have:
   21440 
   21441  ```plaintext
   21442  Compress_d(x) = (2/q)x + 1/2
   21443                = (2^{d+1}x + q) / 2q
   21444  ```
   21445 
   21446  For further information about the function implementations, consult the
   21447  `implementation_notes.pdf` document in this directory.
   21448 
   21449  The NIST FIPS 203 standard can be found at
   21450  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   21451 */
   21452 static inline uint8_t
   21453 libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(uint16_t fe)
   21454 {
   21455   int16_t
   21456   shifted =
   21457     libcrux_secrets_int_public_integers_classify_27_39(1664) - libcrux_secrets_int_as_i16_ca(fe);
   21458   int16_t mask = shifted >> 15U;
   21459   int16_t shifted_to_positive = mask ^ shifted;
   21460   int16_t shifted_positive_in_range = shifted_to_positive - 832;
   21461   int16_t r0 = shifted_positive_in_range >> 15U;
   21462   int16_t r1 = r0 & 1;
   21463   return libcrux_secrets_int_as_u8_f5(r1);
   21464 }
   21465 
   21466 static KRML_MUSTINLINE Eurydice_arr_d6
   21467 libcrux_ml_kem_vector_portable_compress_compress_1(Eurydice_arr_d6 a)
   21468 {
   21469   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   21470   {
   21471     size_t i0 = i;
   21472     a.data[i0] =
   21473       libcrux_secrets_int_as_i16_59(libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(libcrux_secrets_int_as_u16_f5(a.data[i0])));
   21474   }
   21475   return a;
   21476 }
   21477 
   21478 /**
   21479 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21480 */
   21481 static inline Eurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_1_b8(Eurydice_arr_d6 a)
   21482 {
   21483   return libcrux_ml_kem_vector_portable_compress_compress_1(a);
   21484 }
   21485 
   21486 static KRML_MUSTINLINE uint32_t
   21487 libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(
   21488   uint8_t n,
   21489   uint32_t value
   21490 )
   21491 {
   21492   return value & ((1U << (uint32_t)n) - 1U);
   21493 }
   21494 
   21495 static inline int16_t
   21496 libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(
   21497   uint8_t coefficient_bits,
   21498   uint16_t fe
   21499 )
   21500 {
   21501   uint64_t compressed = libcrux_secrets_int_as_u64_ca(fe) << (uint32_t)coefficient_bits;
   21502   compressed += 1664ULL;
   21503   compressed *= 10321340ULL;
   21504   compressed >>= 35U;
   21505   return
   21506     libcrux_secrets_int_as_i16_b8(libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(coefficient_bits,
   21507         libcrux_secrets_int_as_u32_a3(compressed)));
   21508 }
   21509 
   21510 static KRML_MUSTINLINE Eurydice_arr_d6
   21511 libcrux_ml_kem_vector_portable_compress_decompress_1(Eurydice_arr_d6 a)
   21512 {
   21513   Eurydice_arr_d6 z = libcrux_ml_kem_vector_portable_vector_type_zero();
   21514   Eurydice_arr_d6 s = libcrux_ml_kem_vector_portable_arithmetic_sub(z, &a);
   21515   Eurydice_arr_d6
   21516   res = libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(s, 1665);
   21517   return res;
   21518 }
   21519 
   21520 /**
   21521 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21522 */
   21523 static inline Eurydice_arr_d6 libcrux_ml_kem_vector_portable_decompress_1_b8(Eurydice_arr_d6 a)
   21524 {
   21525   return libcrux_ml_kem_vector_portable_compress_decompress_1(a);
   21526 }
   21527 
   21528 static KRML_MUSTINLINE void
   21529 libcrux_ml_kem_vector_portable_ntt_ntt_step(
   21530   Eurydice_arr_d6 *vec,
   21531   int16_t zeta,
   21532   size_t i,
   21533   size_t j
   21534 )
   21535 {
   21536   int16_t
   21537   t =
   21538     libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(vec->data[j],
   21539       libcrux_secrets_int_public_integers_classify_27_39(zeta));
   21540   int16_t a_minus_t = vec->data[i] - t;
   21541   int16_t a_plus_t = vec->data[i] + t;
   21542   vec->data[j] = a_minus_t;
   21543   vec->data[i] = a_plus_t;
   21544 }
   21545 
   21546 static KRML_MUSTINLINE Eurydice_arr_d6
   21547 libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(
   21548   Eurydice_arr_d6 vec,
   21549   int16_t zeta0,
   21550   int16_t zeta1,
   21551   int16_t zeta2,
   21552   int16_t zeta3
   21553 )
   21554 {
   21555   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U);
   21556   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U);
   21557   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U);
   21558   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U);
   21559   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U);
   21560   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U);
   21561   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U);
   21562   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U);
   21563   return vec;
   21564 }
   21565 
   21566 /**
   21567 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21568 */
   21569 static inline Eurydice_arr_d6
   21570 libcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(
   21571   Eurydice_arr_d6 a,
   21572   int16_t zeta0,
   21573   int16_t zeta1,
   21574   int16_t zeta2,
   21575   int16_t zeta3
   21576 )
   21577 {
   21578   return libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(a, zeta0, zeta1, zeta2, zeta3);
   21579 }
   21580 
   21581 static KRML_MUSTINLINE Eurydice_arr_d6
   21582 libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(
   21583   Eurydice_arr_d6 vec,
   21584   int16_t zeta0,
   21585   int16_t zeta1
   21586 )
   21587 {
   21588   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U);
   21589   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U);
   21590   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U);
   21591   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U);
   21592   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U);
   21593   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U);
   21594   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U);
   21595   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U);
   21596   return vec;
   21597 }
   21598 
   21599 /**
   21600 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21601 */
   21602 static inline Eurydice_arr_d6
   21603 libcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(
   21604   Eurydice_arr_d6 a,
   21605   int16_t zeta0,
   21606   int16_t zeta1
   21607 )
   21608 {
   21609   return libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(a, zeta0, zeta1);
   21610 }
   21611 
   21612 static KRML_MUSTINLINE Eurydice_arr_d6
   21613 libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta)
   21614 {
   21615   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)0U, (size_t)8U);
   21616   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)1U, (size_t)9U);
   21617   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U);
   21618   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U);
   21619   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U);
   21620   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U);
   21621   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U);
   21622   libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U);
   21623   return vec;
   21624 }
   21625 
   21626 /**
   21627 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21628 */
   21629 static inline Eurydice_arr_d6
   21630 libcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta)
   21631 {
   21632   return libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(a, zeta);
   21633 }
   21634 
   21635 static KRML_MUSTINLINE void
   21636 libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(
   21637   Eurydice_arr_d6 *vec,
   21638   int16_t zeta,
   21639   size_t i,
   21640   size_t j
   21641 )
   21642 {
   21643   int16_t a_minus_b = vec->data[j] - vec->data[i];
   21644   int16_t a_plus_b = vec->data[j] + vec->data[i];
   21645   int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(a_plus_b);
   21646   int16_t
   21647   o1 =
   21648     libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(a_minus_b,
   21649       libcrux_secrets_int_public_integers_classify_27_39(zeta));
   21650   vec->data[i] = o0;
   21651   vec->data[j] = o1;
   21652 }
   21653 
   21654 static KRML_MUSTINLINE Eurydice_arr_d6
   21655 libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(
   21656   Eurydice_arr_d6 vec,
   21657   int16_t zeta0,
   21658   int16_t zeta1,
   21659   int16_t zeta2,
   21660   int16_t zeta3
   21661 )
   21662 {
   21663   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U);
   21664   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U);
   21665   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U);
   21666   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U);
   21667   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U);
   21668   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U);
   21669   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U);
   21670   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U);
   21671   return vec;
   21672 }
   21673 
   21674 /**
   21675 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21676 */
   21677 static inline Eurydice_arr_d6
   21678 libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(
   21679   Eurydice_arr_d6 a,
   21680   int16_t zeta0,
   21681   int16_t zeta1,
   21682   int16_t zeta2,
   21683   int16_t zeta3
   21684 )
   21685 {
   21686   return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(a, zeta0, zeta1, zeta2, zeta3);
   21687 }
   21688 
   21689 static KRML_MUSTINLINE Eurydice_arr_d6
   21690 libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(
   21691   Eurydice_arr_d6 vec,
   21692   int16_t zeta0,
   21693   int16_t zeta1
   21694 )
   21695 {
   21696   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U);
   21697   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U);
   21698   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U);
   21699   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U);
   21700   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U);
   21701   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U);
   21702   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U);
   21703   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U);
   21704   return vec;
   21705 }
   21706 
   21707 /**
   21708 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21709 */
   21710 static inline Eurydice_arr_d6
   21711 libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(
   21712   Eurydice_arr_d6 a,
   21713   int16_t zeta0,
   21714   int16_t zeta1
   21715 )
   21716 {
   21717   return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(a, zeta0, zeta1);
   21718 }
   21719 
   21720 static KRML_MUSTINLINE Eurydice_arr_d6
   21721 libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta)
   21722 {
   21723   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)0U, (size_t)8U);
   21724   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)1U, (size_t)9U);
   21725   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U);
   21726   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U);
   21727   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U);
   21728   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U);
   21729   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U);
   21730   libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U);
   21731   return vec;
   21732 }
   21733 
   21734 /**
   21735 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21736 */
   21737 static inline Eurydice_arr_d6
   21738 libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta)
   21739 {
   21740   return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(a, zeta);
   21741 }
   21742 
   21743 /**
   21744  Compute the product of two Kyber binomials with respect to the
   21745  modulus `X - zeta`.
   21746 
   21747  This function almost implements <strong>Algorithm 11</strong> of the
   21748  NIST FIPS 203 standard, which is reproduced below:
   21749 
   21750  ```plaintext
   21751  Input:  a, a, b, b  q.
   21752  Input:   q.
   21753  Output: c, c  q.
   21754 
   21755  c  ab + ab
   21756  c  ab + ab
   21757  return c, c
   21758  ```
   21759  We say "almost" because the coefficients output by this function are in
   21760  the Montgomery domain (unlike in the specification).
   21761 
   21762  The NIST FIPS 203 standard can be found at
   21763  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   21764 */
   21765 static KRML_MUSTINLINE void
   21766 libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
   21767   const Eurydice_arr_d6 *a,
   21768   const Eurydice_arr_d6 *b,
   21769   int16_t zeta,
   21770   size_t i,
   21771   Eurydice_arr_d6 *out
   21772 )
   21773 {
   21774   int16_t ai = a->data[(size_t)2U * i];
   21775   int16_t bi = b->data[(size_t)2U * i];
   21776   int16_t aj = a->data[(size_t)2U * i + (size_t)1U];
   21777   int16_t bj = b->data[(size_t)2U * i + (size_t)1U];
   21778   int32_t ai_bi = libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bi);
   21779   int32_t aj_bj_ = libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bj);
   21780   int16_t aj_bj = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(aj_bj_);
   21781   int32_t
   21782   aj_bj_zeta = libcrux_secrets_int_as_i32_f5(aj_bj) * libcrux_secrets_int_as_i32_f5(zeta);
   21783   int32_t ai_bi_aj_bj = ai_bi + aj_bj_zeta;
   21784   int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(ai_bi_aj_bj);
   21785   int32_t ai_bj = libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bj);
   21786   int32_t aj_bi = libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bi);
   21787   int32_t ai_bj_aj_bi = ai_bj + aj_bi;
   21788   int16_t o1 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(ai_bj_aj_bi);
   21789   out->data[(size_t)2U * i] = o0;
   21790   out->data[(size_t)2U * i + (size_t)1U] = o1;
   21791 }
   21792 
   21793 static KRML_MUSTINLINE Eurydice_arr_d6
   21794 libcrux_ml_kem_vector_portable_ntt_ntt_multiply(
   21795   const Eurydice_arr_d6 *lhs,
   21796   const Eurydice_arr_d6 *rhs,
   21797   int16_t zeta0,
   21798   int16_t zeta1,
   21799   int16_t zeta2,
   21800   int16_t zeta3
   21801 )
   21802 {
   21803   int16_t nzeta0 = -zeta0;
   21804   int16_t nzeta1 = -zeta1;
   21805   int16_t nzeta2 = -zeta2;
   21806   int16_t nzeta3 = -zeta3;
   21807   Eurydice_arr_d6 out = libcrux_ml_kem_vector_portable_vector_type_zero();
   21808   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21809     rhs,
   21810     libcrux_secrets_int_public_integers_classify_27_39(zeta0),
   21811     (size_t)0U,
   21812     &out);
   21813   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21814     rhs,
   21815     libcrux_secrets_int_public_integers_classify_27_39(nzeta0),
   21816     (size_t)1U,
   21817     &out);
   21818   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21819     rhs,
   21820     libcrux_secrets_int_public_integers_classify_27_39(zeta1),
   21821     (size_t)2U,
   21822     &out);
   21823   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21824     rhs,
   21825     libcrux_secrets_int_public_integers_classify_27_39(nzeta1),
   21826     (size_t)3U,
   21827     &out);
   21828   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21829     rhs,
   21830     libcrux_secrets_int_public_integers_classify_27_39(zeta2),
   21831     (size_t)4U,
   21832     &out);
   21833   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21834     rhs,
   21835     libcrux_secrets_int_public_integers_classify_27_39(nzeta2),
   21836     (size_t)5U,
   21837     &out);
   21838   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21839     rhs,
   21840     libcrux_secrets_int_public_integers_classify_27_39(zeta3),
   21841     (size_t)6U,
   21842     &out);
   21843   libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,
   21844     rhs,
   21845     libcrux_secrets_int_public_integers_classify_27_39(nzeta3),
   21846     (size_t)7U,
   21847     &out);
   21848   return out;
   21849 }
   21850 
   21851 /**
   21852 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21853 */
   21854 static inline Eurydice_arr_d6
   21855 libcrux_ml_kem_vector_portable_ntt_multiply_b8(
   21856   const Eurydice_arr_d6 *lhs,
   21857   const Eurydice_arr_d6 *rhs,
   21858   int16_t zeta0,
   21859   int16_t zeta1,
   21860   int16_t zeta2,
   21861   int16_t zeta3
   21862 )
   21863 {
   21864   return libcrux_ml_kem_vector_portable_ntt_ntt_multiply(lhs, rhs, zeta0, zeta1, zeta2, zeta3);
   21865 }
   21866 
   21867 static KRML_MUSTINLINE Eurydice_array_u8x2
   21868 libcrux_ml_kem_vector_portable_serialize_serialize_1(Eurydice_arr_d6 v)
   21869 {
   21870   uint8_t
   21871   result0 =
   21872     (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.data[0U]) |
   21873       (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[1U]) << 1U)
   21874     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[2U]) << 2U)
   21875     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[3U]) << 3U)
   21876     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[4U]) << 4U)
   21877     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[5U]) << 5U)
   21878     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[6U]) << 6U)
   21879     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[7U]) << 7U;
   21880   uint8_t
   21881   result1 =
   21882     (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.data[8U]) |
   21883       (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[9U]) << 1U)
   21884     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[10U]) << 2U)
   21885     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[11U]) << 3U)
   21886     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[12U]) << 4U)
   21887     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[13U]) << 5U)
   21888     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[14U]) << 6U)
   21889     | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[15U]) << 7U;
   21890   return (KRML_CLITERAL(Eurydice_array_u8x2){ .data = { result0, result1 } });
   21891 }
   21892 
   21893 static inline Eurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1(Eurydice_arr_d6 a)
   21894 {
   21895   return
   21896     libcrux_secrets_int_public_integers_declassify_d8_75(libcrux_ml_kem_vector_portable_serialize_serialize_1(a));
   21897 }
   21898 
   21899 /**
   21900 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21901 */
   21902 static inline Eurydice_array_u8x2
   21903 libcrux_ml_kem_vector_portable_serialize_1_b8(Eurydice_arr_d6 a)
   21904 {
   21905   return libcrux_ml_kem_vector_portable_serialize_1(a);
   21906 }
   21907 
   21908 static KRML_MUSTINLINE Eurydice_arr_d6
   21909 libcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_borrow_slice_u8 v)
   21910 {
   21911   int16_t result0 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] & 1U);
   21912   int16_t result1 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 1U & 1U);
   21913   int16_t result2 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 2U & 1U);
   21914   int16_t result3 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 3U & 1U);
   21915   int16_t result4 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 4U & 1U);
   21916   int16_t result5 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 5U & 1U);
   21917   int16_t result6 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 6U & 1U);
   21918   int16_t result7 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 7U & 1U);
   21919   int16_t result8 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] & 1U);
   21920   int16_t result9 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 1U & 1U);
   21921   int16_t result10 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 2U & 1U);
   21922   int16_t result11 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 3U & 1U);
   21923   int16_t result12 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 4U & 1U);
   21924   int16_t result13 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 5U & 1U);
   21925   int16_t result14 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 6U & 1U);
   21926   int16_t result15 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 7U & 1U);
   21927   return
   21928     (
   21929       KRML_CLITERAL(Eurydice_arr_d6){
   21930         .data = {
   21931           result0, result1, result2, result3, result4, result5, result6, result7, result8, result9,
   21932           result10, result11, result12, result13, result14, result15
   21933         }
   21934       }
   21935     );
   21936 }
   21937 
   21938 static inline Eurydice_arr_d6
   21939 libcrux_ml_kem_vector_portable_deserialize_1(Eurydice_borrow_slice_u8 a)
   21940 {
   21941   return
   21942     libcrux_ml_kem_vector_portable_serialize_deserialize_1(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));
   21943 }
   21944 
   21945 /**
   21946 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   21947 */
   21948 static inline Eurydice_arr_d6
   21949 libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_borrow_slice_u8 a)
   21950 {
   21951   return libcrux_ml_kem_vector_portable_deserialize_1(a);
   21952 }
   21953 
   21954 static KRML_MUSTINLINE uint8_t_x4
   21955 libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_borrow_slice_i16 v)
   21956 {
   21957   uint8_t
   21958   result0 =
   21959     (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U]) << 4U |
   21960       (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U]);
   21961   uint8_t
   21962   result1 =
   21963     (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U]) << 4U |
   21964       (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U]);
   21965   uint8_t
   21966   result2 =
   21967     (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[5U]) << 4U |
   21968       (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[4U]);
   21969   uint8_t
   21970   result3 =
   21971     (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[7U]) << 4U |
   21972       (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[6U]);
   21973   return
   21974     (KRML_CLITERAL(uint8_t_x4){ .fst = result0, .snd = result1, .thd = result2, .f3 = result3 });
   21975 }
   21976 
   21977 static KRML_MUSTINLINE Eurydice_array_u8x8
   21978 libcrux_ml_kem_vector_portable_serialize_serialize_4(Eurydice_arr_d6 v)
   21979 {
   21980   uint8_t_x4
   21981   result0_3 =
   21982     libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_array_to_subslice_shared_e7(&v,
   21983         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })));
   21984   uint8_t_x4
   21985   result4_7 =
   21986     libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_array_to_subslice_shared_e7(&v,
   21987         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })));
   21988   return
   21989     (
   21990       KRML_CLITERAL(Eurydice_array_u8x8){
   21991         .data = {
   21992           result0_3.fst, result0_3.snd, result0_3.thd, result0_3.f3, result4_7.fst, result4_7.snd,
   21993           result4_7.thd, result4_7.f3
   21994         }
   21995       }
   21996     );
   21997 }
   21998 
   21999 static inline Eurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4(Eurydice_arr_d6 a)
   22000 {
   22001   return
   22002     libcrux_secrets_int_public_integers_declassify_d8_52(libcrux_ml_kem_vector_portable_serialize_serialize_4(a));
   22003 }
   22004 
   22005 /**
   22006 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22007 */
   22008 static inline Eurydice_array_u8x8
   22009 libcrux_ml_kem_vector_portable_serialize_4_b8(Eurydice_arr_d6 a)
   22010 {
   22011   return libcrux_ml_kem_vector_portable_serialize_4(a);
   22012 }
   22013 
   22014 static KRML_MUSTINLINE int16_t_x8
   22015 libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_borrow_slice_u8 bytes)
   22016 {
   22017   int16_t v0 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] & 15U);
   22018   int16_t v1 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] >> 4U & 15U);
   22019   int16_t v2 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] & 15U);
   22020   int16_t v3 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] >> 4U & 15U);
   22021   int16_t v4 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[2U] & 15U);
   22022   int16_t v5 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[2U] >> 4U & 15U);
   22023   int16_t v6 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] & 15U);
   22024   int16_t v7 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] >> 4U & 15U);
   22025   return
   22026     (
   22027       KRML_CLITERAL(int16_t_x8){
   22028         .fst = v0,
   22029         .snd = v1,
   22030         .thd = v2,
   22031         .f3 = v3,
   22032         .f4 = v4,
   22033         .f5 = v5,
   22034         .f6 = v6,
   22035         .f7 = v7
   22036       }
   22037     );
   22038 }
   22039 
   22040 static KRML_MUSTINLINE Eurydice_arr_d6
   22041 libcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_borrow_slice_u8 bytes)
   22042 {
   22043   int16_t_x8
   22044   v0_7 =
   22045     libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_slice_subslice_shared_c8(bytes,
   22046         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)4U })));
   22047   int16_t_x8
   22048   v8_15 =
   22049     libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_slice_subslice_shared_c8(bytes,
   22050         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)8U })));
   22051   return
   22052     (
   22053       KRML_CLITERAL(Eurydice_arr_d6){
   22054         .data = {
   22055           v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,
   22056           v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7
   22057         }
   22058       }
   22059     );
   22060 }
   22061 
   22062 static inline Eurydice_arr_d6
   22063 libcrux_ml_kem_vector_portable_deserialize_4(Eurydice_borrow_slice_u8 a)
   22064 {
   22065   return
   22066     libcrux_ml_kem_vector_portable_serialize_deserialize_4(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));
   22067 }
   22068 
   22069 /**
   22070 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22071 */
   22072 static inline Eurydice_arr_d6
   22073 libcrux_ml_kem_vector_portable_deserialize_4_b8(Eurydice_borrow_slice_u8 a)
   22074 {
   22075   return libcrux_ml_kem_vector_portable_deserialize_4(a);
   22076 }
   22077 
   22078 static KRML_MUSTINLINE uint8_t_x5
   22079 libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_borrow_slice_i16 v)
   22080 {
   22081   uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] & 255);
   22082   uint8_t
   22083   r1 =
   22084     (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] & 63) << 2U |
   22085       (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U & 3);
   22086   uint8_t
   22087   r2 =
   22088     (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] & 15) << 4U |
   22089       (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 6U & 15);
   22090   uint8_t
   22091   r3 =
   22092     (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U] & 3) << 6U |
   22093       (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] >> 4U & 63);
   22094   uint8_t r4 = libcrux_secrets_int_as_u8_f5(v.ptr[3U] >> 2U & 255);
   22095   return (KRML_CLITERAL(uint8_t_x5){ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4 });
   22096 }
   22097 
   22098 static KRML_MUSTINLINE Eurydice_arr_fc
   22099 libcrux_ml_kem_vector_portable_serialize_serialize_10(Eurydice_arr_d6 v)
   22100 {
   22101   uint8_t_x5
   22102   r0_4 =
   22103     libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,
   22104         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)4U })));
   22105   uint8_t_x5
   22106   r5_9 =
   22107     libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,
   22108         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)8U })));
   22109   uint8_t_x5
   22110   r10_14 =
   22111     libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,
   22112         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)12U })));
   22113   uint8_t_x5
   22114   r15_19 =
   22115     libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,
   22116         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)16U })));
   22117   return
   22118     (
   22119       KRML_CLITERAL(Eurydice_arr_fc){
   22120         .data = {
   22121           r0_4.fst, r0_4.snd, r0_4.thd, r0_4.f3, r0_4.f4, r5_9.fst, r5_9.snd, r5_9.thd, r5_9.f3,
   22122           r5_9.f4, r10_14.fst, r10_14.snd, r10_14.thd, r10_14.f3, r10_14.f4, r15_19.fst, r15_19.snd,
   22123           r15_19.thd, r15_19.f3, r15_19.f4
   22124         }
   22125       }
   22126     );
   22127 }
   22128 
   22129 static inline Eurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10(Eurydice_arr_d6 a)
   22130 {
   22131   return
   22132     libcrux_secrets_int_public_integers_declassify_d8_2b(libcrux_ml_kem_vector_portable_serialize_serialize_10(a));
   22133 }
   22134 
   22135 /**
   22136 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22137 */
   22138 static inline Eurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10_b8(Eurydice_arr_d6 a)
   22139 {
   22140   return libcrux_ml_kem_vector_portable_serialize_10(a);
   22141 }
   22142 
   22143 static KRML_MUSTINLINE int16_t_x8
   22144 libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_borrow_slice_u8 bytes)
   22145 {
   22146   int16_t
   22147   r0 =
   22148     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[1U])
   22149       & 3)
   22150       << 8U)
   22151       | (libcrux_secrets_int_as_i16_59(bytes.ptr[0U]) & 255));
   22152   int16_t
   22153   r1 =
   22154     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[2U])
   22155       & 15)
   22156       << 6U)
   22157       | libcrux_secrets_int_as_i16_59(bytes.ptr[1U]) >> 2U);
   22158   int16_t
   22159   r2 =
   22160     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[3U])
   22161       & 63)
   22162       << 4U)
   22163       | libcrux_secrets_int_as_i16_59(bytes.ptr[2U]) >> 4U);
   22164   int16_t
   22165   r3 =
   22166     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[4U])
   22167       << 2U)
   22168       | libcrux_secrets_int_as_i16_59(bytes.ptr[3U]) >> 6U);
   22169   int16_t
   22170   r4 =
   22171     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[6U])
   22172       & 3)
   22173       << 8U)
   22174       | (libcrux_secrets_int_as_i16_59(bytes.ptr[5U]) & 255));
   22175   int16_t
   22176   r5 =
   22177     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[7U])
   22178       & 15)
   22179       << 6U)
   22180       | libcrux_secrets_int_as_i16_59(bytes.ptr[6U]) >> 2U);
   22181   int16_t
   22182   r6 =
   22183     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[8U])
   22184       & 63)
   22185       << 4U)
   22186       | libcrux_secrets_int_as_i16_59(bytes.ptr[7U]) >> 4U);
   22187   int16_t
   22188   r7 =
   22189     libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[9U])
   22190       << 2U)
   22191       | libcrux_secrets_int_as_i16_59(bytes.ptr[8U]) >> 6U);
   22192   return
   22193     (
   22194       KRML_CLITERAL(int16_t_x8){
   22195         .fst = r0,
   22196         .snd = r1,
   22197         .thd = r2,
   22198         .f3 = r3,
   22199         .f4 = r4,
   22200         .f5 = r5,
   22201         .f6 = r6,
   22202         .f7 = r7
   22203       }
   22204     );
   22205 }
   22206 
   22207 static KRML_MUSTINLINE Eurydice_arr_d6
   22208 libcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_borrow_slice_u8 bytes)
   22209 {
   22210   int16_t_x8
   22211   v0_7 =
   22212     libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_slice_subslice_shared_c8(bytes,
   22213         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)10U })));
   22214   int16_t_x8
   22215   v8_15 =
   22216     libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_slice_subslice_shared_c8(bytes,
   22217         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)20U })));
   22218   return
   22219     (
   22220       KRML_CLITERAL(Eurydice_arr_d6){
   22221         .data = {
   22222           v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,
   22223           v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7
   22224         }
   22225       }
   22226     );
   22227 }
   22228 
   22229 static inline Eurydice_arr_d6
   22230 libcrux_ml_kem_vector_portable_deserialize_10(Eurydice_borrow_slice_u8 a)
   22231 {
   22232   return
   22233     libcrux_ml_kem_vector_portable_serialize_deserialize_10(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));
   22234 }
   22235 
   22236 /**
   22237 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22238 */
   22239 static inline Eurydice_arr_d6
   22240 libcrux_ml_kem_vector_portable_deserialize_10_b8(Eurydice_borrow_slice_u8 a)
   22241 {
   22242   return libcrux_ml_kem_vector_portable_deserialize_10(a);
   22243 }
   22244 
   22245 static KRML_MUSTINLINE uint8_t_x3
   22246 libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_borrow_slice_i16 v)
   22247 {
   22248   uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] & 255);
   22249   uint8_t
   22250   r1 =
   22251     libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U | (int16_t)((uint32_t)(v.ptr[1U] & 15) << 4U));
   22252   uint8_t r2 = libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 4U & 255);
   22253   return (KRML_CLITERAL(uint8_t_x3){ .fst = r0, .snd = r1, .thd = r2 });
   22254 }
   22255 
   22256 static KRML_MUSTINLINE Eurydice_arr_94
   22257 libcrux_ml_kem_vector_portable_serialize_serialize_12(Eurydice_arr_d6 v)
   22258 {
   22259   uint8_t_x3
   22260   r0_2 =
   22261     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22262         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)2U })));
   22263   uint8_t_x3
   22264   r3_5 =
   22265     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22266         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)2U, .end = (size_t)4U })));
   22267   uint8_t_x3
   22268   r6_8 =
   22269     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22270         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)6U })));
   22271   uint8_t_x3
   22272   r9_11 =
   22273     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22274         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)6U, .end = (size_t)8U })));
   22275   uint8_t_x3
   22276   r12_14 =
   22277     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22278         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)10U })));
   22279   uint8_t_x3
   22280   r15_17 =
   22281     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22282         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)12U })));
   22283   uint8_t_x3
   22284   r18_20 =
   22285     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22286         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)14U })));
   22287   uint8_t_x3
   22288   r21_23 =
   22289     libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,
   22290         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)14U, .end = (size_t)16U })));
   22291   return
   22292     (
   22293       KRML_CLITERAL(Eurydice_arr_94){
   22294         .data = {
   22295           r0_2.fst, r0_2.snd, r0_2.thd, r3_5.fst, r3_5.snd, r3_5.thd, r6_8.fst, r6_8.snd, r6_8.thd,
   22296           r9_11.fst, r9_11.snd, r9_11.thd, r12_14.fst, r12_14.snd, r12_14.thd, r15_17.fst,
   22297           r15_17.snd, r15_17.thd, r18_20.fst, r18_20.snd, r18_20.thd, r21_23.fst, r21_23.snd,
   22298           r21_23.thd
   22299         }
   22300       }
   22301     );
   22302 }
   22303 
   22304 static inline Eurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12(Eurydice_arr_d6 a)
   22305 {
   22306   return
   22307     libcrux_secrets_int_public_integers_declassify_d8_40(libcrux_ml_kem_vector_portable_serialize_serialize_12(a));
   22308 }
   22309 
   22310 /**
   22311 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22312 */
   22313 static inline Eurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12_b8(Eurydice_arr_d6 a)
   22314 {
   22315   return libcrux_ml_kem_vector_portable_serialize_12(a);
   22316 }
   22317 
   22318 static KRML_MUSTINLINE int16_t_x2
   22319 libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_borrow_slice_u8 bytes)
   22320 {
   22321   int16_t byte0 = libcrux_secrets_int_as_i16_59(bytes.ptr[0U]);
   22322   int16_t byte1 = libcrux_secrets_int_as_i16_59(bytes.ptr[1U]);
   22323   int16_t byte2 = libcrux_secrets_int_as_i16_59(bytes.ptr[2U]);
   22324   int16_t r0 = (int16_t)((uint32_t)(byte1 & 15) << 8U) | (byte0 & 255);
   22325   int16_t r1 = (int16_t)((uint32_t)byte2 << 4U) | (byte1 >> 4U & 15);
   22326   return (KRML_CLITERAL(int16_t_x2){ .fst = r0, .snd = r1 });
   22327 }
   22328 
   22329 static KRML_MUSTINLINE Eurydice_arr_d6
   22330 libcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_borrow_slice_u8 bytes)
   22331 {
   22332   int16_t_x2
   22333   v0_1 =
   22334     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22335         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)3U })));
   22336   int16_t_x2
   22337   v2_3 =
   22338     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22339         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)3U, .end = (size_t)6U })));
   22340   int16_t_x2
   22341   v4_5 =
   22342     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22343         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)6U, .end = (size_t)9U })));
   22344   int16_t_x2
   22345   v6_7 =
   22346     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22347         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)9U, .end = (size_t)12U })));
   22348   int16_t_x2
   22349   v8_9 =
   22350     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22351         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)15U })));
   22352   int16_t_x2
   22353   v10_11 =
   22354     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22355         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)15U, .end = (size_t)18U })));
   22356   int16_t_x2
   22357   v12_13 =
   22358     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22359         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)18U, .end = (size_t)21U })));
   22360   int16_t_x2
   22361   v14_15 =
   22362     libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,
   22363         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)21U, .end = (size_t)24U })));
   22364   return
   22365     (
   22366       KRML_CLITERAL(Eurydice_arr_d6){
   22367         .data = {
   22368           v0_1.fst, v0_1.snd, v2_3.fst, v2_3.snd, v4_5.fst, v4_5.snd, v6_7.fst, v6_7.snd, v8_9.fst,
   22369           v8_9.snd, v10_11.fst, v10_11.snd, v12_13.fst, v12_13.snd, v14_15.fst, v14_15.snd
   22370         }
   22371       }
   22372     );
   22373 }
   22374 
   22375 static inline Eurydice_arr_d6
   22376 libcrux_ml_kem_vector_portable_deserialize_12(Eurydice_borrow_slice_u8 a)
   22377 {
   22378   return
   22379     libcrux_ml_kem_vector_portable_serialize_deserialize_12(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));
   22380 }
   22381 
   22382 /**
   22383 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22384 */
   22385 static inline Eurydice_arr_d6
   22386 libcrux_ml_kem_vector_portable_deserialize_12_b8(Eurydice_borrow_slice_u8 a)
   22387 {
   22388   return libcrux_ml_kem_vector_portable_deserialize_12(a);
   22389 }
   22390 
   22391 static KRML_MUSTINLINE size_t
   22392 libcrux_ml_kem_vector_portable_sampling_rej_sample(
   22393   Eurydice_borrow_slice_u8 a,
   22394   Eurydice_mut_borrow_slice_i16 result
   22395 )
   22396 {
   22397   size_t sampled = (size_t)0U;
   22398   for (size_t i = (size_t)0U; i < a.meta / (size_t)3U; i++)
   22399   {
   22400     size_t i0 = i;
   22401     int16_t b1 = (int16_t)(uint32_t)a.ptr[i0 * (size_t)3U + (size_t)0U];
   22402     int16_t b2 = (int16_t)(uint32_t)a.ptr[i0 * (size_t)3U + (size_t)1U];
   22403     int16_t b3 = (int16_t)(uint32_t)a.ptr[i0 * (size_t)3U + (size_t)2U];
   22404     int16_t d1 = (int16_t)((uint32_t)(b2 & 15) << 8U) | b1;
   22405     int16_t d2 = (int16_t)((uint32_t)b3 << 4U) | b2 >> 4U;
   22406     if (d1 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)
   22407     {
   22408       if (sampled < (size_t)16U)
   22409       {
   22410         result.ptr[sampled] = d1;
   22411         sampled++;
   22412       }
   22413     }
   22414     if (d2 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)
   22415     {
   22416       if (sampled < (size_t)16U)
   22417       {
   22418         result.ptr[sampled] = d2;
   22419         sampled++;
   22420       }
   22421     }
   22422   }
   22423   return sampled;
   22424 }
   22425 
   22426 /**
   22427 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22428 */
   22429 static inline size_t
   22430 libcrux_ml_kem_vector_portable_rej_sample_b8(
   22431   Eurydice_borrow_slice_u8 a,
   22432   Eurydice_mut_borrow_slice_i16 out
   22433 )
   22434 {
   22435   return libcrux_ml_kem_vector_portable_sampling_rej_sample(a, out);
   22436 }
   22437 
   22438 #define LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR ((size_t)10U)
   22439 
   22440 #define LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U)
   22441 
   22442 #define LIBCRUX_ML_KEM_MLKEM768_RANK ((size_t)3U)
   22443 
   22444 #define LIBCRUX_ML_KEM_MLKEM768_C1_SIZE (LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM768_RANK)
   22445 
   22446 #define LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR ((size_t)4U)
   22447 
   22448 #define LIBCRUX_ML_KEM_MLKEM768_C2_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U)
   22449 
   22450 #define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE (LIBCRUX_ML_KEM_MLKEM768_C1_SIZE + LIBCRUX_ML_KEM_MLKEM768_C2_SIZE)
   22451 
   22452 #define LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)
   22453 
   22454 #define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE + (size_t)32U)
   22455 
   22456 #define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)
   22457 
   22458 #define LIBCRUX_ML_KEM_MLKEM768_ETA1 ((size_t)2U)
   22459 
   22460 #define LIBCRUX_ML_KEM_MLKEM768_ETA1_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM768_ETA1 * (size_t)64U)
   22461 
   22462 #define LIBCRUX_ML_KEM_MLKEM768_ETA2 ((size_t)2U)
   22463 
   22464 #define LIBCRUX_ML_KEM_MLKEM768_ETA2_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM768_ETA2 * (size_t)64U)
   22465 
   22466 #define LIBCRUX_ML_KEM_MLKEM768_IMPLICIT_REJECTION_HASH_INPUT_SIZE (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE)
   22467 
   22468 typedef Eurydice_arr_7d libcrux_ml_kem_mlkem768_MlKem768PrivateKey;
   22469 
   22470 typedef Eurydice_arr_5f libcrux_ml_kem_mlkem768_MlKem768PublicKey;
   22471 
   22472 #define LIBCRUX_ML_KEM_MLKEM768_RANKED_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)
   22473 
   22474 #define LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)
   22475 
   22476 /**
   22477 A monomorphic instance of Eurydice.arr
   22478 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22479 with const generics
   22480 - $16size_t
   22481 */
   22482 typedef struct Eurydice_arr_9e_s { Eurydice_arr_d6 data[16U]; } Eurydice_arr_9e;
   22483 
   22484 /**
   22485 A monomorphic instance of Eurydice.arr
   22486 with types libcrux_ml_kem_polynomial_PolynomialRingElement_1d
   22487 with const generics
   22488 - $3size_t
   22489 */
   22490 typedef struct Eurydice_arr_bb0_s { Eurydice_arr_9e data[3U]; } Eurydice_arr_bb0;
   22491 
   22492 /**
   22493 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   22494 */
   22495 /**
   22496 A monomorphic instance of libcrux_ml_kem.polynomial.ZERO_d6
   22497 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22498 with const generics
   22499 
   22500 */
   22501 static inline Eurydice_arr_9e libcrux_ml_kem_polynomial_ZERO_d6_ea(void)
   22502 {
   22503   Eurydice_arr_9e lit;
   22504   Eurydice_arr_d6 repeat_expression[16U];
   22505   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   22506   {
   22507     repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8();
   22508   }
   22509   memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_d6));
   22510   return lit;
   22511 }
   22512 
   22513 /**
   22514 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}
   22515 */
   22516 /**
   22517 A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b
   22518 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22519 with const generics
   22520 - K= 3
   22521 - CIPHERTEXT_SIZE= 1088
   22522 - VECTOR_U_ENCODED_SIZE= 960
   22523 - U_COMPRESSION_FACTOR= 10
   22524 - V_COMPRESSION_FACTOR= 4
   22525 */
   22526 static inline Eurydice_arr_9e
   22527 libcrux_ml_kem_ind_cpa_decrypt_call_mut_0b_01(void **_, size_t tupled_args)
   22528 {
   22529   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   22530 }
   22531 
   22532 /**
   22533 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_uncompressed_ring_element
   22534 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22535 with const generics
   22536 
   22537 */
   22538 static KRML_MUSTINLINE Eurydice_arr_9e
   22539 libcrux_ml_kem_serialize_deserialize_to_uncompressed_ring_element_ea(
   22540   Eurydice_borrow_slice_u8 serialized
   22541 )
   22542 {
   22543   Eurydice_arr_9e re = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   22544   for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)
   22545   {
   22546     size_t i0 = i;
   22547     Eurydice_borrow_slice_u8
   22548     bytes =
   22549       Eurydice_slice_subslice_shared_c8(serialized,
   22550         (
   22551           KRML_CLITERAL(core_ops_range_Range_87){
   22552             .start = i0 * (size_t)24U,
   22553             .end = i0 * (size_t)24U + (size_t)24U
   22554           }
   22555         ));
   22556     Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes);
   22557     re.data[i0] = uu____0;
   22558   }
   22559   return re;
   22560 }
   22561 
   22562 /**
   22563  Call [`deserialize_to_uncompressed_ring_element`] for each ring element.
   22564 */
   22565 /**
   22566 A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector
   22567 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22568 with const generics
   22569 - K= 3
   22570 */
   22571 static KRML_MUSTINLINE void
   22572 libcrux_ml_kem_ind_cpa_deserialize_vector_68(
   22573   Eurydice_borrow_slice_u8 secret_key,
   22574   Eurydice_arr_bb0 *secret_as_ntt
   22575 )
   22576 {
   22577   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   22578   {
   22579     size_t i0 = i;
   22580     Eurydice_arr_9e
   22581     uu____0 =
   22582       libcrux_ml_kem_serialize_deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice_shared_c8(secret_key,
   22583           (
   22584             KRML_CLITERAL(core_ops_range_Range_87){
   22585               .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
   22586               .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT
   22587             }
   22588           )));
   22589     secret_as_ntt->data[i0] = uu____0;
   22590   }
   22591 }
   22592 
   22593 /**
   22594 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}
   22595 */
   22596 /**
   22597 A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35
   22598 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22599 with const generics
   22600 - K= 3
   22601 - CIPHERTEXT_SIZE= 1088
   22602 - U_COMPRESSION_FACTOR= 10
   22603 */
   22604 static inline Eurydice_arr_9e
   22605 libcrux_ml_kem_ind_cpa_deserialize_then_decompress_u_call_mut_35_30(
   22606   void **_,
   22607   size_t tupled_args
   22608 )
   22609 {
   22610   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   22611 }
   22612 
   22613 /**
   22614 A monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient
   22615 with const generics
   22616 - COEFFICIENT_BITS= 10
   22617 */
   22618 static KRML_MUSTINLINE Eurydice_arr_d6
   22619 libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_ef(Eurydice_arr_d6 a)
   22620 {
   22621   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   22622   {
   22623     size_t i0 = i;
   22624     int32_t
   22625     decompressed =
   22626       libcrux_secrets_int_as_i32_f5(a.data[i0]) *
   22627         libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));
   22628     decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)10);
   22629     decompressed >>= (uint32_t)(10 + 1);
   22630     a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);
   22631   }
   22632   return a;
   22633 }
   22634 
   22635 /**
   22636 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22637 */
   22638 /**
   22639 A monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8
   22640 with const generics
   22641 - COEFFICIENT_BITS= 10
   22642 */
   22643 static inline Eurydice_arr_d6
   22644 libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_b8_ef(Eurydice_arr_d6 a)
   22645 {
   22646   return libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_ef(a);
   22647 }
   22648 
   22649 /**
   22650 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_10
   22651 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22652 with const generics
   22653 
   22654 */
   22655 static KRML_MUSTINLINE Eurydice_arr_9e
   22656 libcrux_ml_kem_serialize_deserialize_then_decompress_10_ea(Eurydice_borrow_slice_u8 serialized)
   22657 {
   22658   Eurydice_arr_9e re = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   22659   for (size_t i = (size_t)0U; i < serialized.meta / (size_t)20U; i++)
   22660   {
   22661     size_t i0 = i;
   22662     Eurydice_borrow_slice_u8
   22663     bytes =
   22664       Eurydice_slice_subslice_shared_c8(serialized,
   22665         (
   22666           KRML_CLITERAL(core_ops_range_Range_87){
   22667             .start = i0 * (size_t)20U,
   22668             .end = i0 * (size_t)20U + (size_t)20U
   22669           }
   22670         ));
   22671     Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_10_b8(bytes);
   22672     Eurydice_arr_d6
   22673     uu____0 = libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_b8_ef(coefficient);
   22674     re.data[i0] = uu____0;
   22675   }
   22676   return re;
   22677 }
   22678 
   22679 /**
   22680 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u
   22681 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22682 with const generics
   22683 - COMPRESSION_FACTOR= 10
   22684 */
   22685 static KRML_MUSTINLINE Eurydice_arr_9e
   22686 libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_u_f7(
   22687   Eurydice_borrow_slice_u8 serialized
   22688 )
   22689 {
   22690   return libcrux_ml_kem_serialize_deserialize_then_decompress_10_ea(serialized);
   22691 }
   22692 
   22693 typedef struct libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2_s
   22694 {
   22695   Eurydice_arr_d6 fst;
   22696   Eurydice_arr_d6 snd;
   22697 }
   22698 libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2;
   22699 
   22700 /**
   22701 A monomorphic instance of libcrux_ml_kem.ntt.ntt_layer_int_vec_step
   22702 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22703 with const generics
   22704 
   22705 */
   22706 static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2
   22707 libcrux_ml_kem_ntt_ntt_layer_int_vec_step_ea(
   22708   Eurydice_arr_d6 a,
   22709   Eurydice_arr_d6 b,
   22710   int16_t zeta_r
   22711 )
   22712 {
   22713   Eurydice_arr_d6
   22714   t = libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(b, zeta_r);
   22715   b = libcrux_ml_kem_vector_portable_sub_b8(a, &t);
   22716   a = libcrux_ml_kem_vector_portable_add_b8(a, &t);
   22717   return
   22718     (
   22719       KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){
   22720         .fst = a,
   22721         .snd = b
   22722       }
   22723     );
   22724 }
   22725 
   22726 /**
   22727 A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_4_plus
   22728 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22729 with const generics
   22730 
   22731 */
   22732 static KRML_MUSTINLINE void
   22733 libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(
   22734   size_t *zeta_i,
   22735   Eurydice_arr_9e *re,
   22736   size_t layer,
   22737   size_t _initial_coefficient_bound
   22738 )
   22739 {
   22740   size_t step = (size_t)1U << (uint32_t)layer;
   22741   for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)
   22742   {
   22743     size_t round = i0;
   22744     zeta_i[0U]++;
   22745     size_t offset = round * step * (size_t)2U;
   22746     size_t offset_vec = offset / (size_t)16U;
   22747     size_t step_vec = step / (size_t)16U;
   22748     for (size_t i = offset_vec; i < offset_vec + step_vec; i++)
   22749     {
   22750       size_t j = i;
   22751       libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2
   22752       uu____0 =
   22753         libcrux_ml_kem_ntt_ntt_layer_int_vec_step_ea(re->data[j],
   22754           re->data[j + step_vec],
   22755           libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));
   22756       Eurydice_arr_d6 x = uu____0.fst;
   22757       Eurydice_arr_d6 y = uu____0.snd;
   22758       re->data[j] = x;
   22759       re->data[j + step_vec] = y;
   22760     }
   22761   }
   22762 }
   22763 
   22764 /**
   22765 A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_3
   22766 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22767 with const generics
   22768 
   22769 */
   22770 static KRML_MUSTINLINE void
   22771 libcrux_ml_kem_ntt_ntt_at_layer_3_ea(
   22772   size_t *zeta_i,
   22773   Eurydice_arr_9e *re,
   22774   size_t _initial_coefficient_bound
   22775 )
   22776 {
   22777   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   22778   {
   22779     size_t round = i;
   22780     zeta_i[0U]++;
   22781     Eurydice_arr_d6
   22782     uu____0 =
   22783       libcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(re->data[round],
   22784         libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));
   22785     re->data[round] = uu____0;
   22786   }
   22787 }
   22788 
   22789 /**
   22790 A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_2
   22791 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22792 with const generics
   22793 
   22794 */
   22795 static KRML_MUSTINLINE void
   22796 libcrux_ml_kem_ntt_ntt_at_layer_2_ea(
   22797   size_t *zeta_i,
   22798   Eurydice_arr_9e *re,
   22799   size_t _initial_coefficient_bound
   22800 )
   22801 {
   22802   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   22803   {
   22804     size_t round = i;
   22805     zeta_i[0U]++;
   22806     re->data[round] =
   22807       libcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(re->data[round],
   22808         libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),
   22809         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U));
   22810     zeta_i[0U]++;
   22811   }
   22812 }
   22813 
   22814 /**
   22815 A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_1
   22816 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22817 with const generics
   22818 
   22819 */
   22820 static KRML_MUSTINLINE void
   22821 libcrux_ml_kem_ntt_ntt_at_layer_1_ea(
   22822   size_t *zeta_i,
   22823   Eurydice_arr_9e *re,
   22824   size_t _initial_coefficient_bound
   22825 )
   22826 {
   22827   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   22828   {
   22829     size_t round = i;
   22830     zeta_i[0U]++;
   22831     re->data[round] =
   22832       libcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(re->data[round],
   22833         libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),
   22834         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U),
   22835         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)2U),
   22836         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)3U));
   22837     zeta_i[0U] += (size_t)3U;
   22838   }
   22839 }
   22840 
   22841 /**
   22842 A monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce
   22843 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22844 with const generics
   22845 
   22846 */
   22847 static KRML_MUSTINLINE void
   22848 libcrux_ml_kem_polynomial_poly_barrett_reduce_ea(Eurydice_arr_9e *myself)
   22849 {
   22850   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   22851   {
   22852     size_t i0 = i;
   22853     Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_barrett_reduce_b8(myself->data[i0]);
   22854     myself->data[i0] = uu____0;
   22855   }
   22856 }
   22857 
   22858 /**
   22859 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   22860 */
   22861 /**
   22862 A monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_d6
   22863 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22864 with const generics
   22865 
   22866 */
   22867 static KRML_MUSTINLINE void
   22868 libcrux_ml_kem_polynomial_poly_barrett_reduce_d6_ea(Eurydice_arr_9e *self)
   22869 {
   22870   libcrux_ml_kem_polynomial_poly_barrett_reduce_ea(self);
   22871 }
   22872 
   22873 /**
   22874 A monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u
   22875 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22876 with const generics
   22877 - VECTOR_U_COMPRESSION_FACTOR= 10
   22878 */
   22879 static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_vector_u_f7(Eurydice_arr_9e *re)
   22880 {
   22881   size_t zeta_i = (size_t)0U;
   22882   libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U, (size_t)3328U);
   22883   libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U, (size_t)2U * (size_t)3328U);
   22884   libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U, (size_t)3U * (size_t)3328U);
   22885   libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U, (size_t)4U * (size_t)3328U);
   22886   libcrux_ml_kem_ntt_ntt_at_layer_3_ea(&zeta_i, re, (size_t)5U * (size_t)3328U);
   22887   libcrux_ml_kem_ntt_ntt_at_layer_2_ea(&zeta_i, re, (size_t)6U * (size_t)3328U);
   22888   libcrux_ml_kem_ntt_ntt_at_layer_1_ea(&zeta_i, re, (size_t)7U * (size_t)3328U);
   22889   libcrux_ml_kem_polynomial_poly_barrett_reduce_d6_ea(re);
   22890 }
   22891 
   22892 /**
   22893  Call [`deserialize_then_decompress_ring_element_u`] on each ring element
   22894  in the `ciphertext`.
   22895 */
   22896 /**
   22897 A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u
   22898 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22899 with const generics
   22900 - K= 3
   22901 - CIPHERTEXT_SIZE= 1088
   22902 - U_COMPRESSION_FACTOR= 10
   22903 */
   22904 static KRML_MUSTINLINE Eurydice_arr_bb0
   22905 libcrux_ml_kem_ind_cpa_deserialize_then_decompress_u_30(const Eurydice_arr_2b *ciphertext)
   22906 {
   22907   Eurydice_arr_bb0 arr_struct;
   22908   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   22909   {
   22910     /* original Rust expression is not an lvalue in C */
   22911     void *lvalue = (void *)0U;
   22912     arr_struct.data[i] =
   22913       libcrux_ml_kem_ind_cpa_deserialize_then_decompress_u_call_mut_35_30(&lvalue,
   22914         i);
   22915   }
   22916   Eurydice_arr_bb0 u_as_ntt = arr_struct;
   22917   for
   22918   (size_t
   22919     i = (size_t)0U;
   22920     i <
   22921       (size_t)1088U /
   22922         (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);
   22923     i++)
   22924   {
   22925     size_t i0 = i;
   22926     Eurydice_borrow_slice_u8
   22927     u_bytes =
   22928       Eurydice_array_to_subslice_shared_d44(ciphertext,
   22929         (
   22930           KRML_CLITERAL(core_ops_range_Range_87){
   22931             .start = i0 *
   22932               (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),
   22933             .end = i0 *
   22934               (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)
   22935             + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U
   22936           }
   22937         ));
   22938     u_as_ntt.data[i0] =
   22939       libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_u_f7(u_bytes);
   22940     libcrux_ml_kem_ntt_ntt_vector_u_f7(&u_as_ntt.data[i0]);
   22941   }
   22942   return u_as_ntt;
   22943 }
   22944 
   22945 /**
   22946 A monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient
   22947 with const generics
   22948 - COEFFICIENT_BITS= 4
   22949 */
   22950 static KRML_MUSTINLINE Eurydice_arr_d6
   22951 libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_d1(Eurydice_arr_d6 a)
   22952 {
   22953   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   22954   {
   22955     size_t i0 = i;
   22956     int32_t
   22957     decompressed =
   22958       libcrux_secrets_int_as_i32_f5(a.data[i0]) *
   22959         libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));
   22960     decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)4);
   22961     decompressed >>= (uint32_t)(4 + 1);
   22962     a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);
   22963   }
   22964   return a;
   22965 }
   22966 
   22967 /**
   22968 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   22969 */
   22970 /**
   22971 A monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8
   22972 with const generics
   22973 - COEFFICIENT_BITS= 4
   22974 */
   22975 static inline Eurydice_arr_d6
   22976 libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_b8_d1(Eurydice_arr_d6 a)
   22977 {
   22978   return libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_d1(a);
   22979 }
   22980 
   22981 /**
   22982 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_4
   22983 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   22984 with const generics
   22985 
   22986 */
   22987 static KRML_MUSTINLINE Eurydice_arr_9e
   22988 libcrux_ml_kem_serialize_deserialize_then_decompress_4_ea(Eurydice_borrow_slice_u8 serialized)
   22989 {
   22990   Eurydice_arr_9e re = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   22991   for (size_t i = (size_t)0U; i < serialized.meta / (size_t)8U; i++)
   22992   {
   22993     size_t i0 = i;
   22994     Eurydice_borrow_slice_u8
   22995     bytes =
   22996       Eurydice_slice_subslice_shared_c8(serialized,
   22997         (
   22998           KRML_CLITERAL(core_ops_range_Range_87){
   22999             .start = i0 * (size_t)8U,
   23000             .end = i0 * (size_t)8U + (size_t)8U
   23001           }
   23002         ));
   23003     Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_4_b8(bytes);
   23004     Eurydice_arr_d6
   23005     uu____0 = libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_b8_d1(coefficient);
   23006     re.data[i0] = uu____0;
   23007   }
   23008   return re;
   23009 }
   23010 
   23011 /**
   23012 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v
   23013 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23014 with const generics
   23015 - K= 3
   23016 - COMPRESSION_FACTOR= 4
   23017 */
   23018 static KRML_MUSTINLINE Eurydice_arr_9e
   23019 libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_v_b6(
   23020   Eurydice_borrow_slice_u8 serialized
   23021 )
   23022 {
   23023   return libcrux_ml_kem_serialize_deserialize_then_decompress_4_ea(serialized);
   23024 }
   23025 
   23026 /**
   23027 A monomorphic instance of libcrux_ml_kem.polynomial.ZERO
   23028 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23029 with const generics
   23030 
   23031 */
   23032 static inline Eurydice_arr_9e libcrux_ml_kem_polynomial_ZERO_ea(void)
   23033 {
   23034   Eurydice_arr_9e lit;
   23035   Eurydice_arr_d6 repeat_expression[16U];
   23036   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   23037   {
   23038     repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8();
   23039   }
   23040   memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_d6));
   23041   return lit;
   23042 }
   23043 
   23044 /**
   23045  Given two `KyberPolynomialRingElement`s in their NTT representations,
   23046  compute their product. Given two polynomials in the NTT domain `f^` and ``,
   23047  the `i` coefficient of the product `k` is determined by the calculation:
   23048 
   23049  ```plaintext
   23050  [2i] + [2i + 1]X = (f^[2i] + f^[2i + 1]X)([2i] + [2i + 1]X) mod (X - ^(2BitRev(i) + 1))
   23051  ```
   23052 
   23053  This function almost implements <strong>Algorithm 10</strong> of the
   23054  NIST FIPS 203 standard, which is reproduced below:
   23055 
   23056  ```plaintext
   23057  Input: Two arrays f   and   .
   23058  Output: An array   q.
   23059 
   23060  for(i  0; i < 128; i++)
   23061      ([2i], [2i+1])  BaseCaseMultiply(f[2i], f[2i+1], [2i], [2i+1], ^(2BitRev(i) + 1))
   23062  end for
   23063  return 
   23064  ```
   23065  We say "almost" because the coefficients of the ring element output by
   23066  this function are in the Montgomery domain.
   23067 
   23068  The NIST FIPS 203 standard can be found at
   23069  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   23070 */
   23071 /**
   23072 A monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply
   23073 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23074 with const generics
   23075 
   23076 */
   23077 static KRML_MUSTINLINE Eurydice_arr_9e
   23078 libcrux_ml_kem_polynomial_ntt_multiply_ea(
   23079   const Eurydice_arr_9e *myself,
   23080   const Eurydice_arr_9e *rhs
   23081 )
   23082 {
   23083   Eurydice_arr_9e out = libcrux_ml_kem_polynomial_ZERO_ea();
   23084   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   23085   {
   23086     size_t i0 = i;
   23087     Eurydice_arr_d6
   23088     uu____0 =
   23089       libcrux_ml_kem_vector_portable_ntt_multiply_b8(&myself->data[i0],
   23090         &rhs->data[i0],
   23091         libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0),
   23092         libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)1U),
   23093         libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)2U),
   23094         libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)3U));
   23095     out.data[i0] = uu____0;
   23096   }
   23097   return out;
   23098 }
   23099 
   23100 /**
   23101 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   23102 */
   23103 /**
   23104 A monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_d6
   23105 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23106 with const generics
   23107 
   23108 */
   23109 static KRML_MUSTINLINE Eurydice_arr_9e
   23110 libcrux_ml_kem_polynomial_ntt_multiply_d6_ea(
   23111   const Eurydice_arr_9e *self,
   23112   const Eurydice_arr_9e *rhs
   23113 )
   23114 {
   23115   return libcrux_ml_kem_polynomial_ntt_multiply_ea(self, rhs);
   23116 }
   23117 
   23118 /**
   23119  Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise
   23120  sum of their constituent coefficients.
   23121 */
   23122 /**
   23123 A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element
   23124 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23125 with const generics
   23126 - K= 3
   23127 */
   23128 static KRML_MUSTINLINE void
   23129 libcrux_ml_kem_polynomial_add_to_ring_element_68(
   23130   Eurydice_arr_9e *myself,
   23131   const Eurydice_arr_9e *rhs
   23132 )
   23133 {
   23134   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   23135   {
   23136     size_t i0 = i;
   23137     Eurydice_arr_d6
   23138     uu____0 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &rhs->data[i0]);
   23139     myself->data[i0] = uu____0;
   23140   }
   23141 }
   23142 
   23143 /**
   23144  Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise
   23145  sum of their constituent coefficients.
   23146 */
   23147 /**
   23148 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   23149 */
   23150 /**
   23151 A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6
   23152 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23153 with const generics
   23154 - K= 3
   23155 */
   23156 static KRML_MUSTINLINE void
   23157 libcrux_ml_kem_polynomial_add_to_ring_element_d6_68(
   23158   Eurydice_arr_9e *self,
   23159   const Eurydice_arr_9e *rhs
   23160 )
   23161 {
   23162   libcrux_ml_kem_polynomial_add_to_ring_element_68(self, rhs);
   23163 }
   23164 
   23165 /**
   23166 A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_1
   23167 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23168 with const generics
   23169 
   23170 */
   23171 static KRML_MUSTINLINE void
   23172 libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_1_ea(size_t *zeta_i, Eurydice_arr_9e *re)
   23173 {
   23174   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   23175   {
   23176     size_t round = i;
   23177     zeta_i[0U]--;
   23178     re->data[round] =
   23179       libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(re->data[round],
   23180         libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),
   23181         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U),
   23182         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)2U),
   23183         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)3U));
   23184     zeta_i[0U] -= (size_t)3U;
   23185   }
   23186 }
   23187 
   23188 /**
   23189 A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_2
   23190 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23191 with const generics
   23192 
   23193 */
   23194 static KRML_MUSTINLINE void
   23195 libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_2_ea(size_t *zeta_i, Eurydice_arr_9e *re)
   23196 {
   23197   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   23198   {
   23199     size_t round = i;
   23200     zeta_i[0U]--;
   23201     re->data[round] =
   23202       libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(re->data[round],
   23203         libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),
   23204         libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U));
   23205     zeta_i[0U]--;
   23206   }
   23207 }
   23208 
   23209 /**
   23210 A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_3
   23211 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23212 with const generics
   23213 
   23214 */
   23215 static KRML_MUSTINLINE void
   23216 libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_3_ea(size_t *zeta_i, Eurydice_arr_9e *re)
   23217 {
   23218   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   23219   {
   23220     size_t round = i;
   23221     zeta_i[0U]--;
   23222     Eurydice_arr_d6
   23223     uu____0 =
   23224       libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(re->data[round],
   23225         libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));
   23226     re->data[round] = uu____0;
   23227   }
   23228 }
   23229 
   23230 /**
   23231 A monomorphic instance of libcrux_ml_kem.invert_ntt.inv_ntt_layer_int_vec_step_reduce
   23232 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23233 with const generics
   23234 
   23235 */
   23236 static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2
   23237 libcrux_ml_kem_invert_ntt_inv_ntt_layer_int_vec_step_reduce_ea(
   23238   Eurydice_arr_d6 a,
   23239   Eurydice_arr_d6 b,
   23240   int16_t zeta_r
   23241 )
   23242 {
   23243   Eurydice_arr_d6 a_minus_b = libcrux_ml_kem_vector_portable_sub_b8(b, &a);
   23244   a =
   23245     libcrux_ml_kem_vector_portable_barrett_reduce_b8(libcrux_ml_kem_vector_portable_add_b8(a, &b));
   23246   b = libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(a_minus_b, zeta_r);
   23247   return
   23248     (
   23249       KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){
   23250         .fst = a,
   23251         .snd = b
   23252       }
   23253     );
   23254 }
   23255 
   23256 /**
   23257 A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_4_plus
   23258 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23259 with const generics
   23260 
   23261 */
   23262 static KRML_MUSTINLINE void
   23263 libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_ea(
   23264   size_t *zeta_i,
   23265   Eurydice_arr_9e *re,
   23266   size_t layer
   23267 )
   23268 {
   23269   size_t step = (size_t)1U << (uint32_t)layer;
   23270   for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)
   23271   {
   23272     size_t round = i0;
   23273     zeta_i[0U]--;
   23274     size_t offset = round * step * (size_t)2U;
   23275     size_t offset_vec = offset / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;
   23276     size_t step_vec = step / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;
   23277     for (size_t i = offset_vec; i < offset_vec + step_vec; i++)
   23278     {
   23279       size_t j = i;
   23280       libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2
   23281       uu____0 =
   23282         libcrux_ml_kem_invert_ntt_inv_ntt_layer_int_vec_step_reduce_ea(re->data[j],
   23283           re->data[j + step_vec],
   23284           libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));
   23285       Eurydice_arr_d6 x = uu____0.fst;
   23286       Eurydice_arr_d6 y = uu____0.snd;
   23287       re->data[j] = x;
   23288       re->data[j + step_vec] = y;
   23289     }
   23290   }
   23291 }
   23292 
   23293 /**
   23294 A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery
   23295 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23296 with const generics
   23297 - K= 3
   23298 */
   23299 static KRML_MUSTINLINE void
   23300 libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_68(Eurydice_arr_9e *re)
   23301 {
   23302   size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;
   23303   libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_1_ea(&zeta_i, re);
   23304   libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_2_ea(&zeta_i, re);
   23305   libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_3_ea(&zeta_i, re);
   23306   libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);
   23307   libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);
   23308   libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);
   23309   libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);
   23310   libcrux_ml_kem_polynomial_poly_barrett_reduce_d6_ea(re);
   23311 }
   23312 
   23313 /**
   23314 A monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce
   23315 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23316 with const generics
   23317 
   23318 */
   23319 static KRML_MUSTINLINE Eurydice_arr_9e
   23320 libcrux_ml_kem_polynomial_subtract_reduce_ea(const Eurydice_arr_9e *myself, Eurydice_arr_9e b)
   23321 {
   23322   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   23323   {
   23324     size_t i0 = i;
   23325     Eurydice_arr_d6
   23326     coefficient_normal_form =
   23327       libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(b.data[i0],
   23328         1441);
   23329     Eurydice_arr_d6
   23330     diff = libcrux_ml_kem_vector_portable_sub_b8(myself->data[i0], &coefficient_normal_form);
   23331     Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(diff);
   23332     b.data[i0] = red;
   23333   }
   23334   return b;
   23335 }
   23336 
   23337 /**
   23338 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   23339 */
   23340 /**
   23341 A monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_d6
   23342 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23343 with const generics
   23344 
   23345 */
   23346 static KRML_MUSTINLINE Eurydice_arr_9e
   23347 libcrux_ml_kem_polynomial_subtract_reduce_d6_ea(const Eurydice_arr_9e *self, Eurydice_arr_9e b)
   23348 {
   23349   return libcrux_ml_kem_polynomial_subtract_reduce_ea(self, b);
   23350 }
   23351 
   23352 /**
   23353  The following functions compute various expressions involving
   23354  vectors and matrices. The computation of these expressions has been
   23355  abstracted away into these functions in order to save on loop iterations.
   23356  Compute v  InverseNTT(s  NTT(u))
   23357 */
   23358 /**
   23359 A monomorphic instance of libcrux_ml_kem.matrix.compute_message
   23360 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23361 with const generics
   23362 - K= 3
   23363 */
   23364 static KRML_MUSTINLINE Eurydice_arr_9e
   23365 libcrux_ml_kem_matrix_compute_message_68(
   23366   const Eurydice_arr_9e *v,
   23367   const Eurydice_arr_bb0 *secret_as_ntt,
   23368   const Eurydice_arr_bb0 *u_as_ntt
   23369 )
   23370 {
   23371   Eurydice_arr_9e result = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   23372   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23373   {
   23374     size_t i0 = i;
   23375     Eurydice_arr_9e
   23376     product =
   23377       libcrux_ml_kem_polynomial_ntt_multiply_d6_ea(&secret_as_ntt->data[i0],
   23378         &u_as_ntt->data[i0]);
   23379     libcrux_ml_kem_polynomial_add_to_ring_element_d6_68(&result, &product);
   23380   }
   23381   libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_68(&result);
   23382   return libcrux_ml_kem_polynomial_subtract_reduce_d6_ea(v, result);
   23383 }
   23384 
   23385 /**
   23386 A monomorphic instance of libcrux_ml_kem.serialize.to_unsigned_field_modulus
   23387 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23388 with const generics
   23389 
   23390 */
   23391 static KRML_MUSTINLINE Eurydice_arr_d6
   23392 libcrux_ml_kem_serialize_to_unsigned_field_modulus_ea(Eurydice_arr_d6 a)
   23393 {
   23394   return libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(a);
   23395 }
   23396 
   23397 /**
   23398 A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_message
   23399 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23400 with const generics
   23401 
   23402 */
   23403 static KRML_MUSTINLINE Eurydice_arr_ec
   23404 libcrux_ml_kem_serialize_compress_then_serialize_message_ea(Eurydice_arr_9e re)
   23405 {
   23406   Eurydice_arr_ec serialized = { .data = { 0U } };
   23407   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   23408   {
   23409     size_t i0 = i;
   23410     Eurydice_arr_d6
   23411     coefficient = libcrux_ml_kem_serialize_to_unsigned_field_modulus_ea(re.data[i0]);
   23412     Eurydice_arr_d6
   23413     coefficient_compressed = libcrux_ml_kem_vector_portable_compress_1_b8(coefficient);
   23414     Eurydice_array_u8x2
   23415     bytes = libcrux_ml_kem_vector_portable_serialize_1_b8(coefficient_compressed);
   23416     Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d46(&serialized,
   23417         (
   23418           KRML_CLITERAL(core_ops_range_Range_87){
   23419             .start = (size_t)2U * i0,
   23420             .end = (size_t)2U * i0 + (size_t)2U
   23421           }
   23422         )),
   23423       Eurydice_array_to_slice_shared_82(&bytes),
   23424       uint8_t);
   23425   }
   23426   return serialized;
   23427 }
   23428 
   23429 /**
   23430  This function implements <strong>Algorithm 14</strong> of the
   23431  NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.
   23432 
   23433  Algorithm 14 is reproduced below:
   23434 
   23435  ```plaintext
   23436  Input: decryption key dk  ^{384k}.
   23437  Input: ciphertext c  ^{32(dk + d)}.
   23438  Output: message m  ^{32}.
   23439 
   23440  c  c[0 : 32dk]
   23441  c  c[32dk : 32(dk + d)]
   23442  u  Decompress_{d}(ByteDecode_{d}(c))
   23443  v  Decompress_{d}(ByteDecode_{d}(c))
   23444    ByteDecode(dk)
   23445  w  v - NTT-(  NTT(u))
   23446  m  ByteEncode(Compress(w))
   23447  return m
   23448  ```
   23449 
   23450  The NIST FIPS 203 standard can be found at
   23451  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   23452 */
   23453 /**
   23454 A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked
   23455 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23456 with const generics
   23457 - K= 3
   23458 - CIPHERTEXT_SIZE= 1088
   23459 - VECTOR_U_ENCODED_SIZE= 960
   23460 - U_COMPRESSION_FACTOR= 10
   23461 - V_COMPRESSION_FACTOR= 4
   23462 */
   23463 static KRML_MUSTINLINE Eurydice_arr_ec
   23464 libcrux_ml_kem_ind_cpa_decrypt_unpacked_01(
   23465   const Eurydice_arr_bb0 *secret_key,
   23466   const Eurydice_arr_2b *ciphertext
   23467 )
   23468 {
   23469   Eurydice_arr_bb0
   23470   u_as_ntt = libcrux_ml_kem_ind_cpa_deserialize_then_decompress_u_30(ciphertext);
   23471   Eurydice_arr_9e
   23472   v =
   23473     libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_v_b6(Eurydice_array_to_subslice_from_shared_5f0(ciphertext,
   23474         (size_t)960U));
   23475   Eurydice_arr_9e message = libcrux_ml_kem_matrix_compute_message_68(&v, secret_key, &u_as_ntt);
   23476   return libcrux_ml_kem_serialize_compress_then_serialize_message_ea(message);
   23477 }
   23478 
   23479 /**
   23480 A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt
   23481 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23482 with const generics
   23483 - K= 3
   23484 - CIPHERTEXT_SIZE= 1088
   23485 - VECTOR_U_ENCODED_SIZE= 960
   23486 - U_COMPRESSION_FACTOR= 10
   23487 - V_COMPRESSION_FACTOR= 4
   23488 */
   23489 static KRML_MUSTINLINE Eurydice_arr_ec
   23490 libcrux_ml_kem_ind_cpa_decrypt_01(
   23491   Eurydice_borrow_slice_u8 secret_key,
   23492   const Eurydice_arr_2b *ciphertext
   23493 )
   23494 {
   23495   Eurydice_arr_bb0 arr_struct;
   23496   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23497   {
   23498     /* original Rust expression is not an lvalue in C */
   23499     void *lvalue = (void *)0U;
   23500     arr_struct.data[i] = libcrux_ml_kem_ind_cpa_decrypt_call_mut_0b_01(&lvalue, i);
   23501   }
   23502   Eurydice_arr_bb0 secret_key_unpacked = arr_struct;
   23503   libcrux_ml_kem_ind_cpa_deserialize_vector_68(secret_key, &secret_key_unpacked);
   23504   return libcrux_ml_kem_ind_cpa_decrypt_unpacked_01(&secret_key_unpacked, ciphertext);
   23505 }
   23506 
   23507 /**
   23508 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   23509 */
   23510 /**
   23511 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a
   23512 with const generics
   23513 - K= 3
   23514 */
   23515 static inline Eurydice_arr_c7
   23516 libcrux_ml_kem_hash_functions_portable_G_4a_78(Eurydice_borrow_slice_u8 input)
   23517 {
   23518   return libcrux_ml_kem_hash_functions_portable_G(input);
   23519 }
   23520 
   23521 /**
   23522 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF
   23523 with const generics
   23524 - LEN= 32
   23525 */
   23526 static inline Eurydice_arr_ec
   23527 libcrux_ml_kem_hash_functions_portable_PRF_ce(Eurydice_borrow_slice_u8 input)
   23528 {
   23529   Eurydice_arr_ec digest = { .data = { 0U } };
   23530   libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_01(&digest), input);
   23531   return digest;
   23532 }
   23533 
   23534 /**
   23535 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   23536 */
   23537 /**
   23538 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a
   23539 with const generics
   23540 - K= 3
   23541 - LEN= 32
   23542 */
   23543 static inline Eurydice_arr_ec
   23544 libcrux_ml_kem_hash_functions_portable_PRF_4a_3b(Eurydice_borrow_slice_u8 input)
   23545 {
   23546   return libcrux_ml_kem_hash_functions_portable_PRF_ce(input);
   23547 }
   23548 
   23549 /**
   23550 A monomorphic instance of Eurydice.arr
   23551 with types Eurydice_arr_bb0
   23552 with const generics
   23553 - $3size_t
   23554 */
   23555 typedef struct Eurydice_arr_c10_s { Eurydice_arr_bb0 data[3U]; } Eurydice_arr_c10;
   23556 
   23557 /**
   23558 A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked
   23559 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23560 with const generics
   23561 - $3size_t
   23562 */
   23563 typedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51_s
   23564 {
   23565   Eurydice_arr_bb0 t_as_ntt;
   23566   Eurydice_arr_ec seed_for_A;
   23567   Eurydice_arr_c10 A;
   23568 }
   23569 libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51;
   23570 
   23571 /**
   23572 This function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   23573 */
   23574 /**
   23575 A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b
   23576 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23577 with const generics
   23578 - K= 3
   23579 */
   23580 static inline libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51
   23581 libcrux_ml_kem_ind_cpa_unpacked_default_8b_68(void)
   23582 {
   23583   Eurydice_arr_bb0 uu____0;
   23584   Eurydice_arr_9e repeat_expression0[3U];
   23585   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23586   {
   23587     repeat_expression0[i] = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   23588   }
   23589   memcpy(uu____0.data, repeat_expression0, (size_t)3U * sizeof (Eurydice_arr_9e));
   23590   Eurydice_arr_ec uu____1 = { .data = { 0U } };
   23591   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 lit0;
   23592   lit0.t_as_ntt = uu____0;
   23593   lit0.seed_for_A = uu____1;
   23594   Eurydice_arr_bb0 repeat_expression1[3U];
   23595   for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)
   23596   {
   23597     Eurydice_arr_bb0 lit;
   23598     Eurydice_arr_9e repeat_expression[3U];
   23599     for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23600     {
   23601       repeat_expression[i] = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   23602     }
   23603     memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_9e));
   23604     repeat_expression1[i0] = lit;
   23605   }
   23606   memcpy(lit0.A.data, repeat_expression1, (size_t)3U * sizeof (Eurydice_arr_bb0));
   23607   return lit0;
   23608 }
   23609 
   23610 /**
   23611  Only use with public values.
   23612 
   23613  This MUST NOT be used with secret inputs, like its caller `deserialize_ring_elements_reduced`.
   23614 */
   23615 /**
   23616 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_reduced_ring_element
   23617 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23618 with const generics
   23619 
   23620 */
   23621 static KRML_MUSTINLINE Eurydice_arr_9e
   23622 libcrux_ml_kem_serialize_deserialize_to_reduced_ring_element_ea(
   23623   Eurydice_borrow_slice_u8 serialized
   23624 )
   23625 {
   23626   Eurydice_arr_9e re = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   23627   for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)
   23628   {
   23629     size_t i0 = i;
   23630     Eurydice_borrow_slice_u8
   23631     bytes =
   23632       Eurydice_slice_subslice_shared_c8(serialized,
   23633         (
   23634           KRML_CLITERAL(core_ops_range_Range_87){
   23635             .start = i0 * (size_t)24U,
   23636             .end = i0 * (size_t)24U + (size_t)24U
   23637           }
   23638         ));
   23639     Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes);
   23640     Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(coefficient);
   23641     re.data[i0] = uu____0;
   23642   }
   23643   return re;
   23644 }
   23645 
   23646 /**
   23647  See [deserialize_ring_elements_reduced_out].
   23648 */
   23649 /**
   23650 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced
   23651 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23652 with const generics
   23653 - K= 3
   23654 */
   23655 static KRML_MUSTINLINE void
   23656 libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_68(
   23657   Eurydice_borrow_slice_u8 public_key,
   23658   Eurydice_arr_bb0 *deserialized_pk
   23659 )
   23660 {
   23661   for
   23662   (size_t
   23663     i = (size_t)0U;
   23664     i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;
   23665     i++)
   23666   {
   23667     size_t i0 = i;
   23668     Eurydice_borrow_slice_u8
   23669     ring_element =
   23670       Eurydice_slice_subslice_shared_c8(public_key,
   23671         (
   23672           KRML_CLITERAL(core_ops_range_Range_87){
   23673             .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
   23674             .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +
   23675               LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT
   23676           }
   23677         ));
   23678     Eurydice_arr_9e
   23679     uu____0 = libcrux_ml_kem_serialize_deserialize_to_reduced_ring_element_ea(ring_element);
   23680     deserialized_pk->data[i0] = uu____0;
   23681   }
   23682 }
   23683 
   23684 /**
   23685 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final
   23686 with const generics
   23687 - K= 3
   23688 */
   23689 static inline Eurydice_arr_1b0
   23690 libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_78(
   23691   const Eurydice_arr_810 *input
   23692 )
   23693 {
   23694   Eurydice_arr_1b0 shake128_state;
   23695   Eurydice_arr_7c repeat_expression[3U];
   23696   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23697   {
   23698     repeat_expression[i] = libcrux_sha3_portable_incremental_shake128_init();
   23699   }
   23700   memcpy(shake128_state.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_7c));
   23701   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23702   {
   23703     size_t i0 = i;
   23704     libcrux_sha3_portable_incremental_shake128_absorb_final(&shake128_state.data[i0],
   23705       Eurydice_array_to_slice_shared_e9(&input->data[i0]));
   23706   }
   23707   return shake128_state;
   23708 }
   23709 
   23710 /**
   23711 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   23712 */
   23713 /**
   23714 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a
   23715 with const generics
   23716 - K= 3
   23717 */
   23718 static inline Eurydice_arr_1b0
   23719 libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(
   23720   const Eurydice_arr_810 *input
   23721 )
   23722 {
   23723   return libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_78(input);
   23724 }
   23725 
   23726 /**
   23727 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks
   23728 with const generics
   23729 - K= 3
   23730 */
   23731 static inline Eurydice_arr_7e
   23732 libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_78(
   23733   Eurydice_arr_1b0 *st
   23734 )
   23735 {
   23736   Eurydice_arr_7e
   23737   out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };
   23738   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23739   {
   23740     size_t i0 = i;
   23741     libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(&st->data[i0],
   23742       Eurydice_array_to_slice_mut_48(&out.data[i0]));
   23743   }
   23744   return out;
   23745 }
   23746 
   23747 /**
   23748 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   23749 */
   23750 /**
   23751 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a
   23752 with const generics
   23753 - K= 3
   23754 */
   23755 static inline Eurydice_arr_7e
   23756 libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(
   23757   Eurydice_arr_1b0 *self
   23758 )
   23759 {
   23760   return libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_78(self);
   23761 }
   23762 
   23763 /**
   23764  If `bytes` contains a set of uniformly random bytes, this function
   23765  uniformly samples a ring element `` that is treated as being the NTT representation
   23766  of the corresponding polynomial `a`.
   23767 
   23768  Since rejection sampling is used, it is possible the supplied bytes are
   23769  not enough to sample the element, in which case an `Err` is returned and the
   23770  caller must try again with a fresh set of bytes.
   23771 
   23772  This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,
   23773  We say "partially" because this implementation only accepts a finite set of
   23774  bytes as input and returns an error if the set is not enough; Algorithm 6 of
   23775  the FIPS 203 standard on the other hand samples from an infinite stream of bytes
   23776  until the ring element is filled. Algorithm 6 is reproduced below:
   23777 
   23778  ```plaintext
   23779  Input: byte stream B  *.
   23780  Output: array   .
   23781 
   23782  i  0
   23783  j  0
   23784  while j < 256 do
   23785      d  B[i] + 256(B[i+1] mod 16)
   23786      d  B[i+1]/16 + 16B[i+2]
   23787      if d < q then
   23788          [j]  d
   23789          j  j + 1
   23790      end if
   23791      if d < q and j < 256 then
   23792          [j]  d
   23793          j  j + 1
   23794      end if
   23795      i  i + 3
   23796  end while
   23797  return 
   23798  ```
   23799 
   23800  The NIST FIPS 203 standard can be found at
   23801  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   23802 */
   23803 /**
   23804 A monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next
   23805 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23806 with const generics
   23807 - K= 3
   23808 - N= 504
   23809 */
   23810 static KRML_MUSTINLINE bool
   23811 libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_b6(
   23812   const Eurydice_arr_7e *randomness,
   23813   Eurydice_arr_eb *sampled_coefficients,
   23814   Eurydice_arr_b1 *out
   23815 )
   23816 {
   23817   for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)
   23818   {
   23819     size_t i1 = i0;
   23820     for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)
   23821     {
   23822       size_t r = i;
   23823       if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)
   23824       {
   23825         size_t
   23826         sampled =
   23827           libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d45(&randomness->data[i1],
   23828               (
   23829                 KRML_CLITERAL(core_ops_range_Range_87){
   23830                   .start = r * (size_t)24U,
   23831                   .end = r * (size_t)24U + (size_t)24U
   23832                 }
   23833               )),
   23834             Eurydice_array_to_subslice_mut_e7(&out->data[i1],
   23835               (
   23836                 KRML_CLITERAL(core_ops_range_Range_87){
   23837                   .start = sampled_coefficients->data[i1],
   23838                   .end = sampled_coefficients->data[i1] + (size_t)16U
   23839                 }
   23840               )));
   23841         size_t uu____0 = i1;
   23842         sampled_coefficients->data[uu____0] += sampled;
   23843       }
   23844     }
   23845   }
   23846   bool done = true;
   23847   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23848   {
   23849     size_t i0 = i;
   23850     if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)
   23851     {
   23852       sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;
   23853     }
   23854     else
   23855     {
   23856       done = false;
   23857     }
   23858   }
   23859   return done;
   23860 }
   23861 
   23862 /**
   23863 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block
   23864 with const generics
   23865 - K= 3
   23866 */
   23867 static inline Eurydice_arr_2c
   23868 libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_78(Eurydice_arr_1b0 *st)
   23869 {
   23870   Eurydice_arr_2c
   23871   out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };
   23872   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23873   {
   23874     size_t i0 = i;
   23875     libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&st->data[i0],
   23876       Eurydice_array_to_slice_mut_2c(&out.data[i0]));
   23877   }
   23878   return out;
   23879 }
   23880 
   23881 /**
   23882 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   23883 */
   23884 /**
   23885 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a
   23886 with const generics
   23887 - K= 3
   23888 */
   23889 static inline Eurydice_arr_2c
   23890 libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(
   23891   Eurydice_arr_1b0 *self
   23892 )
   23893 {
   23894   return libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_78(self);
   23895 }
   23896 
   23897 /**
   23898  If `bytes` contains a set of uniformly random bytes, this function
   23899  uniformly samples a ring element `` that is treated as being the NTT representation
   23900  of the corresponding polynomial `a`.
   23901 
   23902  Since rejection sampling is used, it is possible the supplied bytes are
   23903  not enough to sample the element, in which case an `Err` is returned and the
   23904  caller must try again with a fresh set of bytes.
   23905 
   23906  This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,
   23907  We say "partially" because this implementation only accepts a finite set of
   23908  bytes as input and returns an error if the set is not enough; Algorithm 6 of
   23909  the FIPS 203 standard on the other hand samples from an infinite stream of bytes
   23910  until the ring element is filled. Algorithm 6 is reproduced below:
   23911 
   23912  ```plaintext
   23913  Input: byte stream B  *.
   23914  Output: array   .
   23915 
   23916  i  0
   23917  j  0
   23918  while j < 256 do
   23919      d  B[i] + 256(B[i+1] mod 16)
   23920      d  B[i+1]/16 + 16B[i+2]
   23921      if d < q then
   23922          [j]  d
   23923          j  j + 1
   23924      end if
   23925      if d < q and j < 256 then
   23926          [j]  d
   23927          j  j + 1
   23928      end if
   23929      i  i + 3
   23930  end while
   23931  return 
   23932  ```
   23933 
   23934  The NIST FIPS 203 standard can be found at
   23935  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   23936 */
   23937 /**
   23938 A monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next
   23939 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23940 with const generics
   23941 - K= 3
   23942 - N= 168
   23943 */
   23944 static KRML_MUSTINLINE bool
   23945 libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_b60(
   23946   const Eurydice_arr_2c *randomness,
   23947   Eurydice_arr_eb *sampled_coefficients,
   23948   Eurydice_arr_b1 *out
   23949 )
   23950 {
   23951   for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)
   23952   {
   23953     size_t i1 = i0;
   23954     for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)
   23955     {
   23956       size_t r = i;
   23957       if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)
   23958       {
   23959         size_t
   23960         sampled =
   23961           libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d46(&randomness->data[i1],
   23962               (
   23963                 KRML_CLITERAL(core_ops_range_Range_87){
   23964                   .start = r * (size_t)24U,
   23965                   .end = r * (size_t)24U + (size_t)24U
   23966                 }
   23967               )),
   23968             Eurydice_array_to_subslice_mut_e7(&out->data[i1],
   23969               (
   23970                 KRML_CLITERAL(core_ops_range_Range_87){
   23971                   .start = sampled_coefficients->data[i1],
   23972                   .end = sampled_coefficients->data[i1] + (size_t)16U
   23973                 }
   23974               )));
   23975         size_t uu____0 = i1;
   23976         sampled_coefficients->data[uu____0] += sampled;
   23977       }
   23978     }
   23979   }
   23980   bool done = true;
   23981   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   23982   {
   23983     size_t i0 = i;
   23984     if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)
   23985     {
   23986       sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;
   23987     }
   23988     else
   23989     {
   23990       done = false;
   23991     }
   23992   }
   23993   return done;
   23994 }
   23995 
   23996 /**
   23997 A monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array
   23998 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   23999 with const generics
   24000 
   24001 */
   24002 static KRML_MUSTINLINE Eurydice_arr_9e
   24003 libcrux_ml_kem_polynomial_from_i16_array_ea(Eurydice_borrow_slice_i16 a)
   24004 {
   24005   Eurydice_arr_9e result = libcrux_ml_kem_polynomial_ZERO_ea();
   24006   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   24007   {
   24008     size_t i0 = i;
   24009     Eurydice_arr_d6
   24010     uu____0 =
   24011       libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_slice_subslice_shared_a6(a,
   24012           (
   24013             KRML_CLITERAL(core_ops_range_Range_87){
   24014               .start = i0 * (size_t)16U,
   24015               .end = (i0 + (size_t)1U) * (size_t)16U
   24016             }
   24017           )));
   24018     result.data[i0] = uu____0;
   24019   }
   24020   return result;
   24021 }
   24022 
   24023 /**
   24024 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   24025 */
   24026 /**
   24027 A monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_d6
   24028 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24029 with const generics
   24030 
   24031 */
   24032 static KRML_MUSTINLINE Eurydice_arr_9e
   24033 libcrux_ml_kem_polynomial_from_i16_array_d6_ea(Eurydice_borrow_slice_i16 a)
   24034 {
   24035   return libcrux_ml_kem_polynomial_from_i16_array_ea(a);
   24036 }
   24037 
   24038 /**
   24039 This function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}
   24040 */
   24041 /**
   24042 A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a
   24043 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24044 with const generics
   24045 - K= 3
   24046 */
   24047 static inline Eurydice_arr_9e
   24048 libcrux_ml_kem_sampling_sample_from_xof_call_mut_0a_91(void **_, Eurydice_arr_5b tupled_args)
   24049 {
   24050   Eurydice_arr_5b s = tupled_args;
   24051   return
   24052     libcrux_ml_kem_polynomial_from_i16_array_d6_ea(Eurydice_array_to_subslice_shared_e70(&s,
   24053         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));
   24054 }
   24055 
   24056 /**
   24057 A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof
   24058 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24059 with const generics
   24060 - K= 3
   24061 */
   24062 static KRML_MUSTINLINE Eurydice_arr_bb0
   24063 libcrux_ml_kem_sampling_sample_from_xof_91(const Eurydice_arr_810 *seeds)
   24064 {
   24065   Eurydice_arr_eb sampled_coefficients = { .data = { 0U } };
   24066   Eurydice_arr_b1
   24067   out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };
   24068   Eurydice_arr_1b0
   24069   xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(seeds);
   24070   Eurydice_arr_7e
   24071   randomness0 =
   24072     libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(&xof_state);
   24073   bool
   24074   done =
   24075     libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_b6(&randomness0,
   24076       &sampled_coefficients,
   24077       &out);
   24078   while (true)
   24079   {
   24080     if (done)
   24081     {
   24082       break;
   24083     }
   24084     else
   24085     {
   24086       Eurydice_arr_2c
   24087       randomness =
   24088         libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(&xof_state);
   24089       done =
   24090         libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_b60(&randomness,
   24091           &sampled_coefficients,
   24092           &out);
   24093     }
   24094   }
   24095   Eurydice_arr_bb0 arr_mapped_str;
   24096   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24097   {
   24098     /* original Rust expression is not an lvalue in C */
   24099     void *lvalue = (void *)0U;
   24100     arr_mapped_str.data[i] =
   24101       libcrux_ml_kem_sampling_sample_from_xof_call_mut_0a_91(&lvalue,
   24102         out.data[i]);
   24103   }
   24104   return arr_mapped_str;
   24105 }
   24106 
   24107 /**
   24108 A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A
   24109 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24110 with const generics
   24111 - K= 3
   24112 */
   24113 static KRML_MUSTINLINE void
   24114 libcrux_ml_kem_matrix_sample_matrix_A_91(
   24115   Eurydice_arr_c10 *A_transpose,
   24116   const Eurydice_arr_31 *seed,
   24117   bool transpose
   24118 )
   24119 {
   24120   for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)
   24121   {
   24122     size_t i1 = i0;
   24123     Eurydice_arr_810 seeds;
   24124     Eurydice_arr_31 repeat_expression[3U];
   24125     for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24126     {
   24127       repeat_expression[i] =
   24128         core_array__core__clone__Clone_for__T__N___clone((size_t)34U,
   24129           seed,
   24130           uint8_t,
   24131           Eurydice_arr_31);
   24132     }
   24133     memcpy(seeds.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_31));
   24134     for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24135     {
   24136       size_t j = i;
   24137       seeds.data[j].data[32U] = (uint8_t)i1;
   24138       seeds.data[j].data[33U] = (uint8_t)j;
   24139     }
   24140     Eurydice_arr_bb0 sampled = libcrux_ml_kem_sampling_sample_from_xof_91(&seeds);
   24141     for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24142     {
   24143       size_t j = i;
   24144       Eurydice_arr_9e sample = sampled.data[j];
   24145       if (transpose)
   24146       {
   24147         A_transpose->data[j].data[i1] = sample;
   24148       }
   24149       else
   24150       {
   24151         A_transpose->data[i1].data[j] = sample;
   24152       }
   24153     }
   24154   }
   24155 }
   24156 
   24157 /**
   24158 A monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut
   24159 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24160 with const generics
   24161 - K= 3
   24162 - T_AS_NTT_ENCODED_SIZE= 1152
   24163 */
   24164 static KRML_MUSTINLINE void
   24165 libcrux_ml_kem_ind_cpa_build_unpacked_public_key_mut_05(
   24166   Eurydice_borrow_slice_u8 public_key,
   24167   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *unpacked_public_key
   24168 )
   24169 {
   24170   libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_68(Eurydice_slice_subslice_to_shared_72(public_key,
   24171       (size_t)1152U),
   24172     &unpacked_public_key->t_as_ntt);
   24173   Eurydice_borrow_slice_u8
   24174   seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)1152U);
   24175   Eurydice_arr_c10 *uu____0 = &unpacked_public_key->A;
   24176   /* original Rust expression is not an lvalue in C */
   24177   Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);
   24178   libcrux_ml_kem_matrix_sample_matrix_A_91(uu____0, &lvalue, false);
   24179 }
   24180 
   24181 /**
   24182 A monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key
   24183 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24184 with const generics
   24185 - K= 3
   24186 - T_AS_NTT_ENCODED_SIZE= 1152
   24187 */
   24188 static KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51
   24189 libcrux_ml_kem_ind_cpa_build_unpacked_public_key_05(Eurydice_borrow_slice_u8 public_key)
   24190 {
   24191   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51
   24192   unpacked_public_key = libcrux_ml_kem_ind_cpa_unpacked_default_8b_68();
   24193   libcrux_ml_kem_ind_cpa_build_unpacked_public_key_mut_05(public_key, &unpacked_public_key);
   24194   return unpacked_public_key;
   24195 }
   24196 
   24197 /**
   24198 A monomorphic instance of n-tuple
   24199 with types Eurydice_arr_bb0, libcrux_ml_kem_polynomial_PolynomialRingElement_1d
   24200 
   24201 */
   24202 typedef struct tuple_c6_s
   24203 {
   24204   Eurydice_arr_bb0 fst;
   24205   Eurydice_arr_9e snd;
   24206 }
   24207 tuple_c6;
   24208 
   24209 /**
   24210 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}
   24211 */
   24212 /**
   24213 A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1
   24214 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24215 with const generics
   24216 - K= 3
   24217 - C1_LEN= 960
   24218 - U_COMPRESSION_FACTOR= 10
   24219 - BLOCK_LEN= 320
   24220 - ETA1= 2
   24221 - ETA1_RANDOMNESS_SIZE= 128
   24222 - ETA2= 2
   24223 - ETA2_RANDOMNESS_SIZE= 128
   24224 */
   24225 static inline Eurydice_arr_9e
   24226 libcrux_ml_kem_ind_cpa_encrypt_c1_call_mut_f1_87(void **_, size_t tupled_args)
   24227 {
   24228   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   24229 }
   24230 
   24231 /**
   24232 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN
   24233 with const generics
   24234 - K= 3
   24235 - LEN= 128
   24236 */
   24237 static inline Eurydice_arr_58
   24238 libcrux_ml_kem_hash_functions_portable_PRFxN_3b(const Eurydice_arr_fd *input)
   24239 {
   24240   Eurydice_arr_58
   24241   out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };
   24242   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24243   {
   24244     size_t i0 = i;
   24245     libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&out.data[i0]),
   24246       Eurydice_array_to_slice_shared_b5(&input->data[i0]));
   24247   }
   24248   return out;
   24249 }
   24250 
   24251 /**
   24252 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   24253 */
   24254 /**
   24255 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a
   24256 with const generics
   24257 - K= 3
   24258 - LEN= 128
   24259 */
   24260 static inline Eurydice_arr_58
   24261 libcrux_ml_kem_hash_functions_portable_PRFxN_4a_3b(const Eurydice_arr_fd *input)
   24262 {
   24263   return libcrux_ml_kem_hash_functions_portable_PRFxN_3b(input);
   24264 }
   24265 
   24266 /**
   24267  Given a series of uniformly random bytes in `randomness`, for some number `eta`,
   24268  the `sample_from_binomial_distribution_{eta}` functions sample
   24269  a ring element from a binomial distribution centered at 0 that uses two sets
   24270  of `eta` coin flips. If, for example,
   24271  `eta = ETA`, each ring coefficient is a value `v` such
   24272  such that `v  {-ETA, -ETA + 1, ..., 0, ..., ETA + 1, ETA}` and:
   24273 
   24274  ```plaintext
   24275  - If v < 0, Pr[v] = Pr[-v]
   24276  - If v >= 0, Pr[v] = BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2 ^ (2 * ETA)
   24277  ```
   24278 
   24279  The values `v < 0` are mapped to the appropriate `KyberFieldElement`.
   24280 
   24281  The expected value is:
   24282 
   24283  ```plaintext
   24284  E[X] = (-ETA)Pr[-ETA] + (-(ETA - 1))Pr[-(ETA - 1)] + ... + (ETA - 1)Pr[ETA - 1] + (ETA)Pr[ETA]
   24285       = 0 since Pr[-v] = Pr[v] when v < 0.
   24286  ```
   24287 
   24288  And the variance is:
   24289 
   24290  ```plaintext
   24291  Var(X) = E[(X - E[X])^2]
   24292         = E[X^2]
   24293         = sum_(v=-ETA to ETA)v^2 * (BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2^(2 * ETA))
   24294         = ETA / 2
   24295  ```
   24296 
   24297  This function implements <strong>Algorithm 7</strong> of the NIST FIPS 203 standard, which is
   24298  reproduced below:
   24299 
   24300  ```plaintext
   24301  Input: byte array B  ^{64}.
   24302  Output: array f  .
   24303 
   24304  b  BytesToBits(B)
   24305  for (i  0; i < 256; i++)
   24306      x  (j=0 to  - 1) b[2i + j]
   24307      y  (j=0 to  - 1) b[2i +  + j]
   24308      f[i]  xy mod q
   24309  end for
   24310  return f
   24311  ```
   24312 
   24313  The NIST FIPS 203 standard can be found at
   24314  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   24315 */
   24316 /**
   24317 A monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_2
   24318 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24319 with const generics
   24320 
   24321 */
   24322 static KRML_MUSTINLINE Eurydice_arr_9e
   24323 libcrux_ml_kem_sampling_sample_from_binomial_distribution_2_ea(
   24324   Eurydice_borrow_slice_u8 randomness
   24325 )
   24326 {
   24327   Eurydice_arr_04 sampled_i16s = { .data = { 0U } };
   24328   for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)4U; i0++)
   24329   {
   24330     size_t chunk_number = i0;
   24331     Eurydice_borrow_slice_u8
   24332     byte_chunk =
   24333       Eurydice_slice_subslice_shared_c8(randomness,
   24334         (
   24335           KRML_CLITERAL(core_ops_range_Range_87){
   24336             .start = chunk_number * (size_t)4U,
   24337             .end = chunk_number * (size_t)4U + (size_t)4U
   24338           }
   24339         ));
   24340     uint32_t
   24341     random_bits_as_u32 =
   24342       (((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |
   24343         (uint32_t)byte_chunk.ptr[2U] << 16U)
   24344       | (uint32_t)byte_chunk.ptr[3U] << 24U;
   24345     uint32_t even_bits = random_bits_as_u32 & 1431655765U;
   24346     uint32_t odd_bits = random_bits_as_u32 >> 1U & 1431655765U;
   24347     uint32_t coin_toss_outcomes = even_bits + odd_bits;
   24348     for (uint32_t i = 0U; i < 32U / 4U; i++)
   24349     {
   24350       uint32_t outcome_set = i;
   24351       uint32_t outcome_set0 = outcome_set * 4U;
   24352       int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 3U);
   24353       int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 2U) & 3U);
   24354       size_t offset = (size_t)(outcome_set0 >> 2U);
   24355       sampled_i16s.data[(size_t)8U * chunk_number + offset] = outcome_1 - outcome_2;
   24356     }
   24357   }
   24358   return
   24359     libcrux_ml_kem_polynomial_from_i16_array_d6_ea(Eurydice_array_to_slice_shared_99(&sampled_i16s));
   24360 }
   24361 
   24362 /**
   24363 A monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution
   24364 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24365 with const generics
   24366 - ETA= 2
   24367 */
   24368 static KRML_MUSTINLINE Eurydice_arr_9e
   24369 libcrux_ml_kem_sampling_sample_from_binomial_distribution_66(
   24370   Eurydice_borrow_slice_u8 randomness
   24371 )
   24372 {
   24373   return libcrux_ml_kem_sampling_sample_from_binomial_distribution_2_ea(randomness);
   24374 }
   24375 
   24376 /**
   24377 A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_7
   24378 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24379 with const generics
   24380 
   24381 */
   24382 static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_at_layer_7_ea(Eurydice_arr_9e *re)
   24383 {
   24384   size_t step = LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT / (size_t)2U;
   24385   for (size_t i = (size_t)0U; i < step; i++)
   24386   {
   24387     size_t j = i;
   24388     Eurydice_arr_d6
   24389     t = libcrux_ml_kem_vector_portable_multiply_by_constant_b8(re->data[j + step], -1600);
   24390     re->data[j + step] = libcrux_ml_kem_vector_portable_sub_b8(re->data[j], &t);
   24391     Eurydice_arr_d6 uu____1 = libcrux_ml_kem_vector_portable_add_b8(re->data[j], &t);
   24392     re->data[j] = uu____1;
   24393   }
   24394 }
   24395 
   24396 /**
   24397 A monomorphic instance of libcrux_ml_kem.ntt.ntt_binomially_sampled_ring_element
   24398 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24399 with const generics
   24400 
   24401 */
   24402 static KRML_MUSTINLINE void
   24403 libcrux_ml_kem_ntt_ntt_binomially_sampled_ring_element_ea(Eurydice_arr_9e *re)
   24404 {
   24405   libcrux_ml_kem_ntt_ntt_at_layer_7_ea(re);
   24406   size_t zeta_i = (size_t)1U;
   24407   libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U, (size_t)11207U);
   24408   libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(&zeta_i,
   24409     re,
   24410     (size_t)5U,
   24411     (size_t)11207U + (size_t)3328U);
   24412   libcrux_ml_kem_ntt_ntt_at_layer_4_plus_ea(&zeta_i,
   24413     re,
   24414     (size_t)4U,
   24415     (size_t)11207U + (size_t)2U * (size_t)3328U);
   24416   libcrux_ml_kem_ntt_ntt_at_layer_3_ea(&zeta_i, re, (size_t)11207U + (size_t)3U * (size_t)3328U);
   24417   libcrux_ml_kem_ntt_ntt_at_layer_2_ea(&zeta_i, re, (size_t)11207U + (size_t)4U * (size_t)3328U);
   24418   libcrux_ml_kem_ntt_ntt_at_layer_1_ea(&zeta_i, re, (size_t)11207U + (size_t)5U * (size_t)3328U);
   24419   libcrux_ml_kem_polynomial_poly_barrett_reduce_d6_ea(re);
   24420 }
   24421 
   24422 /**
   24423  Sample a vector of ring elements from a centered binomial distribution and
   24424  convert them into their NTT representations.
   24425 */
   24426 /**
   24427 A monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt
   24428 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24429 with const generics
   24430 - K= 3
   24431 - ETA= 2
   24432 - ETA_RANDOMNESS_SIZE= 128
   24433 */
   24434 static KRML_MUSTINLINE uint8_t
   24435 libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_bf(
   24436   Eurydice_arr_bb0 *re_as_ntt,
   24437   const Eurydice_arr_fa0 *prf_input,
   24438   uint8_t domain_separator
   24439 )
   24440 {
   24441   Eurydice_arr_fd prf_inputs;
   24442   Eurydice_arr_fa0 repeat_expression[3U];
   24443   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24444   {
   24445     repeat_expression[i] =
   24446       core_array__core__clone__Clone_for__T__N___clone((size_t)33U,
   24447         prf_input,
   24448         uint8_t,
   24449         Eurydice_arr_fa0);
   24450   }
   24451   memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa0));
   24452   domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);
   24453   Eurydice_arr_58 prf_outputs = libcrux_ml_kem_hash_functions_portable_PRFxN_4a_3b(&prf_inputs);
   24454   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24455   {
   24456     size_t i0 = i;
   24457     Eurydice_arr_9e
   24458     uu____0 =
   24459       libcrux_ml_kem_sampling_sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));
   24460     re_as_ntt->data[i0] = uu____0;
   24461     libcrux_ml_kem_ntt_ntt_binomially_sampled_ring_element_ea(&re_as_ntt->data[i0]);
   24462   }
   24463   return domain_separator;
   24464 }
   24465 
   24466 /**
   24467 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}
   24468 */
   24469 /**
   24470 A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd
   24471 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24472 with const generics
   24473 - K= 3
   24474 - C1_LEN= 960
   24475 - U_COMPRESSION_FACTOR= 10
   24476 - BLOCK_LEN= 320
   24477 - ETA1= 2
   24478 - ETA1_RANDOMNESS_SIZE= 128
   24479 - ETA2= 2
   24480 - ETA2_RANDOMNESS_SIZE= 128
   24481 */
   24482 static inline Eurydice_arr_9e
   24483 libcrux_ml_kem_ind_cpa_encrypt_c1_call_mut_dd_87(void **_, size_t tupled_args)
   24484 {
   24485   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   24486 }
   24487 
   24488 /**
   24489  Sample a vector of ring elements from a centered binomial distribution.
   24490 */
   24491 /**
   24492 A monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd
   24493 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24494 with const generics
   24495 - K= 3
   24496 - ETA2_RANDOMNESS_SIZE= 128
   24497 - ETA2= 2
   24498 */
   24499 static KRML_MUSTINLINE uint8_t
   24500 libcrux_ml_kem_ind_cpa_sample_ring_element_cbd_bf(
   24501   const Eurydice_arr_fa0 *prf_input,
   24502   uint8_t domain_separator,
   24503   Eurydice_arr_bb0 *error_1
   24504 )
   24505 {
   24506   Eurydice_arr_fd prf_inputs;
   24507   Eurydice_arr_fa0 repeat_expression[3U];
   24508   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24509   {
   24510     repeat_expression[i] =
   24511       core_array__core__clone__Clone_for__T__N___clone((size_t)33U,
   24512         prf_input,
   24513         uint8_t,
   24514         Eurydice_arr_fa0);
   24515   }
   24516   memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa0));
   24517   domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);
   24518   Eurydice_arr_58 prf_outputs = libcrux_ml_kem_hash_functions_portable_PRFxN_4a_3b(&prf_inputs);
   24519   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24520   {
   24521     size_t i0 = i;
   24522     Eurydice_arr_9e
   24523     uu____0 =
   24524       libcrux_ml_kem_sampling_sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));
   24525     error_1->data[i0] = uu____0;
   24526   }
   24527   return domain_separator;
   24528 }
   24529 
   24530 /**
   24531 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF
   24532 with const generics
   24533 - LEN= 128
   24534 */
   24535 static inline Eurydice_arr_89
   24536 libcrux_ml_kem_hash_functions_portable_PRF_ec(Eurydice_borrow_slice_u8 input)
   24537 {
   24538   Eurydice_arr_89 digest = { .data = { 0U } };
   24539   libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&digest), input);
   24540   return digest;
   24541 }
   24542 
   24543 /**
   24544 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   24545 */
   24546 /**
   24547 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a
   24548 with const generics
   24549 - K= 3
   24550 - LEN= 128
   24551 */
   24552 static inline Eurydice_arr_89
   24553 libcrux_ml_kem_hash_functions_portable_PRF_4a_3b0(Eurydice_borrow_slice_u8 input)
   24554 {
   24555   return libcrux_ml_kem_hash_functions_portable_PRF_ec(input);
   24556 }
   24557 
   24558 /**
   24559 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}
   24560 */
   24561 /**
   24562 A monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8
   24563 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24564 with const generics
   24565 - K= 3
   24566 */
   24567 static inline Eurydice_arr_9e
   24568 libcrux_ml_kem_matrix_compute_vector_u_call_mut_a8_68(void **_, size_t tupled_args)
   24569 {
   24570   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   24571 }
   24572 
   24573 /**
   24574 A monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce
   24575 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24576 with const generics
   24577 
   24578 */
   24579 static KRML_MUSTINLINE void
   24580 libcrux_ml_kem_polynomial_add_error_reduce_ea(
   24581   Eurydice_arr_9e *myself,
   24582   const Eurydice_arr_9e *error
   24583 )
   24584 {
   24585   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   24586   {
   24587     size_t j = i;
   24588     Eurydice_arr_d6
   24589     coefficient_normal_form =
   24590       libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(myself->data[j],
   24591         1441);
   24592     Eurydice_arr_d6
   24593     sum = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &error->data[j]);
   24594     Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum);
   24595     myself->data[j] = red;
   24596   }
   24597 }
   24598 
   24599 /**
   24600 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   24601 */
   24602 /**
   24603 A monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_d6
   24604 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24605 with const generics
   24606 
   24607 */
   24608 static KRML_MUSTINLINE void
   24609 libcrux_ml_kem_polynomial_add_error_reduce_d6_ea(
   24610   Eurydice_arr_9e *self,
   24611   const Eurydice_arr_9e *error
   24612 )
   24613 {
   24614   libcrux_ml_kem_polynomial_add_error_reduce_ea(self, error);
   24615 }
   24616 
   24617 /**
   24618  Compute u := InvertNTT(A  r) + e
   24619 */
   24620 /**
   24621 A monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u
   24622 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24623 with const generics
   24624 - K= 3
   24625 */
   24626 static KRML_MUSTINLINE Eurydice_arr_bb0
   24627 libcrux_ml_kem_matrix_compute_vector_u_68(
   24628   const Eurydice_arr_c10 *a_as_ntt,
   24629   const Eurydice_arr_bb0 *r_as_ntt,
   24630   const Eurydice_arr_bb0 *error_1
   24631 )
   24632 {
   24633   Eurydice_arr_bb0 arr_struct;
   24634   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24635   {
   24636     /* original Rust expression is not an lvalue in C */
   24637     void *lvalue = (void *)0U;
   24638     arr_struct.data[i] = libcrux_ml_kem_matrix_compute_vector_u_call_mut_a8_68(&lvalue, i);
   24639   }
   24640   Eurydice_arr_bb0 result = arr_struct;
   24641   for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)
   24642   {
   24643     size_t i1 = i0;
   24644     const Eurydice_arr_bb0 *row = &a_as_ntt->data[i1];
   24645     for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24646     {
   24647       size_t j = i;
   24648       const Eurydice_arr_9e *a_element = &row->data[j];
   24649       Eurydice_arr_9e
   24650       product = libcrux_ml_kem_polynomial_ntt_multiply_d6_ea(a_element, &r_as_ntt->data[j]);
   24651       libcrux_ml_kem_polynomial_add_to_ring_element_d6_68(&result.data[i1], &product);
   24652     }
   24653     libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_68(&result.data[i1]);
   24654     libcrux_ml_kem_polynomial_add_error_reduce_d6_ea(&result.data[i1], &error_1->data[i1]);
   24655   }
   24656   return result;
   24657 }
   24658 
   24659 /**
   24660 A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress
   24661 with const generics
   24662 - COEFFICIENT_BITS= 10
   24663 */
   24664 static KRML_MUSTINLINE Eurydice_arr_d6
   24665 libcrux_ml_kem_vector_portable_compress_compress_ef(Eurydice_arr_d6 a)
   24666 {
   24667   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   24668   {
   24669     size_t i0 = i;
   24670     int16_t
   24671     uu____0 =
   24672       libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)10,
   24673           libcrux_secrets_int_as_u16_f5(a.data[i0])));
   24674     a.data[i0] = uu____0;
   24675   }
   24676   return a;
   24677 }
   24678 
   24679 /**
   24680 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   24681 */
   24682 /**
   24683 A monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8
   24684 with const generics
   24685 - COEFFICIENT_BITS= 10
   24686 */
   24687 static inline Eurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_b8_ef(Eurydice_arr_d6 a)
   24688 {
   24689   return libcrux_ml_kem_vector_portable_compress_compress_ef(a);
   24690 }
   24691 
   24692 /**
   24693 A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10
   24694 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24695 with const generics
   24696 - OUT_LEN= 320
   24697 */
   24698 static KRML_MUSTINLINE Eurydice_arr_b0
   24699 libcrux_ml_kem_serialize_compress_then_serialize_10_e1(const Eurydice_arr_9e *re)
   24700 {
   24701   Eurydice_arr_b0 serialized = { .data = { 0U } };
   24702   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   24703   {
   24704     size_t i0 = i;
   24705     Eurydice_arr_d6
   24706     coefficient =
   24707       libcrux_ml_kem_vector_portable_compress_b8_ef(libcrux_ml_kem_serialize_to_unsigned_field_modulus_ea(re->data[i0]));
   24708     Eurydice_arr_fc bytes = libcrux_ml_kem_vector_portable_serialize_10_b8(coefficient);
   24709     Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d413(&serialized,
   24710         (
   24711           KRML_CLITERAL(core_ops_range_Range_87){
   24712             .start = (size_t)20U * i0,
   24713             .end = (size_t)20U * i0 + (size_t)20U
   24714           }
   24715         )),
   24716       Eurydice_array_to_slice_shared_8f(&bytes),
   24717       uint8_t);
   24718   }
   24719   return serialized;
   24720 }
   24721 
   24722 /**
   24723 A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u
   24724 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24725 with const generics
   24726 - COMPRESSION_FACTOR= 10
   24727 - OUT_LEN= 320
   24728 */
   24729 static KRML_MUSTINLINE Eurydice_arr_b0
   24730 libcrux_ml_kem_serialize_compress_then_serialize_ring_element_u_f7(const Eurydice_arr_9e *re)
   24731 {
   24732   return libcrux_ml_kem_serialize_compress_then_serialize_10_e1(re);
   24733 }
   24734 
   24735 /**
   24736  Call [`compress_then_serialize_ring_element_u`] on each ring element.
   24737 */
   24738 /**
   24739 A monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u
   24740 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24741 with const generics
   24742 - K= 3
   24743 - OUT_LEN= 960
   24744 - COMPRESSION_FACTOR= 10
   24745 - BLOCK_LEN= 320
   24746 */
   24747 static KRML_MUSTINLINE void
   24748 libcrux_ml_kem_ind_cpa_compress_then_serialize_u_21(
   24749   Eurydice_arr_bb0 input,
   24750   Eurydice_mut_borrow_slice_u8 out
   24751 )
   24752 {
   24753   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24754   {
   24755     size_t i0 = i;
   24756     Eurydice_arr_9e re = input.data[i0];
   24757     Eurydice_mut_borrow_slice_u8
   24758     uu____0 =
   24759       Eurydice_slice_subslice_mut_c8(out,
   24760         (
   24761           KRML_CLITERAL(core_ops_range_Range_87){
   24762             .start = i0 * ((size_t)960U / (size_t)3U),
   24763             .end = (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U)
   24764           }
   24765         ));
   24766     /* original Rust expression is not an lvalue in C */
   24767     Eurydice_arr_b0
   24768     lvalue = libcrux_ml_kem_serialize_compress_then_serialize_ring_element_u_f7(&re);
   24769     Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_56(&lvalue), uint8_t);
   24770   }
   24771 }
   24772 
   24773 /**
   24774 A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1
   24775 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   24776 with const generics
   24777 - K= 3
   24778 - C1_LEN= 960
   24779 - U_COMPRESSION_FACTOR= 10
   24780 - BLOCK_LEN= 320
   24781 - ETA1= 2
   24782 - ETA1_RANDOMNESS_SIZE= 128
   24783 - ETA2= 2
   24784 - ETA2_RANDOMNESS_SIZE= 128
   24785 */
   24786 static KRML_MUSTINLINE tuple_c6
   24787 libcrux_ml_kem_ind_cpa_encrypt_c1_87(
   24788   Eurydice_borrow_slice_u8 randomness,
   24789   const Eurydice_arr_c10 *matrix,
   24790   Eurydice_mut_borrow_slice_u8 ciphertext
   24791 )
   24792 {
   24793   Eurydice_arr_fa0 prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);
   24794   Eurydice_arr_bb0 arr_struct0;
   24795   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24796   {
   24797     /* original Rust expression is not an lvalue in C */
   24798     void *lvalue = (void *)0U;
   24799     arr_struct0.data[i] = libcrux_ml_kem_ind_cpa_encrypt_c1_call_mut_f1_87(&lvalue, i);
   24800   }
   24801   Eurydice_arr_bb0 r_as_ntt = arr_struct0;
   24802   uint8_t
   24803   domain_separator0 =
   24804     libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_bf(&r_as_ntt,
   24805       &prf_input,
   24806       0U);
   24807   Eurydice_arr_bb0 arr_struct;
   24808   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24809   {
   24810     /* original Rust expression is not an lvalue in C */
   24811     void *lvalue = (void *)0U;
   24812     arr_struct.data[i] = libcrux_ml_kem_ind_cpa_encrypt_c1_call_mut_dd_87(&lvalue, i);
   24813   }
   24814   Eurydice_arr_bb0 error_1 = arr_struct;
   24815   uint8_t
   24816   domain_separator =
   24817     libcrux_ml_kem_ind_cpa_sample_ring_element_cbd_bf(&prf_input,
   24818       domain_separator0,
   24819       &error_1);
   24820   prf_input.data[32U] = domain_separator;
   24821   Eurydice_arr_89
   24822   prf_output =
   24823     libcrux_ml_kem_hash_functions_portable_PRF_4a_3b0(Eurydice_array_to_slice_shared_b5(&prf_input));
   24824   Eurydice_arr_9e
   24825   error_2 =
   24826     libcrux_ml_kem_sampling_sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_output));
   24827   Eurydice_arr_bb0 u = libcrux_ml_kem_matrix_compute_vector_u_68(matrix, &r_as_ntt, &error_1);
   24828   libcrux_ml_kem_ind_cpa_compress_then_serialize_u_21(u, ciphertext);
   24829   return (KRML_CLITERAL(tuple_c6){ .fst = r_as_ntt, .snd = error_2 });
   24830 }
   24831 
   24832 /**
   24833 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_message
   24834 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24835 with const generics
   24836 
   24837 */
   24838 static KRML_MUSTINLINE Eurydice_arr_9e
   24839 libcrux_ml_kem_serialize_deserialize_then_decompress_message_ea(
   24840   const Eurydice_arr_ec *serialized
   24841 )
   24842 {
   24843   Eurydice_arr_9e re = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   24844   for (size_t i = (size_t)0U; i < (size_t)16U; i++)
   24845   {
   24846     size_t i0 = i;
   24847     Eurydice_arr_d6
   24848     coefficient_compressed =
   24849       libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_array_to_subslice_shared_d4(serialized,
   24850           (
   24851             KRML_CLITERAL(core_ops_range_Range_87){
   24852               .start = (size_t)2U * i0,
   24853               .end = (size_t)2U * i0 + (size_t)2U
   24854             }
   24855           )));
   24856     Eurydice_arr_d6
   24857     uu____0 = libcrux_ml_kem_vector_portable_decompress_1_b8(coefficient_compressed);
   24858     re.data[i0] = uu____0;
   24859   }
   24860   return re;
   24861 }
   24862 
   24863 /**
   24864 A monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce
   24865 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24866 with const generics
   24867 
   24868 */
   24869 static KRML_MUSTINLINE Eurydice_arr_9e
   24870 libcrux_ml_kem_polynomial_add_message_error_reduce_ea(
   24871   const Eurydice_arr_9e *myself,
   24872   const Eurydice_arr_9e *message,
   24873   Eurydice_arr_9e result
   24874 )
   24875 {
   24876   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   24877   {
   24878     size_t i0 = i;
   24879     Eurydice_arr_d6
   24880     coefficient_normal_form =
   24881       libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(result.data[i0],
   24882         1441);
   24883     Eurydice_arr_d6
   24884     sum1 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &message->data[i0]);
   24885     Eurydice_arr_d6 sum2 = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &sum1);
   24886     Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum2);
   24887     result.data[i0] = red;
   24888   }
   24889   return result;
   24890 }
   24891 
   24892 /**
   24893 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   24894 */
   24895 /**
   24896 A monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_d6
   24897 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24898 with const generics
   24899 
   24900 */
   24901 static KRML_MUSTINLINE Eurydice_arr_9e
   24902 libcrux_ml_kem_polynomial_add_message_error_reduce_d6_ea(
   24903   const Eurydice_arr_9e *self,
   24904   const Eurydice_arr_9e *message,
   24905   Eurydice_arr_9e result
   24906 )
   24907 {
   24908   return libcrux_ml_kem_polynomial_add_message_error_reduce_ea(self, message, result);
   24909 }
   24910 
   24911 /**
   24912  Compute InverseNTT(t  r) + e + message
   24913 */
   24914 /**
   24915 A monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v
   24916 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24917 with const generics
   24918 - K= 3
   24919 */
   24920 static KRML_MUSTINLINE Eurydice_arr_9e
   24921 libcrux_ml_kem_matrix_compute_ring_element_v_68(
   24922   const Eurydice_arr_bb0 *t_as_ntt,
   24923   const Eurydice_arr_bb0 *r_as_ntt,
   24924   const Eurydice_arr_9e *error_2,
   24925   const Eurydice_arr_9e *message
   24926 )
   24927 {
   24928   Eurydice_arr_9e result = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   24929   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   24930   {
   24931     size_t i0 = i;
   24932     Eurydice_arr_9e
   24933     product =
   24934       libcrux_ml_kem_polynomial_ntt_multiply_d6_ea(&t_as_ntt->data[i0],
   24935         &r_as_ntt->data[i0]);
   24936     libcrux_ml_kem_polynomial_add_to_ring_element_d6_68(&result, &product);
   24937   }
   24938   libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_68(&result);
   24939   return libcrux_ml_kem_polynomial_add_message_error_reduce_d6_ea(error_2, message, result);
   24940 }
   24941 
   24942 /**
   24943 A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress
   24944 with const generics
   24945 - COEFFICIENT_BITS= 4
   24946 */
   24947 static KRML_MUSTINLINE Eurydice_arr_d6
   24948 libcrux_ml_kem_vector_portable_compress_compress_d1(Eurydice_arr_d6 a)
   24949 {
   24950   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)
   24951   {
   24952     size_t i0 = i;
   24953     int16_t
   24954     uu____0 =
   24955       libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)4,
   24956           libcrux_secrets_int_as_u16_f5(a.data[i0])));
   24957     a.data[i0] = uu____0;
   24958   }
   24959   return a;
   24960 }
   24961 
   24962 /**
   24963 This function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}
   24964 */
   24965 /**
   24966 A monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8
   24967 with const generics
   24968 - COEFFICIENT_BITS= 4
   24969 */
   24970 static inline Eurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_b8_d1(Eurydice_arr_d6 a)
   24971 {
   24972   return libcrux_ml_kem_vector_portable_compress_compress_d1(a);
   24973 }
   24974 
   24975 /**
   24976 A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_4
   24977 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   24978 with const generics
   24979 
   24980 */
   24981 static KRML_MUSTINLINE void
   24982 libcrux_ml_kem_serialize_compress_then_serialize_4_ea(
   24983   Eurydice_arr_9e re,
   24984   Eurydice_mut_borrow_slice_u8 serialized
   24985 )
   24986 {
   24987   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   24988   {
   24989     size_t i0 = i;
   24990     Eurydice_arr_d6
   24991     coefficient =
   24992       libcrux_ml_kem_vector_portable_compress_b8_d1(libcrux_ml_kem_serialize_to_unsigned_field_modulus_ea(re.data[i0]));
   24993     Eurydice_array_u8x8 bytes = libcrux_ml_kem_vector_portable_serialize_4_b8(coefficient);
   24994     Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,
   24995         (
   24996           KRML_CLITERAL(core_ops_range_Range_87){
   24997             .start = (size_t)8U * i0,
   24998             .end = (size_t)8U * i0 + (size_t)8U
   24999           }
   25000         )),
   25001       Eurydice_array_to_slice_shared_6e(&bytes),
   25002       uint8_t);
   25003   }
   25004 }
   25005 
   25006 /**
   25007 A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v
   25008 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25009 with const generics
   25010 - K= 3
   25011 - COMPRESSION_FACTOR= 4
   25012 - OUT_LEN= 128
   25013 */
   25014 static KRML_MUSTINLINE void
   25015 libcrux_ml_kem_serialize_compress_then_serialize_ring_element_v_30(
   25016   Eurydice_arr_9e re,
   25017   Eurydice_mut_borrow_slice_u8 out
   25018 )
   25019 {
   25020   libcrux_ml_kem_serialize_compress_then_serialize_4_ea(re, out);
   25021 }
   25022 
   25023 /**
   25024 A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2
   25025 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25026 with const generics
   25027 - K= 3
   25028 - V_COMPRESSION_FACTOR= 4
   25029 - C2_LEN= 128
   25030 */
   25031 static KRML_MUSTINLINE void
   25032 libcrux_ml_kem_ind_cpa_encrypt_c2_30(
   25033   const Eurydice_arr_bb0 *t_as_ntt,
   25034   const Eurydice_arr_bb0 *r_as_ntt,
   25035   const Eurydice_arr_9e *error_2,
   25036   const Eurydice_arr_ec *message,
   25037   Eurydice_mut_borrow_slice_u8 ciphertext
   25038 )
   25039 {
   25040   Eurydice_arr_9e
   25041   message_as_ring_element =
   25042     libcrux_ml_kem_serialize_deserialize_then_decompress_message_ea(message);
   25043   Eurydice_arr_9e
   25044   v =
   25045     libcrux_ml_kem_matrix_compute_ring_element_v_68(t_as_ntt,
   25046       r_as_ntt,
   25047       error_2,
   25048       &message_as_ring_element);
   25049   libcrux_ml_kem_serialize_compress_then_serialize_ring_element_v_30(v, ciphertext);
   25050 }
   25051 
   25052 /**
   25053  This function implements <strong>Algorithm 13</strong> of the
   25054  NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.
   25055 
   25056  Algorithm 13 is reproduced below:
   25057 
   25058  ```plaintext
   25059  Input: encryption key ek  ^{384k+32}.
   25060  Input: message m  ^{32}.
   25061  Input: encryption randomness r  ^{32}.
   25062  Output: ciphertext c  ^{32(dk + d)}.
   25063 
   25064  N  0
   25065  t  ByteDecode(ek[0:384k])
   25066    ek[384k: 384k + 32]
   25067  for (i  0; i < k; i++)
   25068      for(j  0; j < k; j++)
   25069          [i,j]  SampleNTT(XOF(, i, j))
   25070      end for
   25071  end for
   25072  for(i  0; i < k; i++)
   25073      r[i]  SamplePolyCBD_{}(PRF_{}(r,N))
   25074      N  N + 1
   25075  end for
   25076  for(i  0; i < k; i++)
   25077      e[i]  SamplePolyCBD_{}(PRF_{}(r,N))
   25078      N  N + 1
   25079  end for
   25080  e  SamplePolyCBD_{}(PRF_{}(r,N))
   25081  r  NTT(r)
   25082  u  NTT-(  r) + e
   25083    Decompress(ByteDecode(m)))
   25084  v  NTT-(t  r) + e + 
   25085  c  ByteEncode_{d}(Compress_{d}(u))
   25086  c  ByteEncode_{d}(Compress_{d}(v))
   25087  return c  (c  c)
   25088  ```
   25089 
   25090  The NIST FIPS 203 standard can be found at
   25091  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   25092 */
   25093 /**
   25094 A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked
   25095 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   25096 with const generics
   25097 - K= 3
   25098 - CIPHERTEXT_SIZE= 1088
   25099 - T_AS_NTT_ENCODED_SIZE= 1152
   25100 - C1_LEN= 960
   25101 - C2_LEN= 128
   25102 - U_COMPRESSION_FACTOR= 10
   25103 - V_COMPRESSION_FACTOR= 4
   25104 - BLOCK_LEN= 320
   25105 - ETA1= 2
   25106 - ETA1_RANDOMNESS_SIZE= 128
   25107 - ETA2= 2
   25108 - ETA2_RANDOMNESS_SIZE= 128
   25109 */
   25110 static KRML_MUSTINLINE Eurydice_arr_2b
   25111 libcrux_ml_kem_ind_cpa_encrypt_unpacked_d5(
   25112   const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key,
   25113   const Eurydice_arr_ec *message,
   25114   Eurydice_borrow_slice_u8 randomness
   25115 )
   25116 {
   25117   Eurydice_arr_2b ciphertext = { .data = { 0U } };
   25118   tuple_c6
   25119   uu____0 =
   25120     libcrux_ml_kem_ind_cpa_encrypt_c1_87(randomness,
   25121       &public_key->A,
   25122       Eurydice_array_to_subslice_mut_d414(&ciphertext,
   25123         (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)960U })));
   25124   Eurydice_arr_bb0 r_as_ntt = uu____0.fst;
   25125   Eurydice_arr_9e error_2 = uu____0.snd;
   25126   libcrux_ml_kem_ind_cpa_encrypt_c2_30(&public_key->t_as_ntt,
   25127     &r_as_ntt,
   25128     &error_2,
   25129     message,
   25130     Eurydice_array_to_subslice_from_mut_5f3(&ciphertext, (size_t)960U));
   25131   return ciphertext;
   25132 }
   25133 
   25134 /**
   25135 A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt
   25136 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   25137 with const generics
   25138 - K= 3
   25139 - CIPHERTEXT_SIZE= 1088
   25140 - T_AS_NTT_ENCODED_SIZE= 1152
   25141 - C1_LEN= 960
   25142 - C2_LEN= 128
   25143 - U_COMPRESSION_FACTOR= 10
   25144 - V_COMPRESSION_FACTOR= 4
   25145 - BLOCK_LEN= 320
   25146 - ETA1= 2
   25147 - ETA1_RANDOMNESS_SIZE= 128
   25148 - ETA2= 2
   25149 - ETA2_RANDOMNESS_SIZE= 128
   25150 */
   25151 static KRML_MUSTINLINE Eurydice_arr_2b
   25152 libcrux_ml_kem_ind_cpa_encrypt_d5(
   25153   Eurydice_borrow_slice_u8 public_key,
   25154   const Eurydice_arr_ec *message,
   25155   Eurydice_borrow_slice_u8 randomness
   25156 )
   25157 {
   25158   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51
   25159   unpacked_public_key = libcrux_ml_kem_ind_cpa_build_unpacked_public_key_05(public_key);
   25160   return libcrux_ml_kem_ind_cpa_encrypt_unpacked_d5(&unpacked_public_key, message, randomness);
   25161 }
   25162 
   25163 /**
   25164 This function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}
   25165 */
   25166 /**
   25167 A monomorphic instance of libcrux_ml_kem.variant.kdf_39
   25168 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   25169 with const generics
   25170 - K= 3
   25171 - CIPHERTEXT_SIZE= 1088
   25172 */
   25173 static KRML_MUSTINLINE Eurydice_arr_ec
   25174 libcrux_ml_kem_variant_kdf_39_52(
   25175   Eurydice_borrow_slice_u8 shared_secret,
   25176   const Eurydice_arr_2b *_
   25177 )
   25178 {
   25179   Eurydice_arr_ec out = { .data = { 0U } };
   25180   Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);
   25181   return out;
   25182 }
   25183 
   25184 /**
   25185  This code verifies on some machines, runs out of memory on others
   25186 */
   25187 /**
   25188 A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate
   25189 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem
   25190 with const generics
   25191 - K= 3
   25192 - SECRET_KEY_SIZE= 2400
   25193 - CPA_SECRET_KEY_SIZE= 1152
   25194 - PUBLIC_KEY_SIZE= 1184
   25195 - CIPHERTEXT_SIZE= 1088
   25196 - T_AS_NTT_ENCODED_SIZE= 1152
   25197 - C1_SIZE= 960
   25198 - C2_SIZE= 128
   25199 - VECTOR_U_COMPRESSION_FACTOR= 10
   25200 - VECTOR_V_COMPRESSION_FACTOR= 4
   25201 - C1_BLOCK_SIZE= 320
   25202 - ETA1= 2
   25203 - ETA1_RANDOMNESS_SIZE= 128
   25204 - ETA2= 2
   25205 - ETA2_RANDOMNESS_SIZE= 128
   25206 - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
   25207 */
   25208 static KRML_MUSTINLINE Eurydice_arr_ec
   25209 libcrux_ml_kem_ind_cca_decapsulate_fd(
   25210   const Eurydice_arr_7d *private_key,
   25211   const Eurydice_arr_2b *ciphertext
   25212 )
   25213 {
   25214   Eurydice_borrow_slice_u8_x4
   25215   uu____0 =
   25216     libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_shared_51(private_key));
   25217   Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;
   25218   Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;
   25219   Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;
   25220   Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;
   25221   Eurydice_arr_ec decrypted = libcrux_ml_kem_ind_cpa_decrypt_01(ind_cpa_secret_key, ciphertext);
   25222   Eurydice_arr_c7
   25223   to_hash0 =
   25224     libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));
   25225   Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f1(&to_hash0,
   25226       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),
   25227     ind_cpa_public_key_hash,
   25228     uint8_t);
   25229   Eurydice_arr_c7
   25230   hashed =
   25231     libcrux_ml_kem_hash_functions_portable_G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash0));
   25232   Eurydice_borrow_slice_u8_x2
   25233   uu____1 =
   25234     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),
   25235       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
   25236       uint8_t,
   25237       Eurydice_borrow_slice_u8_x2);
   25238   Eurydice_borrow_slice_u8 shared_secret0 = uu____1.fst;
   25239   Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;
   25240   Eurydice_arr_af to_hash = libcrux_ml_kem_utils_into_padded_array_66(implicit_rejection_value);
   25241   Eurydice_mut_borrow_slice_u8
   25242   uu____2 =
   25243     Eurydice_array_to_subslice_from_mut_5f2(&to_hash,
   25244       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);
   25245   Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);
   25246   Eurydice_arr_ec
   25247   implicit_rejection_shared_secret =
   25248     libcrux_ml_kem_hash_functions_portable_PRF_4a_3b(Eurydice_array_to_slice_shared_81(&to_hash));
   25249   Eurydice_arr_2b
   25250   expected_ciphertext =
   25251     libcrux_ml_kem_ind_cpa_encrypt_d5(ind_cpa_public_key,
   25252       &decrypted,
   25253       pseudorandomness);
   25254   Eurydice_borrow_slice_u8
   25255   uu____3 = Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret);
   25256   Eurydice_arr_ec
   25257   implicit_rejection_shared_secret0 =
   25258     libcrux_ml_kem_variant_kdf_39_52(uu____3,
   25259       libcrux_ml_kem_types_as_slice_a9_52(ciphertext));
   25260   Eurydice_arr_ec
   25261   shared_secret =
   25262     libcrux_ml_kem_variant_kdf_39_52(shared_secret0,
   25263       libcrux_ml_kem_types_as_slice_a9_52(ciphertext));
   25264   Eurydice_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);
   25265   return
   25266     libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,
   25267       Eurydice_array_to_slice_shared_06(&expected_ciphertext),
   25268       Eurydice_array_to_slice_shared_01(&shared_secret),
   25269       Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret0));
   25270 }
   25271 
   25272 /**
   25273  Portable decapsulate
   25274 */
   25275 /**
   25276 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate
   25277 with const generics
   25278 - K= 3
   25279 - SECRET_KEY_SIZE= 2400
   25280 - CPA_SECRET_KEY_SIZE= 1152
   25281 - PUBLIC_KEY_SIZE= 1184
   25282 - CIPHERTEXT_SIZE= 1088
   25283 - T_AS_NTT_ENCODED_SIZE= 1152
   25284 - C1_SIZE= 960
   25285 - C2_SIZE= 128
   25286 - VECTOR_U_COMPRESSION_FACTOR= 10
   25287 - VECTOR_V_COMPRESSION_FACTOR= 4
   25288 - C1_BLOCK_SIZE= 320
   25289 - ETA1= 2
   25290 - ETA1_RANDOMNESS_SIZE= 128
   25291 - ETA2= 2
   25292 - ETA2_RANDOMNESS_SIZE= 128
   25293 - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
   25294 */
   25295 static inline Eurydice_arr_ec
   25296 libcrux_ml_kem_ind_cca_instantiations_portable_decapsulate_19(
   25297   const Eurydice_arr_7d *private_key,
   25298   const Eurydice_arr_2b *ciphertext
   25299 )
   25300 {
   25301   return libcrux_ml_kem_ind_cca_decapsulate_fd(private_key, ciphertext);
   25302 }
   25303 
   25304 /**
   25305  Decapsulate ML-KEM 768
   25306 
   25307  Generates an [`MlKemSharedSecret`].
   25308  The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].
   25309 */
   25310 static inline Eurydice_arr_ec
   25311 libcrux_ml_kem_mlkem768_portable_decapsulate(
   25312   const Eurydice_arr_7d *private_key,
   25313   const Eurydice_arr_2b *ciphertext
   25314 )
   25315 {
   25316   return libcrux_ml_kem_ind_cca_instantiations_portable_decapsulate_19(private_key, ciphertext);
   25317 }
   25318 
   25319 /**
   25320 This function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}
   25321 */
   25322 /**
   25323 A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39
   25324 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   25325 with const generics
   25326 - K= 3
   25327 */
   25328 static KRML_MUSTINLINE Eurydice_arr_ec
   25329 libcrux_ml_kem_variant_entropy_preprocess_39_13(Eurydice_borrow_slice_u8 randomness)
   25330 {
   25331   Eurydice_arr_ec out = { .data = { 0U } };
   25332   Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);
   25333   return out;
   25334 }
   25335 
   25336 /**
   25337 This function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}
   25338 */
   25339 /**
   25340 A monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a
   25341 with const generics
   25342 - K= 3
   25343 */
   25344 static inline Eurydice_arr_ec
   25345 libcrux_ml_kem_hash_functions_portable_H_4a_78(Eurydice_borrow_slice_u8 input)
   25346 {
   25347   return libcrux_ml_kem_hash_functions_portable_H(input);
   25348 }
   25349 
   25350 /**
   25351 A monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate
   25352 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem
   25353 with const generics
   25354 - K= 3
   25355 - CIPHERTEXT_SIZE= 1088
   25356 - PUBLIC_KEY_SIZE= 1184
   25357 - T_AS_NTT_ENCODED_SIZE= 1152
   25358 - C1_SIZE= 960
   25359 - C2_SIZE= 128
   25360 - VECTOR_U_COMPRESSION_FACTOR= 10
   25361 - VECTOR_V_COMPRESSION_FACTOR= 4
   25362 - C1_BLOCK_SIZE= 320
   25363 - ETA1= 2
   25364 - ETA1_RANDOMNESS_SIZE= 128
   25365 - ETA2= 2
   25366 - ETA2_RANDOMNESS_SIZE= 128
   25367 */
   25368 static KRML_MUSTINLINE tuple_f4
   25369 libcrux_ml_kem_ind_cca_encapsulate_99(
   25370   const Eurydice_arr_5f *public_key,
   25371   const Eurydice_arr_ec *randomness
   25372 )
   25373 {
   25374   Eurydice_arr_ec
   25375   randomness0 =
   25376     libcrux_ml_kem_variant_entropy_preprocess_39_13(Eurydice_array_to_slice_shared_01(randomness));
   25377   Eurydice_arr_c7
   25378   to_hash =
   25379     libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&randomness0));
   25380   Eurydice_mut_borrow_slice_u8
   25381   uu____0 =
   25382     Eurydice_array_to_subslice_from_mut_5f1(&to_hash,
   25383       LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);
   25384   /* original Rust expression is not an lvalue in C */
   25385   Eurydice_arr_ec
   25386   lvalue =
   25387     libcrux_ml_kem_hash_functions_portable_H_4a_78(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));
   25388   Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);
   25389   Eurydice_arr_c7
   25390   hashed =
   25391     libcrux_ml_kem_hash_functions_portable_G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash));
   25392   Eurydice_borrow_slice_u8_x2
   25393   uu____1 =
   25394     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),
   25395       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
   25396       uint8_t,
   25397       Eurydice_borrow_slice_u8_x2);
   25398   Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;
   25399   Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;
   25400   Eurydice_arr_2b
   25401   ciphertext =
   25402     libcrux_ml_kem_ind_cpa_encrypt_d5(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)),
   25403       &randomness0,
   25404       pseudorandomness);
   25405   Eurydice_arr_2b uu____2 = libcrux_ml_kem_types_from_19_52(ciphertext);
   25406   return
   25407     (
   25408       KRML_CLITERAL(tuple_f4){
   25409         .fst = uu____2,
   25410         .snd = libcrux_ml_kem_variant_kdf_39_52(shared_secret, &ciphertext)
   25411       }
   25412     );
   25413 }
   25414 
   25415 /**
   25416 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate
   25417 with const generics
   25418 - K= 3
   25419 - CIPHERTEXT_SIZE= 1088
   25420 - PUBLIC_KEY_SIZE= 1184
   25421 - T_AS_NTT_ENCODED_SIZE= 1152
   25422 - C1_SIZE= 960
   25423 - C2_SIZE= 128
   25424 - VECTOR_U_COMPRESSION_FACTOR= 10
   25425 - VECTOR_V_COMPRESSION_FACTOR= 4
   25426 - C1_BLOCK_SIZE= 320
   25427 - ETA1= 2
   25428 - ETA1_RANDOMNESS_SIZE= 128
   25429 - ETA2= 2
   25430 - ETA2_RANDOMNESS_SIZE= 128
   25431 */
   25432 static inline tuple_f4
   25433 libcrux_ml_kem_ind_cca_instantiations_portable_encapsulate_26(
   25434   const Eurydice_arr_5f *public_key,
   25435   const Eurydice_arr_ec *randomness
   25436 )
   25437 {
   25438   return libcrux_ml_kem_ind_cca_encapsulate_99(public_key, randomness);
   25439 }
   25440 
   25441 /**
   25442  Encapsulate ML-KEM 768
   25443 
   25444  Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.
   25445  The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]
   25446  bytes of `randomness`.
   25447 */
   25448 static inline tuple_f4
   25449 libcrux_ml_kem_mlkem768_portable_encapsulate(
   25450   const Eurydice_arr_5f *public_key,
   25451   Eurydice_arr_ec randomness
   25452 )
   25453 {
   25454   return libcrux_ml_kem_ind_cca_instantiations_portable_encapsulate_26(public_key, &randomness);
   25455 }
   25456 
   25457 /**
   25458 This function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   25459 */
   25460 /**
   25461 A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70
   25462 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25463 with const generics
   25464 - K= 3
   25465 */
   25466 static inline Eurydice_arr_bb0 libcrux_ml_kem_ind_cpa_unpacked_default_70_68(void)
   25467 {
   25468   Eurydice_arr_bb0 lit;
   25469   Eurydice_arr_9e repeat_expression[3U];
   25470   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   25471   {
   25472     repeat_expression[i] = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   25473   }
   25474   memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_9e));
   25475   return lit;
   25476 }
   25477 
   25478 /**
   25479 This function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}
   25480 */
   25481 /**
   25482 A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39
   25483 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   25484 with const generics
   25485 - K= 3
   25486 */
   25487 static KRML_MUSTINLINE Eurydice_arr_c7
   25488 libcrux_ml_kem_variant_cpa_keygen_seed_39_13(Eurydice_borrow_slice_u8 key_generation_seed)
   25489 {
   25490   Eurydice_arr_fa0 seed = { .data = { 0U } };
   25491   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(&seed,
   25492       (
   25493         KRML_CLITERAL(core_ops_range_Range_87){
   25494           .start = (size_t)0U,
   25495           .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE
   25496         }
   25497       )),
   25498     key_generation_seed,
   25499     uint8_t);
   25500   seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)3U;
   25501   return
   25502     libcrux_ml_kem_hash_functions_portable_G_4a_78(Eurydice_array_to_slice_shared_b5(&seed));
   25503 }
   25504 
   25505 /**
   25506 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}
   25507 */
   25508 /**
   25509 A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73
   25510 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem
   25511 with const generics
   25512 - K= 3
   25513 - ETA1= 2
   25514 - ETA1_RANDOMNESS_SIZE= 128
   25515 */
   25516 static inline Eurydice_arr_9e
   25517 libcrux_ml_kem_ind_cpa_generate_keypair_unpacked_call_mut_73_39(void **_, size_t tupled_args)
   25518 {
   25519   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   25520 }
   25521 
   25522 /**
   25523 A monomorphic instance of libcrux_ml_kem.polynomial.to_standard_domain
   25524 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25525 with const generics
   25526 
   25527 */
   25528 static KRML_MUSTINLINE Eurydice_arr_d6
   25529 libcrux_ml_kem_polynomial_to_standard_domain_ea(Eurydice_arr_d6 vector)
   25530 {
   25531   return
   25532     libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(vector,
   25533       LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS);
   25534 }
   25535 
   25536 /**
   25537 A monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce
   25538 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25539 with const generics
   25540 
   25541 */
   25542 static KRML_MUSTINLINE void
   25543 libcrux_ml_kem_polynomial_add_standard_error_reduce_ea(
   25544   Eurydice_arr_9e *myself,
   25545   const Eurydice_arr_9e *error
   25546 )
   25547 {
   25548   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   25549   {
   25550     size_t j = i;
   25551     Eurydice_arr_d6
   25552     coefficient_normal_form = libcrux_ml_kem_polynomial_to_standard_domain_ea(myself->data[j]);
   25553     Eurydice_arr_d6
   25554     sum = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &error->data[j]);
   25555     Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum);
   25556     myself->data[j] = red;
   25557   }
   25558 }
   25559 
   25560 /**
   25561 This function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}
   25562 */
   25563 /**
   25564 A monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_d6
   25565 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25566 with const generics
   25567 
   25568 */
   25569 static KRML_MUSTINLINE void
   25570 libcrux_ml_kem_polynomial_add_standard_error_reduce_d6_ea(
   25571   Eurydice_arr_9e *self,
   25572   const Eurydice_arr_9e *error
   25573 )
   25574 {
   25575   libcrux_ml_kem_polynomial_add_standard_error_reduce_ea(self, error);
   25576 }
   25577 
   25578 /**
   25579  Compute    + 
   25580 */
   25581 /**
   25582 A monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e
   25583 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25584 with const generics
   25585 - K= 3
   25586 */
   25587 static KRML_MUSTINLINE void
   25588 libcrux_ml_kem_matrix_compute_As_plus_e_68(
   25589   Eurydice_arr_bb0 *t_as_ntt,
   25590   const Eurydice_arr_c10 *matrix_A,
   25591   const Eurydice_arr_bb0 *s_as_ntt,
   25592   const Eurydice_arr_bb0 *error_as_ntt
   25593 )
   25594 {
   25595   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   25596   {
   25597     size_t i0 = i;
   25598     const Eurydice_arr_bb0 *row = &matrix_A->data[i0];
   25599     Eurydice_arr_9e uu____0 = libcrux_ml_kem_polynomial_ZERO_d6_ea();
   25600     t_as_ntt->data[i0] = uu____0;
   25601     for (size_t i1 = (size_t)0U; i1 < (size_t)3U; i1++)
   25602     {
   25603       size_t j = i1;
   25604       const Eurydice_arr_9e *matrix_element = &row->data[j];
   25605       Eurydice_arr_9e
   25606       product = libcrux_ml_kem_polynomial_ntt_multiply_d6_ea(matrix_element, &s_as_ntt->data[j]);
   25607       libcrux_ml_kem_polynomial_add_to_ring_element_d6_68(&t_as_ntt->data[i0], &product);
   25608     }
   25609     libcrux_ml_kem_polynomial_add_standard_error_reduce_d6_ea(&t_as_ntt->data[i0],
   25610       &error_as_ntt->data[i0]);
   25611   }
   25612 }
   25613 
   25614 /**
   25615  This function implements most of <strong>Algorithm 12</strong> of the
   25616  NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.
   25617 
   25618  We say "most of" since Algorithm 12 samples the required randomness within
   25619  the function itself, whereas this implementation expects it to be provided
   25620  through the `key_generation_seed` parameter.
   25621 
   25622  Algorithm 12 is reproduced below:
   25623 
   25624  ```plaintext
   25625  Output: encryption key ek  ^{384k+32}.
   25626  Output: decryption key dk  ^{384k}.
   25627 
   25628  d $ B
   25629  (,)  G(d)
   25630  N  0
   25631  for (i  0; i < k; i++)
   25632      for(j  0; j < k; j++)
   25633          [i,j]  SampleNTT(XOF(, i, j))
   25634      end for
   25635  end for
   25636  for(i  0; i < k; i++)
   25637      s[i]  SamplePolyCBD_{}(PRF_{}(,N))
   25638      N  N + 1
   25639  end for
   25640  for(i  0; i < k; i++)
   25641      e[i]  SamplePolyCBD_{}(PRF_{}(,N))
   25642      N  N + 1
   25643  end for
   25644    NTT(s)
   25645    NTT(e)
   25646  t   + 
   25647  ek  ByteEncode(t)  
   25648  dk  ByteEncode()
   25649  ```
   25650 
   25651  The NIST FIPS 203 standard can be found at
   25652  <https://csrc.nist.gov/pubs/fips/203/ipd>.
   25653 */
   25654 /**
   25655 A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked
   25656 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem
   25657 with const generics
   25658 - K= 3
   25659 - ETA1= 2
   25660 - ETA1_RANDOMNESS_SIZE= 128
   25661 */
   25662 static KRML_MUSTINLINE void
   25663 libcrux_ml_kem_ind_cpa_generate_keypair_unpacked_39(
   25664   Eurydice_borrow_slice_u8 key_generation_seed,
   25665   Eurydice_arr_bb0 *private_key,
   25666   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key
   25667 )
   25668 {
   25669   Eurydice_arr_c7 hashed = libcrux_ml_kem_variant_cpa_keygen_seed_39_13(key_generation_seed);
   25670   Eurydice_borrow_slice_u8_x2
   25671   uu____0 =
   25672     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),
   25673       (size_t)32U,
   25674       uint8_t,
   25675       Eurydice_borrow_slice_u8_x2);
   25676   Eurydice_borrow_slice_u8 seed_for_A = uu____0.fst;
   25677   Eurydice_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;
   25678   Eurydice_arr_c10 *uu____1 = &public_key->A;
   25679   /* original Rust expression is not an lvalue in C */
   25680   Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);
   25681   libcrux_ml_kem_matrix_sample_matrix_A_91(uu____1, &lvalue0, true);
   25682   Eurydice_arr_fa0
   25683   prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);
   25684   uint8_t
   25685   domain_separator =
   25686     libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_bf(private_key,
   25687       &prf_input,
   25688       0U);
   25689   Eurydice_arr_bb0 arr_struct;
   25690   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   25691   {
   25692     /* original Rust expression is not an lvalue in C */
   25693     void *lvalue = (void *)0U;
   25694     arr_struct.data[i] =
   25695       libcrux_ml_kem_ind_cpa_generate_keypair_unpacked_call_mut_73_39(&lvalue,
   25696         i);
   25697   }
   25698   Eurydice_arr_bb0 error_as_ntt = arr_struct;
   25699   libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_bf(&error_as_ntt,
   25700     &prf_input,
   25701     domain_separator);
   25702   libcrux_ml_kem_matrix_compute_As_plus_e_68(&public_key->t_as_ntt,
   25703     &public_key->A,
   25704     &private_key[0U],
   25705     &error_as_ntt);
   25706   Eurydice_arr_ec arr;
   25707   memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));
   25708   Eurydice_arr_ec
   25709   uu____2 =
   25710     core_result_unwrap_26_39((
   25711         KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   25712       ));
   25713   public_key->seed_for_A = uu____2;
   25714 }
   25715 
   25716 /**
   25717 A monomorphic instance of libcrux_ml_kem.serialize.serialize_uncompressed_ring_element
   25718 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25719 with const generics
   25720 
   25721 */
   25722 static KRML_MUSTINLINE Eurydice_arr_b20
   25723 libcrux_ml_kem_serialize_serialize_uncompressed_ring_element_ea(const Eurydice_arr_9e *re)
   25724 {
   25725   Eurydice_arr_b20 serialized = { .data = { 0U } };
   25726   for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)
   25727   {
   25728     size_t i0 = i;
   25729     Eurydice_arr_d6
   25730     coefficient = libcrux_ml_kem_serialize_to_unsigned_field_modulus_ea(re->data[i0]);
   25731     Eurydice_arr_94 bytes = libcrux_ml_kem_vector_portable_serialize_12_b8(coefficient);
   25732     Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d415(&serialized,
   25733         (
   25734           KRML_CLITERAL(core_ops_range_Range_87){
   25735             .start = (size_t)24U * i0,
   25736             .end = (size_t)24U * i0 + (size_t)24U
   25737           }
   25738         )),
   25739       Eurydice_array_to_slice_shared_ed(&bytes),
   25740       uint8_t);
   25741   }
   25742   return serialized;
   25743 }
   25744 
   25745 /**
   25746  Call [`serialize_uncompressed_ring_element`] for each ring element.
   25747 */
   25748 /**
   25749 A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector
   25750 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25751 with const generics
   25752 - K= 3
   25753 */
   25754 static KRML_MUSTINLINE void
   25755 libcrux_ml_kem_ind_cpa_serialize_vector_68(
   25756   const Eurydice_arr_bb0 *key,
   25757   Eurydice_mut_borrow_slice_u8 out
   25758 )
   25759 {
   25760   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   25761   {
   25762     size_t i0 = i;
   25763     Eurydice_arr_9e re = key->data[i0];
   25764     Eurydice_mut_borrow_slice_u8
   25765     uu____0 =
   25766       Eurydice_slice_subslice_mut_c8(out,
   25767         (
   25768           KRML_CLITERAL(core_ops_range_Range_87){
   25769             .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
   25770             .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT
   25771           }
   25772         ));
   25773     /* original Rust expression is not an lvalue in C */
   25774     Eurydice_arr_b20 lvalue = libcrux_ml_kem_serialize_serialize_uncompressed_ring_element_ea(&re);
   25775     Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_a9(&lvalue), uint8_t);
   25776   }
   25777 }
   25778 
   25779 /**
   25780  Concatenate `t` and `` into the public key.
   25781 */
   25782 /**
   25783 A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut
   25784 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25785 with const generics
   25786 - K= 3
   25787 - PUBLIC_KEY_SIZE= 1184
   25788 */
   25789 static KRML_MUSTINLINE void
   25790 libcrux_ml_kem_ind_cpa_serialize_public_key_mut_b6(
   25791   const Eurydice_arr_bb0 *t_as_ntt,
   25792   Eurydice_borrow_slice_u8 seed_for_a,
   25793   Eurydice_arr_5f *serialized
   25794 )
   25795 {
   25796   libcrux_ml_kem_ind_cpa_serialize_vector_68(t_as_ntt,
   25797     Eurydice_array_to_subslice_mut_d416(serialized,
   25798       (
   25799         KRML_CLITERAL(core_ops_range_Range_87){
   25800           .start = (size_t)0U,
   25801           .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)
   25802         }
   25803       )));
   25804   Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f4(serialized,
   25805       libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)),
   25806     seed_for_a,
   25807     uint8_t);
   25808 }
   25809 
   25810 /**
   25811  Concatenate `t` and `` into the public key.
   25812 */
   25813 /**
   25814 A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key
   25815 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25816 with const generics
   25817 - K= 3
   25818 - PUBLIC_KEY_SIZE= 1184
   25819 */
   25820 static KRML_MUSTINLINE Eurydice_arr_5f
   25821 libcrux_ml_kem_ind_cpa_serialize_public_key_b6(
   25822   const Eurydice_arr_bb0 *t_as_ntt,
   25823   Eurydice_borrow_slice_u8 seed_for_a
   25824 )
   25825 {
   25826   Eurydice_arr_5f public_key_serialized = { .data = { 0U } };
   25827   libcrux_ml_kem_ind_cpa_serialize_public_key_mut_b6(t_as_ntt,
   25828     seed_for_a,
   25829     &public_key_serialized);
   25830   return public_key_serialized;
   25831 }
   25832 
   25833 /**
   25834  Serialize the secret key from the unpacked key pair generation.
   25835 */
   25836 /**
   25837 A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key
   25838 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   25839 with const generics
   25840 - K= 3
   25841 - PRIVATE_KEY_SIZE= 1152
   25842 - PUBLIC_KEY_SIZE= 1184
   25843 */
   25844 static inline libcrux_ml_kem_utils_extraction_helper_Keypair768
   25845 libcrux_ml_kem_ind_cpa_serialize_unpacked_secret_key_30(
   25846   const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key,
   25847   const Eurydice_arr_bb0 *private_key
   25848 )
   25849 {
   25850   Eurydice_arr_5f
   25851   public_key_serialized =
   25852     libcrux_ml_kem_ind_cpa_serialize_public_key_b6(&public_key->t_as_ntt,
   25853       Eurydice_array_to_slice_shared_01(&public_key->seed_for_A));
   25854   Eurydice_arr_0e secret_key_serialized = { .data = { 0U } };
   25855   libcrux_ml_kem_ind_cpa_serialize_vector_68(private_key,
   25856     Eurydice_array_to_slice_mut_f4(&secret_key_serialized));
   25857   return
   25858     (
   25859       KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair768){
   25860         .fst = secret_key_serialized,
   25861         .snd = public_key_serialized
   25862       }
   25863     );
   25864 }
   25865 
   25866 /**
   25867 A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair
   25868 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem
   25869 with const generics
   25870 - K= 3
   25871 - PRIVATE_KEY_SIZE= 1152
   25872 - PUBLIC_KEY_SIZE= 1184
   25873 - ETA1= 2
   25874 - ETA1_RANDOMNESS_SIZE= 128
   25875 */
   25876 static KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair768
   25877 libcrux_ml_kem_ind_cpa_generate_keypair_30(Eurydice_borrow_slice_u8 key_generation_seed)
   25878 {
   25879   Eurydice_arr_bb0 private_key = libcrux_ml_kem_ind_cpa_unpacked_default_70_68();
   25880   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51
   25881   public_key = libcrux_ml_kem_ind_cpa_unpacked_default_8b_68();
   25882   libcrux_ml_kem_ind_cpa_generate_keypair_unpacked_39(key_generation_seed,
   25883     &private_key,
   25884     &public_key);
   25885   return libcrux_ml_kem_ind_cpa_serialize_unpacked_secret_key_30(&public_key, &private_key);
   25886 }
   25887 
   25888 /**
   25889  Serialize the secret key.
   25890 */
   25891 /**
   25892 A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut
   25893 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   25894 with const generics
   25895 - K= 3
   25896 - SERIALIZED_KEY_LEN= 2400
   25897 */
   25898 static KRML_MUSTINLINE void
   25899 libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(
   25900   Eurydice_borrow_slice_u8 private_key,
   25901   Eurydice_borrow_slice_u8 public_key,
   25902   Eurydice_borrow_slice_u8 implicit_rejection_value,
   25903   Eurydice_arr_7d *serialized
   25904 )
   25905 {
   25906   size_t pointer = (size_t)0U;
   25907   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d417(serialized,
   25908       (
   25909         KRML_CLITERAL(core_ops_range_Range_87){
   25910           .start = pointer,
   25911           .end = pointer + private_key.meta
   25912         }
   25913       )),
   25914     private_key,
   25915     uint8_t);
   25916   pointer += private_key.meta;
   25917   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d417(serialized,
   25918       (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),
   25919     public_key,
   25920     uint8_t);
   25921   pointer += public_key.meta;
   25922   Eurydice_mut_borrow_slice_u8
   25923   uu____0 =
   25924     Eurydice_array_to_subslice_mut_d417(serialized,
   25925       (
   25926         KRML_CLITERAL(core_ops_range_Range_87){
   25927           .start = pointer,
   25928           .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE
   25929         }
   25930       ));
   25931   /* original Rust expression is not an lvalue in C */
   25932   Eurydice_arr_ec lvalue = libcrux_ml_kem_hash_functions_portable_H_4a_78(public_key);
   25933   Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);
   25934   pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;
   25935   Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d417(serialized,
   25936       (
   25937         KRML_CLITERAL(core_ops_range_Range_87){
   25938           .start = pointer,
   25939           .end = pointer + implicit_rejection_value.meta
   25940         }
   25941       )),
   25942     implicit_rejection_value,
   25943     uint8_t);
   25944 }
   25945 
   25946 /**
   25947 A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key
   25948 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   25949 with const generics
   25950 - K= 3
   25951 - SERIALIZED_KEY_LEN= 2400
   25952 */
   25953 static KRML_MUSTINLINE Eurydice_arr_7d
   25954 libcrux_ml_kem_ind_cca_serialize_kem_secret_key_52(
   25955   Eurydice_borrow_slice_u8 private_key,
   25956   Eurydice_borrow_slice_u8 public_key,
   25957   Eurydice_borrow_slice_u8 implicit_rejection_value
   25958 )
   25959 {
   25960   Eurydice_arr_7d out = { .data = { 0U } };
   25961   libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(private_key,
   25962     public_key,
   25963     implicit_rejection_value,
   25964     &out);
   25965   return out;
   25966 }
   25967 
   25968 /**
   25969  Packed API
   25970 
   25971  Generate a key pair.
   25972 
   25973  Depending on the `Vector` and `Hasher` used, this requires different hardware
   25974  features
   25975 */
   25976 /**
   25977 A monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair
   25978 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem
   25979 with const generics
   25980 - K= 3
   25981 - CPA_PRIVATE_KEY_SIZE= 1152
   25982 - PRIVATE_KEY_SIZE= 2400
   25983 - PUBLIC_KEY_SIZE= 1184
   25984 - ETA1= 2
   25985 - ETA1_RANDOMNESS_SIZE= 128
   25986 */
   25987 static KRML_MUSTINLINE libcrux_ml_kem_mlkem768_MlKem768KeyPair
   25988 libcrux_ml_kem_ind_cca_generate_keypair_b8(const Eurydice_arr_c7 *randomness)
   25989 {
   25990   Eurydice_borrow_slice_u8
   25991   ind_cpa_keypair_randomness =
   25992     Eurydice_array_to_subslice_shared_d47(randomness,
   25993       (
   25994         KRML_CLITERAL(core_ops_range_Range_87){
   25995           .start = (size_t)0U,
   25996           .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE
   25997         }
   25998       ));
   25999   Eurydice_borrow_slice_u8
   26000   implicit_rejection_value =
   26001     Eurydice_array_to_subslice_from_shared_5f1(randomness,
   26002       LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);
   26003   libcrux_ml_kem_utils_extraction_helper_Keypair768
   26004   uu____0 = libcrux_ml_kem_ind_cpa_generate_keypair_30(ind_cpa_keypair_randomness);
   26005   Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;
   26006   Eurydice_arr_5f public_key = uu____0.snd;
   26007   Eurydice_arr_7d
   26008   secret_key_serialized =
   26009     libcrux_ml_kem_ind_cca_serialize_kem_secret_key_52(Eurydice_array_to_slice_shared_f4(&ind_cpa_private_key),
   26010       Eurydice_array_to_slice_shared_ff(&public_key),
   26011       implicit_rejection_value);
   26012   Eurydice_arr_7d private_key = libcrux_ml_kem_types_from_b2_79(secret_key_serialized);
   26013   return
   26014     libcrux_ml_kem_types_from_17_bc(private_key,
   26015       libcrux_ml_kem_types_from_51_3d(public_key));
   26016 }
   26017 
   26018 /**
   26019  Portable generate key pair.
   26020 */
   26021 /**
   26022 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair
   26023 with const generics
   26024 - K= 3
   26025 - CPA_PRIVATE_KEY_SIZE= 1152
   26026 - PRIVATE_KEY_SIZE= 2400
   26027 - PUBLIC_KEY_SIZE= 1184
   26028 - ETA1= 2
   26029 - ETA1_RANDOMNESS_SIZE= 128
   26030 */
   26031 static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
   26032 libcrux_ml_kem_ind_cca_instantiations_portable_generate_keypair_e9(
   26033   const Eurydice_arr_c7 *randomness
   26034 )
   26035 {
   26036   return libcrux_ml_kem_ind_cca_generate_keypair_b8(randomness);
   26037 }
   26038 
   26039 /**
   26040  Generate ML-KEM 768 Key Pair
   26041 */
   26042 static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
   26043 libcrux_ml_kem_mlkem768_portable_generate_key_pair(Eurydice_arr_c7 randomness)
   26044 {
   26045   return libcrux_ml_kem_ind_cca_instantiations_portable_generate_keypair_e9(&randomness);
   26046 }
   26047 
   26048 /**
   26049  Validate an ML-KEM private key.
   26050 
   26051  This implements the Hash check in 7.3 3.
   26052 */
   26053 /**
   26054 A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only
   26055 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   26056 with const generics
   26057 - K= 3
   26058 - SECRET_KEY_SIZE= 2400
   26059 */
   26060 static KRML_MUSTINLINE bool
   26061 libcrux_ml_kem_ind_cca_validate_private_key_only_52(const Eurydice_arr_7d *private_key)
   26062 {
   26063   Eurydice_arr_ec
   26064   t =
   26065     libcrux_ml_kem_hash_functions_portable_H_4a_78(Eurydice_array_to_subslice_shared_d48(private_key,
   26066         (
   26067           KRML_CLITERAL(core_ops_range_Range_87){
   26068             .start = (size_t)384U * (size_t)3U,
   26069             .end = (size_t)768U * (size_t)3U + (size_t)32U
   26070           }
   26071         )));
   26072   Eurydice_borrow_slice_u8
   26073   expected =
   26074     Eurydice_array_to_subslice_shared_d48(private_key,
   26075       (
   26076         KRML_CLITERAL(core_ops_range_Range_87){
   26077           .start = (size_t)768U * (size_t)3U + (size_t)32U,
   26078           .end = (size_t)768U * (size_t)3U + (size_t)64U
   26079         }
   26080       ));
   26081   return Eurydice_array_eq_slice_shared((size_t)32U, &t, &expected, uint8_t, bool);
   26082 }
   26083 
   26084 /**
   26085  Validate an ML-KEM private key.
   26086 
   26087  This implements the Hash check in 7.3 3.
   26088  Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`
   26089  and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.
   26090 */
   26091 /**
   26092 A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key
   26093 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   26094 with const generics
   26095 - K= 3
   26096 - SECRET_KEY_SIZE= 2400
   26097 - CIPHERTEXT_SIZE= 1088
   26098 */
   26099 static KRML_MUSTINLINE bool
   26100 libcrux_ml_kem_ind_cca_validate_private_key_ba(
   26101   const Eurydice_arr_7d *private_key,
   26102   const Eurydice_arr_2b *_ciphertext
   26103 )
   26104 {
   26105   return libcrux_ml_kem_ind_cca_validate_private_key_only_52(private_key);
   26106 }
   26107 
   26108 /**
   26109  Private key validation
   26110 */
   26111 /**
   26112 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key
   26113 with const generics
   26114 - K= 3
   26115 - SECRET_KEY_SIZE= 2400
   26116 - CIPHERTEXT_SIZE= 1088
   26117 */
   26118 static KRML_MUSTINLINE bool
   26119 libcrux_ml_kem_ind_cca_instantiations_portable_validate_private_key_d3(
   26120   const Eurydice_arr_7d *private_key,
   26121   const Eurydice_arr_2b *ciphertext
   26122 )
   26123 {
   26124   return libcrux_ml_kem_ind_cca_validate_private_key_ba(private_key, ciphertext);
   26125 }
   26126 
   26127 /**
   26128  Validate a private key.
   26129 
   26130  Returns `true` if valid, and `false` otherwise.
   26131 */
   26132 static inline bool
   26133 libcrux_ml_kem_mlkem768_portable_validate_private_key(
   26134   const Eurydice_arr_7d *private_key,
   26135   const Eurydice_arr_2b *ciphertext
   26136 )
   26137 {
   26138   return
   26139     libcrux_ml_kem_ind_cca_instantiations_portable_validate_private_key_d3(private_key,
   26140       ciphertext);
   26141 }
   26142 
   26143 /**
   26144  Private key validation
   26145 */
   26146 /**
   26147 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only
   26148 with const generics
   26149 - K= 3
   26150 - SECRET_KEY_SIZE= 2400
   26151 */
   26152 static KRML_MUSTINLINE bool
   26153 libcrux_ml_kem_ind_cca_instantiations_portable_validate_private_key_only_3b(
   26154   const Eurydice_arr_7d *private_key
   26155 )
   26156 {
   26157   return libcrux_ml_kem_ind_cca_validate_private_key_only_52(private_key);
   26158 }
   26159 
   26160 /**
   26161  Validate the private key only.
   26162 
   26163  Returns `true` if valid, and `false` otherwise.
   26164 */
   26165 static inline bool
   26166 libcrux_ml_kem_mlkem768_portable_validate_private_key_only(const Eurydice_arr_7d *private_key)
   26167 {
   26168   return
   26169     libcrux_ml_kem_ind_cca_instantiations_portable_validate_private_key_only_3b(private_key);
   26170 }
   26171 
   26172 /**
   26173 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}
   26174 */
   26175 /**
   26176 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b
   26177 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26178 with const generics
   26179 - K= 3
   26180 */
   26181 static inline Eurydice_arr_9e
   26182 libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_out_call_mut_0b_68(
   26183   void **_,
   26184   size_t tupled_args
   26185 )
   26186 {
   26187   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   26188 }
   26189 
   26190 /**
   26191  This function deserializes ring elements and reduces the result by the field
   26192  modulus.
   26193 
   26194  This function MUST NOT be used on secret inputs.
   26195 */
   26196 /**
   26197 A monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out
   26198 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26199 with const generics
   26200 - K= 3
   26201 */
   26202 static KRML_MUSTINLINE Eurydice_arr_bb0
   26203 libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_out_68(
   26204   Eurydice_borrow_slice_u8 public_key
   26205 )
   26206 {
   26207   Eurydice_arr_bb0 arr_struct;
   26208   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   26209   {
   26210     /* original Rust expression is not an lvalue in C */
   26211     void *lvalue = (void *)0U;
   26212     arr_struct.data[i] =
   26213       libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_out_call_mut_0b_68(&lvalue,
   26214         i);
   26215   }
   26216   Eurydice_arr_bb0 deserialized_pk = arr_struct;
   26217   libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_68(public_key, &deserialized_pk);
   26218   return deserialized_pk;
   26219 }
   26220 
   26221 /**
   26222  Validate an ML-KEM public key.
   26223 
   26224  This implements the Modulus check in 7.2 2.
   26225  Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the
   26226  `public_key` type.
   26227 */
   26228 /**
   26229 A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key
   26230 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26231 with const generics
   26232 - K= 3
   26233 - PUBLIC_KEY_SIZE= 1184
   26234 */
   26235 static KRML_MUSTINLINE bool
   26236 libcrux_ml_kem_ind_cca_validate_public_key_b6(const Eurydice_arr_5f *public_key)
   26237 {
   26238   Eurydice_arr_bb0
   26239   deserialized_pk =
   26240     libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_out_68(Eurydice_array_to_subslice_to_shared_210(public_key,
   26241         libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));
   26242   Eurydice_arr_5f
   26243   public_key_serialized =
   26244     libcrux_ml_kem_ind_cpa_serialize_public_key_b6(&deserialized_pk,
   26245       Eurydice_array_to_subslice_from_shared_5f2(public_key,
   26246         libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));
   26247   return Eurydice_array_eq((size_t)1184U, public_key, &public_key_serialized, uint8_t);
   26248 }
   26249 
   26250 /**
   26251  Public key validation
   26252 */
   26253 /**
   26254 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key
   26255 with const generics
   26256 - K= 3
   26257 - PUBLIC_KEY_SIZE= 1184
   26258 */
   26259 static KRML_MUSTINLINE bool
   26260 libcrux_ml_kem_ind_cca_instantiations_portable_validate_public_key_3b(
   26261   const Eurydice_arr_5f *public_key
   26262 )
   26263 {
   26264   return libcrux_ml_kem_ind_cca_validate_public_key_b6(public_key);
   26265 }
   26266 
   26267 /**
   26268  Validate a public key.
   26269 
   26270  Returns `true` if valid, and `false` otherwise.
   26271 */
   26272 static inline bool
   26273 libcrux_ml_kem_mlkem768_portable_validate_public_key(const Eurydice_arr_5f *public_key)
   26274 {
   26275   return libcrux_ml_kem_ind_cca_instantiations_portable_validate_public_key_3b(public_key);
   26276 }
   26277 
   26278 /**
   26279 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked
   26280 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26281 with const generics
   26282 - $3size_t
   26283 */
   26284 typedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51_s
   26285 {
   26286   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 ind_cpa_public_key;
   26287   Eurydice_arr_ec public_key_hash;
   26288 }
   26289 libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51;
   26290 
   26291 typedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51
   26292 libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768PublicKeyUnpacked;
   26293 
   26294 /**
   26295 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked
   26296 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26297 with const generics
   26298 - $3size_t
   26299 */
   26300 typedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51_s
   26301 {
   26302   Eurydice_arr_bb0 ind_cpa_private_key;
   26303   Eurydice_arr_ec implicit_rejection_value;
   26304 }
   26305 libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51;
   26306 
   26307 typedef struct libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked_s
   26308 {
   26309   libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51 private_key;
   26310   libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 public_key;
   26311 }
   26312 libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked;
   26313 
   26314 /**
   26315 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate
   26316 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   26317 with const generics
   26318 - K= 3
   26319 - SECRET_KEY_SIZE= 2400
   26320 - CPA_SECRET_KEY_SIZE= 1152
   26321 - PUBLIC_KEY_SIZE= 1184
   26322 - CIPHERTEXT_SIZE= 1088
   26323 - T_AS_NTT_ENCODED_SIZE= 1152
   26324 - C1_SIZE= 960
   26325 - C2_SIZE= 128
   26326 - VECTOR_U_COMPRESSION_FACTOR= 10
   26327 - VECTOR_V_COMPRESSION_FACTOR= 4
   26328 - C1_BLOCK_SIZE= 320
   26329 - ETA1= 2
   26330 - ETA1_RANDOMNESS_SIZE= 128
   26331 - ETA2= 2
   26332 - ETA2_RANDOMNESS_SIZE= 128
   26333 - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
   26334 */
   26335 static KRML_MUSTINLINE Eurydice_arr_ec
   26336 libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(
   26337   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,
   26338   const Eurydice_arr_2b *ciphertext
   26339 )
   26340 {
   26341   Eurydice_arr_ec
   26342   decrypted =
   26343     libcrux_ml_kem_ind_cpa_decrypt_unpacked_01(&key_pair->private_key.ind_cpa_private_key,
   26344       ciphertext);
   26345   Eurydice_arr_c7
   26346   to_hash0 =
   26347     libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));
   26348   Eurydice_mut_borrow_slice_u8
   26349   uu____0 =
   26350     Eurydice_array_to_subslice_from_mut_5f1(&to_hash0,
   26351       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);
   26352   Eurydice_slice_copy(uu____0,
   26353     Eurydice_array_to_slice_shared_01(&key_pair->public_key.public_key_hash),
   26354     uint8_t);
   26355   Eurydice_arr_c7
   26356   hashed =
   26357     libcrux_ml_kem_hash_functions_portable_G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash0));
   26358   Eurydice_borrow_slice_u8_x2
   26359   uu____1 =
   26360     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),
   26361       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
   26362       uint8_t,
   26363       Eurydice_borrow_slice_u8_x2);
   26364   Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;
   26365   Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;
   26366   Eurydice_arr_af
   26367   to_hash =
   26368     libcrux_ml_kem_utils_into_padded_array_66(Eurydice_array_to_slice_shared_01(&key_pair->private_key.implicit_rejection_value));
   26369   Eurydice_mut_borrow_slice_u8
   26370   uu____2 =
   26371     Eurydice_array_to_subslice_from_mut_5f2(&to_hash,
   26372       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);
   26373   Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);
   26374   Eurydice_arr_ec
   26375   implicit_rejection_shared_secret =
   26376     libcrux_ml_kem_hash_functions_portable_PRF_4a_3b(Eurydice_array_to_slice_shared_81(&to_hash));
   26377   Eurydice_arr_2b
   26378   expected_ciphertext =
   26379     libcrux_ml_kem_ind_cpa_encrypt_unpacked_d5(&key_pair->public_key.ind_cpa_public_key,
   26380       &decrypted,
   26381       pseudorandomness);
   26382   Eurydice_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);
   26383   uint8_t
   26384   selector =
   26385     libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,
   26386       Eurydice_array_to_slice_shared_06(&expected_ciphertext));
   26387   return
   26388     libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,
   26389       Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret),
   26390       selector);
   26391 }
   26392 
   26393 /**
   26394  Unpacked decapsulate
   26395 */
   26396 /**
   26397 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.decapsulate
   26398 with const generics
   26399 - K= 3
   26400 - SECRET_KEY_SIZE= 2400
   26401 - CPA_SECRET_KEY_SIZE= 1152
   26402 - PUBLIC_KEY_SIZE= 1184
   26403 - CIPHERTEXT_SIZE= 1088
   26404 - T_AS_NTT_ENCODED_SIZE= 1152
   26405 - C1_SIZE= 960
   26406 - C2_SIZE= 128
   26407 - VECTOR_U_COMPRESSION_FACTOR= 10
   26408 - VECTOR_V_COMPRESSION_FACTOR= 4
   26409 - C1_BLOCK_SIZE= 320
   26410 - ETA1= 2
   26411 - ETA1_RANDOMNESS_SIZE= 128
   26412 - ETA2= 2
   26413 - ETA2_RANDOMNESS_SIZE= 128
   26414 - IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
   26415 */
   26416 static KRML_MUSTINLINE Eurydice_arr_ec
   26417 libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_decapsulate_19(
   26418   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,
   26419   const Eurydice_arr_2b *ciphertext
   26420 )
   26421 {
   26422   return libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(key_pair, ciphertext);
   26423 }
   26424 
   26425 /**
   26426  Decapsulate ML-KEM 768 (unpacked)
   26427 
   26428  Generates an [`MlKemSharedSecret`].
   26429  The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]
   26430  and an [`MlKem768Ciphertext`].
   26431 */
   26432 static inline Eurydice_arr_ec
   26433 libcrux_ml_kem_mlkem768_portable_unpacked_decapsulate(
   26434   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *private_key,
   26435   const Eurydice_arr_2b *ciphertext
   26436 )
   26437 {
   26438   return
   26439     libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_decapsulate_19(private_key,
   26440       ciphertext);
   26441 }
   26442 
   26443 /**
   26444 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare
   26445 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   26446 with const generics
   26447 - K= 3
   26448 */
   26449 static inline Eurydice_arr_c7
   26450 libcrux_ml_kem_ind_cca_unpacked_encaps_prepare_13(
   26451   Eurydice_borrow_slice_u8 randomness,
   26452   Eurydice_borrow_slice_u8 pk_hash
   26453 )
   26454 {
   26455   Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);
   26456   Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f1(&to_hash,
   26457       LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),
   26458     pk_hash,
   26459     uint8_t);
   26460   return
   26461     libcrux_ml_kem_hash_functions_portable_G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash));
   26462 }
   26463 
   26464 /**
   26465 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate
   26466 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
   26467 with const generics
   26468 - K= 3
   26469 - CIPHERTEXT_SIZE= 1088
   26470 - PUBLIC_KEY_SIZE= 1184
   26471 - T_AS_NTT_ENCODED_SIZE= 1152
   26472 - C1_SIZE= 960
   26473 - C2_SIZE= 128
   26474 - VECTOR_U_COMPRESSION_FACTOR= 10
   26475 - VECTOR_V_COMPRESSION_FACTOR= 4
   26476 - VECTOR_U_BLOCK_LEN= 320
   26477 - ETA1= 2
   26478 - ETA1_RANDOMNESS_SIZE= 128
   26479 - ETA2= 2
   26480 - ETA2_RANDOMNESS_SIZE= 128
   26481 */
   26482 static KRML_MUSTINLINE tuple_f4
   26483 libcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(
   26484   const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,
   26485   const Eurydice_arr_ec *randomness
   26486 )
   26487 {
   26488   Eurydice_arr_c7
   26489   hashed =
   26490     libcrux_ml_kem_ind_cca_unpacked_encaps_prepare_13(Eurydice_array_to_slice_shared_01(randomness),
   26491       Eurydice_array_to_slice_shared_01(&public_key->public_key_hash));
   26492   Eurydice_borrow_slice_u8_x2
   26493   uu____0 =
   26494     Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),
   26495       LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
   26496       uint8_t,
   26497       Eurydice_borrow_slice_u8_x2);
   26498   Eurydice_borrow_slice_u8 shared_secret = uu____0.fst;
   26499   Eurydice_borrow_slice_u8 pseudorandomness = uu____0.snd;
   26500   Eurydice_arr_2b
   26501   ciphertext =
   26502     libcrux_ml_kem_ind_cpa_encrypt_unpacked_d5(&public_key->ind_cpa_public_key,
   26503       randomness,
   26504       pseudorandomness);
   26505   Eurydice_arr_ec shared_secret_array = { .data = { 0U } };
   26506   Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),
   26507     shared_secret,
   26508     uint8_t);
   26509   return
   26510     (
   26511       KRML_CLITERAL(tuple_f4){
   26512         .fst = libcrux_ml_kem_types_from_19_52(ciphertext),
   26513         .snd = shared_secret_array
   26514       }
   26515     );
   26516 }
   26517 
   26518 /**
   26519  Unpacked encapsulate
   26520 */
   26521 /**
   26522 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.encapsulate
   26523 with const generics
   26524 - K= 3
   26525 - CIPHERTEXT_SIZE= 1088
   26526 - PUBLIC_KEY_SIZE= 1184
   26527 - T_AS_NTT_ENCODED_SIZE= 1152
   26528 - C1_SIZE= 960
   26529 - C2_SIZE= 128
   26530 - VECTOR_U_COMPRESSION_FACTOR= 10
   26531 - VECTOR_V_COMPRESSION_FACTOR= 4
   26532 - VECTOR_U_BLOCK_LEN= 320
   26533 - ETA1= 2
   26534 - ETA1_RANDOMNESS_SIZE= 128
   26535 - ETA2= 2
   26536 - ETA2_RANDOMNESS_SIZE= 128
   26537 */
   26538 static KRML_MUSTINLINE tuple_f4
   26539 libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_encapsulate_26(
   26540   const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,
   26541   const Eurydice_arr_ec *randomness
   26542 )
   26543 {
   26544   return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(public_key, randomness);
   26545 }
   26546 
   26547 /**
   26548  Encapsulate ML-KEM 768 (unpacked)
   26549 
   26550  Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.
   26551  The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],
   26552  the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.
   26553 */
   26554 static inline tuple_f4
   26555 libcrux_ml_kem_mlkem768_portable_unpacked_encapsulate(
   26556   const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,
   26557   Eurydice_arr_ec randomness
   26558 )
   26559 {
   26560   return
   26561     libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_encapsulate_26(public_key,
   26562       &randomness);
   26563 }
   26564 
   26565 /**
   26566 This function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}
   26567 */
   26568 /**
   26569 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4
   26570 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26571 with const generics
   26572 - K= 3
   26573 */
   26574 static inline Eurydice_arr_9e
   26575 libcrux_ml_kem_ind_cca_unpacked_transpose_a_closure_call_mut_b4_68(
   26576   void **_,
   26577   size_t tupled_args
   26578 )
   26579 {
   26580   return libcrux_ml_kem_polynomial_ZERO_d6_ea();
   26581 }
   26582 
   26583 /**
   26584 This function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}
   26585 */
   26586 /**
   26587 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22
   26588 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26589 with const generics
   26590 - K= 3
   26591 */
   26592 static inline Eurydice_arr_bb0
   26593 libcrux_ml_kem_ind_cca_unpacked_transpose_a_call_mut_22_68(void **_, size_t tupled_args)
   26594 {
   26595   Eurydice_arr_bb0 arr_struct;
   26596   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   26597   {
   26598     /* original Rust expression is not an lvalue in C */
   26599     void *lvalue = (void *)0U;
   26600     arr_struct.data[i] =
   26601       libcrux_ml_kem_ind_cca_unpacked_transpose_a_closure_call_mut_b4_68(&lvalue,
   26602         i);
   26603   }
   26604   return arr_struct;
   26605 }
   26606 
   26607 /**
   26608 This function found in impl {core::clone::Clone for libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]}
   26609 */
   26610 /**
   26611 A monomorphic instance of libcrux_ml_kem.polynomial.clone_c1
   26612 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26613 with const generics
   26614 
   26615 */
   26616 static inline Eurydice_arr_9e
   26617 libcrux_ml_kem_polynomial_clone_c1_ea(const Eurydice_arr_9e *self)
   26618 {
   26619   return
   26620     core_array__core__clone__Clone_for__T__N___clone((size_t)16U,
   26621       self,
   26622       Eurydice_arr_d6,
   26623       Eurydice_arr_9e);
   26624 }
   26625 
   26626 /**
   26627 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a
   26628 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26629 with const generics
   26630 - K= 3
   26631 */
   26632 static inline Eurydice_arr_c10
   26633 libcrux_ml_kem_ind_cca_unpacked_transpose_a_68(Eurydice_arr_c10 ind_cpa_a)
   26634 {
   26635   Eurydice_arr_c10 arr_struct;
   26636   for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   26637   {
   26638     /* original Rust expression is not an lvalue in C */
   26639     void *lvalue = (void *)0U;
   26640     arr_struct.data[i] = libcrux_ml_kem_ind_cca_unpacked_transpose_a_call_mut_22_68(&lvalue, i);
   26641   }
   26642   Eurydice_arr_c10 A = arr_struct;
   26643   for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)
   26644   {
   26645     size_t i1 = i0;
   26646     for (size_t i = (size_t)0U; i < (size_t)3U; i++)
   26647     {
   26648       size_t j = i;
   26649       Eurydice_arr_9e uu____0 = libcrux_ml_kem_polynomial_clone_c1_ea(&ind_cpa_a.data[j].data[i1]);
   26650       A.data[i1].data[j] = uu____0;
   26651     }
   26652   }
   26653   return A;
   26654 }
   26655 
   26656 /**
   26657  Generate Unpacked Keys
   26658 */
   26659 /**
   26660 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair
   26661 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem
   26662 with const generics
   26663 - K= 3
   26664 - CPA_PRIVATE_KEY_SIZE= 1152
   26665 - PRIVATE_KEY_SIZE= 2400
   26666 - PUBLIC_KEY_SIZE= 1184
   26667 - ETA1= 2
   26668 - ETA1_RANDOMNESS_SIZE= 128
   26669 */
   26670 static KRML_MUSTINLINE void
   26671 libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(
   26672   Eurydice_arr_c7 randomness,
   26673   libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out
   26674 )
   26675 {
   26676   Eurydice_borrow_slice_u8
   26677   ind_cpa_keypair_randomness =
   26678     Eurydice_array_to_subslice_shared_d47(&randomness,
   26679       (
   26680         KRML_CLITERAL(core_ops_range_Range_87){
   26681           .start = (size_t)0U,
   26682           .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE
   26683         }
   26684       ));
   26685   Eurydice_borrow_slice_u8
   26686   implicit_rejection_value =
   26687     Eurydice_array_to_subslice_from_shared_5f1(&randomness,
   26688       LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);
   26689   libcrux_ml_kem_ind_cpa_generate_keypair_unpacked_39(ind_cpa_keypair_randomness,
   26690     &out->private_key.ind_cpa_private_key,
   26691     &out->public_key.ind_cpa_public_key);
   26692   Eurydice_arr_c10
   26693   A = libcrux_ml_kem_ind_cca_unpacked_transpose_a_68(out->public_key.ind_cpa_public_key.A);
   26694   out->public_key.ind_cpa_public_key.A = A;
   26695   Eurydice_arr_5f
   26696   pk_serialized =
   26697     libcrux_ml_kem_ind_cpa_serialize_public_key_b6(&out->public_key.ind_cpa_public_key.t_as_ntt,
   26698       Eurydice_array_to_slice_shared_01(&out->public_key.ind_cpa_public_key.seed_for_A));
   26699   Eurydice_arr_ec
   26700   uu____0 =
   26701     libcrux_ml_kem_hash_functions_portable_H_4a_78(Eurydice_array_to_slice_shared_ff(&pk_serialized));
   26702   out->public_key.public_key_hash = uu____0;
   26703   Eurydice_arr_ec arr;
   26704   memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));
   26705   Eurydice_arr_ec
   26706   uu____1 =
   26707     core_result_unwrap_26_39((
   26708         KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }
   26709       ));
   26710   out->private_key.implicit_rejection_value = uu____1;
   26711 }
   26712 
   26713 /**
   26714  Generate a key pair
   26715 */
   26716 /**
   26717 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.generate_keypair
   26718 with const generics
   26719 - K= 3
   26720 - CPA_PRIVATE_KEY_SIZE= 1152
   26721 - PRIVATE_KEY_SIZE= 2400
   26722 - PUBLIC_KEY_SIZE= 1184
   26723 - ETA1= 2
   26724 - ETA1_RANDOMNESS_SIZE= 128
   26725 */
   26726 static KRML_MUSTINLINE void
   26727 libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_generate_keypair_e9(
   26728   Eurydice_arr_c7 randomness,
   26729   libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out
   26730 )
   26731 {
   26732   libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(randomness, out);
   26733 }
   26734 
   26735 /**
   26736  Generate ML-KEM 768 Key Pair in "unpacked" form.
   26737 */
   26738 static inline void
   26739 libcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(
   26740   Eurydice_arr_c7 randomness,
   26741   libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair
   26742 )
   26743 {
   26744   libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_generate_keypair_e9(randomness,
   26745     key_pair);
   26746 }
   26747 
   26748 /**
   26749 This function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   26750 */
   26751 /**
   26752 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30
   26753 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26754 with const generics
   26755 - K= 3
   26756 */
   26757 static KRML_MUSTINLINE libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51
   26758 libcrux_ml_kem_ind_cca_unpacked_default_30_68(void)
   26759 {
   26760   return
   26761     (
   26762       KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51){
   26763         .ind_cpa_public_key = libcrux_ml_kem_ind_cpa_unpacked_default_8b_68(),
   26764         .public_key_hash = { .data = { 0U } }
   26765       }
   26766     );
   26767 }
   26768 
   26769 /**
   26770 This function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   26771 */
   26772 /**
   26773 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b
   26774 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26775 with const generics
   26776 - K= 3
   26777 */
   26778 static KRML_MUSTINLINE libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked
   26779 libcrux_ml_kem_ind_cca_unpacked_default_7b_68(void)
   26780 {
   26781   libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51
   26782   uu____0 =
   26783     {
   26784       .ind_cpa_private_key = libcrux_ml_kem_ind_cpa_unpacked_default_70_68(),
   26785       .implicit_rejection_value = { .data = { 0U } }
   26786     };
   26787   return
   26788     (
   26789       KRML_CLITERAL(libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked){
   26790         .private_key = uu____0,
   26791         .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_68()
   26792       }
   26793     );
   26794 }
   26795 
   26796 /**
   26797  Generate ML-KEM 768 Key Pair in "unpacked" form.
   26798 */
   26799 static inline libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked
   26800 libcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)
   26801 {
   26802   libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked
   26803   key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_68();
   26804   libcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(randomness, &key_pair);
   26805   return key_pair;
   26806 }
   26807 
   26808 /**
   26809  Create a new, empty unpacked key.
   26810 */
   26811 static inline libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked
   26812 libcrux_ml_kem_mlkem768_portable_unpacked_init_key_pair(void)
   26813 {
   26814   return libcrux_ml_kem_ind_cca_unpacked_default_7b_68();
   26815 }
   26816 
   26817 /**
   26818  Create a new, empty unpacked public key.
   26819 */
   26820 static inline libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51
   26821 libcrux_ml_kem_mlkem768_portable_unpacked_init_public_key(void)
   26822 {
   26823   return libcrux_ml_kem_ind_cca_unpacked_default_30_68();
   26824 }
   26825 
   26826 /**
   26827  Take a serialized private key and generate an unpacked key pair from it.
   26828 */
   26829 /**
   26830 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key
   26831 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26832 with const generics
   26833 - K= 3
   26834 - SECRET_KEY_SIZE= 2400
   26835 - CPA_SECRET_KEY_SIZE= 1152
   26836 - PUBLIC_KEY_SIZE= 1184
   26837 - T_AS_NTT_ENCODED_SIZE= 1152
   26838 */
   26839 static KRML_MUSTINLINE void
   26840 libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(
   26841   const Eurydice_arr_7d *private_key,
   26842   libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair
   26843 )
   26844 {
   26845   Eurydice_borrow_slice_u8_x4
   26846   uu____0 =
   26847     libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_shared_51(private_key));
   26848   Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;
   26849   Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;
   26850   Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;
   26851   Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;
   26852   libcrux_ml_kem_ind_cpa_deserialize_vector_68(ind_cpa_secret_key,
   26853     &key_pair->private_key.ind_cpa_private_key);
   26854   libcrux_ml_kem_ind_cpa_build_unpacked_public_key_mut_05(ind_cpa_public_key,
   26855     &key_pair->public_key.ind_cpa_public_key);
   26856   Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),
   26857     ind_cpa_public_key_hash,
   26858     uint8_t);
   26859   Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),
   26860     implicit_rejection_value,
   26861     uint8_t);
   26862   Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),
   26863     Eurydice_slice_subslice_from_shared_6d(ind_cpa_public_key, (size_t)1152U),
   26864     uint8_t);
   26865 }
   26866 
   26867 /**
   26868  Take a serialized private key and generate an unpacked key pair from it.
   26869 */
   26870 /**
   26871 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.keypair_from_private_key
   26872 with const generics
   26873 - K= 3
   26874 - SECRET_KEY_SIZE= 2400
   26875 - CPA_SECRET_KEY_SIZE= 1152
   26876 - PUBLIC_KEY_SIZE= 1184
   26877 - T_AS_NTT_ENCODED_SIZE= 1152
   26878 */
   26879 static KRML_MUSTINLINE void
   26880 libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_keypair_from_private_key_71(
   26881   const Eurydice_arr_7d *private_key,
   26882   libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair
   26883 )
   26884 {
   26885   libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(private_key, key_pair);
   26886 }
   26887 
   26888 /**
   26889  Get an unpacked key from a private key.
   26890 */
   26891 static inline void
   26892 libcrux_ml_kem_mlkem768_portable_unpacked_key_pair_from_private_mut(
   26893   const Eurydice_arr_7d *private_key,
   26894   libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair
   26895 )
   26896 {
   26897   libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_keypair_from_private_key_71(private_key,
   26898     key_pair);
   26899 }
   26900 
   26901 /**
   26902  Get the serialized private key.
   26903 */
   26904 /**
   26905 This function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   26906 */
   26907 /**
   26908 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11
   26909 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26910 with const generics
   26911 - K= 3
   26912 - CPA_PRIVATE_KEY_SIZE= 1152
   26913 - PRIVATE_KEY_SIZE= 2400
   26914 - PUBLIC_KEY_SIZE= 1184
   26915 */
   26916 static KRML_MUSTINLINE void
   26917 libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(
   26918   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,
   26919   Eurydice_arr_7d *serialized
   26920 )
   26921 {
   26922   libcrux_ml_kem_utils_extraction_helper_Keypair768
   26923   uu____0 =
   26924     libcrux_ml_kem_ind_cpa_serialize_unpacked_secret_key_30(&self->public_key.ind_cpa_public_key,
   26925       &self->private_key.ind_cpa_private_key);
   26926   Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;
   26927   Eurydice_arr_5f ind_cpa_public_key = uu____0.snd;
   26928   libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(Eurydice_array_to_slice_shared_f4(&ind_cpa_private_key),
   26929     Eurydice_array_to_slice_shared_ff(&ind_cpa_public_key),
   26930     Eurydice_array_to_slice_shared_01(&self->private_key.implicit_rejection_value),
   26931     serialized);
   26932 }
   26933 
   26934 /**
   26935  Get the serialized private key.
   26936 */
   26937 /**
   26938 This function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   26939 */
   26940 /**
   26941 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11
   26942 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26943 with const generics
   26944 - K= 3
   26945 - CPA_PRIVATE_KEY_SIZE= 1152
   26946 - PRIVATE_KEY_SIZE= 2400
   26947 - PUBLIC_KEY_SIZE= 1184
   26948 */
   26949 static KRML_MUSTINLINE Eurydice_arr_7d
   26950 libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(
   26951   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self
   26952 )
   26953 {
   26954   Eurydice_arr_7d sk = libcrux_ml_kem_types_default_d3_79();
   26955   libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(self, &sk);
   26956   return sk;
   26957 }
   26958 
   26959 /**
   26960  Get the serialized private key.
   26961 */
   26962 static inline Eurydice_arr_7d
   26963 libcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key(
   26964   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair
   26965 )
   26966 {
   26967   return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(key_pair);
   26968 }
   26969 
   26970 /**
   26971  Get the serialized private key.
   26972 */
   26973 static inline void
   26974 libcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key_mut(
   26975   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,
   26976   Eurydice_arr_7d *serialized
   26977 )
   26978 {
   26979   libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(key_pair, serialized);
   26980 }
   26981 
   26982 /**
   26983  Get the serialized public key.
   26984 */
   26985 /**
   26986 This function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   26987 */
   26988 /**
   26989 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd
   26990 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   26991 with const generics
   26992 - K= 3
   26993 - PUBLIC_KEY_SIZE= 1184
   26994 */
   26995 static KRML_MUSTINLINE Eurydice_arr_5f
   26996 libcrux_ml_kem_ind_cca_unpacked_serialized_dd_b6(
   26997   const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self
   26998 )
   26999 {
   27000   return
   27001     libcrux_ml_kem_types_from_51_3d(libcrux_ml_kem_ind_cpa_serialize_public_key_b6(&self->ind_cpa_public_key.t_as_ntt,
   27002         Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A)));
   27003 }
   27004 
   27005 /**
   27006  Get the serialized public key.
   27007 */
   27008 /**
   27009 This function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   27010 */
   27011 /**
   27012 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11
   27013 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   27014 with const generics
   27015 - K= 3
   27016 - PUBLIC_KEY_SIZE= 1184
   27017 */
   27018 static KRML_MUSTINLINE Eurydice_arr_5f
   27019 libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(
   27020   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self
   27021 )
   27022 {
   27023   return libcrux_ml_kem_ind_cca_unpacked_serialized_dd_b6(&self->public_key);
   27024 }
   27025 
   27026 /**
   27027  Get the serialized public key.
   27028 */
   27029 static inline Eurydice_arr_5f
   27030 libcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key(
   27031   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair
   27032 )
   27033 {
   27034   return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(key_pair);
   27035 }
   27036 
   27037 /**
   27038  Get the serialized public key.
   27039 */
   27040 /**
   27041 This function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   27042 */
   27043 /**
   27044 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd
   27045 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   27046 with const generics
   27047 - K= 3
   27048 - PUBLIC_KEY_SIZE= 1184
   27049 */
   27050 static KRML_MUSTINLINE void
   27051 libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(
   27052   const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self,
   27053   Eurydice_arr_5f *serialized
   27054 )
   27055 {
   27056   libcrux_ml_kem_ind_cpa_serialize_public_key_mut_b6(&self->ind_cpa_public_key.t_as_ntt,
   27057     Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A),
   27058     serialized);
   27059 }
   27060 
   27061 /**
   27062  Get the serialized public key.
   27063 */
   27064 /**
   27065 This function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   27066 */
   27067 /**
   27068 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11
   27069 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   27070 with const generics
   27071 - K= 3
   27072 - PUBLIC_KEY_SIZE= 1184
   27073 */
   27074 static KRML_MUSTINLINE void
   27075 libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(
   27076   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,
   27077   Eurydice_arr_5f *serialized
   27078 )
   27079 {
   27080   libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(&self->public_key, serialized);
   27081 }
   27082 
   27083 /**
   27084  Get the serialized public key.
   27085 */
   27086 static inline void
   27087 libcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key_mut(
   27088   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,
   27089   Eurydice_arr_5f *serialized
   27090 )
   27091 {
   27092   libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(key_pair, serialized);
   27093 }
   27094 
   27095 /**
   27096 This function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}
   27097 */
   27098 /**
   27099 A monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.clone_91
   27100 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   27101 with const generics
   27102 - K= 3
   27103 */
   27104 static inline libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51
   27105 libcrux_ml_kem_ind_cpa_unpacked_clone_91_68(
   27106   const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *self
   27107 )
   27108 {
   27109   Eurydice_arr_bb0
   27110   uu____0 =
   27111     core_array__core__clone__Clone_for__T__N___clone((size_t)3U,
   27112       &self->t_as_ntt,
   27113       Eurydice_arr_9e,
   27114       Eurydice_arr_bb0);
   27115   Eurydice_arr_ec
   27116   uu____1 =
   27117     core_array__core__clone__Clone_for__T__N___clone((size_t)32U,
   27118       &self->seed_for_A,
   27119       uint8_t,
   27120       Eurydice_arr_ec);
   27121   return
   27122     (
   27123       KRML_CLITERAL(libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51){
   27124         .t_as_ntt = uu____0,
   27125         .seed_for_A = uu____1,
   27126         .A = core_array__core__clone__Clone_for__T__N___clone((size_t)3U,
   27127           &self->A,
   27128           Eurydice_arr_bb0,
   27129           Eurydice_arr_c10)
   27130       }
   27131     );
   27132 }
   27133 
   27134 /**
   27135 This function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}
   27136 */
   27137 /**
   27138 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7
   27139 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   27140 with const generics
   27141 - K= 3
   27142 */
   27143 static inline libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51
   27144 libcrux_ml_kem_ind_cca_unpacked_clone_d7_68(
   27145   const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self
   27146 )
   27147 {
   27148   libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51
   27149   uu____0 = libcrux_ml_kem_ind_cpa_unpacked_clone_91_68(&self->ind_cpa_public_key);
   27150   return
   27151     (
   27152       KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51){
   27153         .ind_cpa_public_key = uu____0,
   27154         .public_key_hash = core_array__core__clone__Clone_for__T__N___clone((size_t)32U,
   27155           &self->public_key_hash,
   27156           uint8_t,
   27157           Eurydice_arr_ec)
   27158       }
   27159     );
   27160 }
   27161 
   27162 /**
   27163  Get the serialized public key.
   27164 */
   27165 /**
   27166 This function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}
   27167 */
   27168 /**
   27169 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11
   27170 with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
   27171 with const generics
   27172 - K= 3
   27173 */
   27174 static KRML_MUSTINLINE const
   27175 libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51
   27176 *libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(
   27177   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self
   27178 )
   27179 {
   27180   return &self->public_key;
   27181 }
   27182 
   27183 /**
   27184  Get the unpacked public key.
   27185 */
   27186 static inline void
   27187 libcrux_ml_kem_mlkem768_portable_unpacked_public_key(
   27188   const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,
   27189   libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *pk
   27190 )
   27191 {
   27192   libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51
   27193   uu____0 =
   27194     libcrux_ml_kem_ind_cca_unpacked_clone_d7_68(libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(key_pair));
   27195   pk[0U] = uu____0;
   27196 }
   27197 
   27198 /**
   27199  Get the serialized public key.
   27200 */
   27201 static inline void
   27202 libcrux_ml_kem_mlkem768_portable_unpacked_serialized_public_key(
   27203   const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,
   27204   Eurydice_arr_5f *serialized
   27205 )
   27206 {
   27207   libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(public_key, serialized);
   27208 }
   27209 
   27210 /**
   27211  Generate an unpacked key from a serialized key.
   27212 */
   27213 /**
   27214 A monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key
   27215 with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector
   27216 with const generics
   27217 - K= 3
   27218 - T_AS_NTT_ENCODED_SIZE= 1152
   27219 - PUBLIC_KEY_SIZE= 1184
   27220 */
   27221 static KRML_MUSTINLINE void
   27222 libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(
   27223   const Eurydice_arr_5f *public_key,
   27224   libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key
   27225 )
   27226 {
   27227   Eurydice_borrow_slice_u8
   27228   uu____0 = Eurydice_array_to_subslice_to_shared_210(public_key, (size_t)1152U);
   27229   libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_68(uu____0,
   27230     &unpacked_public_key->ind_cpa_public_key.t_as_ntt);
   27231   unpacked_public_key->ind_cpa_public_key.seed_for_A =
   27232     libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_shared_5f2(public_key,
   27233         (size_t)1152U));
   27234   Eurydice_arr_c10 *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;
   27235   /* original Rust expression is not an lvalue in C */
   27236   Eurydice_arr_31
   27237   lvalue =
   27238     libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_shared_5f2(public_key,
   27239         (size_t)1152U));
   27240   libcrux_ml_kem_matrix_sample_matrix_A_91(uu____2, &lvalue, false);
   27241   Eurydice_arr_ec
   27242   uu____3 =
   27243     libcrux_ml_kem_hash_functions_portable_H_4a_78(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));
   27244   unpacked_public_key->public_key_hash = uu____3;
   27245 }
   27246 
   27247 /**
   27248  Get the unpacked public key.
   27249 */
   27250 /**
   27251 A monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.unpack_public_key
   27252 with const generics
   27253 - K= 3
   27254 - T_AS_NTT_ENCODED_SIZE= 1152
   27255 - PUBLIC_KEY_SIZE= 1184
   27256 */
   27257 static KRML_MUSTINLINE void
   27258 libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_unpack_public_key_d3(
   27259   const Eurydice_arr_5f *public_key,
   27260   libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key
   27261 )
   27262 {
   27263   libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(public_key, unpacked_public_key);
   27264 }
   27265 
   27266 /**
   27267  Get the unpacked public key.
   27268 */
   27269 static inline void
   27270 libcrux_ml_kem_mlkem768_portable_unpacked_unpacked_public_key(
   27271   const Eurydice_arr_5f *public_key,
   27272   libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key
   27273 )
   27274 {
   27275   libcrux_ml_kem_ind_cca_instantiations_portable_unpacked_unpack_public_key_d3(public_key,
   27276     unpacked_public_key);
   27277 }
   27278 
   27279 #if defined(__cplusplus)
   27280 }
   27281 #endif
   27282 
   27283 #define libcrux_mlkem768_portable_H_DEFINED
   27284 #endif /* libcrux_mlkem768_portable_H */
   27285 
   27286 
   27287 /* rename some types to be a bit more ergonomic */
   27288 
   27289 /* ML-KEM 768 */
   27290 typedef Eurydice_arr_c7 libcrux_mlkem768_keypair_rnd;
   27291 typedef Eurydice_arr_ec libcrux_mlkem768_enc_rnd;
   27292 typedef libcrux_ml_kem_mlkem768_MlKem768KeyPair libcrux_mlkem768_keypair;
   27293 typedef Eurydice_arr_5f libcrux_mlkem768_pk;
   27294 typedef Eurydice_arr_7d libcrux_mlkem768_sk;
   27295 typedef Eurydice_arr_2b libcrux_mlkem768_ciphertext;
   27296 typedef tuple_f4 libcrux_mlkem768_enc_result;
   27297 typedef Eurydice_arr_ec libcrux_mlkem768_dec_result;
   27298 /* ML-DSA 44 */
   27299 typedef Eurydice_arr_ec libcrux_mldsa44_keypair_rnd;
   27300 typedef libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair
   27301     libcrux_mldsa44_keypair;
   27302 typedef Eurydice_arr_10 libcrux_mldsa44_sk;
   27303 typedef Eurydice_arr_02 libcrux_mldsa44_pk;
   27304 typedef Eurydice_borrow_slice_u8 libcrux_mldsa44_message;
   27305 typedef Eurydice_arr_ec libcrux_mldsa44_sign_rnd;
   27306 typedef core_result_Result_48 libcrux_mldsa44_sign_result;
   27307 typedef core_result_Result_41 libcrux_mldsa44_verify_result;
   27308 typedef Eurydice_arr_85 libcrux_mldsa44_signature;
   27309 /* ML-DSA 65 */
   27310 typedef Eurydice_arr_ec libcrux_mldsa65_keypair_rnd;
   27311 typedef libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair
   27312     libcrux_mldsa65_keypair;
   27313 typedef Eurydice_arr_24 libcrux_mldsa65_sk;
   27314 typedef Eurydice_arr_29 libcrux_mldsa65_pk;
   27315 typedef Eurydice_borrow_slice_u8 libcrux_mldsa65_message;
   27316 typedef Eurydice_arr_ec libcrux_mldsa65_sign_rnd;
   27317 typedef core_result_Result_8c libcrux_mldsa65_sign_result;
   27318 typedef core_result_Result_41 libcrux_mldsa65_verify_result;
   27319 typedef Eurydice_arr_0c libcrux_mldsa65_signature;
   27320 /* ML-DSA 87 */
   27321 typedef Eurydice_arr_ec libcrux_mldsa87_keypair_rnd;
   27322 typedef libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair
   27323     libcrux_mldsa87_keypair;
   27324 typedef Eurydice_arr_e2 libcrux_mldsa87_sk;
   27325 typedef Eurydice_arr_43 libcrux_mldsa87_pk;
   27326 typedef Eurydice_borrow_slice_u8 libcrux_mldsa87_message;
   27327 typedef Eurydice_arr_ec libcrux_mldsa87_sign_rnd;
   27328 typedef core_result_Result_8b libcrux_mldsa87_sign_result;
   27329 typedef core_result_Result_41 libcrux_mldsa87_verify_result;
   27330 typedef Eurydice_arr_93 libcrux_mldsa87_signature;
   27331 
   27332 #define LIBCRUX_RESULT_OK	core_result_Ok
   27333 
   27334 #ifndef __OpenBSD__
   27335 #define explicit_bzero(a, b) explicit_memset((a), 0, (b))
   27336 #endif
   27337