1 /* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 * SPDX-License-Identifier: Apache-2.0"
3 *
4 * Written by Nir Drucker, Shay Gueron and Dusan Kostic,
5 * AWS Cryptographic Algorithms Group.
6 */
7
8 #pragma once
9
10 #include "pq-crypto/s2n_pq.h"
11 #include "defs.h"
12 #include "types.h"
13
14 void secure_set_bits_port(OUT pad_r_t *r,
15 IN size_t first_pos,
16 IN const idx_t *wlist,
17 IN size_t w_size);
18
19 // Compares wlist[ctr] to w[i] for all i < ctr.
20 // Returns 0 if wlist[ctr] is contained in wlist, returns 1 otherwise.
21 int is_new_port(IN const idx_t *wlist, IN const size_t ctr);
22
23 #if defined(S2N_BIKE_R3_AVX2)
24 void secure_set_bits_avx2(OUT pad_r_t *r,
25 IN size_t first_pos,
26 IN const idx_t *wlist,
27 IN size_t w_size);
28
29 int is_new_avx2(IN const idx_t *wlist, IN const size_t ctr);
30 #endif
31
32 #if defined(S2N_BIKE_R3_AVX512)
33 void secure_set_bits_avx512(OUT pad_r_t *r,
34 IN size_t first_pos,
35 IN const idx_t *wlist,
36 IN size_t w_size);
37 int is_new_avx512(IN const idx_t *wlist, IN const size_t ctr);
38 #endif
39
40 typedef struct sampling_ctx_st {
41 void (*secure_set_bits)(OUT pad_r_t *r,
42 IN size_t first_pos,
43 IN const idx_t *wlist,
44 IN size_t w_size);
45 int (*is_new)(IN const idx_t *wlist, IN const size_t ctr);
46 } sampling_ctx;
47
sampling_ctx_init(sampling_ctx * ctx)48 _INLINE_ void sampling_ctx_init(sampling_ctx *ctx)
49 {
50 #if defined(S2N_BIKE_R3_AVX512)
51 if(s2n_bike_r3_is_avx512_enabled()) {
52 ctx->secure_set_bits = secure_set_bits_avx512;
53 ctx->is_new = is_new_avx512;
54 } else
55 #endif
56 #if defined(S2N_BIKE_R3_AVX2)
57 if(s2n_bike_r3_is_avx2_enabled()) {
58 ctx->secure_set_bits = secure_set_bits_avx2;
59 ctx->is_new = is_new_avx2;
60 } else
61 #endif
62 {
63 ctx->secure_set_bits = secure_set_bits_port;
64 ctx->is_new = is_new_port;
65 }
66 }
67