diff --git a/secure/lib/libcrypt/Makefile b/secure/lib/libcrypt/Makefile index 0e66704e2ff7..9c03d0182fdb 100644 --- a/secure/lib/libcrypt/Makefile +++ b/secure/lib/libcrypt/Makefile @@ -2,14 +2,16 @@ # $Id: Makefile,v 1.1.1.1 1994/04/04 14:57:18 g89r4222 Exp $ # -SUBDIR= test LIB= crypt SRCS= crypt.c -#MAN3= crypt.0 +#MAN3= crypt.3 #MLINKS= crypt.3 encrypt.3 crypt.3 setkey.3 #MLINKS+=crypt.3 des_cipher.3 crypt.3 des_setkey.3 .include .include + +test: + cd test ; make test ; make clean diff --git a/secure/lib/libcrypt/README.FreeBSD b/secure/lib/libcrypt/README.FreeBSD index 00a93ca6ee8f..250467edfd60 100644 --- a/secure/lib/libcrypt/README.FreeBSD +++ b/secure/lib/libcrypt/README.FreeBSD @@ -3,4 +3,19 @@ $Id: README.FreeBSD,v 1.2 1994/04/04 15:10:57 g89r4222 Exp $ This is FreeSec package for NetBSD, unchanged for FreeBSD, except for the Makefile. -The other stuff in libcrypt will be added in stages! +FreeSec was written by David Burren + +A few bugs in the original FreeSec release have been fixed. + +In order to make libcrypt binaries exportable from the USA, +only the symbol _crypt() (later to be changed to ___crypt()) +is exported from libcrypt. + +This source code was developed outside the USA, and can be +obtained outside the USA. + + Geoff Rehmet + Rhodes University + Grahamstown + South Africa + 8 August 1994 diff --git a/secure/lib/libcrypt/crypt-des.c b/secure/lib/libcrypt/crypt-des.c index fa3b81abdc22..50199ce21e07 100644 --- a/secure/lib/libcrypt/crypt-des.c +++ b/secure/lib/libcrypt/crypt-des.c @@ -4,6 +4,10 @@ * Copyright (c) 1994 David Burren * All rights reserved. * + * Adapted for FreeBSD-2.0 by Geoffrey M. Rehmet + * crypt.c should now *only* export crypt(), in order to make + * binaries of libcrypt exportable from the USA + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -59,6 +63,11 @@ # include #endif +/* We can't always assume gcc */ +#ifdef __GNUC__ +#define INLINE inline +#endif + static u_char IP[64] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, @@ -184,7 +193,7 @@ static u_char ascii64[] = /* 0000000000111111111122222222223333333333444444444455555555556666 */ /* 0123456789012345678901234567890123456789012345678901234567890123 */ -static inline int +static INLINE int ascii_to_bin(char ch) { if (ch > 'z') @@ -202,7 +211,6 @@ ascii_to_bin(char ch) return(0); } - static void des_init() { @@ -333,7 +341,6 @@ des_init() des_initialised = 1; } - static void setup_salt(long salt) { @@ -355,8 +362,7 @@ setup_salt(long salt) } } - -int +static int des_setkey(const char *key) { u_long k0, k1, rawkey0, rawkey1; @@ -437,7 +443,6 @@ des_setkey(const char *key) return(0); } - static int do_des( u_long l_in, u_long r_in, u_long *l_out, u_long *r_out, int count) { @@ -554,8 +559,7 @@ do_des( u_long l_in, u_long r_in, u_long *l_out, u_long *r_out, int count) return(0); } - -int +static int des_cipher(const char *in, char *out, long salt, int count) { u_long l_out, r_out, rawl, rawr; @@ -576,52 +580,7 @@ des_cipher(const char *in, char *out, long salt, int count) return(retval); } - -int -setkey(char *key) -{ - int i, j; - u_long packed_keys[2]; - u_char *p; - p = (u_char *) packed_keys; - - for (i = 0; i < 8; i++) { - p[i] = 0; - for (j = 0; j < 8; j++) - if (*key++ & 1) - p[i] |= bits8[j]; - } - return(des_setkey(p)); -} - - -int -encrypt(char *block, int flag) -{ - u_long io[2]; - u_char *p; - int i, j, retval; - - if (!des_initialised) - des_init(); - - setup_salt(0L); - p = block; - for (i = 0; i < 2; i++) { - io[i] = 0L; - for (j = 0; j < 32; j++) - if (*p++ & 1) - io[i] |= bits32[j]; - } - retval = do_des(io[0], io[1], io, io + 1, flag ? -1 : 1); - for (i = 0; i < 2; i++) - for (j = 0; j < 32; j++) - block[(i << 5) | j] = (io[i] & bits32[j]) ? 1 : 0; - return(retval); -} - - char * crypt(char *key, char *setting) { diff --git a/secure/lib/libcrypt/crypt.c b/secure/lib/libcrypt/crypt.c index fa3b81abdc22..50199ce21e07 100644 --- a/secure/lib/libcrypt/crypt.c +++ b/secure/lib/libcrypt/crypt.c @@ -4,6 +4,10 @@ * Copyright (c) 1994 David Burren * All rights reserved. * + * Adapted for FreeBSD-2.0 by Geoffrey M. Rehmet + * crypt.c should now *only* export crypt(), in order to make + * binaries of libcrypt exportable from the USA + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -59,6 +63,11 @@ # include #endif +/* We can't always assume gcc */ +#ifdef __GNUC__ +#define INLINE inline +#endif + static u_char IP[64] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, @@ -184,7 +193,7 @@ static u_char ascii64[] = /* 0000000000111111111122222222223333333333444444444455555555556666 */ /* 0123456789012345678901234567890123456789012345678901234567890123 */ -static inline int +static INLINE int ascii_to_bin(char ch) { if (ch > 'z') @@ -202,7 +211,6 @@ ascii_to_bin(char ch) return(0); } - static void des_init() { @@ -333,7 +341,6 @@ des_init() des_initialised = 1; } - static void setup_salt(long salt) { @@ -355,8 +362,7 @@ setup_salt(long salt) } } - -int +static int des_setkey(const char *key) { u_long k0, k1, rawkey0, rawkey1; @@ -437,7 +443,6 @@ des_setkey(const char *key) return(0); } - static int do_des( u_long l_in, u_long r_in, u_long *l_out, u_long *r_out, int count) { @@ -554,8 +559,7 @@ do_des( u_long l_in, u_long r_in, u_long *l_out, u_long *r_out, int count) return(0); } - -int +static int des_cipher(const char *in, char *out, long salt, int count) { u_long l_out, r_out, rawl, rawr; @@ -576,52 +580,7 @@ des_cipher(const char *in, char *out, long salt, int count) return(retval); } - -int -setkey(char *key) -{ - int i, j; - u_long packed_keys[2]; - u_char *p; - p = (u_char *) packed_keys; - - for (i = 0; i < 8; i++) { - p[i] = 0; - for (j = 0; j < 8; j++) - if (*key++ & 1) - p[i] |= bits8[j]; - } - return(des_setkey(p)); -} - - -int -encrypt(char *block, int flag) -{ - u_long io[2]; - u_char *p; - int i, j, retval; - - if (!des_initialised) - des_init(); - - setup_salt(0L); - p = block; - for (i = 0; i < 2; i++) { - io[i] = 0L; - for (j = 0; j < 32; j++) - if (*p++ & 1) - io[i] |= bits32[j]; - } - retval = do_des(io[0], io[1], io, io + 1, flag ? -1 : 1); - for (i = 0; i < 2; i++) - for (j = 0; j < 32; j++) - block[(i << 5) | j] = (io[i] & bits32[j]) ? 1 : 0; - return(retval); -} - - char * crypt(char *key, char *setting) { diff --git a/secure/lib/libcrypt/test/Makefile b/secure/lib/libcrypt/test/Makefile index 53b0ec1d7512..e02ae87b2da0 100644 --- a/secure/lib/libcrypt/test/Makefile +++ b/secure/lib/libcrypt/test/Makefile @@ -4,27 +4,26 @@ # # $Id: Makefile,v 1.1.1.1 1994/04/04 14:57:18 g89r4222 Exp $ # -LIBCRYPT!=cd $(.CURDIR)/..; \ - printf "xxx:\n\techo \$${.OBJDIR}/libcrypt.a\n" | make -r -s -f - xxx +.if exists (../obj) +OBJDIR = obj +.else +OBJDIR = +.endif + +LIBCRYPT= $(.CURDIR)/../$(OBJDIR)/libcrypt.a #CFLAGS+= -DHAVE_CRYPT16 -TARGETS=cert speedcrypt speeddes +TARGETS=cert speedcrypt all: ${TARGETS} -test: all testcrypt testencrypt testdes testspeed +test: all testcrypt testspeed testcrypt: cert @./cert -c -testencrypt: cert - @./cert -e < ${.CURDIR}/cert.input - -testdes: cert - @./cert -d < ${.CURDIR}/cert.input - -testspeed: cryptspeed desspeed +testspeed: cryptspeed cryptspeed: speedcrypt @./speedcrypt 30 1 @@ -32,24 +31,18 @@ cryptspeed: speedcrypt @./speedcrypt 30 0 @./speedcrypt 30 0 -desspeed: speeddes - @./speeddes 30 1 - @./speeddes 30 1 - @./speeddes 40 25 - @./speeddes 40 25 - cert: cert.c ${LIBCRYPT} $(CC) $(CFLAGS) -o cert ${.CURDIR}/cert.c ${LIBCRYPT} speedcrypt: speedcrypt.c ${LIBCRYPT} $(CC) $(CFLAGS) -o speedcrypt ${.CURDIR}/speedcrypt.c ${LIBCRYPT} -speeddes: speeddes.c ${LIBCRYPT} - $(CC) $(CFLAGS) -o speeddes ${.CURDIR}/speeddes.c ${LIBCRYPT} clean: rm -f ${TARGETS} install: -.include +obj: + +.include diff --git a/secure/lib/libcrypt/test/cert.c b/secure/lib/libcrypt/test/cert.c index fe0d0bcd159a..4a9c088b2bd1 100644 --- a/secure/lib/libcrypt/test/cert.c +++ b/secure/lib/libcrypt/test/cert.c @@ -144,72 +144,6 @@ char *key, *plain, *answer; return(0); } -/* - * Test the setkey and encrypt functions - */ -void test_encrypt() -{ - char key[64],plain[64],cipher[64],answer[64]; - char buff[BUFSIZ]; - unsigned long salt; - int i; - int test; - int fail; - - printf("Testing setkey/encrypt\n"); - - for(test=0;fgets(buff, BUFSIZ, stdin);test++){ - - /* - * Allow comments. - */ - if (*buff == '#') - continue; - - if ((fail = parse_line(buff, &salt, key, plain, answer)) < 0){ - printf("test %d garbled (%d)\n", test, fail); - continue; - } - - if (salt) - continue; /* encrypt has no salt support */ - - printf(" K: "); put8(key); - printf(" P: "); put8(plain); - printf(" C: "); put8(answer); - - setkey(key); - 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(" Enc FAIL "); - put8(cipher); - fail++; totfails++; - } - - encrypt(cipher, 1); - - for(i=0;i<64;i++) - if(cipher[i] != plain[i]) - break; - if(i != 64){ - printf(" Dec FAIL"); - fail++; totfails++; - } - - if(fail == 0) - printf(" OK"); - printf("\n"); - } -} - - void bytes_to_bits(bytes, bits) char *bytes; unsigned char *bits; @@ -225,71 +159,6 @@ unsigned char *bits; } -/* - * Test the des_setkey and des_cipher functions - */ -void test_des() -{ - char ckey[64], cplain[64], canswer[64]; - unsigned char key[8], plain[8], cipher[8], answer[8]; - char buff[BUFSIZ]; - unsigned long salt; - int i; - int test; - int fail; - - printf("Testing des_setkey/des_cipher\n"); - - for(test=0;fgets(buff, BUFSIZ, stdin);test++){ - - /* - * Allow comments. - */ - if (*buff == '#') - continue; - - if ((fail = parse_line(buff, &salt, ckey, cplain, canswer)) <0){ - printf("test %d garbled (%d)\n", test, fail); - continue; - } - - printf(" S: %06x", salt); - printf(" K: "); put8(ckey); - printf(" P: "); put8(cplain); - printf(" C: "); put8(canswer); - - bytes_to_bits(ckey, key); - bytes_to_bits(cplain, plain); - bytes_to_bits(canswer, answer); - des_setkey(key); - des_cipher(plain, cipher, salt, 1); - - for(i = 0; i < 8; i++) - if(cipher[i] != answer[i]) - break; - fail = 0; - if(i != 8){ - printf(" Enc FAIL "); - print_bits(cipher); - fail++; totfails++; - } - - des_cipher(cipher, cipher, salt, -1); - - for(i = 0; i < 8; i++) - if(cipher[i] != plain[i]) - break; - if(i != 8){ - printf(" Dec FAIL"); - fail++; totfails++; - } - - if(fail == 0) - printf(" OK"); - printf("\n"); - } -} - /* * Test the old-style crypt(), the new-style crypt(), and crypt16(). @@ -334,11 +203,6 @@ main(argc, argv) int argc; char *argv[]; { - if(argc < 1 || !strcmp(argv[1], "-e")) - test_encrypt(); - else if(!strcmp(argv[1], "-d")) - test_des(); - else if(!strcmp(argv[1], "-c")) - test_crypt(); + test_crypt(); good_bye(); }