1 #include <stdint.h>
2 
3 #include "address.h"
4 #include "params.h"
5 #include "utils.h"
6 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_addr_to_bytes(unsigned char * bytes,const uint32_t addr[8])7 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_addr_to_bytes(
8     unsigned char *bytes, const uint32_t addr[8]) {
9     int i;
10 
11     for (i = 0; i < 8; i++) {
12         PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_ull_to_bytes(
13             bytes + i * 4, 4, addr[i]);
14     }
15 }
16 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_layer_addr(uint32_t addr[8],uint32_t layer)17 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_layer_addr(
18     uint32_t addr[8], uint32_t layer) {
19     addr[0] = layer;
20 }
21 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_tree_addr(uint32_t addr[8],uint64_t tree)22 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_tree_addr(
23     uint32_t addr[8], uint64_t tree) {
24     addr[1] = 0;
25     addr[2] = (uint32_t) (tree >> 32);
26     addr[3] = (uint32_t) tree;
27 }
28 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_type(uint32_t addr[8],uint32_t type)29 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_type(
30     uint32_t addr[8], uint32_t type) {
31     addr[4] = type;
32 }
33 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_copy_subtree_addr(uint32_t out[8],const uint32_t in[8])34 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_copy_subtree_addr(
35     uint32_t out[8], const uint32_t in[8]) {
36     out[0] = in[0];
37     out[1] = in[1];
38     out[2] = in[2];
39     out[3] = in[3];
40 }
41 
42 /* These functions are used for OTS addresses. */
43 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_keypair_addr(uint32_t addr[8],uint32_t keypair)44 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_keypair_addr(
45     uint32_t addr[8], uint32_t keypair) {
46     addr[5] = keypair;
47 }
48 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_copy_keypair_addr(uint32_t out[8],const uint32_t in[8])49 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_copy_keypair_addr(
50     uint32_t out[8], const uint32_t in[8]) {
51     out[0] = in[0];
52     out[1] = in[1];
53     out[2] = in[2];
54     out[3] = in[3];
55     out[5] = in[5];
56 }
57 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_chain_addr(uint32_t addr[8],uint32_t chain)58 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_chain_addr(
59     uint32_t addr[8], uint32_t chain) {
60     addr[6] = chain;
61 }
62 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_hash_addr(uint32_t addr[8],uint32_t hash)63 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_hash_addr(
64     uint32_t addr[8], uint32_t hash) {
65     addr[7] = hash;
66 }
67 
68 /* These functions are used for all hash tree addresses (including FORS). */
69 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_tree_height(uint32_t addr[8],uint32_t tree_height)70 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_tree_height(
71     uint32_t addr[8], uint32_t tree_height) {
72     addr[6] = tree_height;
73 }
74 
PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_tree_index(uint32_t addr[8],uint32_t tree_index)75 void PQCLEAN_SPHINCSSHA256128FROBUST_AVX2_set_tree_index(
76     uint32_t addr[8], uint32_t tree_index) {
77     addr[7] = tree_index;
78 }
79