/* * SPDX-FileCopyrightText: 2024 Cryspen Sarl * * SPDX-License-Identifier: MIT or Apache-2.0 * * This code was generated with the following revisions: * Charon: b351338f6a84c7a1afc27433eb0ffdc668b3581d * Eurydice: 7efec1624422fd5e94388ef06b9c76dfe7a48d46 * Karamel: c96fb69d15693284644d6aecaa90afa37e4de8f0 * F*: 58c915a86a2c07c8eca8d9deafd76cb7a91f0eb7 * Libcrux: 6ff01fb3c57ff29ecb59bc62d9dc7fd231060cfb */ #ifndef __internal_libcrux_sha3_internal_H #define __internal_libcrux_sha3_internal_H #if defined(__cplusplus) extern "C" { #endif #include "../libcrux_sha3_internal.h" #include "eurydice_glue.h" typedef libcrux_sha3_generic_keccak_KeccakState_48 libcrux_sha3_portable_KeccakState; /** Create a new SHAKE-128 state object. */ static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48 libcrux_sha3_portable_incremental_shake128_init(void) { return libcrux_sha3_generic_keccak_new_1e_cf(); } /** Absorb */ static KRML_MUSTINLINE void libcrux_sha3_portable_incremental_shake128_absorb_final( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice data0) { Eurydice_slice buf[1U] = { data0 }; libcrux_sha3_generic_keccak_absorb_final_40(s, buf); } /** Squeeze another block */ static KRML_MUSTINLINE void libcrux_sha3_portable_incremental_shake128_squeeze_next_block( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) { Eurydice_slice buf[1U] = { out0 }; libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, buf); } /** A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_three_blocks with types uint64_t with const generics - N= 1 - RATE= 168 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_first_three_blocks_5c( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) { Eurydice_slice_uint8_t_1size_t__x2 uu____0 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U); Eurydice_slice o0[1U]; memcpy(o0, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice o10[1U]; memcpy(o10, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_squeeze_first_block_7b(s, o0); Eurydice_slice_uint8_t_1size_t__x2 uu____1 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(o10, (size_t)168U); Eurydice_slice o1[1U]; memcpy(o1, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice o2[1U]; memcpy(o2, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o1); libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o2); } /** Squeeze three blocks */ static KRML_MUSTINLINE void libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) { Eurydice_slice buf[1U] = { out0 }; libcrux_sha3_generic_keccak_squeeze_first_three_blocks_5c(s, buf); } #define libcrux_sha3_Sha224 0 #define libcrux_sha3_Sha256 1 #define libcrux_sha3_Sha384 2 #define libcrux_sha3_Sha512 3 typedef uint8_t libcrux_sha3_Algorithm; /** Returns the output size of a digest. */ static inline size_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode) { size_t uu____0; switch (mode) { case libcrux_sha3_Sha224: { uu____0 = (size_t)28U; break; } case libcrux_sha3_Sha256: { uu____0 = (size_t)32U; break; } case libcrux_sha3_Sha384: { uu____0 = (size_t)48U; break; } case libcrux_sha3_Sha512: { uu____0 = (size_t)64U; break; } default: { KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__); KRML_HOST_EXIT(253U); } } return uu____0; } static const size_t libcrux_sha3_generic_keccak__PI[24U] = { (size_t)6U, (size_t)12U, (size_t)18U, (size_t)24U, (size_t)3U, (size_t)9U, (size_t)10U, (size_t)16U, (size_t)22U, (size_t)1U, (size_t)7U, (size_t)13U, (size_t)19U, (size_t)20U, (size_t)4U, (size_t)5U, (size_t)11U, (size_t)17U, (size_t)23U, (size_t)2U, (size_t)8U, (size_t)14U, (size_t)15U, (size_t)21U }; static const size_t libcrux_sha3_generic_keccak__ROTC[24U] = { (size_t)1U, (size_t)62U, (size_t)28U, (size_t)27U, (size_t)36U, (size_t)44U, (size_t)6U, (size_t)55U, (size_t)20U, (size_t)3U, (size_t)10U, (size_t)43U, (size_t)25U, (size_t)39U, (size_t)41U, (size_t)45U, (size_t)15U, (size_t)21U, (size_t)8U, (size_t)18U, (size_t)2U, (size_t)61U, (size_t)56U, (size_t)14U }; /** A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_five_blocks with types uint64_t with const generics - N= 1 - RATE= 168 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_first_five_blocks_3e( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) { Eurydice_slice_uint8_t_1size_t__x2 uu____0 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U); Eurydice_slice o0[1U]; memcpy(o0, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice o10[1U]; memcpy(o10, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_squeeze_first_block_7b(s, o0); Eurydice_slice_uint8_t_1size_t__x2 uu____1 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(o10, (size_t)168U); Eurydice_slice o1[1U]; memcpy(o1, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice o20[1U]; memcpy(o20, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o1); Eurydice_slice_uint8_t_1size_t__x2 uu____2 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(o20, (size_t)168U); Eurydice_slice o2[1U]; memcpy(o2, uu____2.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice o30[1U]; memcpy(o30, uu____2.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o2); Eurydice_slice_uint8_t_1size_t__x2 uu____3 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(o30, (size_t)168U); Eurydice_slice o3[1U]; memcpy(o3, uu____3.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice o4[1U]; memcpy(o4, uu____3.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o3); libcrux_sha3_generic_keccak_squeeze_next_block_c2(s, o4); } /** Squeeze five blocks */ static KRML_MUSTINLINE void libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) { Eurydice_slice buf[1U] = { out0 }; libcrux_sha3_generic_keccak_squeeze_first_five_blocks_3e(s, buf); } /** Absorb some data for SHAKE-256 for the last time */ static KRML_MUSTINLINE void libcrux_sha3_portable_incremental_shake256_absorb_final( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice data) { Eurydice_slice buf[1U] = { data }; libcrux_sha3_generic_keccak_absorb_final_400(s, buf); } /** Create a new SHAKE-256 state object. */ static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48 libcrux_sha3_portable_incremental_shake256_init(void) { return libcrux_sha3_generic_keccak_new_1e_cf(); } /** Squeeze the first SHAKE-256 block */ static KRML_MUSTINLINE void libcrux_sha3_portable_incremental_shake256_squeeze_first_block( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out) { Eurydice_slice buf[1U] = { out }; libcrux_sha3_generic_keccak_squeeze_first_block_7b0(s, buf); } /** Squeeze the next SHAKE-256 block */ static KRML_MUSTINLINE void libcrux_sha3_portable_incremental_shake256_squeeze_next_block( libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out) { Eurydice_slice buf[1U] = { out }; libcrux_sha3_generic_keccak_squeeze_next_block_c20(s, buf); } /** A monomorphic instance of libcrux_sha3.generic_keccak.KeccakXofState with types uint64_t with const generics - $1size_t - $136size_t */ typedef struct libcrux_sha3_generic_keccak_KeccakXofState_4f_s { libcrux_sha3_generic_keccak_KeccakState_48 inner; uint8_t buf[1U][136U]; size_t buf_len; bool sponge; } libcrux_sha3_generic_keccak_KeccakXofState_4f; typedef libcrux_sha3_generic_keccak_KeccakXofState_4f libcrux_sha3_portable_incremental_Shake256Absorb; /** Consume the internal buffer and the required amount of the input to pad to `RATE`. Returns the `consumed` bytes from `inputs` if there's enough buffered content to consume, and `0` otherwise. If `consumed > 0` is returned, `self.buf` contains a full block to be loaded. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.fill_buffer_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 136 */ static inline size_t libcrux_sha3_generic_keccak_fill_buffer_9d_15( libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice inputs[1U]) { size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); size_t consumed = (size_t)0U; if (self->buf_len > (size_t)0U) { if (self->buf_len + input_len >= (size_t)136U) { consumed = (size_t)136U - self->buf_len; { size_t i = (size_t)0U; Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( (size_t)136U, self->buf[i], self->buf_len, uint8_t, size_t); Eurydice_slice_copy( uu____0, Eurydice_slice_subslice_to(inputs[i], consumed, uint8_t, size_t), uint8_t); } self->buf_len = self->buf_len + consumed; } } return consumed; } /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.absorb_full_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 136 */ static inline size_t libcrux_sha3_generic_keccak_absorb_full_9d_7a( libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice inputs[1U]) { libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs0[1U]; memcpy(copy_of_inputs0, inputs, (size_t)1U * sizeof(Eurydice_slice)); size_t input_consumed = libcrux_sha3_generic_keccak_fill_buffer_9d_15(uu____0, copy_of_inputs0); if (input_consumed > (size_t)0U) { Eurydice_slice borrowed[1U]; { uint8_t buf[136U] = { 0U }; borrowed[0U] = core_array___Array_T__N__23__as_slice( (size_t)136U, buf, uint8_t, Eurydice_slice); } { size_t i = (size_t)0U; borrowed[i] = Eurydice_array_to_slice((size_t)136U, self->buf[i], uint8_t); } uint64_t(*uu____2)[5U] = self->inner.st; Eurydice_slice uu____3[1U]; memcpy(uu____3, borrowed, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_portable_keccak_load_block_5a_35(uu____2, uu____3); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); self->buf_len = (size_t)0U; } size_t input_to_consume = Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed; size_t num_blocks = input_to_consume / (size_t)136U; size_t remainder = input_to_consume % (size_t)136U; for (size_t i = (size_t)0U; i < num_blocks; i++) { size_t i0 = i; uint64_t(*uu____4)[5U] = self->inner.st; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs[1U]; memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice ret[1U]; libcrux_sha3_portable_keccak_slice_n_5a( copy_of_inputs, input_consumed + i0 * (size_t)136U, (size_t)136U, ret); libcrux_sha3_portable_keccak_load_block_5a_35(uu____4, ret); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); } return remainder; } /** Absorb This function takes any number of bytes to absorb and buffers if it's not enough. The function assumes that all input slices in `blocks` have the same length. Only a multiple of `RATE` blocks are absorbed. For the remaining bytes [`absorb_final`] needs to be called. This works best with relatively small `inputs`. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.absorb_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 136 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_9d_45( libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice inputs[1U]) { libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs[1U]; memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); size_t input_remainder_len = libcrux_sha3_generic_keccak_absorb_full_9d_7a(uu____0, copy_of_inputs); if (input_remainder_len > (size_t)0U) { size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); { size_t i = (size_t)0U; Eurydice_slice uu____2 = Eurydice_array_to_subslice2( self->buf[i], self->buf_len, self->buf_len + input_remainder_len, uint8_t); Eurydice_slice_copy( uu____2, Eurydice_slice_subslice_from( inputs[i], input_len - input_remainder_len, uint8_t, size_t), uint8_t); } self->buf_len = self->buf_len + input_remainder_len; } } /** Shake256 absorb */ /** This function found in impl {(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for libcrux_sha3::portable::incremental::Shake256Absorb)#2} */ static inline void libcrux_sha3_portable_incremental_absorb_7d( libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice input) { Eurydice_slice buf[1U] = { input }; libcrux_sha3_generic_keccak_absorb_9d_45(self, buf); } typedef libcrux_sha3_generic_keccak_KeccakXofState_4f libcrux_sha3_portable_incremental_Shake256Squeeze; /** Absorb a final block. The `inputs` block may be empty. Everything in the `inputs` block beyond `RATE` bytes is ignored. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 136 - DELIMITER= 31 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_9d_b6( libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice inputs[1U]) { libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs[1U]; memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); size_t input_remainder_len = libcrux_sha3_generic_keccak_absorb_full_9d_7a(uu____0, copy_of_inputs); size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); uint8_t blocks[1U][200U] = { { 0U } }; { size_t i = (size_t)0U; if (self->buf_len > (size_t)0U) { Eurydice_slice uu____2 = Eurydice_array_to_subslice2( blocks[i], (size_t)0U, self->buf_len, uint8_t); Eurydice_slice_copy(uu____2, Eurydice_array_to_subslice2(self->buf[i], (size_t)0U, self->buf_len, uint8_t), uint8_t); } if (input_remainder_len > (size_t)0U) { Eurydice_slice uu____3 = Eurydice_array_to_subslice2( blocks[i], self->buf_len, self->buf_len + input_remainder_len, uint8_t); Eurydice_slice_copy( uu____3, Eurydice_slice_subslice_from( inputs[i], input_len - input_remainder_len, uint8_t, size_t), uint8_t); } blocks[i][self->buf_len + input_remainder_len] = 31U; size_t uu____4 = i; size_t uu____5 = (size_t)136U - (size_t)1U; blocks[uu____4][uu____5] = (uint32_t)blocks[uu____4][uu____5] | 128U; } uint64_t(*uu____6)[5U] = self->inner.st; uint8_t uu____7[1U][200U]; memcpy(uu____7, blocks, (size_t)1U * sizeof(uint8_t[200U])); libcrux_sha3_portable_keccak_load_block_full_5a_050(uu____6, uu____7); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); } /** Shake256 absorb final */ /** This function found in impl {(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for libcrux_sha3::portable::incremental::Shake256Absorb)#2} */ static inline libcrux_sha3_generic_keccak_KeccakXofState_4f libcrux_sha3_portable_incremental_absorb_final_7d( libcrux_sha3_generic_keccak_KeccakXofState_4f self, Eurydice_slice input) { Eurydice_slice buf[1U] = { input }; libcrux_sha3_generic_keccak_absorb_final_9d_b6(&self, buf); return self; } /** An all zero block */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.zero_block_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 136 */ static inline void libcrux_sha3_generic_keccak_zero_block_9d_5e( uint8_t ret[136U]) { ret[0U] = 0U; ret[1U] = 0U; ret[2U] = 0U; ret[3U] = 0U; ret[4U] = 0U; ret[5U] = 0U; ret[6U] = 0U; ret[7U] = 0U; ret[8U] = 0U; ret[9U] = 0U; ret[10U] = 0U; ret[11U] = 0U; ret[12U] = 0U; ret[13U] = 0U; ret[14U] = 0U; ret[15U] = 0U; ret[16U] = 0U; ret[17U] = 0U; ret[18U] = 0U; ret[19U] = 0U; ret[20U] = 0U; ret[21U] = 0U; ret[22U] = 0U; ret[23U] = 0U; ret[24U] = 0U; ret[25U] = 0U; ret[26U] = 0U; ret[27U] = 0U; ret[28U] = 0U; ret[29U] = 0U; ret[30U] = 0U; ret[31U] = 0U; ret[32U] = 0U; ret[33U] = 0U; ret[34U] = 0U; ret[35U] = 0U; ret[36U] = 0U; ret[37U] = 0U; ret[38U] = 0U; ret[39U] = 0U; ret[40U] = 0U; ret[41U] = 0U; ret[42U] = 0U; ret[43U] = 0U; ret[44U] = 0U; ret[45U] = 0U; ret[46U] = 0U; ret[47U] = 0U; ret[48U] = 0U; ret[49U] = 0U; ret[50U] = 0U; ret[51U] = 0U; ret[52U] = 0U; ret[53U] = 0U; ret[54U] = 0U; ret[55U] = 0U; ret[56U] = 0U; ret[57U] = 0U; ret[58U] = 0U; ret[59U] = 0U; ret[60U] = 0U; ret[61U] = 0U; ret[62U] = 0U; ret[63U] = 0U; ret[64U] = 0U; ret[65U] = 0U; ret[66U] = 0U; ret[67U] = 0U; ret[68U] = 0U; ret[69U] = 0U; ret[70U] = 0U; ret[71U] = 0U; ret[72U] = 0U; ret[73U] = 0U; ret[74U] = 0U; ret[75U] = 0U; ret[76U] = 0U; ret[77U] = 0U; ret[78U] = 0U; ret[79U] = 0U; ret[80U] = 0U; ret[81U] = 0U; ret[82U] = 0U; ret[83U] = 0U; ret[84U] = 0U; ret[85U] = 0U; ret[86U] = 0U; ret[87U] = 0U; ret[88U] = 0U; ret[89U] = 0U; ret[90U] = 0U; ret[91U] = 0U; ret[92U] = 0U; ret[93U] = 0U; ret[94U] = 0U; ret[95U] = 0U; ret[96U] = 0U; ret[97U] = 0U; ret[98U] = 0U; ret[99U] = 0U; ret[100U] = 0U; ret[101U] = 0U; ret[102U] = 0U; ret[103U] = 0U; ret[104U] = 0U; ret[105U] = 0U; ret[106U] = 0U; ret[107U] = 0U; ret[108U] = 0U; ret[109U] = 0U; ret[110U] = 0U; ret[111U] = 0U; ret[112U] = 0U; ret[113U] = 0U; ret[114U] = 0U; ret[115U] = 0U; ret[116U] = 0U; ret[117U] = 0U; ret[118U] = 0U; ret[119U] = 0U; ret[120U] = 0U; ret[121U] = 0U; ret[122U] = 0U; ret[123U] = 0U; ret[124U] = 0U; ret[125U] = 0U; ret[126U] = 0U; ret[127U] = 0U; ret[128U] = 0U; ret[129U] = 0U; ret[130U] = 0U; ret[131U] = 0U; ret[132U] = 0U; ret[133U] = 0U; ret[134U] = 0U; ret[135U] = 0U; } /** Generate a new keccak xof state. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.new_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 136 */ static inline libcrux_sha3_generic_keccak_KeccakXofState_4f libcrux_sha3_generic_keccak_new_9d_47(void) { libcrux_sha3_generic_keccak_KeccakXofState_4f lit; lit.inner = libcrux_sha3_generic_keccak_new_1e_cf(); uint8_t ret[136U]; libcrux_sha3_generic_keccak_zero_block_9d_5e(ret); memcpy(lit.buf[0U], ret, (size_t)136U * sizeof(uint8_t)); lit.buf_len = (size_t)0U; lit.sponge = false; return lit; } /** Shake256 new state */ /** This function found in impl {(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for libcrux_sha3::portable::incremental::Shake256Absorb)#2} */ static inline libcrux_sha3_generic_keccak_KeccakXofState_4f libcrux_sha3_portable_incremental_new_7d(void) { return libcrux_sha3_generic_keccak_new_9d_47(); } /** A monomorphic instance of libcrux_sha3.generic_keccak.KeccakXofState with types uint64_t with const generics - $1size_t - $168size_t */ typedef struct libcrux_sha3_generic_keccak_KeccakXofState_78_s { libcrux_sha3_generic_keccak_KeccakState_48 inner; uint8_t buf[1U][168U]; size_t buf_len; bool sponge; } libcrux_sha3_generic_keccak_KeccakXofState_78; typedef libcrux_sha3_generic_keccak_KeccakXofState_78 libcrux_sha3_portable_incremental_Shake128Absorb; /** Consume the internal buffer and the required amount of the input to pad to `RATE`. Returns the `consumed` bytes from `inputs` if there's enough buffered content to consume, and `0` otherwise. If `consumed > 0` is returned, `self.buf` contains a full block to be loaded. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.fill_buffer_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 168 */ static inline size_t libcrux_sha3_generic_keccak_fill_buffer_9d_150( libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice inputs[1U]) { size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); size_t consumed = (size_t)0U; if (self->buf_len > (size_t)0U) { if (self->buf_len + input_len >= (size_t)168U) { consumed = (size_t)168U - self->buf_len; { size_t i = (size_t)0U; Eurydice_slice uu____0 = Eurydice_array_to_subslice_from( (size_t)168U, self->buf[i], self->buf_len, uint8_t, size_t); Eurydice_slice_copy( uu____0, Eurydice_slice_subslice_to(inputs[i], consumed, uint8_t, size_t), uint8_t); } self->buf_len = self->buf_len + consumed; } } return consumed; } /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.absorb_full_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 168 */ static inline size_t libcrux_sha3_generic_keccak_absorb_full_9d_7a0( libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice inputs[1U]) { libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs0[1U]; memcpy(copy_of_inputs0, inputs, (size_t)1U * sizeof(Eurydice_slice)); size_t input_consumed = libcrux_sha3_generic_keccak_fill_buffer_9d_150(uu____0, copy_of_inputs0); if (input_consumed > (size_t)0U) { Eurydice_slice borrowed[1U]; { uint8_t buf[168U] = { 0U }; borrowed[0U] = core_array___Array_T__N__23__as_slice( (size_t)168U, buf, uint8_t, Eurydice_slice); } { size_t i = (size_t)0U; borrowed[i] = Eurydice_array_to_slice((size_t)168U, self->buf[i], uint8_t); } uint64_t(*uu____2)[5U] = self->inner.st; Eurydice_slice uu____3[1U]; memcpy(uu____3, borrowed, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_portable_keccak_load_block_5a_350(uu____2, uu____3); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); self->buf_len = (size_t)0U; } size_t input_to_consume = Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed; size_t num_blocks = input_to_consume / (size_t)168U; size_t remainder = input_to_consume % (size_t)168U; for (size_t i = (size_t)0U; i < num_blocks; i++) { size_t i0 = i; uint64_t(*uu____4)[5U] = self->inner.st; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs[1U]; memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice ret[1U]; libcrux_sha3_portable_keccak_slice_n_5a( copy_of_inputs, input_consumed + i0 * (size_t)168U, (size_t)168U, ret); libcrux_sha3_portable_keccak_load_block_5a_350(uu____4, ret); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); } return remainder; } /** Absorb This function takes any number of bytes to absorb and buffers if it's not enough. The function assumes that all input slices in `blocks` have the same length. Only a multiple of `RATE` blocks are absorbed. For the remaining bytes [`absorb_final`] needs to be called. This works best with relatively small `inputs`. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.absorb_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 168 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_9d_450( libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice inputs[1U]) { libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs[1U]; memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); size_t input_remainder_len = libcrux_sha3_generic_keccak_absorb_full_9d_7a0(uu____0, copy_of_inputs); if (input_remainder_len > (size_t)0U) { size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); { size_t i = (size_t)0U; Eurydice_slice uu____2 = Eurydice_array_to_subslice2( self->buf[i], self->buf_len, self->buf_len + input_remainder_len, uint8_t); Eurydice_slice_copy( uu____2, Eurydice_slice_subslice_from( inputs[i], input_len - input_remainder_len, uint8_t, size_t), uint8_t); } self->buf_len = self->buf_len + input_remainder_len; } } /** This function found in impl {(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for libcrux_sha3::portable::incremental::Shake128Absorb)} */ static inline void libcrux_sha3_portable_incremental_absorb_1c( libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice input) { Eurydice_slice buf[1U] = { input }; libcrux_sha3_generic_keccak_absorb_9d_450(self, buf); } typedef libcrux_sha3_generic_keccak_KeccakXofState_78 libcrux_sha3_portable_incremental_Shake128Squeeze; /** Absorb a final block. The `inputs` block may be empty. Everything in the `inputs` block beyond `RATE` bytes is ignored. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 168 - DELIMITER= 31 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_9d_b60( libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice inputs[1U]) { libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self; /* Passing arrays by value in Rust generates a copy in C */ Eurydice_slice copy_of_inputs[1U]; memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice)); size_t input_remainder_len = libcrux_sha3_generic_keccak_absorb_full_9d_7a0(uu____0, copy_of_inputs); size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t); uint8_t blocks[1U][200U] = { { 0U } }; { size_t i = (size_t)0U; if (self->buf_len > (size_t)0U) { Eurydice_slice uu____2 = Eurydice_array_to_subslice2( blocks[i], (size_t)0U, self->buf_len, uint8_t); Eurydice_slice_copy(uu____2, Eurydice_array_to_subslice2(self->buf[i], (size_t)0U, self->buf_len, uint8_t), uint8_t); } if (input_remainder_len > (size_t)0U) { Eurydice_slice uu____3 = Eurydice_array_to_subslice2( blocks[i], self->buf_len, self->buf_len + input_remainder_len, uint8_t); Eurydice_slice_copy( uu____3, Eurydice_slice_subslice_from( inputs[i], input_len - input_remainder_len, uint8_t, size_t), uint8_t); } blocks[i][self->buf_len + input_remainder_len] = 31U; size_t uu____4 = i; size_t uu____5 = (size_t)168U - (size_t)1U; blocks[uu____4][uu____5] = (uint32_t)blocks[uu____4][uu____5] | 128U; } uint64_t(*uu____6)[5U] = self->inner.st; uint8_t uu____7[1U][200U]; memcpy(uu____7, blocks, (size_t)1U * sizeof(uint8_t[200U])); libcrux_sha3_portable_keccak_load_block_full_5a_05(uu____6, uu____7); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); } /** This function found in impl {(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for libcrux_sha3::portable::incremental::Shake128Absorb)} */ static inline libcrux_sha3_generic_keccak_KeccakXofState_78 libcrux_sha3_portable_incremental_absorb_final_1c( libcrux_sha3_generic_keccak_KeccakXofState_78 self, Eurydice_slice input) { Eurydice_slice buf[1U] = { input }; libcrux_sha3_generic_keccak_absorb_final_9d_b60(&self, buf); return self; } /** An all zero block */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.zero_block_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 168 */ static inline void libcrux_sha3_generic_keccak_zero_block_9d_5e0( uint8_t ret[168U]) { ret[0U] = 0U; ret[1U] = 0U; ret[2U] = 0U; ret[3U] = 0U; ret[4U] = 0U; ret[5U] = 0U; ret[6U] = 0U; ret[7U] = 0U; ret[8U] = 0U; ret[9U] = 0U; ret[10U] = 0U; ret[11U] = 0U; ret[12U] = 0U; ret[13U] = 0U; ret[14U] = 0U; ret[15U] = 0U; ret[16U] = 0U; ret[17U] = 0U; ret[18U] = 0U; ret[19U] = 0U; ret[20U] = 0U; ret[21U] = 0U; ret[22U] = 0U; ret[23U] = 0U; ret[24U] = 0U; ret[25U] = 0U; ret[26U] = 0U; ret[27U] = 0U; ret[28U] = 0U; ret[29U] = 0U; ret[30U] = 0U; ret[31U] = 0U; ret[32U] = 0U; ret[33U] = 0U; ret[34U] = 0U; ret[35U] = 0U; ret[36U] = 0U; ret[37U] = 0U; ret[38U] = 0U; ret[39U] = 0U; ret[40U] = 0U; ret[41U] = 0U; ret[42U] = 0U; ret[43U] = 0U; ret[44U] = 0U; ret[45U] = 0U; ret[46U] = 0U; ret[47U] = 0U; ret[48U] = 0U; ret[49U] = 0U; ret[50U] = 0U; ret[51U] = 0U; ret[52U] = 0U; ret[53U] = 0U; ret[54U] = 0U; ret[55U] = 0U; ret[56U] = 0U; ret[57U] = 0U; ret[58U] = 0U; ret[59U] = 0U; ret[60U] = 0U; ret[61U] = 0U; ret[62U] = 0U; ret[63U] = 0U; ret[64U] = 0U; ret[65U] = 0U; ret[66U] = 0U; ret[67U] = 0U; ret[68U] = 0U; ret[69U] = 0U; ret[70U] = 0U; ret[71U] = 0U; ret[72U] = 0U; ret[73U] = 0U; ret[74U] = 0U; ret[75U] = 0U; ret[76U] = 0U; ret[77U] = 0U; ret[78U] = 0U; ret[79U] = 0U; ret[80U] = 0U; ret[81U] = 0U; ret[82U] = 0U; ret[83U] = 0U; ret[84U] = 0U; ret[85U] = 0U; ret[86U] = 0U; ret[87U] = 0U; ret[88U] = 0U; ret[89U] = 0U; ret[90U] = 0U; ret[91U] = 0U; ret[92U] = 0U; ret[93U] = 0U; ret[94U] = 0U; ret[95U] = 0U; ret[96U] = 0U; ret[97U] = 0U; ret[98U] = 0U; ret[99U] = 0U; ret[100U] = 0U; ret[101U] = 0U; ret[102U] = 0U; ret[103U] = 0U; ret[104U] = 0U; ret[105U] = 0U; ret[106U] = 0U; ret[107U] = 0U; ret[108U] = 0U; ret[109U] = 0U; ret[110U] = 0U; ret[111U] = 0U; ret[112U] = 0U; ret[113U] = 0U; ret[114U] = 0U; ret[115U] = 0U; ret[116U] = 0U; ret[117U] = 0U; ret[118U] = 0U; ret[119U] = 0U; ret[120U] = 0U; ret[121U] = 0U; ret[122U] = 0U; ret[123U] = 0U; ret[124U] = 0U; ret[125U] = 0U; ret[126U] = 0U; ret[127U] = 0U; ret[128U] = 0U; ret[129U] = 0U; ret[130U] = 0U; ret[131U] = 0U; ret[132U] = 0U; ret[133U] = 0U; ret[134U] = 0U; ret[135U] = 0U; ret[136U] = 0U; ret[137U] = 0U; ret[138U] = 0U; ret[139U] = 0U; ret[140U] = 0U; ret[141U] = 0U; ret[142U] = 0U; ret[143U] = 0U; ret[144U] = 0U; ret[145U] = 0U; ret[146U] = 0U; ret[147U] = 0U; ret[148U] = 0U; ret[149U] = 0U; ret[150U] = 0U; ret[151U] = 0U; ret[152U] = 0U; ret[153U] = 0U; ret[154U] = 0U; ret[155U] = 0U; ret[156U] = 0U; ret[157U] = 0U; ret[158U] = 0U; ret[159U] = 0U; ret[160U] = 0U; ret[161U] = 0U; ret[162U] = 0U; ret[163U] = 0U; ret[164U] = 0U; ret[165U] = 0U; ret[166U] = 0U; ret[167U] = 0U; } /** Generate a new keccak xof state. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.new_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 168 */ static inline libcrux_sha3_generic_keccak_KeccakXofState_78 libcrux_sha3_generic_keccak_new_9d_470(void) { libcrux_sha3_generic_keccak_KeccakXofState_78 lit; lit.inner = libcrux_sha3_generic_keccak_new_1e_cf(); uint8_t ret[168U]; libcrux_sha3_generic_keccak_zero_block_9d_5e0(ret); memcpy(lit.buf[0U], ret, (size_t)168U * sizeof(uint8_t)); lit.buf_len = (size_t)0U; lit.sponge = false; return lit; } /** This function found in impl {(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for libcrux_sha3::portable::incremental::Shake128Absorb)} */ static inline libcrux_sha3_generic_keccak_KeccakXofState_78 libcrux_sha3_portable_incremental_new_1c(void) { return libcrux_sha3_generic_keccak_new_9d_470(); } /** `out` has the exact size we want here. It must be less than or equal to `RATE`. */ /** This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: usize> for u64)} */ /** A monomorphic instance of libcrux_sha3.portable_keccak.store_5a with const generics - RATE= 136 */ static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_5a_81( uint64_t (*state)[5U], Eurydice_slice out[1U]) { size_t num_full_blocks = Eurydice_slice_len(out[0U], uint8_t) / (size_t)8U; size_t last_block_len = Eurydice_slice_len(out[0U], uint8_t) % (size_t)8U; for (size_t i = (size_t)0U; i < num_full_blocks; i++) { size_t i0 = i; Eurydice_slice uu____0 = Eurydice_slice_subslice2( out[0U], i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t); uint8_t ret[8U]; core_num__u64_9__to_le_bytes(state[i0 / (size_t)5U][i0 % (size_t)5U], ret); Eurydice_slice_copy( uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); } if (last_block_len != (size_t)0U) { Eurydice_slice uu____1 = Eurydice_slice_subslice2( out[0U], num_full_blocks * (size_t)8U, num_full_blocks * (size_t)8U + last_block_len, uint8_t); uint8_t ret[8U]; core_num__u64_9__to_le_bytes( state[num_full_blocks / (size_t)5U][num_full_blocks % (size_t)5U], ret); Eurydice_slice_copy( uu____1, Eurydice_array_to_subslice2(ret, (size_t)0U, last_block_len, uint8_t), uint8_t); } } /** Squeeze `N` x `LEN` bytes. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 136 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_9d_ba( libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice out[1U]) { if (self->sponge) { libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); } size_t out_len = Eurydice_slice_len(out[0U], uint8_t); size_t blocks = out_len / (size_t)136U; size_t last = out_len - out_len % (size_t)136U; size_t mid; if ((size_t)136U >= out_len) { mid = out_len; } else { mid = (size_t)136U; } Eurydice_slice_uint8_t_1size_t__x2 uu____0 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, mid); Eurydice_slice out00[1U]; memcpy(out00, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice out_rest[1U]; memcpy(out_rest, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_portable_keccak_store_5a_81(self->inner.st, out00); core_ops_range_Range_b3 iter = core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, .end = blocks }), core_ops_range_Range_b3, core_ops_range_Range_b3); while (true) { if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( &iter, size_t, core_option_Option_b3) .tag == core_option_None) { break; } else { Eurydice_slice_uint8_t_1size_t__x2 uu____1 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(out_rest, (size_t)136U); Eurydice_slice out0[1U]; memcpy(out0, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice tmp[1U]; memcpy(tmp, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); libcrux_sha3_portable_keccak_store_5a_81(self->inner.st, out0); memcpy(out_rest, tmp, (size_t)1U * sizeof(Eurydice_slice)); } } if (last < out_len) { libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); libcrux_sha3_portable_keccak_store_5a_81(self->inner.st, out_rest); } self->sponge = true; } /** Shake256 squeeze */ /** This function found in impl {(libcrux_sha3::portable::incremental::XofSqueeze<136: usize> for libcrux_sha3::portable::incremental::Shake256Squeeze)#3} */ static inline void libcrux_sha3_portable_incremental_squeeze_8a( libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice out) { Eurydice_slice buf[1U] = { out }; libcrux_sha3_generic_keccak_squeeze_9d_ba(self, buf); } /** `out` has the exact size we want here. It must be less than or equal to `RATE`. */ /** This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1: usize> for u64)} */ /** A monomorphic instance of libcrux_sha3.portable_keccak.store_5a with const generics - RATE= 168 */ static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_5a_810( uint64_t (*state)[5U], Eurydice_slice out[1U]) { size_t num_full_blocks = Eurydice_slice_len(out[0U], uint8_t) / (size_t)8U; size_t last_block_len = Eurydice_slice_len(out[0U], uint8_t) % (size_t)8U; for (size_t i = (size_t)0U; i < num_full_blocks; i++) { size_t i0 = i; Eurydice_slice uu____0 = Eurydice_slice_subslice2( out[0U], i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t); uint8_t ret[8U]; core_num__u64_9__to_le_bytes(state[i0 / (size_t)5U][i0 % (size_t)5U], ret); Eurydice_slice_copy( uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t); } if (last_block_len != (size_t)0U) { Eurydice_slice uu____1 = Eurydice_slice_subslice2( out[0U], num_full_blocks * (size_t)8U, num_full_blocks * (size_t)8U + last_block_len, uint8_t); uint8_t ret[8U]; core_num__u64_9__to_le_bytes( state[num_full_blocks / (size_t)5U][num_full_blocks % (size_t)5U], ret); Eurydice_slice_copy( uu____1, Eurydice_array_to_subslice2(ret, (size_t)0U, last_block_len, uint8_t), uint8_t); } } /** Squeeze `N` x `LEN` bytes. */ /** This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState[TraitClause@0]#2} */ /** A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_9d with types uint64_t with const generics - PARALLEL_LANES= 1 - RATE= 168 */ static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_9d_ba0( libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice out[1U]) { if (self->sponge) { libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); } size_t out_len = Eurydice_slice_len(out[0U], uint8_t); size_t blocks = out_len / (size_t)168U; size_t last = out_len - out_len % (size_t)168U; size_t mid; if ((size_t)168U >= out_len) { mid = out_len; } else { mid = (size_t)168U; } Eurydice_slice_uint8_t_1size_t__x2 uu____0 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, mid); Eurydice_slice out00[1U]; memcpy(out00, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice out_rest[1U]; memcpy(out_rest, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_portable_keccak_store_5a_810(self->inner.st, out00); core_ops_range_Range_b3 iter = core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter( (CLITERAL(core_ops_range_Range_b3){ .start = (size_t)1U, .end = blocks }), core_ops_range_Range_b3, core_ops_range_Range_b3); while (true) { if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next( &iter, size_t, core_option_Option_b3) .tag == core_option_None) { break; } else { Eurydice_slice_uint8_t_1size_t__x2 uu____1 = libcrux_sha3_portable_keccak_split_at_mut_n_5a(out_rest, (size_t)168U); Eurydice_slice out0[1U]; memcpy(out0, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice)); Eurydice_slice tmp[1U]; memcpy(tmp, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice)); libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); libcrux_sha3_portable_keccak_store_5a_810(self->inner.st, out0); memcpy(out_rest, tmp, (size_t)1U * sizeof(Eurydice_slice)); } } if (last < out_len) { libcrux_sha3_generic_keccak_keccakf1600_b8(&self->inner); libcrux_sha3_portable_keccak_store_5a_810(self->inner.st, out_rest); } self->sponge = true; } /** Shake128 squeeze */ /** This function found in impl {(libcrux_sha3::portable::incremental::XofSqueeze<168: usize> for libcrux_sha3::portable::incremental::Shake128Squeeze)#1} */ static inline void libcrux_sha3_portable_incremental_squeeze_10( libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice out) { Eurydice_slice buf[1U] = { out }; libcrux_sha3_generic_keccak_squeeze_9d_ba0(self, buf); } /** This function found in impl {(core::clone::Clone for libcrux_sha3::portable::KeccakState)} */ static inline libcrux_sha3_generic_keccak_KeccakState_48 libcrux_sha3_portable_clone_3d( libcrux_sha3_generic_keccak_KeccakState_48 *self) { return self[0U]; } /** This function found in impl {(core::convert::From for u32)#1} */ static inline uint32_t libcrux_sha3_from_eb(libcrux_sha3_Algorithm v) { uint32_t uu____0; switch (v) { case libcrux_sha3_Sha224: { uu____0 = 1U; break; } case libcrux_sha3_Sha256: { uu____0 = 2U; break; } case libcrux_sha3_Sha384: { uu____0 = 3U; break; } case libcrux_sha3_Sha512: { uu____0 = 4U; break; } default: { KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__, __LINE__); KRML_HOST_EXIT(253U); } } return uu____0; } /** This function found in impl {(core::convert::From for libcrux_sha3::Algorithm)} */ static inline libcrux_sha3_Algorithm libcrux_sha3_from_2d(uint32_t v) { libcrux_sha3_Algorithm uu____0; switch (v) { case 1U: { uu____0 = libcrux_sha3_Sha224; break; } case 2U: { uu____0 = libcrux_sha3_Sha256; break; } case 3U: { uu____0 = libcrux_sha3_Sha384; break; } case 4U: { uu____0 = libcrux_sha3_Sha512; break; } default: { KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__, "panic!"); KRML_HOST_EXIT(255U); } } return uu____0; } typedef uint8_t libcrux_sha3_Sha3_512Digest[64U]; typedef uint8_t libcrux_sha3_Sha3_384Digest[48U]; typedef uint8_t libcrux_sha3_Sha3_256Digest[32U]; typedef uint8_t libcrux_sha3_Sha3_224Digest[28U]; #if defined(__cplusplus) } #endif #define __internal_libcrux_sha3_internal_H_DEFINED #endif