Blame test-crypt-des.c

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