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