|
Packit |
13e0ca |
#include "crypt-port.h"
|
|
Packit |
13e0ca |
#include "crypt-base.h"
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#include <stdio.h>
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#if INCLUDE_des || INCLUDE_des_xbsd || INCLUDE_des_big
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static const struct
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
const char *salt;
|
|
Packit |
13e0ca |
const char *expected;
|
|
Packit |
13e0ca |
const char *input;
|
|
Packit |
13e0ca |
} tests[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
#if INCLUDE_des
|
|
Packit |
13e0ca |
/* traditional-DES test vectors from John the Ripper */
|
|
Packit |
13e0ca |
{ "CC", "CCNf8Sbh3HDfQ", "U*U*U*U*" },
|
|
Packit |
13e0ca |
{ "CC", "CCNf8Sbh3HDfQ", "U*U*U*U*ignored" },
|
|
Packit |
13e0ca |
{ "CC", "CCX.K.MFy4Ois", "U*U***U" },
|
|
Packit |
13e0ca |
{ "CC", "CC4rMpbg9AMZ.", "U*U***U*" },
|
|
Packit |
13e0ca |
{ "CC", "CC4rMpbg9AMZ.", "U*U***U*ignored" },
|
|
Packit |
13e0ca |
{ "CC", "CC4rMpbg9AMZ.", "\xd5\xaa\xd5\xaa\xaa\xaa\xd5\xaa" },
|
|
Packit |
13e0ca |
{ "XX", "XXxzOu6maQKqQ", "*U*U*U*U" },
|
|
Packit |
13e0ca |
{ "SD", "SDbsugeBiC58A", "" },
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#if INCLUDE_des_xbsd
|
|
Packit |
13e0ca |
/* BSDI-extended-DES, ditto */
|
|
Packit |
13e0ca |
{ "_J9..CCCC", "_J9..CCCCXBrJUJV154M", "U*U*U*U*" },
|
|
Packit |
13e0ca |
{ "_J9..CCCC", "_J9..CCCCXUhOBTXzaiE", "U*U***U" },
|
|
Packit |
13e0ca |
{ "_J9..CCCC", "_J9..CCCC4gQ.mB/PffM", "U*U***U*" },
|
|
Packit |
13e0ca |
{ "_J9..XXXX", "_J9..XXXXvlzQGqpPPdk", "*U*U*U*U" },
|
|
Packit |
13e0ca |
{ "_J9..XXXX", "_J9..XXXXsqM/YSSP..Y", "*U*U*U*U*" },
|
|
Packit |
13e0ca |
{ "_J9..XXXX", "_J9..XXXXVL7qJCnku0I", "*U*U*U*U*U*U*U*U" },
|
|
Packit |
13e0ca |
{ "_J9..XXXX", "_J9..XXXXAj8cFbP5scI", "*U*U*U*U*U*U*U*U*" },
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"_J9..XXXX", "_J9..XXXXAj8cFbP5scI", "\xaa\xd5\xaa\xd5\xaa\xd5\xaa\xd5\xaa"
|
|
Packit |
13e0ca |
"\xd5\xaa\xd5\xaa\xd5\xaa\xd5\xaa"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{ "_J9..SDiz", "_J9..SDizh.vll5VED9g", "ab1234567" },
|
|
Packit |
13e0ca |
{ "_J9..SDiz", "_J9..SDizRjWQ/zePPHc", "cr1234567" },
|
|
Packit |
13e0ca |
{ "_J9..SDiz", "_J9..SDizxmRI1GjnQuE", "zxyDPWgydbQjgq" },
|
|
Packit |
13e0ca |
{ "_K9..Salt", "_K9..SaltNrQgIYUAeoY", "726 even" },
|
|
Packit |
13e0ca |
{ "_J9..SDSD", "_J9..SDSD5YGyRCr4W4c", "" },
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#if INCLUDE_des_big
|
|
Packit |
13e0ca |
/* 10 bigcrypt test vectors from pw-fake-unix.gz from the openwall
|
|
Packit |
13e0ca |
wiki. All have two blocks. The salt is padded with dots because
|
|
Packit |
13e0ca |
crypt_r will only use bigcrypt if the setting string begins with
|
|
Packit |
13e0ca |
a traditional DES salt but is too long to be a traditional DES
|
|
Packit |
13e0ca |
hashed password. */
|
|
Packit |
13e0ca |
{ "Cx..............", "CxcR5MY6TS58EVRba0DA/cW.", "alexander" },
|
|
Packit |
13e0ca |
{ "eA..............", "eAefYgT7O7cWwShgVcvPCWpU", "basketball" },
|
|
Packit |
13e0ca |
{ "6M..............", "6MvZdspyAL4QEId8ugLUEeDs", "stephanie" },
|
|
Packit |
13e0ca |
{ "yK..............", "yKeFi29DfxXCMFzjVJOeaENI", "sunflower" },
|
|
Packit |
13e0ca |
{ "vP..............", "vPg8Hd0cexDL.9m/J3pgIR5g", "chocolate" },
|
|
Packit |
13e0ca |
{ "MO..............", "MOZvn6LQiwA0UuKZQ.TsDlQo", "katherine" },
|
|
Packit |
13e0ca |
{ "MM..............", "MMSKdTXbtmJOEQI5wMYARXvA", "porsche911" },
|
|
Packit |
13e0ca |
{ "gC..............", "gCp41sS/OAC8kMNyK5vvZZEk", "thunderbird" },
|
|
Packit |
13e0ca |
{ "7S..............", "7SH0R.zErBC/AZBmehOoEQvw", "beautiful" },
|
|
Packit |
13e0ca |
{ "Xh..............", "XhWbBsxo8cYpYvYwQItwv0qc", "challenge" },
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
/* bigcrypt still discards the 8th bit of every character. */
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"Cx..............", "CxcR5MY6TS58EVRba0DA/cW.",
|
|
Packit |
13e0ca |
"\xe1\xec\xe5\xf8\xe1\xee\xe4\xe5\xf2" /* alexander */
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"6M..............", "6MvZdspyAL4QEId8ugLUEeDs",
|
|
Packit |
13e0ca |
"\xf3\xf4\xe5\xf0\xe8\xe1\xee\xe9\xe5" /* stephanie */
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#define ntests ARRAY_SIZE (tests)
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
int
|
|
Packit |
13e0ca |
main (void)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
struct crypt_data output;
|
|
Packit |
13e0ca |
int result = 0;
|
|
Packit |
13e0ca |
unsigned int i;
|
|
Packit |
13e0ca |
char prevhash[25];
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
for (i = 0; i < ntests; ++i)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
char *cp = crypt_r (tests[i].input, tests[i].salt, &output);
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
if (strcmp (cp, tests[i].expected) != 0)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("test %u.0: expected \"%s\", got \"%s\"\n",
|
|
Packit |
13e0ca |
i, tests[i].expected, cp);
|
|
Packit |
13e0ca |
result = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
strcpy (prevhash, cp);
|
|
Packit |
13e0ca |
cp = crypt_r (tests[i].input, prevhash, &output);
|
|
Packit |
13e0ca |
if (strcmp (cp, prevhash) != 0)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("test %u.1: expected \"%s\", got \"%s\"\n",
|
|
Packit |
13e0ca |
i, prevhash, cp);
|
|
Packit |
13e0ca |
result = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
return result;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#else
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
int
|
|
Packit |
13e0ca |
main (void)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
return 77; /* UNSUPPORTED */
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#endif
|