
1: #include <crypt.h> 2: #include <stdio.h> 3: #include <string.h> 4: 5: static const struct 6: { 7: const char *salt; 8: const char *input; 9: const char *expected; 10: } tests[] = 11: { 12: { "$5$saltstring", "Hello world!", 13: "$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5" }, 14: { "$5$rounds=10000$saltstringsaltstring", "Hello world!", 15: "$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2." 16: "opqey6IcA" }, 17: { "$5$rounds=5000$toolongsaltstring", "This is just a test", 18: "$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8" 19: "mGRcvxa5" }, 20: { "$5$rounds=1400$anotherlongsaltstring", 21: "a very much longer text to encrypt. This one even stretches over more" 22: "than one line.", 23: "$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12" 24: "oP84Bnq1" }, 25: { "$5$rounds=77777$short", 26: "we have a short salt string but not a short password", 27: "$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/" }, 28: { "$5$rounds=123456$asaltof16chars..", "a short string", 29: "$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/" 30: "cZKmF/wJvD" }, 31: { "$5$rounds=10$roundstoolow", "the minimum number is still observed", 32: "$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL97" 33: "2bIC" }, 34: }; 35: #define ntests (sizeof (tests) / sizeof (tests[0])) 36: 37: 38: 39: static int 40: do_test (void) 41: { 42: int result = 0; 43: int i; 44: 45: for (i = 0; i < ntests; ++i) 46: { 47: char *cp = crypt (tests[i].input, tests[i].salt); 48: 49: if (strcmp (cp, tests[i].expected) != 0) 50: { 51: printf ("test %d: expected \"%s\", got \"%s\"\n", 52: i, tests[i].expected, cp); 53: result = 1; 54: } 55: } 56: 57: return result; 58: } 59: 60: #define TEST_FUNCTION do_test () 61: #include "../test-skeleton.c"