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