mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 12:28:09 +00:00
hasher: don't hardcore zcash stuff into hasher
This commit is contained in:
parent
b7e99aa76c
commit
8c2bac9594
36
hasher.c
36
hasher.c
@ -23,8 +23,9 @@
|
||||
#include "hasher.h"
|
||||
#include "ripemd160.h"
|
||||
|
||||
void hasher_Init(Hasher *hasher, HasherType type) {
|
||||
void hasher_InitParam(Hasher *hasher, HasherType type, const void *param) {
|
||||
hasher->type = type;
|
||||
hasher->param = param;
|
||||
|
||||
switch (hasher->type) {
|
||||
case HASHER_SHA2:
|
||||
@ -46,26 +47,17 @@ void hasher_Init(Hasher *hasher, HasherType type) {
|
||||
case HASHER_GROESTLD_TRUNC:
|
||||
groestl512_Init(&hasher->ctx.groestl);
|
||||
break;
|
||||
case HASHER_OVERWINTER_PREVOUTS:
|
||||
blake2b_InitPersonal(&hasher->ctx.blake2b, 32, "ZcashPrevoutHash", 16);
|
||||
case HASHER_BLAKE2B:
|
||||
blake2b_Init(&hasher->ctx.blake2b, 32);
|
||||
break;
|
||||
case HASHER_OVERWINTER_SEQUENCE:
|
||||
blake2b_InitPersonal(&hasher->ctx.blake2b, 32, "ZcashSequencHash", 16);
|
||||
break;
|
||||
case HASHER_OVERWINTER_OUTPUTS:
|
||||
blake2b_InitPersonal(&hasher->ctx.blake2b, 32, "ZcashOutputsHash", 16);
|
||||
break;
|
||||
case HASHER_OVERWINTER_PREIMAGE:
|
||||
blake2b_InitPersonal(&hasher->ctx.blake2b, 32, "ZcashSigHash\x19\x1b\xa8\x5b", 16); // BRANCH_ID = 0x5ba81b19 / Overwinter
|
||||
break;
|
||||
case HASHER_SAPLING_PREIMAGE:
|
||||
blake2b_InitPersonal(&hasher->ctx.blake2b, 32, "ZcashSigHash\xbb\x09\xb8\x76", 16); // BRANCH_ID = 0x76b809bb / Sapling
|
||||
case HASHER_BLAKE2B_PERSONAL:
|
||||
blake2b_InitPersonal(&hasher->ctx.blake2b, 32, hasher->param, 16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hasher_Reset(Hasher *hasher) {
|
||||
hasher_Init(hasher, hasher->type);
|
||||
hasher_InitParam(hasher, hasher->type, hasher->param);
|
||||
}
|
||||
|
||||
void hasher_Update(Hasher *hasher, const uint8_t *data, size_t length) {
|
||||
@ -89,11 +81,8 @@ void hasher_Update(Hasher *hasher, const uint8_t *data, size_t length) {
|
||||
case HASHER_GROESTLD_TRUNC:
|
||||
groestl512_Update(&hasher->ctx.groestl, data, length);
|
||||
break;
|
||||
case HASHER_OVERWINTER_PREVOUTS:
|
||||
case HASHER_OVERWINTER_SEQUENCE:
|
||||
case HASHER_OVERWINTER_OUTPUTS:
|
||||
case HASHER_OVERWINTER_PREIMAGE:
|
||||
case HASHER_SAPLING_PREIMAGE:
|
||||
case HASHER_BLAKE2B:
|
||||
case HASHER_BLAKE2B_PERSONAL:
|
||||
blake2b_Update(&hasher->ctx.blake2b, data, length);
|
||||
break;
|
||||
}
|
||||
@ -134,11 +123,8 @@ void hasher_Final(Hasher *hasher, uint8_t hash[HASHER_DIGEST_LENGTH]) {
|
||||
case HASHER_GROESTLD_TRUNC:
|
||||
groestl512_DoubleTrunc(&hasher->ctx.groestl, hash);
|
||||
break;
|
||||
case HASHER_OVERWINTER_PREVOUTS:
|
||||
case HASHER_OVERWINTER_SEQUENCE:
|
||||
case HASHER_OVERWINTER_OUTPUTS:
|
||||
case HASHER_OVERWINTER_PREIMAGE:
|
||||
case HASHER_SAPLING_PREIMAGE:
|
||||
case HASHER_BLAKE2B:
|
||||
case HASHER_BLAKE2B_PERSONAL:
|
||||
blake2b_Final(&hasher->ctx.blake2b, hash, 32);
|
||||
break;
|
||||
}
|
||||
|
14
hasher.h
14
hasher.h
@ -50,11 +50,8 @@ typedef enum {
|
||||
|
||||
HASHER_GROESTLD_TRUNC, /* Double Groestl512 hasher truncated to 256 bits */
|
||||
|
||||
HASHER_OVERWINTER_PREVOUTS,
|
||||
HASHER_OVERWINTER_SEQUENCE,
|
||||
HASHER_OVERWINTER_OUTPUTS,
|
||||
HASHER_OVERWINTER_PREIMAGE,
|
||||
HASHER_SAPLING_PREIMAGE,
|
||||
HASHER_BLAKE2B,
|
||||
HASHER_BLAKE2B_PERSONAL,
|
||||
} HasherType;
|
||||
|
||||
typedef struct {
|
||||
@ -65,11 +62,14 @@ typedef struct {
|
||||
SHA3_CTX sha3; // for HASHER_SHA3{,K}
|
||||
BLAKE256_CTX blake; // for HASHER_BLAKE{,D}
|
||||
GROESTL512_CTX groestl; // for HASHER_GROESTLD_TRUNC
|
||||
BLAKE2B_CTX blake2b; // for HASHER_OVERWINTER_*, HASHER_SAPLING_*
|
||||
BLAKE2B_CTX blake2b; // for HASHER_BLAKE2B{,_PERSONAL}
|
||||
} ctx;
|
||||
|
||||
const void *param;
|
||||
} Hasher;
|
||||
|
||||
void hasher_Init(Hasher *hasher, HasherType type);
|
||||
void hasher_InitParam(Hasher *hasher, HasherType type, const void *param);
|
||||
inline void hasher_Init(Hasher *hasher, HasherType type) { hasher_InitParam(hasher, type, NULL); }
|
||||
void hasher_Reset(Hasher *hasher);
|
||||
void hasher_Update(Hasher *hasher, const uint8_t *data, size_t length);
|
||||
void hasher_Final(Hasher *hasher, uint8_t hash[HASHER_DIGEST_LENGTH]);
|
||||
|
Loading…
Reference in New Issue
Block a user