Blame crypt/cert.c

Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 * This crypt(3) validation program shipped with UFC-crypt
Packit 6c4009
 * is derived from one distributed with Phil Karns PD DES package.
Packit 6c4009
 *
Packit 6c4009
 * @(#)cert.c	1.8 11 Aug 1996
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
#include "crypt.h"
Packit 6c4009
Packit 6c4009
/* This file tests the deprecated setkey/encrypt interface.  */
Packit 6c4009
#include <shlib-compat.h>
Packit 6c4009
#if TEST_COMPAT (libcrypt, GLIBC_2_0, GLIBC_2_28)
Packit 6c4009
Packit 6c4009
#define libcrypt_version_reference(symbol, version) \
Packit 6c4009
  _libcrypt_version_reference (symbol, VERSION_libcrypt_##version)
Packit 6c4009
#define _libcrypt_version_reference(symbol, version) \
Packit 6c4009
  __libcrypt_version_reference (symbol, version)
Packit 6c4009
#define __libcrypt_version_reference(symbol, version) \
Packit 6c4009
  __asm__ (".symver " #symbol ", " #symbol "@" #version)
Packit 6c4009
Packit 6c4009
extern void setkey (const char *);
Packit 6c4009
extern void encrypt (const char *, int);
Packit 6c4009
libcrypt_version_reference (setkey, GLIBC_2_0);
Packit 6c4009
libcrypt_version_reference (encrypt, GLIBC_2_0);
Packit 6c4009
Packit 6c4009
int totfails = 0;
Packit 6c4009
Packit 6c4009
int main (int argc, char *argv[]);
Packit 6c4009
void get8 (char *cp);
Packit 6c4009
void put8 (char *cp);
Packit 6c4009
void good_bye (void) __attribute__ ((noreturn));
Packit 6c4009
Packit 6c4009
void
Packit 6c4009
good_bye (void)
Packit 6c4009
{
Packit 6c4009
  if(totfails == 0) {
Packit 6c4009
    printf("Passed DES validation suite\n");
Packit 6c4009
    exit(0);
Packit 6c4009
  } else {
Packit 6c4009
    printf("%d failures during DES validation suite!!!\n", totfails);
Packit 6c4009
    exit(1);
Packit 6c4009
  }
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
main (int argc, char *argv[])
Packit 6c4009
{
Packit 6c4009
	char key[64],plain[64],cipher[64],answer[64];
Packit 6c4009
	int i;
Packit 6c4009
	int test;
Packit 6c4009
	int fail;
Packit 6c4009
Packit 6c4009
	for(test=0;!feof(stdin);test++){
Packit 6c4009
Packit 6c4009
		get8(key);
Packit 6c4009
		printf(" K: "); put8(key);
Packit 6c4009
		setkey(key);
Packit 6c4009
Packit 6c4009
		get8(plain);
Packit 6c4009
		printf(" P: "); put8(plain);
Packit 6c4009
Packit 6c4009
		get8(answer);
Packit 6c4009
		printf(" C: "); put8(answer);
Packit 6c4009
Packit 6c4009
		for(i=0;i<64;i++)
Packit 6c4009
			cipher[i] = plain[i];
Packit 6c4009
		encrypt(cipher, 0);
Packit 6c4009
Packit 6c4009
		for(i=0;i<64;i++)
Packit 6c4009
			if(cipher[i] != answer[i])
Packit 6c4009
				break;
Packit 6c4009
		fail = 0;
Packit 6c4009
		if(i != 64){
Packit 6c4009
			printf(" Encrypt FAIL");
Packit 6c4009
			fail++; totfails++;
Packit 6c4009
		}
Packit 6c4009
Packit 6c4009
		encrypt(cipher, 1);
Packit 6c4009
Packit 6c4009
		for(i=0;i<64;i++)
Packit 6c4009
			if(cipher[i] != plain[i])
Packit 6c4009
				break;
Packit 6c4009
		if(i != 64){
Packit 6c4009
			printf(" Decrypt FAIL");
Packit 6c4009
			fail++; totfails++;
Packit 6c4009
		}
Packit 6c4009
Packit 6c4009
		if(fail == 0)
Packit 6c4009
			printf(" OK");
Packit 6c4009
		printf("\n");
Packit 6c4009
	}
Packit 6c4009
	good_bye();
Packit 6c4009
}
Packit 6c4009
void
Packit 6c4009
get8 (char *cp)
Packit 6c4009
{
Packit 6c4009
	int i,j,t;
Packit 6c4009
Packit 6c4009
	for(i=0;i<8;i++){
Packit 6c4009
		scanf("%2x",&t);
Packit 6c4009
		if(feof(stdin))
Packit 6c4009
		  good_bye();
Packit 6c4009
		for(j=0; j<8 ; j++) {
Packit 6c4009
		  *cp++ = (t & (0x01 << (7-j))) != 0;
Packit 6c4009
		}
Packit 6c4009
	}
Packit 6c4009
}
Packit 6c4009
void
Packit 6c4009
put8 (char *cp)
Packit 6c4009
{
Packit 6c4009
	int i,j,t;
Packit 6c4009
Packit 6c4009
	for(i=0;i<8;i++){
Packit 6c4009
	  t = 0;
Packit 6c4009
	  for(j = 0; j<8; j++)
Packit 6c4009
	    t = (t<<1) | *cp++;
Packit 6c4009
	  printf("%02x", t);
Packit 6c4009
	}
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
#else /* encrypt and setkey are not available.  */
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
main (void)
Packit 6c4009
{
Packit 6c4009
  return 77; /* UNSUPPORTED */
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
#endif