diff --git a/test/default/pwhash_scrypt.c b/test/default/pwhash_scrypt.c index 3a8a02ed..334c2ed3 100644 --- a/test/default/pwhash_scrypt.c +++ b/test/default/pwhash_scrypt.c @@ -294,17 +294,14 @@ tv3(void) } while (++i < (sizeof tests) / (sizeof tests[0])); } -int -main(void) +static void +str_tests(void) { char *str_out; char *str_out2; char *salt; const char *passwd = "Correct Horse Battery Staple"; - tv(); - tv2(); - tv3(); salt = (char *) sodium_malloc(crypto_pwhash_scryptsalsa208sha256_SALTBYTES); str_out = (char *) sodium_malloc(crypto_pwhash_scryptsalsa208sha256_STRBYTES); @@ -323,6 +320,24 @@ main(void) if (strcmp(str_out, str_out2) == 0) { printf("pwhash_str doesn't generate different salts\n"); } + if (crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + (str_out, OPSLIMIT, MEMLIMIT) != 0) { + printf("needs_rehash() false positive\n"); + } + if (crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + (str_out, OPSLIMIT, MEMLIMIT / 2) != 1 || + crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + (str_out, OPSLIMIT / 2, MEMLIMIT) != 1 || + crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + (str_out, OPSLIMIT, MEMLIMIT * 2) != 1 || + crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + (str_out, OPSLIMIT * 2, MEMLIMIT) != 1) { + printf("needs_rehash() false negative\n"); + } + if (crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + (str_out + 1, OPSLIMIT, MEMLIMIT) != -1) { + printf("needs_rehash() didn't fail with an invalid hash string\n"); + } if (crypto_pwhash_scryptsalsa208sha256_str_verify(str_out, passwd, strlen(passwd)) != 0) { printf("pwhash_str_verify failure\n"); @@ -339,6 +354,27 @@ main(void) str_out[14]--; assert(str_out[crypto_pwhash_scryptsalsa208sha256_STRBYTES - 1U] == 0); + + assert(crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + (str_out, 0, 0) == 1); + assert(crypto_pwhash_str_needs_rehash(str_out, 0, 0) == -1); + assert(crypto_pwhash_str_needs_rehash(str_out, OPSLIMIT, MEMLIMIT) == -1); + assert(crypto_pwhash_scryptsalsa208sha256_str_needs_rehash + ("", OPSLIMIT, MEMLIMIT) == -1); + + sodium_free(salt); + sodium_free(str_out); + sodium_free(str_out2); +} + +int +main(void) +{ + tv(); + tv2(); + tv3(); + str_tests(); + assert(crypto_pwhash_scryptsalsa208sha256_bytes_min() > 0U); assert(crypto_pwhash_scryptsalsa208sha256_bytes_max() > crypto_pwhash_scryptsalsa208sha256_bytes_min()); @@ -358,10 +394,6 @@ main(void) assert(crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive() > 0U); assert(crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive() > 0U); - sodium_free(salt); - sodium_free(str_out); - sodium_free(str_out2); - printf("OK\n"); return 0;