libsodium/test/default/pwhash_scrypt_ll.c
2014-09-14 11:32:55 -07:00

62 lines
1.8 KiB
C

#define TEST_NAME "pwhash_scrypt_ll"
#include "cmptest.h"
/* Tarsnap test vectors, see: https://www.tarsnap.com/scrypt/scrypt.pdf */
static const char *password1 = "";
static const char *salt1 = "";
static uint64_t N1 = 16U;
static uint32_t r1 = 1U;
static uint32_t p1 = 1U;
static const char *password2 = "password";
static const char *salt2 = "NaCl";
static uint64_t N2 = 1024U;
static uint32_t r2 = 8U;
static uint32_t p2 = 16U;
static const char *password3 = "pleaseletmein";
static const char *salt3 = "SodiumChloride";
static uint64_t N3 = 16384U;
static uint32_t r3 = 8U;
static uint32_t p3 = 1U;
static void test_vector(const char *password, const char *salt, uint64_t N,
uint32_t r, uint32_t p)
{
uint8_t data[64];
size_t i;
size_t olen = (sizeof data / sizeof data[0]);
size_t passwordLength = strlen(password);
size_t saltLenght = strlen(salt);
int lineitems = 0;
int lineitemsLimit = 15;
if (crypto_pwhash_scryptsalsa208sha256_ll(
(const uint8_t *)password, passwordLength, (const uint8_t *)salt,
saltLenght, N, r, p, data, olen) != 0) {
printf("pwhash_scryptsalsa208sha256_ll([%s],[%s]) failure\n", password,
salt);
return;
}
printf("scrypt('%s', '%s', %llu, %lu, %lu, %lu) =\n", password, salt,
(unsigned long long)N, (unsigned long)r, (unsigned long)p,
(unsigned long)olen);
for (i = 0; i < olen; ++i) {
printf("%02x%c", data[i], lineitems < lineitemsLimit ? ' ' : '\n');
lineitems = lineitems < lineitemsLimit ? lineitems + 1 : 0;
}
}
int main(void)
{
test_vector(password1, salt1, N1, r1, p1);
test_vector(password2, salt2, N2, r2, p2);
test_vector(password3, salt3, N3, r3, p3);
return 0;
}