Add crypto_pwhash_str_alg()

This commit is contained in:
Frank Denis 2017-08-05 20:56:59 +02:00
parent 9d03fbb38c
commit a894ec93f2
3 changed files with 32 additions and 0 deletions

View File

@ -2,6 +2,7 @@
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
#include "core.h"
#include "crypto_pwhash.h" #include "crypto_pwhash.h"
int int
@ -150,6 +151,23 @@ crypto_pwhash_str(char out[crypto_pwhash_STRBYTES],
opslimit, memlimit); opslimit, memlimit);
} }
int
crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES],
const char * const passwd, unsigned long long passwdlen,
unsigned long long opslimit, size_t memlimit, int alg)
{
switch (alg) {
case crypto_pwhash_ALG_ARGON2I13:
return crypto_pwhash_argon2i_str(out, passwd, passwdlen,
opslimit, memlimit);
case crypto_pwhash_ALG_ARGON2ID13:
return crypto_pwhash_argon2id_str(out, passwd, passwdlen,
opslimit, memlimit);
default:
sodium_misuse();
}
}
int int
crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES], crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES],
const char * const passwd, const char * const passwd,

View File

@ -107,6 +107,12 @@ int crypto_pwhash_str(char out[crypto_pwhash_STRBYTES],
unsigned long long opslimit, size_t memlimit) unsigned long long opslimit, size_t memlimit)
__attribute__ ((warn_unused_result)); __attribute__ ((warn_unused_result));
SODIUM_EXPORT
int crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES],
const char * const passwd, unsigned long long passwdlen,
unsigned long long opslimit, size_t memlimit, int alg)
__attribute__ ((warn_unused_result));
SODIUM_EXPORT SODIUM_EXPORT
int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES], int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES],
const char * const passwd, const char * const passwd,

View File

@ -349,6 +349,14 @@ main(void)
"password", strlen("password")) != -1 || errno != EINVAL) { "password", strlen("password")) != -1 || errno != EINVAL) {
printf("pwhash_str_verify(invalid(11)) failure\n"); printf("pwhash_str_verify(invalid(11)) failure\n");
} }
assert(crypto_pwhash_str_alg(str_out, "test", 4, OPSLIMIT, MEMLIMIT,
crypto_pwhash_ALG_ARGON2I13) == 0);
assert(crypto_pwhash_argon2i_str_verify(str_out, "test", 4) == 0);
assert(crypto_pwhash_str_alg(str_out, "test", 4, OPSLIMIT, MEMLIMIT,
crypto_pwhash_ALG_ARGON2ID13) == 0);
assert(crypto_pwhash_argon2id_str_verify(str_out, "test", 4) == 0);
assert(crypto_pwhash_bytes_min() > 0U); assert(crypto_pwhash_bytes_min() > 0U);
assert(crypto_pwhash_bytes_max() > crypto_pwhash_bytes_min()); assert(crypto_pwhash_bytes_max() > crypto_pwhash_bytes_min());
assert(crypto_pwhash_passwd_max() > crypto_pwhash_passwd_min()); assert(crypto_pwhash_passwd_max() > crypto_pwhash_passwd_min());