Home | History | Annotate | Line # | Download | only in sodium
      1 #ifndef crypto_pwhash_H
      2 #define crypto_pwhash_H
      3 
      4 #include <stddef.h>
      5 
      6 #include "crypto_pwhash_argon2i.h"
      7 #include "crypto_pwhash_argon2id.h"
      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_ALG_ARGON2I13 crypto_pwhash_argon2i_ALG_ARGON2I13
     18 SODIUM_EXPORT
     19 int crypto_pwhash_alg_argon2i13(void);
     20 
     21 #define crypto_pwhash_ALG_ARGON2ID13 crypto_pwhash_argon2id_ALG_ARGON2ID13
     22 SODIUM_EXPORT
     23 int crypto_pwhash_alg_argon2id13(void);
     24 
     25 #define crypto_pwhash_ALG_DEFAULT crypto_pwhash_ALG_ARGON2ID13
     26 SODIUM_EXPORT
     27 int crypto_pwhash_alg_default(void);
     28 
     29 #define crypto_pwhash_BYTES_MIN crypto_pwhash_argon2id_BYTES_MIN
     30 SODIUM_EXPORT
     31 size_t crypto_pwhash_bytes_min(void);
     32 
     33 #define crypto_pwhash_BYTES_MAX crypto_pwhash_argon2id_BYTES_MAX
     34 SODIUM_EXPORT
     35 size_t crypto_pwhash_bytes_max(void);
     36 
     37 #define crypto_pwhash_PASSWD_MIN crypto_pwhash_argon2id_PASSWD_MIN
     38 SODIUM_EXPORT
     39 size_t crypto_pwhash_passwd_min(void);
     40 
     41 #define crypto_pwhash_PASSWD_MAX crypto_pwhash_argon2id_PASSWD_MAX
     42 SODIUM_EXPORT
     43 size_t crypto_pwhash_passwd_max(void);
     44 
     45 #define crypto_pwhash_SALTBYTES crypto_pwhash_argon2id_SALTBYTES
     46 SODIUM_EXPORT
     47 size_t crypto_pwhash_saltbytes(void);
     48 
     49 #define crypto_pwhash_STRBYTES crypto_pwhash_argon2id_STRBYTES
     50 SODIUM_EXPORT
     51 size_t crypto_pwhash_strbytes(void);
     52 
     53 #define crypto_pwhash_STRPREFIX crypto_pwhash_argon2id_STRPREFIX
     54 SODIUM_EXPORT
     55 const char *crypto_pwhash_strprefix(void);
     56 
     57 #define crypto_pwhash_OPSLIMIT_MIN crypto_pwhash_argon2id_OPSLIMIT_MIN
     58 SODIUM_EXPORT
     59 size_t crypto_pwhash_opslimit_min(void);
     60 
     61 #define crypto_pwhash_OPSLIMIT_MAX crypto_pwhash_argon2id_OPSLIMIT_MAX
     62 SODIUM_EXPORT
     63 size_t crypto_pwhash_opslimit_max(void);
     64 
     65 #define crypto_pwhash_MEMLIMIT_MIN crypto_pwhash_argon2id_MEMLIMIT_MIN
     66 SODIUM_EXPORT
     67 size_t crypto_pwhash_memlimit_min(void);
     68 
     69 #define crypto_pwhash_MEMLIMIT_MAX crypto_pwhash_argon2id_MEMLIMIT_MAX
     70 SODIUM_EXPORT
     71 size_t crypto_pwhash_memlimit_max(void);
     72 
     73 #define crypto_pwhash_OPSLIMIT_INTERACTIVE crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE
     74 SODIUM_EXPORT
     75 size_t crypto_pwhash_opslimit_interactive(void);
     76 
     77 #define crypto_pwhash_MEMLIMIT_INTERACTIVE crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE
     78 SODIUM_EXPORT
     79 size_t crypto_pwhash_memlimit_interactive(void);
     80 
     81 #define crypto_pwhash_OPSLIMIT_MODERATE crypto_pwhash_argon2id_OPSLIMIT_MODERATE
     82 SODIUM_EXPORT
     83 size_t crypto_pwhash_opslimit_moderate(void);
     84 
     85 #define crypto_pwhash_MEMLIMIT_MODERATE crypto_pwhash_argon2id_MEMLIMIT_MODERATE
     86 SODIUM_EXPORT
     87 size_t crypto_pwhash_memlimit_moderate(void);
     88 
     89 #define crypto_pwhash_OPSLIMIT_SENSITIVE crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE
     90 SODIUM_EXPORT
     91 size_t crypto_pwhash_opslimit_sensitive(void);
     92 
     93 #define crypto_pwhash_MEMLIMIT_SENSITIVE crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE
     94 SODIUM_EXPORT
     95 size_t crypto_pwhash_memlimit_sensitive(void);
     96 
     97 /*
     98  * With this function, do not forget to store all parameters, including the
     99  * algorithm identifier in order to produce deterministic output.
    100  * The crypto_pwhash_* definitions, including crypto_pwhash_ALG_DEFAULT,
    101  * may change.
    102  */
    103 SODIUM_EXPORT
    104 int crypto_pwhash(unsigned char * const out, unsigned long long outlen,
    105                   const char * const passwd, unsigned long long passwdlen,
    106                   const unsigned char * const salt,
    107                   unsigned long long opslimit, size_t memlimit, int alg)
    108             __attribute__ ((warn_unused_result));
    109 
    110 /*
    111  * The output string already includes all the required parameters, including
    112  * the algorithm identifier. The string is all that has to be stored in
    113  * order to verify a password.
    114  */
    115 SODIUM_EXPORT
    116 int crypto_pwhash_str(char out[crypto_pwhash_STRBYTES],
    117                       const char * const passwd, unsigned long long passwdlen,
    118                       unsigned long long opslimit, size_t memlimit)
    119             __attribute__ ((warn_unused_result));
    120 
    121 SODIUM_EXPORT
    122 int crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES],
    123                           const char * const passwd, unsigned long long passwdlen,
    124                           unsigned long long opslimit, size_t memlimit, int alg)
    125             __attribute__ ((warn_unused_result));
    126 
    127 SODIUM_EXPORT
    128 int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES],
    129                              const char * const passwd,
    130                              unsigned long long passwdlen)
    131             __attribute__ ((warn_unused_result));
    132 
    133 SODIUM_EXPORT
    134 int crypto_pwhash_str_needs_rehash(const char str[crypto_pwhash_STRBYTES],
    135                                    unsigned long long opslimit, size_t memlimit)
    136             __attribute__ ((warn_unused_result));
    137 
    138 #define crypto_pwhash_PRIMITIVE "argon2i"
    139 SODIUM_EXPORT
    140 const char *crypto_pwhash_primitive(void)
    141             __attribute__ ((warn_unused_result));
    142 
    143 #ifdef __cplusplus
    144 }
    145 #endif
    146 
    147 #endif
    148