123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*
- * This crypt(3) validation program shipped with UFC-crypt
- * is derived from one distributed with Phil Karns PD DES package.
- *
- * @(#)cert.c 1.8 11 Aug 1996
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include "crypt.h"
- static int totfails = 0;
- static void good_bye (void) __attribute__ ((noreturn));
- static void good_bye (void)
- {
- if(totfails == 0) {
- printf("Passed DES validation suite\n");
- exit(0);
- } else {
- printf("%d failures during DES validation suite!!!\n", totfails);
- exit(1);
- }
- }
- static void get8(char *cp)
- {
- int i,j,t;
- for(i=0;i<8;i++){
- scanf("%2x",&t);
- if(feof(stdin))
- good_bye();
- for(j=0; j<8 ; j++) {
- *cp++ = (t & (0x01 << (7-j))) != 0;
- }
- }
- }
- static void put8(char *cp)
- {
- int i,j,t;
- for(i=0;i<8;i++){
- t = 0;
- for(j = 0; j<8; j++)
- t = (t<<1) | *cp++;
- printf("%02x", t);
- }
- }
- int main(void)
- {
- char key[64],plain[64],cipher[64],answer[64];
- int i;
- int test;
- int fail;
- for(test=0;!feof(stdin);test++){
- get8(key);
- printf(" K: "); put8(key);
- setkey(key);
- get8(plain);
- printf(" P: "); put8(plain);
- get8(answer);
- printf(" C: "); put8(answer);
- for(i=0;i<64;i++)
- cipher[i] = plain[i];
- encrypt(cipher, 0);
- for(i=0;i<64;i++) {
- if(cipher[i] != answer[i])
- break;
- }
- fail = 0;
- if(i != 64){
- printf(" Encrypt FAIL");
- fail++; totfails++;
- }
- encrypt(cipher, 1);
- for(i=0;i<64;i++)
- if(cipher[i] != plain[i])
- break;
- if(i != 64){
- printf(" Decrypt FAIL");
- fail++; totfails++;
- }
- if(fail == 0)
- printf(" OK");
- printf("\n");
- }
- good_bye();
- }
|