17db96d56Sopenharmony_ci// sha3.h 27db96d56Sopenharmony_ci// 19-Nov-11 Markku-Juhani O. Saarinen <mjos@iki.fi> 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci#ifndef SHA3_H 57db96d56Sopenharmony_ci#define SHA3_H 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci#include <stddef.h> 87db96d56Sopenharmony_ci#include <stdint.h> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci#ifndef KECCAKF_ROUNDS 117db96d56Sopenharmony_ci#define KECCAKF_ROUNDS 24 127db96d56Sopenharmony_ci#endif 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci#ifndef ROTL64 157db96d56Sopenharmony_ci#define ROTL64(x, y) (((x) << (y)) | ((x) >> (64 - (y)))) 167db96d56Sopenharmony_ci#endif 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci// state context 197db96d56Sopenharmony_citypedef struct { 207db96d56Sopenharmony_ci union { // state: 217db96d56Sopenharmony_ci uint8_t b[200]; // 8-bit bytes 227db96d56Sopenharmony_ci uint64_t q[25]; // 64-bit words 237db96d56Sopenharmony_ci } st; 247db96d56Sopenharmony_ci int pt, rsiz, mdlen; // these don't overflow 257db96d56Sopenharmony_ci} sha3_ctx_t; 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci// Compression function. 287db96d56Sopenharmony_cistatic void sha3_keccakf(uint64_t st[25]); 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci// OpenSSL - like interfece 317db96d56Sopenharmony_cistatic int sha3_init(sha3_ctx_t *c, int mdlen); // mdlen = hash output in bytes 327db96d56Sopenharmony_cistatic int sha3_update(sha3_ctx_t *c, const void *data, size_t len); 337db96d56Sopenharmony_cistatic int sha3_final(void *md, sha3_ctx_t *c); // digest goes to md 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ci// compute a sha3 hash (md) of given byte length from "in" 367db96d56Sopenharmony_ci#if 0 377db96d56Sopenharmony_cistatic void *sha3(const void *in, size_t inlen, void *md, int mdlen); 387db96d56Sopenharmony_ci#endif 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci// SHAKE128 and SHAKE256 extensible-output functions 417db96d56Sopenharmony_ci#define shake128_init(c) sha3_init(c, 16) 427db96d56Sopenharmony_ci#define shake256_init(c) sha3_init(c, 32) 437db96d56Sopenharmony_ci#define shake_update sha3_update 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_cistatic void shake_xof(sha3_ctx_t *c); 467db96d56Sopenharmony_cistatic void shake_out(sha3_ctx_t *c, void *out, size_t len); 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci#endif 497db96d56Sopenharmony_ci 50