1 #ifndef crypto_pwhash_argon2id_H 2 #define crypto_pwhash_argon2id_H 3 4 #include <limits.h> 5 #include <stddef.h> 6 #include <stdint.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 #define crypto_pwhash_argon2id_ALG_ARGON2ID13 2 18 SODIUM_EXPORT 19 int crypto_pwhash_argon2id_alg_argon2id13(void); 20 21 #define crypto_pwhash_argon2id_BYTES_MIN 16U 22 SODIUM_EXPORT 23 size_t crypto_pwhash_argon2id_bytes_min(void); 24 25 #define crypto_pwhash_argon2id_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) 26 SODIUM_EXPORT 27 size_t crypto_pwhash_argon2id_bytes_max(void); 28 29 #define crypto_pwhash_argon2id_PASSWD_MIN 0U 30 SODIUM_EXPORT 31 size_t crypto_pwhash_argon2id_passwd_min(void); 32 33 #define crypto_pwhash_argon2id_PASSWD_MAX 4294967295U 34 SODIUM_EXPORT 35 size_t crypto_pwhash_argon2id_passwd_max(void); 36 37 #define crypto_pwhash_argon2id_SALTBYTES 16U 38 SODIUM_EXPORT 39 size_t crypto_pwhash_argon2id_saltbytes(void); 40 41 #define crypto_pwhash_argon2id_STRBYTES 128U 42 SODIUM_EXPORT 43 size_t crypto_pwhash_argon2id_strbytes(void); 44 45 #define crypto_pwhash_argon2id_STRPREFIX "$argon2id$" 46 SODIUM_EXPORT 47 const char *crypto_pwhash_argon2id_strprefix(void); 48 49 #define crypto_pwhash_argon2id_OPSLIMIT_MIN 1U 50 SODIUM_EXPORT 51 size_t crypto_pwhash_argon2id_opslimit_min(void); 52 53 #define crypto_pwhash_argon2id_OPSLIMIT_MAX 4294967295U 54 SODIUM_EXPORT 55 size_t crypto_pwhash_argon2id_opslimit_max(void); 56 57 #define crypto_pwhash_argon2id_MEMLIMIT_MIN 8192U 58 SODIUM_EXPORT 59 size_t crypto_pwhash_argon2id_memlimit_min(void); 60 61 #define crypto_pwhash_argon2id_MEMLIMIT_MAX \ 62 ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) 63 SODIUM_EXPORT 64 size_t crypto_pwhash_argon2id_memlimit_max(void); 65 66 #define crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE 2U 67 SODIUM_EXPORT 68 size_t crypto_pwhash_argon2id_opslimit_interactive(void); 69 70 #define crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE 67108864U 71 SODIUM_EXPORT 72 size_t crypto_pwhash_argon2id_memlimit_interactive(void); 73 74 #define crypto_pwhash_argon2id_OPSLIMIT_MODERATE 3U 75 SODIUM_EXPORT 76 size_t crypto_pwhash_argon2id_opslimit_moderate(void); 77 78 #define crypto_pwhash_argon2id_MEMLIMIT_MODERATE 268435456U 79 SODIUM_EXPORT 80 size_t crypto_pwhash_argon2id_memlimit_moderate(void); 81 82 #define crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE 4U 83 SODIUM_EXPORT 84 size_t crypto_pwhash_argon2id_opslimit_sensitive(void); 85 86 #define crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE 1073741824U 87 SODIUM_EXPORT 88 size_t crypto_pwhash_argon2id_memlimit_sensitive(void); 89 90 SODIUM_EXPORT 91 int crypto_pwhash_argon2id(unsigned char * const out, 92 unsigned long long outlen, 93 const char * const passwd, 94 unsigned long long passwdlen, 95 const unsigned char * const salt, 96 unsigned long long opslimit, size_t memlimit, 97 int alg) 98 __attribute__ ((warn_unused_result)); 99 100 SODIUM_EXPORT 101 int crypto_pwhash_argon2id_str(char out[crypto_pwhash_argon2id_STRBYTES], 102 const char * const passwd, 103 unsigned long long passwdlen, 104 unsigned long long opslimit, size_t memlimit) 105 __attribute__ ((warn_unused_result)); 106 107 SODIUM_EXPORT 108 int crypto_pwhash_argon2id_str_verify(const char str[crypto_pwhash_argon2id_STRBYTES], 109 const char * const passwd, 110 unsigned long long passwdlen) 111 __attribute__ ((warn_unused_result)); 112 113 SODIUM_EXPORT 114 int crypto_pwhash_argon2id_str_needs_rehash(const char str[crypto_pwhash_argon2id_STRBYTES], 115 unsigned long long opslimit, size_t memlimit) 116 __attribute__ ((warn_unused_result)); 117 118 #ifdef __cplusplus 119 } 120 #endif 121 122 #endif 123