25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

91 lines
2.6 KiB

  1. #ifndef FIPS202_H
  2. #define FIPS202_H
  3. #include <stddef.h>
  4. #include <stdint.h>
  5. #define SHAKE128_RATE 168
  6. #define SHAKE256_RATE 136
  7. #define SHA3_256_RATE 136
  8. #define SHA3_384_RATE 104
  9. #define SHA3_512_RATE 72
  10. // Context for incremental API
  11. typedef struct {
  12. uint64_t ctx[26];
  13. } shake128incctx;
  14. // Context for non-incremental API
  15. typedef struct {
  16. uint64_t ctx[25];
  17. } shake128ctx;
  18. // Context for incremental API
  19. typedef struct {
  20. uint64_t ctx[26];
  21. } shake256incctx;
  22. // Context for non-incremental API
  23. typedef struct {
  24. uint64_t ctx[25];
  25. } shake256ctx;
  26. // Context for incremental API
  27. typedef struct {
  28. uint64_t ctx[26];
  29. } sha3_256incctx;
  30. // Context for incremental API
  31. typedef struct {
  32. uint64_t ctx[26];
  33. } sha3_384incctx;
  34. // Context for incremental API
  35. typedef struct {
  36. uint64_t ctx[26];
  37. } sha3_512incctx;
  38. void shake128_absorb(shake128ctx *state, const uint8_t *input, size_t inlen);
  39. void shake128_squeezeblocks(uint8_t *output, size_t nblocks, shake128ctx *state);
  40. void shake128_inc_init(shake128incctx *state);
  41. void shake128_inc_absorb(shake128incctx *state, const uint8_t *input, size_t inlen);
  42. void shake128_inc_finalize(shake128incctx *state);
  43. void shake128_inc_squeeze(uint8_t *output, size_t outlen, shake128incctx *state);
  44. void shake256_absorb(shake256ctx *state, const uint8_t *input, size_t inlen);
  45. void shake256_squeezeblocks(uint8_t *output, size_t nblocks, shake256ctx *state);
  46. void shake256_inc_init(shake256incctx *state);
  47. void shake256_inc_absorb(shake256incctx *state, const uint8_t *input, size_t inlen);
  48. void shake256_inc_finalize(shake256incctx *state);
  49. void shake256_inc_squeeze(uint8_t *output, size_t outlen, shake256incctx *state);
  50. void shake128(uint8_t *output, size_t outlen,
  51. const uint8_t *input, size_t inlen);
  52. void shake256(uint8_t *output, size_t outlen,
  53. const uint8_t *input, size_t inlen);
  54. void sha3_256_inc_init(sha3_256incctx *state);
  55. void sha3_256_inc_absorb(sha3_256incctx *state, const uint8_t *input, size_t inlen);
  56. void sha3_256_inc_finalize(uint8_t *output, sha3_256incctx *state);
  57. void sha3_256(uint8_t *output, const uint8_t *input, size_t inlen);
  58. void sha3_384_inc_init(sha3_384incctx *state);
  59. void sha3_384_inc_absorb(sha3_384incctx *state, const uint8_t *input, size_t inlen);
  60. void sha3_384_inc_finalize(uint8_t *output, sha3_384incctx *state);
  61. void sha3_384(uint8_t *output, const uint8_t *input, size_t inlen);
  62. void sha3_512_inc_init(sha3_512incctx *state);
  63. void sha3_512_inc_absorb(sha3_512incctx *state, const uint8_t *input, size_t inlen);
  64. void sha3_512_inc_finalize(uint8_t *output, sha3_512incctx *state);
  65. void sha3_512(uint8_t *output, const uint8_t *input, size_t inlen);
  66. #endif