1*ba1276acSMatthew Dillon /* $OpenBSD: xmss_hash_address.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2*ba1276acSMatthew Dillon /*
3*ba1276acSMatthew Dillon hash_address.c version 20160722
4*ba1276acSMatthew Dillon Andreas Hülsing
5*ba1276acSMatthew Dillon Joost Rijneveld
6*ba1276acSMatthew Dillon Public domain.
7*ba1276acSMatthew Dillon */
8*ba1276acSMatthew Dillon #include "includes.h"
9*ba1276acSMatthew Dillon #ifdef WITH_XMSS
10*ba1276acSMatthew Dillon
11*ba1276acSMatthew Dillon #ifdef HAVE_STDINT_H
12*ba1276acSMatthew Dillon # include <stdint.h>
13*ba1276acSMatthew Dillon #endif
14*ba1276acSMatthew Dillon #include "xmss_hash_address.h" /* prototypes */
15*ba1276acSMatthew Dillon
setLayerADRS(uint32_t adrs[8],uint32_t layer)16*ba1276acSMatthew Dillon void setLayerADRS(uint32_t adrs[8], uint32_t layer){
17*ba1276acSMatthew Dillon adrs[0] = layer;
18*ba1276acSMatthew Dillon }
19*ba1276acSMatthew Dillon
setTreeADRS(uint32_t adrs[8],uint64_t tree)20*ba1276acSMatthew Dillon void setTreeADRS(uint32_t adrs[8], uint64_t tree){
21*ba1276acSMatthew Dillon adrs[1] = (uint32_t) (tree >> 32);
22*ba1276acSMatthew Dillon adrs[2] = (uint32_t) tree;
23*ba1276acSMatthew Dillon }
24*ba1276acSMatthew Dillon
setType(uint32_t adrs[8],uint32_t type)25*ba1276acSMatthew Dillon void setType(uint32_t adrs[8], uint32_t type){
26*ba1276acSMatthew Dillon adrs[3] = type;
27*ba1276acSMatthew Dillon int i;
28*ba1276acSMatthew Dillon for(i = 4; i < 8; i++){
29*ba1276acSMatthew Dillon adrs[i] = 0;
30*ba1276acSMatthew Dillon }
31*ba1276acSMatthew Dillon }
32*ba1276acSMatthew Dillon
setKeyAndMask(uint32_t adrs[8],uint32_t keyAndMask)33*ba1276acSMatthew Dillon void setKeyAndMask(uint32_t adrs[8], uint32_t keyAndMask){
34*ba1276acSMatthew Dillon adrs[7] = keyAndMask;
35*ba1276acSMatthew Dillon }
36*ba1276acSMatthew Dillon
37*ba1276acSMatthew Dillon // OTS
38*ba1276acSMatthew Dillon
setOTSADRS(uint32_t adrs[8],uint32_t ots)39*ba1276acSMatthew Dillon void setOTSADRS(uint32_t adrs[8], uint32_t ots){
40*ba1276acSMatthew Dillon adrs[4] = ots;
41*ba1276acSMatthew Dillon }
42*ba1276acSMatthew Dillon
setChainADRS(uint32_t adrs[8],uint32_t chain)43*ba1276acSMatthew Dillon void setChainADRS(uint32_t adrs[8], uint32_t chain){
44*ba1276acSMatthew Dillon adrs[5] = chain;
45*ba1276acSMatthew Dillon }
46*ba1276acSMatthew Dillon
setHashADRS(uint32_t adrs[8],uint32_t hash)47*ba1276acSMatthew Dillon void setHashADRS(uint32_t adrs[8], uint32_t hash){
48*ba1276acSMatthew Dillon adrs[6] = hash;
49*ba1276acSMatthew Dillon }
50*ba1276acSMatthew Dillon
51*ba1276acSMatthew Dillon // L-tree
52*ba1276acSMatthew Dillon
setLtreeADRS(uint32_t adrs[8],uint32_t ltree)53*ba1276acSMatthew Dillon void setLtreeADRS(uint32_t adrs[8], uint32_t ltree){
54*ba1276acSMatthew Dillon adrs[4] = ltree;
55*ba1276acSMatthew Dillon }
56*ba1276acSMatthew Dillon
57*ba1276acSMatthew Dillon // Hash Tree & L-tree
58*ba1276acSMatthew Dillon
setTreeHeight(uint32_t adrs[8],uint32_t treeHeight)59*ba1276acSMatthew Dillon void setTreeHeight(uint32_t adrs[8], uint32_t treeHeight){
60*ba1276acSMatthew Dillon adrs[5] = treeHeight;
61*ba1276acSMatthew Dillon }
62*ba1276acSMatthew Dillon
setTreeIndex(uint32_t adrs[8],uint32_t treeIndex)63*ba1276acSMatthew Dillon void setTreeIndex(uint32_t adrs[8], uint32_t treeIndex){
64*ba1276acSMatthew Dillon adrs[6] = treeIndex;
65*ba1276acSMatthew Dillon }
66*ba1276acSMatthew Dillon #endif /* WITH_XMSS */
67