|
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 |
#include <limits.h>
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static const char *const entropy[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"\x58\x35\xcd\x26\x03\xab\x2c\x14\x92\x13\x1e\x59\xb0\xbc\xfe\xd5",
|
|
Packit |
13e0ca |
"\x9b\x35\xa2\x45\xeb\x68\x9e\x8f\xd9\xa9\x09\x71\xcc\x4d\x21\x44",
|
|
Packit |
13e0ca |
"\x25\x13\xc5\x94\xc3\x93\x1d\xf4\xfd\xd4\x4f\xbd\x10\xe5\x28\x08",
|
|
Packit |
13e0ca |
"\xa0\x2d\x35\x70\xa8\x0b\xc3\xad\xdf\x61\x69\xb3\x19\xda\x7e\x8d",
|
|
Packit |
13e0ca |
0
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#if INCLUDE_des || INCLUDE_des_big
|
|
Packit |
13e0ca |
static const char *const des_expected_output[] = { "Mp", "Pp", "ZH", "Uh"};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_des_xbsd
|
|
Packit |
13e0ca |
static const char *const bsdi_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"_J9..MJHn",
|
|
Packit |
13e0ca |
"_J9..PKXc",
|
|
Packit |
13e0ca |
"_J9..ZAFl",
|
|
Packit |
13e0ca |
"_J9..UqGB"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const bsdi_expected_output_r[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"_DT0.MJHn",
|
|
Packit |
13e0ca |
"_DT0.PKXc",
|
|
Packit |
13e0ca |
"_DT0.ZAFl",
|
|
Packit |
13e0ca |
"_DT0.UqGB"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_md5
|
|
Packit |
13e0ca |
static const char *const md5_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$1$MJHnaAke",
|
|
Packit |
13e0ca |
"$1$PKXc3hCO",
|
|
Packit |
13e0ca |
"$1$ZAFlICwY",
|
|
Packit |
13e0ca |
"$1$UqGBkVu0"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_nthash
|
|
Packit |
13e0ca |
static const char *const nthash_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$3$__not_used__c809a450df09a3",
|
|
Packit |
13e0ca |
"$3$__not_used__30d0d6f834c0c3",
|
|
Packit |
13e0ca |
"$3$__not_used__0eeeebb83d6fe4",
|
|
Packit |
13e0ca |
"$3$__not_used__1c690d6a9ef88c"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sunmd5
|
|
Packit |
13e0ca |
static const char *const sunmd5_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$md5,rounds=55349$BPm.fm03$",
|
|
Packit |
13e0ca |
"$md5,rounds=72501$WKoucttX$",
|
|
Packit |
13e0ca |
"$md5,rounds=42259$3HtkHq/x$",
|
|
Packit |
13e0ca |
"$md5,rounds=73773$p.5e9AQf$",
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const sunmd5_expected_output_r[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$md5,rounds=4294920244$BPm.fm03$",
|
|
Packit |
13e0ca |
"$md5,rounds=4294937396$WKoucttX$",
|
|
Packit |
13e0ca |
"$md5,rounds=4294907154$3HtkHq/x$",
|
|
Packit |
13e0ca |
"$md5,rounds=4294938668$p.5e9AQf$",
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sha1
|
|
Packit |
13e0ca |
static const char *const sha1_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$sha1$248488$ggu.H673kaZ5$",
|
|
Packit |
13e0ca |
"$sha1$248421$SWqudaxXA5L0$",
|
|
Packit |
13e0ca |
"$sha1$257243$RAtkIrDxEovH$",
|
|
Packit |
13e0ca |
"$sha1$250464$1j.eVxRfNAPO$",
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const sha1_expected_output_r[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$sha1$3643984551$ggu.H673kaZ5$",
|
|
Packit |
13e0ca |
"$sha1$4200450659$SWqudaxXA5L0$",
|
|
Packit |
13e0ca |
"$sha1$3946507480$RAtkIrDxEovH$",
|
|
Packit |
13e0ca |
"$sha1$3486175838$1j.eVxRfNAPO$",
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sha256
|
|
Packit |
13e0ca |
static const char *const sha256_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$5$MJHnaAkegEVYHsFK",
|
|
Packit |
13e0ca |
"$5$PKXc3hCOSyMqdaEQ",
|
|
Packit |
13e0ca |
"$5$ZAFlICwYRETzIzIj",
|
|
Packit |
13e0ca |
"$5$UqGBkVu01rurVZqg"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const sha256_expected_output_r[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$5$rounds=10191$MJHnaAkegEVYHsFK",
|
|
Packit |
13e0ca |
"$5$rounds=10191$PKXc3hCOSyMqdaEQ",
|
|
Packit |
13e0ca |
"$5$rounds=10191$ZAFlICwYRETzIzIj",
|
|
Packit |
13e0ca |
"$5$rounds=10191$UqGBkVu01rurVZqg"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sha512
|
|
Packit |
13e0ca |
static const char *const sha512_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$6$MJHnaAkegEVYHsFK",
|
|
Packit |
13e0ca |
"$6$PKXc3hCOSyMqdaEQ",
|
|
Packit |
13e0ca |
"$6$ZAFlICwYRETzIzIj",
|
|
Packit |
13e0ca |
"$6$UqGBkVu01rurVZqg"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const sha512_expected_output_r[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$6$rounds=10191$MJHnaAkegEVYHsFK",
|
|
Packit |
13e0ca |
"$6$rounds=10191$PKXc3hCOSyMqdaEQ",
|
|
Packit |
13e0ca |
"$6$rounds=10191$ZAFlICwYRETzIzIj",
|
|
Packit |
13e0ca |
"$6$rounds=10191$UqGBkVu01rurVZqg"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_bcrypt
|
|
Packit |
13e0ca |
static const char *const bcrypt_a_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2a$05$UBVLHeMpJ/QQCv3XqJx8zO",
|
|
Packit |
13e0ca |
"$2a$05$kxUgPcrmlm9XoOjvxCyfP.",
|
|
Packit |
13e0ca |
"$2a$05$HPNDjKMRFdR7zC87CMSmA.",
|
|
Packit |
13e0ca |
"$2a$05$mAyzaIeJu41dWUkxEbn8hO"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const bcrypt_b_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2b$05$UBVLHeMpJ/QQCv3XqJx8zO",
|
|
Packit |
13e0ca |
"$2b$05$kxUgPcrmlm9XoOjvxCyfP.",
|
|
Packit |
13e0ca |
"$2b$05$HPNDjKMRFdR7zC87CMSmA.",
|
|
Packit |
13e0ca |
"$2b$05$mAyzaIeJu41dWUkxEbn8hO"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const bcrypt_x_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2x$05$UBVLHeMpJ/QQCv3XqJx8zO",
|
|
Packit |
13e0ca |
"$2x$05$kxUgPcrmlm9XoOjvxCyfP.",
|
|
Packit |
13e0ca |
"$2x$05$HPNDjKMRFdR7zC87CMSmA.",
|
|
Packit |
13e0ca |
"$2x$05$mAyzaIeJu41dWUkxEbn8hO"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
static const char *const bcrypt_y_expected_output[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
"$2y$05$UBVLHeMpJ/QQCv3XqJx8zO",
|
|
Packit |
13e0ca |
"$2y$05$kxUgPcrmlm9XoOjvxCyfP.",
|
|
Packit |
13e0ca |
"$2y$05$HPNDjKMRFdR7zC87CMSmA.",
|
|
Packit |
13e0ca |
"$2y$05$mAyzaIeJu41dWUkxEbn8hO"
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
struct testcase
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
const char *prefix;
|
|
Packit |
13e0ca |
const char *const *expected_output;
|
|
Packit |
13e0ca |
unsigned int expected_len;
|
|
Packit |
13e0ca |
unsigned int expected_auto_len;
|
|
Packit |
13e0ca |
unsigned long rounds;
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static const struct testcase testcases[] =
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
#if INCLUDE_des || INCLUDE_des_big
|
|
Packit |
13e0ca |
{ "", des_expected_output, 2, 0, 0 },
|
|
Packit |
13e0ca |
// DES doesn't have variable round count.
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_des_xbsd
|
|
Packit |
13e0ca |
{ "_", bsdi_expected_output, 9, 0, 0 },
|
|
Packit |
13e0ca |
{ "_", bsdi_expected_output_r, 9, 0, 10191 },
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_md5
|
|
Packit |
13e0ca |
{ "$1$", md5_expected_output, 11, 0, 0 },
|
|
Packit |
13e0ca |
// MD5/BSD doesn't have variable round count.
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_nthash
|
|
Packit |
13e0ca |
{ "$3$", nthash_expected_output, 29, 0, 0 },
|
|
Packit |
13e0ca |
// NTHASH doesn't have variable round count.
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sunmd5
|
|
Packit |
13e0ca |
{ "$md5", sunmd5_expected_output, 27, 0, 0 },
|
|
Packit |
13e0ca |
// SHA1/PBKDF always emits a round count, but we need to test its
|
|
Packit |
13e0ca |
// behavior on very large inputs. (This number is the largest
|
|
Packit |
13e0ca |
// supported round count.)
|
|
Packit |
13e0ca |
{ "$md5", sunmd5_expected_output_r, 32, 0, 4294963199ul },
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sha1
|
|
Packit |
13e0ca |
{ "$sha1", sha1_expected_output, 26, 34, 0 },
|
|
Packit |
13e0ca |
// SHA1/PBKDF always emits a round count, but we need to test its
|
|
Packit |
13e0ca |
// behavior on very large inputs. (The behavior should be the
|
|
Packit |
13e0ca |
// same whether or not ULONG_MAX > UINT32_MAX.)
|
|
Packit |
13e0ca |
{ "$sha1", sha1_expected_output_r, 30, 38, ULONG_MAX },
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sha256
|
|
Packit |
13e0ca |
{ "$5$", sha256_expected_output, 19, 0, 0 },
|
|
Packit |
13e0ca |
{ "$5$", sha256_expected_output_r, 32, 0, 10191 },
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_sha512
|
|
Packit |
13e0ca |
{ "$6$", sha512_expected_output, 19, 0, 0 },
|
|
Packit |
13e0ca |
{ "$6$", sha512_expected_output_r, 32, 0, 10191 },
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
#if INCLUDE_bcrypt
|
|
Packit |
13e0ca |
{ "$2a$", bcrypt_a_expected_output, 29, 0, 0 },
|
|
Packit |
13e0ca |
{ "$2b$", bcrypt_b_expected_output, 29, 0, 0 },
|
|
Packit |
13e0ca |
{ "$2x$", bcrypt_x_expected_output, 29, 0, 0 },
|
|
Packit |
13e0ca |
{ "$2y$", bcrypt_y_expected_output, 29, 0, 0 },
|
|
Packit |
13e0ca |
// bcrypt gensalt always emits a round count.
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
{ 0, 0, 0, 0, 0 }
|
|
Packit |
13e0ca |
};
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
int
|
|
Packit |
13e0ca |
main (void)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
int status = 0;
|
|
Packit |
13e0ca |
unsigned int ent;
|
|
Packit |
13e0ca |
const struct testcase *tcase;
|
|
Packit |
13e0ca |
char output[CRYPT_GENSALT_OUTPUT_SIZE];
|
|
Packit |
13e0ca |
char prev_output[CRYPT_GENSALT_OUTPUT_SIZE];
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
for (tcase = testcases; tcase->prefix; tcase++)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
XCRYPT_SECURE_MEMSET (prev_output, CRYPT_GENSALT_OUTPUT_SIZE);
|
|
Packit |
13e0ca |
for (ent = 0; ent < ARRAY_SIZE (entropy); ent++)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
XCRYPT_SECURE_MEMSET (output, CRYPT_GENSALT_OUTPUT_SIZE);
|
|
Packit |
13e0ca |
char *salt = crypt_gensalt_rn (tcase->prefix, tcase->rounds,
|
|
Packit |
13e0ca |
entropy[ent], 16,
|
|
Packit |
13e0ca |
output, CRYPT_GENSALT_OUTPUT_SIZE);
|
|
Packit |
13e0ca |
if (salt == 0)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
if (entropy[ent] == 0 && errno == ENOSYS)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
fprintf (stderr, "UNSUPPORTED: %s/auto-entropy -> ENOSYS\n",
|
|
Packit |
13e0ca |
tcase->prefix);
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
else
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
fprintf (stderr, "ERROR: %s/%u -> 0\n", tcase->prefix, ent);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
continue;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
size_t slen = strlen (salt);
|
|
Packit |
13e0ca |
unsigned int expected_len =
|
|
Packit |
13e0ca |
(!entropy[ent] && tcase->expected_auto_len) ?
|
|
Packit |
13e0ca |
tcase->expected_auto_len : tcase->expected_len;
|
|
Packit |
13e0ca |
if (slen != expected_len)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
fprintf (stderr,
|
|
Packit |
13e0ca |
"ERROR: %s/%u -> %s (expected len=%u got %zu)\n",
|
|
Packit |
13e0ca |
tcase->prefix, ent, salt, expected_len, slen);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
else if (strncmp (salt, tcase->prefix, strlen (tcase->prefix)))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
fprintf (stderr, "ERROR: %s/%u -> %s (prefix wrong)\n",
|
|
Packit |
13e0ca |
tcase->prefix, ent, salt);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
else if (!strcmp (salt, prev_output))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
fprintf (stderr, "ERROR: %s/%u -> %s (same as prev)\n",
|
|
Packit |
13e0ca |
tcase->prefix, ent, salt);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
else if (entropy[ent] && strcmp (salt, tcase->expected_output[ent]))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
fprintf (stderr, "ERROR: %s/%u -> %s (expected %s)\n",
|
|
Packit |
13e0ca |
tcase->prefix, ent, salt, tcase->expected_output[ent]);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
else
|
|
Packit |
13e0ca |
fprintf (stderr, " ok: %s/%u -> %s\n",
|
|
Packit |
13e0ca |
tcase->prefix, ent, salt);
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
XCRYPT_SECURE_MEMSET (prev_output, CRYPT_GENSALT_OUTPUT_SIZE);
|
|
Packit |
13e0ca |
strncpy (prev_output, salt, CRYPT_GENSALT_OUTPUT_SIZE -1 );
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
/* Currently, passing a null pointer as the prefix argument to
|
|
Packit |
13e0ca |
crypt_gensalt is supposed to produce a bcrypt-mode-2b setting
|
|
Packit |
13e0ca |
string. */
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
char *setting1, *setting2;
|
|
Packit |
13e0ca |
setting1 = crypt_gensalt_ra ("$2b$", 0, entropy[0], 16);
|
|
Packit |
13e0ca |
setting2 = crypt_gensalt_ra (0, 0, entropy[0], 16);
|
|
Packit |
13e0ca |
if ((setting1 == 0 && setting2 != 0) ||
|
|
Packit |
13e0ca |
(setting1 != 0 && setting2 == 0) ||
|
|
Packit |
13e0ca |
(setting1 != 0 && setting2 != 0 && strcmp (setting1, setting2)))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAILED: crypt_gensalt defaulting to $2b$\n"
|
|
Packit |
13e0ca |
" $2b$ -> %s\n"
|
|
Packit |
13e0ca |
" null -> %s\n",
|
|
Packit |
13e0ca |
setting1, setting2);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
free (setting1);
|
|
Packit |
13e0ca |
free (setting2);
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#if INCLUDE_bcrypt
|
|
Packit |
13e0ca |
/* FIXME: This test is a little too specific. It used to be in
|
|
Packit |
13e0ca |
test-bcrypt.c and I'm not sure what it's meant to be testing. */
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
char *setting1, *setting2;
|
|
Packit |
13e0ca |
const char *which = "$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW";
|
|
Packit |
13e0ca |
setting1 = crypt_gensalt (which, 12, "CCCCCCCCCCCCCCCCCCCCC", 21);
|
|
Packit |
13e0ca |
if (!setting1 || strncmp (setting1, "$2a$12$", 7))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAILED (crypt_gensalt: wrong prefix) s1=%s\n", setting1);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
setting2 = crypt_gensalt_ra (setting1, 12, "CCCCCCCCCCCCCCCCCCCCC", 21);
|
|
Packit |
13e0ca |
if (strcmp (setting1, setting2))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAILED (crypt_gensalt_ra/1: s1=%s s2=%s)\n", setting1, setting2);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
setting1 = crypt_gensalt_ra (setting2, 12, "DCCCCCCCCCCCCCCCCCCCC", 21);
|
|
Packit |
13e0ca |
if (!strcmp (setting1, setting2))
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAILED (crypt_gensalt_ra/2: s1=%s s2=%s)\n", setting1, setting2);
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
free (setting1);
|
|
Packit |
13e0ca |
free (setting2);
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
#endif
|
|
Packit |
13e0ca |
return status;
|
|
Packit |
13e0ca |
}
|