|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
/*
|
|
Packit |
13e0ca |
* This crypt(3) validation program shipped with UFC-crypt
|
|
Packit |
13e0ca |
* is derived from one distributed with Phil Karns PD DES package.
|
|
Packit |
13e0ca |
*
|
|
Packit |
13e0ca |
* @(#)cert.c 1.8 11 Aug 1996
|
|
Packit |
13e0ca |
*/
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#include "crypt-port.h"
|
|
Packit |
13e0ca |
#include "crypt-base.h"
|
|
Packit |
13e0ca |
#include "crypt-obsolete.h"
|
|
Packit |
13e0ca |
#include "test-des-cases.h"
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
#include <stdio.h>
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
symver_ref("encrypt", encrypt, SYMVER_FLOOR);
|
|
Packit |
13e0ca |
symver_ref("setkey", setkey, SYMVER_FLOOR);
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static void
|
|
Packit |
13e0ca |
expand (unsigned char ex[64], const unsigned char pk[8])
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
int i, j;
|
|
Packit |
13e0ca |
unsigned int t;
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
for (i = 0; i < 8; i++)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
t = pk[i];
|
|
Packit |
13e0ca |
for (j = 0; j < 8; j++)
|
|
Packit |
13e0ca |
ex[i*8 + j] = (t & (0x01u << (7 - j))) != 0;
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static void
|
|
Packit |
13e0ca |
ex_print (const unsigned char ex[64])
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
int i, j;
|
|
Packit |
13e0ca |
unsigned int t;
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
for (i = 0; i < 8; i++)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
t = 0;
|
|
Packit |
13e0ca |
for (j = 0; j < 8; j++)
|
|
Packit |
13e0ca |
t = (t << 1) | ex[i*8 + j];
|
|
Packit |
13e0ca |
printf ("%02x", t);
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static void
|
|
Packit |
13e0ca |
pk_print (const unsigned char pk[8])
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
for (int i = 0; i < 8; i++)
|
|
Packit |
13e0ca |
printf ("%02x", (unsigned int)pk[i]);
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
static void
|
|
Packit |
13e0ca |
report_failure (size_t n, bool decrypt,
|
|
Packit |
13e0ca |
const struct des_testcase *tc, const unsigned char got[64])
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
printf ("FAIL: %zu/%s: k=", n, decrypt ? "de" : "en");
|
|
Packit |
13e0ca |
pk_print (tc->key);
|
|
Packit |
13e0ca |
fputs (" exp ", stdout);
|
|
Packit |
13e0ca |
if (decrypt)
|
|
Packit |
13e0ca |
pk_print (tc->plain);
|
|
Packit |
13e0ca |
else
|
|
Packit |
13e0ca |
pk_print (tc->answer);
|
|
Packit |
13e0ca |
fputs (" got ", stdout);
|
|
Packit |
13e0ca |
ex_print (got);
|
|
Packit |
13e0ca |
putchar ('\n');
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
int
|
|
Packit |
13e0ca |
main (void)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
unsigned char key[64], plain[64], cipher[64], answer[64];
|
|
Packit |
13e0ca |
const struct des_testcase *tc;
|
|
Packit |
13e0ca |
size_t t;
|
|
Packit |
13e0ca |
int status = 0;
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
for (t = 0; t < N_DES_TESTCASES; t++)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
tc = &des_testcases[t];
|
|
Packit |
13e0ca |
expand (key, tc->key);
|
|
Packit |
13e0ca |
expand (plain, tc->plain);
|
|
Packit |
13e0ca |
expand (answer, tc->answer);
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
setkey ((char *)key);
|
|
Packit |
13e0ca |
memcpy (cipher, plain, 64);
|
|
Packit |
13e0ca |
encrypt ((char *)cipher, 0);
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
if (memcmp (cipher, answer, 64) != 0)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
report_failure (t, false, tc, cipher);
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
memcpy (cipher, answer, 64);
|
|
Packit |
13e0ca |
encrypt ((char *)cipher, 1);
|
|
Packit |
13e0ca |
if (memcmp (cipher, plain, 64) != 0)
|
|
Packit |
13e0ca |
{
|
|
Packit |
13e0ca |
status = 1;
|
|
Packit |
13e0ca |
report_failure (t, true, tc, cipher);
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
}
|
|
Packit |
13e0ca |
|
|
Packit |
13e0ca |
return status;
|
|
Packit |
13e0ca |
}
|