diff options
author | Ted Unangst <tedu@cvs.openbsd.org> | 2013-06-04 16:15:36 +0000 |
---|---|---|
committer | Ted Unangst <tedu@cvs.openbsd.org> | 2013-06-04 16:15:36 +0000 |
commit | d42de3ca73a676c41580e8334047ccd882045fa5 (patch) | |
tree | 093d54655f0c19474d23d08759b5cd25c2617007 | |
parent | 9e05e89364efd3aa7956c7e95924a3159bc4dec1 (diff) |
tests for bcrypt_pbkdf_test.c
-rw-r--r-- | regress/lib/libutil/bcrypt_pbkdf/Makefile | 7 | ||||
-rw-r--r-- | regress/lib/libutil/bcrypt_pbkdf/bcrypt_pbkdf_test.c | 129 |
2 files changed, 136 insertions, 0 deletions
diff --git a/regress/lib/libutil/bcrypt_pbkdf/Makefile b/regress/lib/libutil/bcrypt_pbkdf/Makefile new file mode 100644 index 00000000000..b47990c4c54 --- /dev/null +++ b/regress/lib/libutil/bcrypt_pbkdf/Makefile @@ -0,0 +1,7 @@ +# $OpenBSD: Makefile,v 1.1 2013/06/04 16:15:35 tedu Exp $ + +PROG=bcrypt_pbkdf_test +LDADD=-lutil +DPADD=${LIBUTIL} + +.include <bsd.regress.mk> diff --git a/regress/lib/libutil/bcrypt_pbkdf/bcrypt_pbkdf_test.c b/regress/lib/libutil/bcrypt_pbkdf/bcrypt_pbkdf_test.c new file mode 100644 index 00000000000..f4057998cf8 --- /dev/null +++ b/regress/lib/libutil/bcrypt_pbkdf/bcrypt_pbkdf_test.c @@ -0,0 +1,129 @@ +#include <inttypes.h> +#include <stdio.h> + +#include <util.h> + +struct test { + int rounds; + size_t passlen; + const char *password; + size_t saltlen; + const uint8_t *salt; + size_t keylen; + const uint8_t *key; +}; + +struct test tests[] = { + /* basic */ + { 4, 8, "password", 4, "salt", 32, + "\xbe\x1e\xd7\x80\x31\xfc\x18\xd2\x4b\xea\x3b\xea\x9f\x80\x5e\x71" + "\xc5\xb9\xd2\x02\x7b\x5f\x25\xea\x9c\x45\x3b\x75\xe7\x4b\x87\x9f" + }, + { 4, 8, "password", 1, "", 16, + "\x97\xf7\xb6\x13\x7b\x02\xf7\x8f\x69\x39\x2e\x28\xff\x44\x72\xa6" + }, + { 4, 1, "", 4, "salt", 16, + "\x81\xcf\xc7\x92\x3e\x71\xb2\x19\x08\x5e\x1f\xc9\x36\x23\x0e\x43" + }, + /* nul bytes in password and string */ + { 4, 9, "password", 5, "salt", 32, + "\x20\xcc\x6c\xed\x16\x38\x76\xb6\x04\x98\x9e\x43\xa4\xff\x10\x3e" + "\xbd\xa3\x9f\x30\x84\x0a\x66\x18\x3d\xa8\x82\xe8\x27\xa8\x01\xc1" + }, + { 4, 8, "pass\0word", 4, "sa\0lt", 16, + "\xd6\xc3\xca\x46\x62\x45\x53\xaf\xfe\x75\xf1\xaf\x52\xdd\xeb\x39" + }, + { 4, 9, "pass\0word", 5, "sa\0lt", 16, + "\x72\x65\x56\x6e\xd2\x40\x00\x4c\x6d\x86\x05\xd4\x94\x80\x0a\x42" + }, + /* bigger key */ + { 8, 8, "password", 4, "salt", 64, + "\x89\x33\xf5\xab\x6b\x2a\xde\x1b\x8f\x09\x6a\x4e\x41\xbc\x40\x21" + "\x70\x1a\xfb\xe3\xc3\x5e\x39\x93\x1c\xb1\x27\xd3\xb7\x68\xf4\x71" + "\x69\x93\x6b\xd7\x3e\xdc\x00\x07\x20\xcf\x26\xa0\x71\x98\xac\x1c" + "\xf0\x06\x26\x64\xf3\x2b\x10\x43\x29\xdb\x88\x0a\xb5\x93\x06\x6f" + }, + /* more rounds */ + { 42, 8, "password", 4, "salt", 16, + "\x0d\xb3\xac\x94\xb3\xee\x53\x28\x4f\x4a\x22\x89\x3b\x3c\x24\xae" + }, + /* longer password */ + { 8, 445, + "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do" + "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut " + "enim ad minim veniam, quis nostrud exercitation ullamco laboris " + "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor " + "in reprehenderit in voluptate velit esse cillum dolore eu fugiat " + "nulla pariatur. Excepteur sint occaecat cupidatat non proident, " + "sunt in culpa qui officia deserunt mollit anim id est laborum.", + 6, "salis", 16, + "\x3a\x62\xf0\xf0\xdb\xce\xf8\x23\xcf\xcc\x85\x48\x56\xea\x10\x28" + }, + /* "unicode" */ + { 8, + 16, "\x0d\xb3\xac\x94\xb3\xee\x53\x28\x4f\x4a\x22\x89\x3b\x3c\x24\xae", + 16, "\x3a\x62\xf0\xf0\xdb\xce\xf8\x23\xcf\xcc\x85\x48\x56\xea\x10\x28", + 16, "\x05\xbc\x80\xc5\x1f\x3c\x95\x77\x71\x72\xef\x43\x27\xef\x03\xd2" + }, + /* very large key */ + { 8, + 16, "\x0d\xb3\xac\x94\xb3\xee\x53\x28\x4f\x4a\x22\x89\x3b\x3c\x24\xae", + 16, "\x3a\x62\xf0\xf0\xdb\xce\xf8\x23\xcf\xcc\x85\x48\x56\xea\x10\x28", + 256, + "\x05\xeb\x9b\x47\xbd\x01\x70\x21\xbc\x98\xfc\x99\x5b\x40\x57\x95" + "\x80\xa5\xa5\x0b\x33\x76\xa0\x45\xc5\x83\xb9\xb8\x12\x6f\x8e\x15" + "\x1f\xd6\xd0\x0f\x8f\x34\xa4\x1f\x3c\x3d\x68\x2c\xca\xeb\xa6\x48" + "\x95\xba\x46\xb6\x62\xd1\xf5\xf2\x77\x97\x7e\xab\x2a\x53\xeb\x32" + "\x71\x55\xf4\x6a\x77\x51\xa1\x94\x72\xdb\x98\x85\xb7\x6d\x48\x19" + "\xef\x34\xaf\x62\xd3\x03\x14\xe9\x43\x59\xec\x6f\x91\xb0\x62\xda" + "\x27\xa1\x12\xe1\xa1\xc4\x3d\x2d\xef\xeb\xe2\x5d\xb7\xf3\x2e\x74" + "\x03\xce\x8f\xb6\xba\xec\x92\x83\xd2\x16\xfa\x2e\x36\x3b\x25\xc6" + "\xc7\x93\x2f\xe3\xf4\x67\x2a\x06\x26\x74\xec\x4b\x09\x34\x7f\x5f" + "\xff\xe4\xfe\xe0\x23\x42\xe0\x8d\xa7\x97\xca\xe2\xc6\xe8\x93\xd1" + "\x66\x9d\x2d\x6c\xa1\x16\xb3\xf9\x2d\x89\x64\x71\x5d\x8a\xc4\x2f" + "\xcc\x57\xfe\x0a\x0d\x56\x5e\xd0\x75\x0e\x91\x86\x27\xf7\xcb\xd6" + "\x11\x87\xcf\xd8\x3d\xca\x4b\xc4\x7b\x9e\xf4\x3b\x61\xec\xa8\xb3" + "\xbe\xaf\xd9\x82\xdf\x31\xe5\xba\xa7\x14\x5b\xd8\xf0\xda\x15\x13" + "\xed\x0a\xe1\x69\xc8\x84\x59\x5e\x6a\x1d\x59\x13\x53\x5b\x03\xe2" + "\xb7\x0c\xe1\xb3\xd9\x89\x9f\x57\x31\x2e\xd9\x52\x79\x1e\xb4\x58" + }, +}; + +void +printkey(uint8_t *key, size_t keylen) +{ + int k; + + for (k = 0; k < keylen; k++) { + printf("\\x%.2x", key[k]); + if (k % 16 == 15) + printf("\n"); + } + printf("\n"); +} + +int +main() +{ + uint8_t key[1024]; + char *password = "password"; + char *salt = "salt"; + int i, fails; + struct test *t; + + fails = 0; + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + t = &tests[i]; + bcrypt_pbkdf(t->password, t->passlen, t->salt, t->saltlen, + key, t->keylen, t->rounds); + if (memcmp(key, t->key, t->keylen) != 0) { + printf("test %d FAILED\n", i); + printf("expected:\n"); + printkey(t->key, t->keylen); + printf("result:\n"); + printkey(key, t->keylen); + fails++; + } + } + return fails; +} |