Hex Artifact Content
Not logged in

Artifact 53a2bf16eb9bb4c908a4fb69766dfc73c2a61ef6:


0000: 2f 2a 20 73 68 61 33 2e 68 20 2a 2f 0a 23 69 66  /* sha3.h */.#if
0010: 6e 64 65 66 20 52 48 41 53 48 5f 53 48 41 33 5f  ndef RHASH_SHA3_
0020: 48 0a 23 64 65 66 69 6e 65 20 52 48 41 53 48 5f  H.#define RHASH_
0030: 53 48 41 33 5f 48 0a 23 69 6e 63 6c 75 64 65 20  SHA3_H.#include 
0040: 22 75 73 74 64 2e 68 22 0a 0a 23 69 66 64 65 66  "ustd.h"..#ifdef
0050: 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 65 78 74   __cplusplus.ext
0060: 65 72 6e 20 22 43 22 20 7b 0a 23 65 6e 64 69 66  ern "C" {.#endif
0070: 0a 0a 23 64 65 66 69 6e 65 20 73 68 61 33 5f 32  ..#define sha3_2
0080: 32 34 5f 68 61 73 68 5f 73 69 7a 65 20 20 32 38  24_hash_size  28
0090: 0a 23 64 65 66 69 6e 65 20 73 68 61 33 5f 32 35  .#define sha3_25
00a0: 36 5f 68 61 73 68 5f 73 69 7a 65 20 20 33 32 0a  6_hash_size  32.
00b0: 23 64 65 66 69 6e 65 20 73 68 61 33 5f 33 38 34  #define sha3_384
00c0: 5f 68 61 73 68 5f 73 69 7a 65 20 20 34 38 0a 23  _hash_size  48.#
00d0: 64 65 66 69 6e 65 20 73 68 61 33 5f 35 31 32 5f  define sha3_512_
00e0: 68 61 73 68 5f 73 69 7a 65 20 20 36 34 0a 23 64  hash_size  64.#d
00f0: 65 66 69 6e 65 20 73 68 61 33 5f 6d 61 78 5f 70  efine sha3_max_p
0100: 65 72 6d 75 74 61 74 69 6f 6e 5f 73 69 7a 65 20  ermutation_size 
0110: 32 35 0a 23 64 65 66 69 6e 65 20 73 68 61 33 5f  25.#define sha3_
0120: 6d 61 78 5f 72 61 74 65 5f 69 6e 5f 71 77 6f 72  max_rate_in_qwor
0130: 64 73 20 32 34 0a 0a 2f 2a 2a 0a 20 2a 20 53 48  ds 24../**. * SH
0140: 41 33 20 41 6c 67 6f 72 69 74 68 6d 20 63 6f 6e  A3 Algorithm con
0150: 74 65 78 74 2e 0a 20 2a 2f 0a 74 79 70 65 64 65  text.. */.typede
0160: 66 20 73 74 72 75 63 74 20 73 68 61 33 5f 63 74  f struct sha3_ct
0170: 78 0a 7b 0a 09 2f 2a 20 31 36 30 30 20 62 69 74  x.{../* 1600 bit
0180: 73 20 61 6c 67 6f 72 69 74 68 6d 20 68 61 73 68  s algorithm hash
0190: 69 6e 67 20 73 74 61 74 65 20 2a 2f 0a 09 75 69  ing state */..ui
01a0: 6e 74 36 34 5f 74 20 68 61 73 68 5b 73 68 61 33  nt64_t hash[sha3
01b0: 5f 6d 61 78 5f 70 65 72 6d 75 74 61 74 69 6f 6e  _max_permutation
01c0: 5f 73 69 7a 65 5d 3b 0a 09 2f 2a 20 31 35 33 36  _size];../* 1536
01d0: 2d 62 69 74 20 62 75 66 66 65 72 20 66 6f 72 20  -bit buffer for 
01e0: 6c 65 66 74 6f 76 65 72 73 20 2a 2f 0a 09 75 69  leftovers */..ui
01f0: 6e 74 36 34 5f 74 20 6d 65 73 73 61 67 65 5b 73  nt64_t message[s
0200: 68 61 33 5f 6d 61 78 5f 72 61 74 65 5f 69 6e 5f  ha3_max_rate_in_
0210: 71 77 6f 72 64 73 5d 3b 0a 09 2f 2a 20 63 6f 75  qwords];../* cou
0220: 6e 74 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  nt of bytes in t
0230: 68 65 20 6d 65 73 73 61 67 65 5b 5d 20 62 75 66  he message[] buf
0240: 66 65 72 20 2a 2f 0a 09 75 6e 73 69 67 6e 65 64  fer */..unsigned
0250: 20 72 65 73 74 3b 0a 09 2f 2a 20 73 69 7a 65 20   rest;../* size 
0260: 6f 66 20 61 20 6d 65 73 73 61 67 65 20 62 6c 6f  of a message blo
0270: 63 6b 20 70 72 6f 63 65 73 73 65 64 20 61 74 20  ck processed at 
0280: 6f 6e 63 65 20 2a 2f 0a 09 75 6e 73 69 67 6e 65  once */..unsigne
0290: 64 20 62 6c 6f 63 6b 5f 73 69 7a 65 3b 0a 7d 20  d block_size;.} 
02a0: 73 68 61 33 5f 63 74 78 3b 0a 0a 2f 2a 20 6d 65  sha3_ctx;../* me
02b0: 74 68 6f 64 73 20 66 6f 72 20 63 61 6c 63 75 6c  thods for calcul
02c0: 61 74 69 6e 67 20 74 68 65 20 68 61 73 68 20 66  ating the hash f
02d0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 76 6f 69 64  unction */..void
02e0: 20 72 68 61 73 68 5f 73 68 61 33 5f 32 32 34 5f   rhash_sha3_224_
02f0: 69 6e 69 74 28 73 68 61 33 5f 63 74 78 20 2a 63  init(sha3_ctx *c
0300: 74 78 29 3b 0a 76 6f 69 64 20 72 68 61 73 68 5f  tx);.void rhash_
0310: 73 68 61 33 5f 32 35 36 5f 69 6e 69 74 28 73 68  sha3_256_init(sh
0320: 61 33 5f 63 74 78 20 2a 63 74 78 29 3b 0a 76 6f  a3_ctx *ctx);.vo
0330: 69 64 20 72 68 61 73 68 5f 73 68 61 33 5f 33 38  id rhash_sha3_38
0340: 34 5f 69 6e 69 74 28 73 68 61 33 5f 63 74 78 20  4_init(sha3_ctx 
0350: 2a 63 74 78 29 3b 0a 76 6f 69 64 20 72 68 61 73  *ctx);.void rhas
0360: 68 5f 73 68 61 33 5f 35 31 32 5f 69 6e 69 74 28  h_sha3_512_init(
0370: 73 68 61 33 5f 63 74 78 20 2a 63 74 78 29 3b 0a  sha3_ctx *ctx);.
0380: 76 6f 69 64 20 72 68 61 73 68 5f 73 68 61 33 5f  void rhash_sha3_
0390: 75 70 64 61 74 65 28 73 68 61 33 5f 63 74 78 20  update(sha3_ctx 
03a0: 2a 63 74 78 2c 20 63 6f 6e 73 74 20 75 6e 73 69  *ctx, const unsi
03b0: 67 6e 65 64 20 63 68 61 72 2a 20 6d 73 67 2c 20  gned char* msg, 
03c0: 73 69 7a 65 5f 74 20 73 69 7a 65 29 3b 0a 76 6f  size_t size);.vo
03d0: 69 64 20 72 68 61 73 68 5f 73 68 61 33 5f 66 69  id rhash_sha3_fi
03e0: 6e 61 6c 28 73 68 61 33 5f 63 74 78 20 2a 63 74  nal(sha3_ctx *ct
03f0: 78 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  x, unsigned char
0400: 2a 20 72 65 73 75 6c 74 29 3b 0a 0a 23 69 66 64  * result);..#ifd
0410: 65 66 20 55 53 45 5f 4b 45 43 43 41 4b 0a 23 64  ef USE_KECCAK.#d
0420: 65 66 69 6e 65 20 72 68 61 73 68 5f 6b 65 63 63  efine rhash_kecc
0430: 61 6b 5f 32 32 34 5f 69 6e 69 74 20 72 68 61 73  ak_224_init rhas
0440: 68 5f 73 68 61 33 5f 32 32 34 5f 69 6e 69 74 0a  h_sha3_224_init.
0450: 23 64 65 66 69 6e 65 20 72 68 61 73 68 5f 6b 65  #define rhash_ke
0460: 63 63 61 6b 5f 32 35 36 5f 69 6e 69 74 20 72 68  ccak_256_init rh
0470: 61 73 68 5f 73 68 61 33 5f 32 35 36 5f 69 6e 69  ash_sha3_256_ini
0480: 74 0a 23 64 65 66 69 6e 65 20 72 68 61 73 68 5f  t.#define rhash_
0490: 6b 65 63 63 61 6b 5f 33 38 34 5f 69 6e 69 74 20  keccak_384_init 
04a0: 72 68 61 73 68 5f 73 68 61 33 5f 33 38 34 5f 69  rhash_sha3_384_i
04b0: 6e 69 74 0a 23 64 65 66 69 6e 65 20 72 68 61 73  nit.#define rhas
04c0: 68 5f 6b 65 63 63 61 6b 5f 35 31 32 5f 69 6e 69  h_keccak_512_ini
04d0: 74 20 72 68 61 73 68 5f 73 68 61 33 5f 35 31 32  t rhash_sha3_512
04e0: 5f 69 6e 69 74 0a 23 64 65 66 69 6e 65 20 72 68  _init.#define rh
04f0: 61 73 68 5f 6b 65 63 63 61 6b 5f 75 70 64 61 74  ash_keccak_updat
0500: 65 20 72 68 61 73 68 5f 73 68 61 33 5f 75 70 64  e rhash_sha3_upd
0510: 61 74 65 0a 76 6f 69 64 20 72 68 61 73 68 5f 6b  ate.void rhash_k
0520: 65 63 63 61 6b 5f 66 69 6e 61 6c 28 73 68 61 33  eccak_final(sha3
0530: 5f 63 74 78 20 2a 63 74 78 2c 20 75 6e 73 69 67  _ctx *ctx, unsig
0540: 6e 65 64 20 63 68 61 72 2a 20 72 65 73 75 6c 74  ned char* result
0550: 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
0560: 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 7d 20  f __cplusplus.} 
0570: 2f 2a 20 65 78 74 65 72 6e 20 22 43 22 20 2a 2f  /* extern "C" */
0580: 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 5f 63 70 6c  .#endif /* __cpl
0590: 75 73 70 6c 75 73 20 2a 2f 0a 0a 23 65 6e 64 69  usplus */..#endi
05a0: 66 20 2f 2a 20 52 48 41 53 48 5f 53 48 41 33 5f  f /* RHASH_SHA3_
05b0: 48 20 2a 2f 0a                                   H */.