diff options
author | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-10-24 20:22:12 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-10-24 20:22:12 +0200 |
commit | 7988979a722b4cdf287b2093956a76a3f19b9897 (patch) | |
tree | d35e251d0472ceca55a2eef61cff261c8ee68fab /test/crypt/crypt.c |
add uClibc-ng test directory
Diffstat (limited to 'test/crypt/crypt.c')
-rw-r--r-- | test/crypt/crypt.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/test/crypt/crypt.c b/test/crypt/crypt.c new file mode 100644 index 0000000..7864647 --- /dev/null +++ b/test/crypt/crypt.c @@ -0,0 +1,103 @@ + +/* + * 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(); +} + + |