blob: 8c838e919ac9fd389e133fc72f776e98291c2eb0 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001
2/*
3 * This crypt(3) validation program shipped with UFC-crypt
4 * is derived from one distributed with Phil Karns PD DES package.
5 *
6 * @(#)cert.c 1.8 11 Aug 1996
7 */
8
9#include <stdio.h>
10#include <stdlib.h>
11#include "crypt.h"
12
13int totfails = 0;
14
15int main (int argc, char *argv[]);
16void get8 (char *cp);
17void put8 (char *cp);
18void good_bye (void) __attribute__ ((noreturn));
19
20void good_bye ()
21{
22 if(totfails == 0) {
23 printf("Passed DES validation suite\n");
24 exit(0);
25 } else {
26 printf("%d failures during DES validation suite!!!\n", totfails);
27 exit(1);
28 }
29}
30
31int
32main(argc, argv)
33 int argc;
34 char *argv[];
35{
36 char key[64],plain[64],cipher[64],answer[64];
37 int i;
38 int test;
39 int fail;
40
41 for(test=0;!feof(stdin);test++){
42
43 get8(key);
44 printf(" K: "); put8(key);
45 setkey(key);
46
47 get8(plain);
48 printf(" P: "); put8(plain);
49
50 get8(answer);
51 printf(" C: "); put8(answer);
52
53 for(i=0;i<64;i++)
54 cipher[i] = plain[i];
55 encrypt(cipher, 0);
56
57 for(i=0;i<64;i++)
58 if(cipher[i] != answer[i])
59 break;
60 fail = 0;
61 if(i != 64){
62 printf(" Encrypt FAIL");
63 fail++; totfails++;
64 }
65
66 encrypt(cipher, 1);
67
68 for(i=0;i<64;i++)
69 if(cipher[i] != plain[i])
70 break;
71 if(i != 64){
72 printf(" Decrypt FAIL");
73 fail++; totfails++;
74 }
75
76 if(fail == 0)
77 printf(" OK");
78 printf("\n");
79 }
80 good_bye();
81}
82void
83get8(cp)
84char *cp;
85{
86 int i,j,t;
87
88 for(i=0;i<8;i++){
89 scanf("%2x",&t);
90 if(feof(stdin))
91 good_bye();
92 for(j=0; j<8 ; j++) {
93 *cp++ = (t & (0x01 << (7-j))) != 0;
94 }
95 }
96}
97void
98put8(cp)
99char *cp;
100{
101 int i,j,t;
102
103 for(i=0;i<8;i++){
104 t = 0;
105 for(j = 0; j<8; j++)
106 t = (t<<1) | *cp++;
107 printf("%02x", t);
108 }
109}