add sha3_384
This commit is contained in:
parent
4f97fa82b6
commit
32b3a97809
@ -718,6 +718,49 @@ void sha3_256(uint8_t *output, const uint8_t *input, size_t inlen) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sha3_384_inc_init(sha3_384incctx *state) {
|
||||||
|
keccak_inc_init(state->ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sha3_384_inc_absorb(sha3_384incctx *state, const uint8_t *input, size_t inlen) {
|
||||||
|
keccak_inc_absorb(state->ctx, SHA3_384_RATE, input, inlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sha3_384_inc_finalize(uint8_t *output, sha3_384incctx *state) {
|
||||||
|
uint8_t t[SHA3_384_RATE];
|
||||||
|
keccak_inc_finalize(state->ctx, SHA3_384_RATE, 0x06);
|
||||||
|
|
||||||
|
keccak_squeezeblocks(t, 1, state->ctx, SHA3_384_RATE);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < 48; i++) {
|
||||||
|
output[i] = t[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* Name: sha3_384
|
||||||
|
*
|
||||||
|
* Description: SHA3-256 with non-incremental API
|
||||||
|
*
|
||||||
|
* Arguments: - uint8_t *output: pointer to output
|
||||||
|
* - const uint8_t *input: pointer to input
|
||||||
|
* - size_t inlen: length of input in bytes
|
||||||
|
**************************************************/
|
||||||
|
void sha3_384(uint8_t *output, const uint8_t *input, size_t inlen) {
|
||||||
|
uint64_t s[25];
|
||||||
|
uint8_t t[SHA3_384_RATE];
|
||||||
|
|
||||||
|
/* Absorb input */
|
||||||
|
keccak_absorb(s, SHA3_384_RATE, input, inlen, 0x06);
|
||||||
|
|
||||||
|
/* Squeeze output */
|
||||||
|
keccak_squeezeblocks(t, 1, s, SHA3_384_RATE);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < 48; i++) {
|
||||||
|
output[i] = t[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void sha3_512_inc_init(sha3_512incctx *state) {
|
void sha3_512_inc_init(sha3_512incctx *state) {
|
||||||
keccak_inc_init(state->ctx);
|
keccak_inc_init(state->ctx);
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#define SHAKE128_RATE 168
|
#define SHAKE128_RATE 168
|
||||||
#define SHAKE256_RATE 136
|
#define SHAKE256_RATE 136
|
||||||
#define SHA3_256_RATE 136
|
#define SHA3_256_RATE 136
|
||||||
|
#define SHA3_384_RATE 104
|
||||||
#define SHA3_512_RATE 72
|
#define SHA3_512_RATE 72
|
||||||
|
|
||||||
|
|
||||||
@ -35,6 +36,11 @@ typedef struct {
|
|||||||
uint64_t ctx[26];
|
uint64_t ctx[26];
|
||||||
} sha3_256incctx;
|
} sha3_256incctx;
|
||||||
|
|
||||||
|
// Context for incremental API
|
||||||
|
typedef struct {
|
||||||
|
uint64_t ctx[26];
|
||||||
|
} sha3_384incctx;
|
||||||
|
|
||||||
// Context for incremental API
|
// Context for incremental API
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint64_t ctx[26];
|
uint64_t ctx[26];
|
||||||
@ -69,6 +75,12 @@ void sha3_256_inc_finalize(uint8_t *output, sha3_256incctx *state);
|
|||||||
|
|
||||||
void sha3_256(uint8_t *output, const uint8_t *input, size_t inlen);
|
void sha3_256(uint8_t *output, const uint8_t *input, size_t inlen);
|
||||||
|
|
||||||
|
void sha3_384_inc_init(sha3_384incctx *state);
|
||||||
|
void sha3_384_inc_absorb(sha3_384incctx *state, const uint8_t *input, size_t inlen);
|
||||||
|
void sha3_384_inc_finalize(uint8_t *output, sha3_384incctx *state);
|
||||||
|
|
||||||
|
void sha3_384(uint8_t *output, const uint8_t *input, size_t inlen);
|
||||||
|
|
||||||
void sha3_512_inc_init(sha3_512incctx *state);
|
void sha3_512_inc_init(sha3_512incctx *state);
|
||||||
void sha3_512_inc_absorb(sha3_512incctx *state, const uint8_t *input, size_t inlen);
|
void sha3_512_inc_absorb(sha3_512incctx *state, const uint8_t *input, size_t inlen);
|
||||||
void sha3_512_inc_finalize(uint8_t *output, sha3_512incctx *state);
|
void sha3_512_inc_finalize(uint8_t *output, sha3_512incctx *state);
|
||||||
|
Loading…
Reference in New Issue
Block a user