blake2b.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #ifndef __BLAKE2B_H__
  2. #define __BLAKE2B_H__
  3. #include <stdint.h>
  4. #include <stddef.h>
  5. enum blake2b_constant {
  6. BLAKE2B_BLOCKBYTES = 128,
  7. BLAKE2B_OUTBYTES = 64,
  8. BLAKE2B_KEYBYTES = 64,
  9. BLAKE2B_SALTBYTES = 16,
  10. BLAKE2B_PERSONALBYTES = 16
  11. };
  12. typedef struct __blake2b_state {
  13. uint64_t h[8];
  14. uint64_t t[2];
  15. uint64_t f[2];
  16. uint8_t buf[BLAKE2B_BLOCKBYTES];
  17. size_t buflen;
  18. size_t outlen;
  19. uint8_t last_node;
  20. } blake2b_state;
  21. #define BLAKE2B_CTX blake2b_state
  22. #define BLAKE2B_BLOCK_LENGTH BLAKE2B_BLOCKBYTES
  23. #define BLAKE2B_DIGEST_LENGTH BLAKE2B_OUTBYTES
  24. #define BLAKE2B_KEY_LENGTH BLAKE2B_KEYBYTES
  25. int blake2b_Init(blake2b_state* S, size_t outlen);
  26. int blake2b_InitKey(blake2b_state* S, size_t outlen, const void* key, size_t keylen);
  27. int blake2b_InitPersonal(
  28. blake2b_state* S,
  29. size_t outlen,
  30. const void* personal,
  31. size_t personal_len);
  32. int blake2b_Update(blake2b_state* S, const void* pin, size_t inlen);
  33. int blake2b_Final(blake2b_state* S, void* out, size_t outlen);
  34. int blake2b(const uint8_t* msg, uint32_t msg_len, void* out, size_t outlen);
  35. int blake2b_Key(
  36. const uint8_t* msg,
  37. uint32_t msg_len,
  38. const void* key,
  39. size_t keylen,
  40. void* out,
  41. size_t outlen);
  42. #endif