summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Unangst <tedu@cvs.openbsd.org>2013-06-04 16:15:36 +0000
committerTed Unangst <tedu@cvs.openbsd.org>2013-06-04 16:15:36 +0000
commitd42de3ca73a676c41580e8334047ccd882045fa5 (patch)
tree093d54655f0c19474d23d08759b5cd25c2617007
parent9e05e89364efd3aa7956c7e95924a3159bc4dec1 (diff)
tests for bcrypt_pbkdf_test.c
-rw-r--r--regress/lib/libutil/bcrypt_pbkdf/Makefile7
-rw-r--r--regress/lib/libutil/bcrypt_pbkdf/bcrypt_pbkdf_test.c129
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;
+}