c37b9dcfca
Versions are incompatible due to different address formats and differing message compression!
84 lines
1.6 KiB
C
84 lines
1.6 KiB
C
/*
|
|
hash.c version 20160210
|
|
Andreas Hülsing
|
|
Joost Rijneveld
|
|
Public domain.
|
|
*/
|
|
|
|
/*
|
|
* Used in hash.c
|
|
*/
|
|
#define SET_BLOCK_BIT(a, b) (a[15] = (a[15] & 1) | ((b << 1) & 2))
|
|
#define SET_KEY_BIT(a, b) (a[15] = (a[15] & 2) | (b & 1))
|
|
|
|
#define WOTS_SELECT_KEY(a) (a[15] = 1)
|
|
#define WOTS_SELECT_BLOCK(a) (a[15] = 0)
|
|
/*
|
|
* Used in wots.c
|
|
*/
|
|
#define SET_HASH_ADDRESS(a, v) {\
|
|
a[14] = (v & 255);}
|
|
|
|
#define SET_CHAIN_ADDRESS(a, v) {\
|
|
a[13] = (v & 255);\
|
|
a[12] = ((v >> 8) & 255);}
|
|
|
|
/*
|
|
* Used in xmss_fast.c and xmss.c
|
|
*/
|
|
#define SET_LAYER_ADDRESS(a, v) {\
|
|
a[0] = (v & 255);}
|
|
|
|
#define SET_TREE_ADDRESS(a, v) {\
|
|
a[5] = (v & 255);\
|
|
a[4] = (v >> 8) & 255;\
|
|
a[3] = (v >> 16) & 255;\
|
|
a[2] = (v >> 24) & 255;\
|
|
a[1] = (v >> 32) & 255;}
|
|
|
|
#define SET_OTS_BIT(a, b) {\
|
|
a[6] = (b & 1);\
|
|
a[7] = 0;\
|
|
a[8] = 0;}
|
|
|
|
#define SET_OTS_ADDRESS(a, v) {\
|
|
a[11] = (v & 255);\
|
|
a[10] = (v >> 8) & 255;\
|
|
a[9] = (v >> 16) & 255;}
|
|
|
|
#define ZEROISE_OTS_ADDR(a) {\
|
|
a[12] = 0;\
|
|
a[13] = 0;\
|
|
a[14] = 0;\
|
|
a[15] = 0;}
|
|
|
|
#define SET_LTREE_BIT(a, b) {\
|
|
a[7] = (a[7] & 0) | (b & 1);}
|
|
|
|
#define SET_LTREE_ADDRESS(a, v) {\
|
|
a[10] = v & 255;\
|
|
a[9] = (v >> 8) & 255;\
|
|
a[8] = (v >> 16) & 255;}
|
|
|
|
#define SET_LTREE_TREE_HEIGHT(a, v) {\
|
|
a[11] = (v & 255);}
|
|
|
|
#define SET_LTREE_TREE_INDEX(a, v) {\
|
|
a[14] = (v & 255);\
|
|
a[13] = (v >> 8) & 255;\
|
|
a[12] = (v >> 16) & 3;}
|
|
|
|
#define SET_NODE_PADDING(a) {\
|
|
a[8] = 0;\
|
|
a[9] = 0;\
|
|
a[10] = 0;}
|
|
|
|
#define SET_NODE_TREE_HEIGHT(a, v) {\
|
|
a[11] = (v & 255);}
|
|
|
|
#define SET_NODE_TREE_INDEX(a, v) {\
|
|
a[14] = v & 255;\
|
|
a[13] = (v >> 8) & 255;\
|
|
a[12] = (v >> 16) & 255;}
|
|
|