|
Packit |
13e0ca |
/*
|
|
Packit |
13e0ca |
* Written by Solar Designer <solar at openwall.com> in 2000-2014.
|
|
Packit |
13e0ca |
* No copyright is claimed, and the software is hereby placed in the public
|
|
Packit |
13e0ca |
* domain. In case this attempt to disclaim copyright and place the software
|
|
Packit |
13e0ca |
* in the public domain is deemed null and void, then the software is
|
|
Packit |
13e0ca |
* Copyright (c) 2000-2014 Solar Designer and it is hereby released to the
|
|
Packit |
13e0ca |
* general public under the following terms:
|
|
Packit |
13e0ca |
*
|
|
Packit |
13e0ca |
* Redistribution and use in source and binary forms, with or without
|
|
Packit |
13e0ca |
* modification, are permitted.
|
|
Packit |
13e0ca |
*
|
|
Packit |
13e0ca |
* There's ABSOLUTELY NO WARRANTY, express or implied.
|
|
Packit |
13e0ca |
*
|
|
Packit |
13e0ca |
* See crypt_blowfish.c for more information.
|
|
Packit |
13e0ca |
*/
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#include "crypt-port.h"
|
|
Packit |
13e0ca |
#include "crypt-base.h"
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#include <errno.h>
|
|
Packit |
13e0ca |
#include <stdio.h>
|
|
Packit |
13e0ca |
#include <stdlib.h>
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#if INCLUDE_bcrypt
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static const char *tests[][3] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW",
|
|
Packit |
13e0ca |
"U*U"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$CCCCCCCCCCCCCCCCCCCCC.VGOzA784oUp/Z0DY336zx7pLYAy0lwK",
|
|
Packit |
13e0ca |
"U*U*"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$XXXXXXXXXXXXXXXXXXXXXOAcXxm9kjPGEMsLznoKqmqw7tc8WCx4a",
|
|
Packit |
13e0ca |
"U*U*U"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui",
|
|
Packit |
13e0ca |
"0123456789abcdefghijklmnopqrstuvwxyz"
|
|
Packit |
13e0ca |
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
Packit |
13e0ca |
"chars after 72 are ignored"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e",
|
|
Packit |
13e0ca |
"\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e",
|
|
Packit |
13e0ca |
"\xff\xff\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2y$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e",
|
|
Packit |
13e0ca |
"\xff\xff\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.nqd1wy.pTMdcvrRWxyiGL2eMz.2a85.",
|
|
Packit |
13e0ca |
"\xff\xff\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2b$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e",
|
|
Packit |
13e0ca |
"\xff\xff\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2y$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq",
|
|
Packit |
13e0ca |
"\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq",
|
|
Packit |
13e0ca |
"\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2b$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq",
|
|
Packit |
13e0ca |
"\xa3"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi",
|
|
Packit |
13e0ca |
"1\xa3" "345"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi",
|
|
Packit |
13e0ca |
"\xff\xa3" "345"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi",
|
|
Packit |
13e0ca |
"\xff\xa3" "34" "\xff\xff\xff\xa3" "345"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2y$05$/OK.fbVrR/bpIqNJ5ianF.o./n25XVfn6oAPaUvHe.Csk4zRfsYPi",
|
|
Packit |
13e0ca |
"\xff\xa3" "34" "\xff\xff\xff\xa3" "345"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.ZC1JEJ8Z4gPfpe1JOr/oyPXTWl9EFd.",
|
|
Packit |
13e0ca |
"\xff\xa3" "34" "\xff\xff\xff\xa3" "345"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2y$05$/OK.fbVrR/bpIqNJ5ianF.nRht2l/HRhr6zmCp9vYUvvsqynflf9e",
|
|
Packit |
13e0ca |
"\xff\xa3" "345"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.nRht2l/HRhr6zmCp9vYUvvsqynflf9e",
|
|
Packit |
13e0ca |
"\xff\xa3" "345"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.6IflQkJytoRVc1yuaNtHfiuq.FRlSIS",
|
|
Packit |
13e0ca |
"\xa3" "ab"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$/OK.fbVrR/bpIqNJ5ianF.6IflQkJytoRVc1yuaNtHfiuq.FRlSIS",
|
|
Packit |
13e0ca |
"\xa3" "ab"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2y$05$/OK.fbVrR/bpIqNJ5ianF.6IflQkJytoRVc1yuaNtHfiuq.FRlSIS",
|
|
Packit |
13e0ca |
"\xa3" "ab"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$6bNw2HLQYeqHYyBfLMsv/OiwqTymGIGzFsA4hOTWebfehXHNprcAS",
|
|
Packit |
13e0ca |
"\xd1\x91"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$6bNw2HLQYeqHYyBfLMsv/O9LIGgn8OMzuDoHfof8AQimSGfcSWxnS",
|
|
Packit |
13e0ca |
"\xd0\xc1\xd2\xcf\xcc\xd8"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6",
|
|
Packit |
13e0ca |
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
|
|
Packit |
13e0ca |
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
|
|
Packit |
13e0ca |
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
|
|
Packit |
13e0ca |
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
|
|
Packit |
13e0ca |
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
|
|
Packit |
13e0ca |
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
|
|
Packit |
13e0ca |
"chars after 72 are ignored as usual"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.R9xrDjiycxMbQE2bp.vgqlYpW5wx2yy",
|
|
Packit |
13e0ca |
"\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55"
|
|
Packit |
13e0ca |
"\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55"
|
|
Packit |
13e0ca |
"\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55"
|
|
Packit |
13e0ca |
"\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55"
|
|
Packit |
13e0ca |
"\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55"
|
|
Packit |
13e0ca |
"\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$/OK.fbVrR/bpIqNJ5ianF.9tQZzcJfm3uj2NvJ/n5xkhpqLrMpWCe",
|
|
Packit |
13e0ca |
"\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff"
|
|
Packit |
13e0ca |
"\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff"
|
|
Packit |
13e0ca |
"\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff"
|
|
Packit |
13e0ca |
"\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff"
|
|
Packit |
13e0ca |
"\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff"
|
|
Packit |
13e0ca |
"\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff"
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$CCCCCCCCCCCCCCCCCCCCC.7uG0VCzI2bS7j6ymqJi9CdcdxiRTWNy",
|
|
Packit |
13e0ca |
""
|
|
Packit |
13e0ca |
},
|
|
Packit |
13e0ca |
{ "*0", "", "$2a$03$CCCCCCCCCCCCCCCCCCCCC." },
|
|
Packit |
13e0ca |
{ "*0", "", "$2a$32$CCCCCCCCCCCCCCCCCCCCC." },
|
|
Packit |
13e0ca |
{ "*0", "", "$2c$05$CCCCCCCCCCCCCCCCCCCCC." },
|
|
Packit |
13e0ca |
{ "*0", "", "$2z$05$CCCCCCCCCCCCCCCCCCCCC." },
|
|
Packit |
13e0ca |
{ "*0", "", "$2`$05$CCCCCCCCCCCCCCCCCCCCC." },
|
|
Packit |
13e0ca |
{ "*0", "", "$2{$05$CCCCCCCCCCCCCCCCCCCCC." },
|
|
Packit |
13e0ca |
{ "*1", "", "*0" },
|
|
Packit |
13e0ca |
{ 0 }
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
int
|
|
Packit |
13e0ca |
main (void)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
void *data = 0;
|
|
Packit |
13e0ca |
int size = 0x12345678;
|
|
Packit |
13e0ca |
int i;
|
|
Packit |
13e0ca |
int status = 0;
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
for (i = 0; tests[i][0]; i++)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
const char *hash = tests[i][0];
|
|
Packit |
13e0ca |
const char *key = tests[i][1];
|
|
Packit |
13e0ca |
const char *setting = tests[i][2];
|
|
Packit |
13e0ca |
const char *p;
|
|
Packit |
13e0ca |
int ok = !setting || hash[0] != '*';
|
|
Packit |
13e0ca |
char s_buf[30];
|
|
Packit |
13e0ca |
char o_buf[sizeof (struct crypt_data)];
|
|
Packit |
13e0ca |
int errnm, match;
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
if (!setting)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
memcpy (s_buf, hash, sizeof (s_buf) - 1);
|
|
Packit |
13e0ca |
s_buf[sizeof (s_buf) - 1] = 0;
|
|
Packit |
13e0ca |
setting = s_buf;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
errno = 0;
|
|
Packit |
13e0ca |
p = crypt (key, setting);
|
|
Packit |
13e0ca |
errnm = errno;
|
|
Packit Service |
0b5db0 |
#if ENABLE_FAILURE_TOKENS
|
|
Packit |
13e0ca |
match = strcmp (p, hash);
|
|
Packit Service |
0b5db0 |
#else
|
|
Packit Service |
0b5db0 |
match = (ok ? strcmp (p, hash) : p != 0);
|
|
Packit Service |
0b5db0 |
#endif
|
|
Packit Service |
0b5db0 |
if ((!ok && !errno) || match)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAIL: %d/crypt.1: key=%s setting=%s: xhash=%s xerr=%d, "
|
|
Packit |
13e0ca |
"p=%s match=%d err=%s\n",
|
|
Packit |
13e0ca |
i, key, setting, hash, !ok, p, match==0, strerror (errnm));
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
continue;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
if (ok)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
p = crypt (key, hash);
|
|
Packit |
13e0ca |
if (strcmp (p, hash))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAIL: %d/crypt.2: key=%s hash=%s p=%s\n",
|
|
Packit |
13e0ca |
i, key, hash, p);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
continue;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
strcpy (o_buf, "abc");
|
|
Packit |
13e0ca |
const char *x = "*0";
|
|
Packit |
13e0ca |
if (setting[0] == '*' && setting[1] == '0')
|
|
Packit |
13e0ca |
x = "*1";
|
|
Packit |
13e0ca |
errno = 0;
|
|
Packit |
13e0ca |
p = crypt_rn (key, setting, o_buf, sizeof o_buf);
|
|
Packit |
13e0ca |
errnm = errno;
|
|
Packit |
13e0ca |
if (ok)
|
|
Packit |
13e0ca |
match = p && !strcmp (p, hash);
|
|
Packit |
13e0ca |
else
|
|
Packit |
13e0ca |
match = !p && errnm && !strcmp (o_buf, x);
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
if (!match)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAIL: %d/crypt_rn: key=%s setting=%s: "
|
|
Packit |
13e0ca |
"xhash=%s xmagic=%s xerr=%d, p=%s obuf=%s err=%s\n",
|
|
Packit |
13e0ca |
i, key, setting, hash, x, !ok, p, o_buf,
|
|
Packit |
13e0ca |
strerror (errnm));
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
continue;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
errno = 0;
|
|
Packit |
13e0ca |
p = crypt_ra (key, setting, &data, &size);
|
|
Packit |
13e0ca |
errnm = errno;
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
if (ok)
|
|
Packit |
13e0ca |
match = p && !strcmp (p, hash);
|
|
Packit |
13e0ca |
else
|
|
Packit |
13e0ca |
match = !p && errnm && !strcmp (data, hash);
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
if (!match)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAIL: %d/crypt_ra: key=%s setting=%s: xhash=%s xerr=%d, "
|
|
Packit |
13e0ca |
"p=%s data=%s err=%s\n",
|
|
Packit |
13e0ca |
i, key, setting, hash, !ok, p,
|
|
Packit |
13e0ca |
(char *)data, strerror (errnm));
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
continue;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
free (data);
|
|
Packit |
13e0ca |
return status;
|
|
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
|