mirror of
https://github.com/jedisct1/libsodium.git
synced 2026-08-29 05:07:13 +09:00
82 lines
2.1 KiB
C
82 lines
2.1 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#define TEST_NAME "pwhash_scrypt_ll"
|
|
#include "cmptest.h"
|
|
|
|
/* Tarsnap test vectors, see: https://www.tarsnap.com/scrypt/scrypt.pdf */
|
|
unsigned long olenGlobal = 64ul;
|
|
|
|
uint8_t password1[] = "\0";
|
|
uint8_t salt1[] = "\0";
|
|
uint64_t N1 = 16ul;
|
|
uint32_t r1 = 1ul;
|
|
uint32_t p1 = 1ul;
|
|
|
|
uint8_t password2[] = "password\0";
|
|
uint8_t salt2[] = "NaCl\0";
|
|
uint64_t N2 = 1024ul;
|
|
uint32_t r2 = 8ul;
|
|
uint32_t p2 = 16ul;
|
|
|
|
uint8_t password3[] = "pleaseletmein\0";
|
|
uint8_t salt3[] = "SodiumChloride\0";
|
|
uint64_t N3 = 16384ul;
|
|
uint32_t r3 = 8ul;
|
|
uint32_t p3 = 1ul;
|
|
|
|
uint8_t password4[] = "pleaseletmein\0";
|
|
uint8_t salt4[] = "SodiumChloride\0";
|
|
size_t N4 = 1048576ul;
|
|
size_t r4 = 8ul;
|
|
size_t p4 = 1ul;
|
|
|
|
void test_vector(uint8_t * password, size_t passwordLength, uint8_t * salt, size_t saltLenght, uint64_t N, uint32_t r, uint32_t p, size_t olen)
|
|
{
|
|
uint8_t data[olen];
|
|
int ret = crypto_pwhash_scryptsalsa208sha256_ll(password, passwordLength, salt, saltLenght, N, r, p, data, olen);
|
|
if(ret != 0)
|
|
{
|
|
printf("crypto_scrypt_compat failed!");
|
|
}
|
|
|
|
// Print header
|
|
printf("scrypt(“");
|
|
printf("%s", password);
|
|
printf("”, “");
|
|
printf("%s", salt);
|
|
printf("”, %lu, %lu, %lu, %lu) =\n", N, r, p, olen);
|
|
|
|
// Print test result
|
|
int lineitems = 0;
|
|
const int lineitemsLimit = 15;
|
|
for(int i = 0; i < olen; ++i)
|
|
{
|
|
printf("%02x", data[i]);
|
|
printf((lineitems < lineitemsLimit)? " " : "\n");
|
|
lineitems = (lineitems < lineitemsLimit)? lineitems+1 : 0;
|
|
}
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
test_vector(
|
|
password1, strlen((const char*)password1),
|
|
salt1, strlen((const char*)salt1),
|
|
N1, r1, p1, olenGlobal);
|
|
test_vector(
|
|
password2, strlen((const char*)password2),
|
|
salt2, strlen((const char*)salt2),
|
|
N2, r2, p2, olenGlobal);
|
|
test_vector(
|
|
password3, strlen((const char*)password3),
|
|
salt3, strlen((const char*)salt3),
|
|
N3, r3, p3, olenGlobal);
|
|
test_vector(
|
|
password4, strlen((const char*)password4),
|
|
salt4, strlen((const char*)salt4),
|
|
N4, r4, p4, olenGlobal);
|
|
|
|
return 0;
|
|
}
|