diff --git a/src_features/signMessageEIP712/hash_wrap.c b/src_features/signMessageEIP712/hash_wrap.c new file mode 100644 index 0000000..be54c26 --- /dev/null +++ b/src_features/signMessageEIP712/hash_wrap.c @@ -0,0 +1,33 @@ +#include +#include +#include "hash_wrap.h" + +cx_sha3_t global_sha3; + +int cx_keccak_init(cx_hash_t *hash, size_t size) +{ + sha3_context *ctx = (sha3_context*)hash; + + (void)size; + sha3_Init256(ctx); + sha3_SetFlags(ctx, SHA3_FLAGS_KECCAK); + return 0; +} + +int cx_hash(cx_hash_t *hash, int mode, const unsigned char *in, + unsigned int len, unsigned char *out, unsigned int out_len) +{ + sha3_context *ctx = (sha3_context*)hash; + const uint8_t *result; + + sha3_Update(ctx, in, len); + if (mode == CX_LAST) + { + result = sha3_Finalize(ctx); + if (out != NULL) + { + memmove(out, result, out_len); + } + } + return out_len; +} diff --git a/src_features/signMessageEIP712/hash_wrap.h b/src_features/signMessageEIP712/hash_wrap.h new file mode 100644 index 0000000..5910322 --- /dev/null +++ b/src_features/signMessageEIP712/hash_wrap.h @@ -0,0 +1,17 @@ +#ifndef HASH_WRAP_H_ +#define HASH_WRAP_H_ + +#include +#include "sha3.h" + +#define CX_LAST 1 + +typedef sha3_context cx_sha3_t; +typedef struct {} cx_hash_t; + +extern cx_sha3_t global_sha3; + +int cx_keccak_init(cx_hash_t *hash, size_t size); +int cx_hash(cx_hash_t *hash, int mode, const unsigned char *in, + unsigned int len, unsigned char *out, unsigned int out_len); +#endif // HASH_WRAP_H_