1 #ifndef crypto_generichash_blake2b_H 2 #define crypto_generichash_blake2b_H 3 4 #include <stddef.h> 5 #include <stdint.h> 6 #include <stdlib.h> 7 8 #include "export.h" 9 10 #ifdef __cplusplus 11 # ifdef __GNUC__ 12 # pragma GCC diagnostic ignored "-Wlong-long" 13 # endif 14 extern "C" { 15 #endif 16 17 #if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) 18 # pragma pack(1) 19 #else 20 # pragma pack(push, 1) 21 #endif 22 23 typedef struct CRYPTO_ALIGN(64) crypto_generichash_blake2b_state { 24 uint64_t h[8]; 25 uint64_t t[2]; 26 uint64_t f[2]; 27 uint8_t buf[2 * 128]; 28 size_t buflen; 29 uint8_t last_node; 30 } crypto_generichash_blake2b_state; 31 32 #if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) 33 # pragma pack() 34 #else 35 # pragma pack(pop) 36 #endif 37 38 #define crypto_generichash_blake2b_BYTES_MIN 16U 39 SODIUM_EXPORT 40 size_t crypto_generichash_blake2b_bytes_min(void); 41 42 #define crypto_generichash_blake2b_BYTES_MAX 64U 43 SODIUM_EXPORT 44 size_t crypto_generichash_blake2b_bytes_max(void); 45 46 #define crypto_generichash_blake2b_BYTES 32U 47 SODIUM_EXPORT 48 size_t crypto_generichash_blake2b_bytes(void); 49 50 #define crypto_generichash_blake2b_KEYBYTES_MIN 16U 51 SODIUM_EXPORT 52 size_t crypto_generichash_blake2b_keybytes_min(void); 53 54 #define crypto_generichash_blake2b_KEYBYTES_MAX 64U 55 SODIUM_EXPORT 56 size_t crypto_generichash_blake2b_keybytes_max(void); 57 58 #define crypto_generichash_blake2b_KEYBYTES 32U 59 SODIUM_EXPORT 60 size_t crypto_generichash_blake2b_keybytes(void); 61 62 #define crypto_generichash_blake2b_SALTBYTES 16U 63 SODIUM_EXPORT 64 size_t crypto_generichash_blake2b_saltbytes(void); 65 66 #define crypto_generichash_blake2b_PERSONALBYTES 16U 67 SODIUM_EXPORT 68 size_t crypto_generichash_blake2b_personalbytes(void); 69 70 SODIUM_EXPORT 71 size_t crypto_generichash_blake2b_statebytes(void); 72 73 SODIUM_EXPORT 74 int crypto_generichash_blake2b(unsigned char *out, size_t outlen, 75 const unsigned char *in, 76 unsigned long long inlen, 77 const unsigned char *key, size_t keylen); 78 79 SODIUM_EXPORT 80 int crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen, 81 const unsigned char *in, 82 unsigned long long inlen, 83 const unsigned char *key, 84 size_t keylen, 85 const unsigned char *salt, 86 const unsigned char *personal); 87 88 SODIUM_EXPORT 89 int crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state, 90 const unsigned char *key, 91 const size_t keylen, const size_t outlen); 92 93 SODIUM_EXPORT 94 int crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state, 95 const unsigned char *key, 96 const size_t keylen, const size_t outlen, 97 const unsigned char *salt, 98 const unsigned char *personal); 99 100 SODIUM_EXPORT 101 int crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state, 102 const unsigned char *in, 103 unsigned long long inlen); 104 105 SODIUM_EXPORT 106 int crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state, 107 unsigned char *out, 108 const size_t outlen); 109 110 SODIUM_EXPORT 111 void crypto_generichash_blake2b_keygen(unsigned char k[crypto_generichash_blake2b_KEYBYTES]); 112 113 #ifdef __cplusplus 114 } 115 #endif 116 117 #endif 118