diff options
Diffstat (limited to 'lib/libcrypt')
-rw-r--r-- | lib/libcrypt/Makefile | 54 | ||||
-rw-r--r-- | lib/libcrypt/crypt-md5.c | 120 | ||||
-rw-r--r-- | lib/libcrypt/crypt-shs.c | 122 | ||||
-rw-r--r-- | lib/libcrypt/crypt.3 | 201 | ||||
-rw-r--r-- | lib/libcrypt/crypt.c | 276 | ||||
-rw-r--r-- | lib/libcrypt/crypt.h | 122 | ||||
-rw-r--r-- | lib/libcrypt/descrypt.3 | 90 | ||||
-rw-r--r-- | lib/libcrypt/shs.3 | 42 | ||||
-rw-r--r-- | lib/libcrypt/shs.c | 243 | ||||
-rw-r--r-- | lib/libcrypt/shs.h | 14 | ||||
-rw-r--r-- | lib/libcrypt/test/Makefile | 42 | ||||
-rw-r--r-- | lib/libcrypt/test/README | 15 | ||||
-rw-r--r-- | lib/libcrypt/test/cert.c | 226 | ||||
-rw-r--r-- | lib/libcrypt/test/cert.input | 179 | ||||
-rw-r--r-- | lib/libcrypt/test/speedcrypt.c | 70 |
15 files changed, 149 insertions, 1667 deletions
diff --git a/lib/libcrypt/Makefile b/lib/libcrypt/Makefile index 74babe8..20d181b 100644 --- a/lib/libcrypt/Makefile +++ b/lib/libcrypt/Makefile @@ -1,57 +1,57 @@ # -# $Id: Makefile,v 1.14 1998/09/02 15:09:15 bde Exp $ +# $Id$ # -SHLIB_MAJOR= 3 -.PATH: ${.CURDIR}/../../lib/libmd -SRCS= crypt.c crypt-md5.c md5c.c crypt-shs.c shs.c -MAN3= crypt.3 shs.3 descrypt.3 -CFLAGS+= -I${.CURDIR}/../libmd -DLIBC_SCCS -DESCRYPT= ${.CURDIR}/../../secure/lib/libcrypt/crypt-des.c - -## build exportable crypt or des crypt? -.if exists(${DESCRYPT}) && !defined(NOCRYPT) && !defined(NOSECURE) -.PATH: ${.CURDIR}/../../secure/lib/libcrypt -CIPHERTYPE= des -SRCS+= crypt-des.c -CFLAGS+= -I${.CURDIR} -DDES_CRYPT -.else -CIPHERTYPE= exp -.endif - -LIB=${CIPHERTYPE}crypt -LCRYPTBASE= libcrypt -LSCRYPTBASE= lib${LIB} +LCRYPTBASE= libcrypt +LSCRYPTBASE= libscrypt .if ${OBJFORMAT} != elf LCRYPTSO= ${LCRYPTBASE}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} LSCRYPTSO= ${LSCRYPTBASE}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} .else -SONAME= ${LCRYPTBASE}.so.${SHLIB_MAJOR} LCRYPTSO= ${LCRYPTBASE}.so.${SHLIB_MAJOR} LSCRYPTSO= ${LSCRYPTBASE}.so.${SHLIB_MAJOR} .endif +# called libscrypt - for scramble crypt! +.PATH: ${.CURDIR}/../libmd +LIB= scrypt +SRCS= crypt.c md5c.c +CFLAGS+= -I${.CURDIR}/../libmd -DLIBC_SCCS + +.if ${OBJFORMAT} == elf +SONAME= ${LCRYPTBASE}.so.${SHLIB_MAJOR} +.endif + +# We only install the links if they do not already exist. +# This may have to be revised + afterinstall: .if !defined(NOPIC) @cd ${DESTDIR}${SHLIBDIR}; \ + if [ ! -e ${LCRYPTSO} ]; then \ rm -f ${LCRYPTSO}; \ ln -s ${LSCRYPTSO} ${LCRYPTSO}; \ - rm -f ${LCRYPTBASE}.so.2; \ - ln -s ${LSCRYPTSO} ${LCRYPTBASE}.so.2 + fi .endif .if !defined(NOPIC) && ${OBJFORMAT} == elf @cd ${DESTDIR}${SHLIBDIR}; \ + if [ ! -e ${LCRYPTBASE}.so ]; then \ rm -f ${LCRYPTBASE}.so; \ - ln -s ${LSCRYPTBASE}.so libcrypt.so + ln -s ${LSCRYPTBASE}.so libcrypt.so; \ + fi .endif @cd ${DESTDIR}${LIBDIR}; \ + if [ ! -e ${LCRYPTBASE}.a ]; then \ rm -f ${LCRYPTBASE}.a; \ - ln -s ${LSCRYPTBASE}.a libcrypt.a + ln -s ${LSCRYPTBASE}.a libcrypt.a; \ + fi .if !defined(NOPROFILE) @cd ${DESTDIR}${LIBDIR}; \ + if [ ! -e ${LCRYPTBASE}_p.a ]; then \ rm -f ${LCRYPTBASE}_p.a; \ - ln -s ${LSCRYPTBASE}_p.a libcrypt_p.a + ln -s ${LSCRYPTBASE}_p.a libcrypt_p.a; \ + fi .endif .include <bsd.lib.mk> diff --git a/lib/libcrypt/crypt-md5.c b/lib/libcrypt/crypt-md5.c deleted file mode 100644 index ba48583..0000000 --- a/lib/libcrypt/crypt-md5.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - * - * $FreeBSD$ - * - */ - -/* -// Modularized by Brandon Gillespie -*/ - -#if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$Header: /home/ncvs/src/lib/libcrypt/crypt.c,v 1.4 1996/07/12 18:56:01 jkh Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include "crypt.h" - -char * -crypt_md5(pw, pl, sp, sl, passwd, token) - register const unsigned char *pw; - const unsigned int pl; - register const unsigned char *sp; - const unsigned int sl; - char * passwd; - char * token; -{ - char *p; - unsigned char final[_MD5_SIZE]; - int i,j; - MD5_CTX ctx,ctx1; - unsigned long l; - - MD5Init(&ctx); - - /* The password first, since that is what is most unknown */ - MD5Update(&ctx,pw,pl); - - /* Then our magic string */ - MD5Update(&ctx,(unsigned char *)token,strlen(token)); - - /* Then the raw salt */ - MD5Update(&ctx,sp,sl); - - /* Then just as many characters of the MD5(pw,salt,pw) */ - MD5Init(&ctx1); - MD5Update(&ctx1,pw,pl); - MD5Update(&ctx1,sp,sl); - MD5Update(&ctx1,pw,pl); - MD5Final(final,&ctx1); - for(i = pl; i > 0; i -= 16) - MD5Update(&ctx,final,i>16 ? 16 : i); - - /* Don't leave anything around in vm they could use. */ - memset(final,0,sizeof final); - - /* Then something really weird... */ - for (j=0,i = pl; i ; i >>= 1) - if(i&1) - MD5Update(&ctx, final+j, 1); - else - MD5Update(&ctx, pw+j, 1); - - /* Now make the output string */ - strcpy(passwd, token); - strncat(passwd, (char *)sp, (int)sl); - strcat(passwd, "$"); - - MD5Final(final,&ctx); - - /* - * and now, just to make sure things don't run too fast - * On a 60 Mhz Pentium this takes 34 msec, so you would - * need 30 seconds to build a 1000 entry dictionary... - */ - for(i=0;i<1000;i++) { - MD5Init(&ctx1); - if(i & 1) - MD5Update(&ctx1,pw,pl); - else - MD5Update(&ctx1,final,_MD5_SIZE); - - if(i % 3) - MD5Update(&ctx1,sp,sl); - - if(i % 7) - MD5Update(&ctx1,pw,pl); - - if(i & 1) - MD5Update(&ctx1,final,_MD5_SIZE); - else - MD5Update(&ctx1,pw,pl); - MD5Final(final,&ctx1); - } - - p = passwd + strlen(passwd); - - l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p,l,4); p += 4; - l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p,l,4); p += 4; - l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p,l,4); p += 4; - l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p,l,4); p += 4; - l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(p,l,4); p += 4; - l = final[11] ; to64(p,l,2); p += 2; - *p = '\0'; - - /* Don't leave anything around in vm they could use. */ - memset(final,0,sizeof final); - - return passwd; -} - diff --git a/lib/libcrypt/crypt-shs.c b/lib/libcrypt/crypt-shs.c deleted file mode 100644 index 5f8384c..0000000 --- a/lib/libcrypt/crypt-shs.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - * - * $FreeBSD$ - * - */ - -/* -// Integrated SHA-1 crypt using PHK's MD5 code base. -*/ - -#if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$Header: /home/ncvs/src/lib/libcrypt/crypt.c,v 1.4 1996/07/12 18:56:01 jkh Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include "crypt.h" - -char * -crypt_shs(pw, pl, sp, sl, passwd, token) - register const unsigned char *pw; - const unsigned int pl; - register const unsigned char *sp; - const unsigned int sl; - char * passwd; - char * token; -{ - char *p; - unsigned char final[_SHS_SIZE]; - int i,j; - SHS_CTX ctx,ctx1; - unsigned long l; - - shsInit(&ctx); - - /* The password first, since that is what is most unknown */ - shsUpdate(&ctx,pw,pl); - - /* Then our magic string */ - shsUpdate(&ctx,(unsigned char *)token, strlen(token)); - - /* Then the raw salt */ - shsUpdate(&ctx,sp,sl); - - /* Then just as many characters of the shs(pw,salt,pw) */ - shsInit(&ctx1); - shsUpdate(&ctx1,pw,pl); - shsUpdate(&ctx1,sp,sl); - shsUpdate(&ctx1,pw,pl); - shsFinal(&ctx1,final); - for(i = pl; i > 0; i -= _SHS_SIZE) - shsUpdate(&ctx,final,i>_SHS_SIZE ? _SHS_SIZE : i); - - /* Don't leave anything around in vm they could use. */ - memset(final,0,sizeof final); - - /* Then something really weird... */ - for (j=0,i = pl; i ; i >>= 1) - if(i&1) - shsUpdate(&ctx, final+j, 1); - else - shsUpdate(&ctx, pw+j, 1); - - /* Now make the output string */ - strcpy(passwd, token); - strncat(passwd, (char *)sp, (int)sl); - strcat(passwd, "$"); - - shsFinal(&ctx,final); - - /* - * and now, just to make sure things don't run too fast - * On a 60 Mhz Pentium this takes 34 msec, so you would - * need 30 seconds to build a 1000 entry dictionary... - */ - for(i=0;i<1000;i++) { - shsInit(&ctx1); - if(i & 1) - shsUpdate(&ctx1,pw,pl); - else - shsUpdate(&ctx1,final,_SHS_SIZE); - - if(i % 3) - shsUpdate(&ctx1,sp,sl); - - if(i % 7) - shsUpdate(&ctx1,pw,pl); - - if(i & 1) - shsUpdate(&ctx1,final,_SHS_SIZE); - else - shsUpdate(&ctx1,pw,pl); - shsFinal(&ctx1,final); - } - - p = passwd + strlen(passwd); - - l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p,l,4); p += 4; - l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p,l,4); p += 4; - l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p,l,4); p += 4; - l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p,l,4); p += 4; - l = (final[ 4]<<16) | (final[10]<<8) | final[16]; to64(p,l,4); p += 4; - l = (final[ 5]<<16) | (final[11]<<8) | final[17]; to64(p,l,4); p += 4; - l = (final[18]<<8) | final[19]; to64(p,l,3); p += 3; - - *p = '\0'; - - /* Don't leave anything around in vm they could use. */ - memset(final,0,sizeof final); - - return passwd; -} - diff --git a/lib/libcrypt/crypt.3 b/lib/libcrypt/crypt.3 deleted file mode 100644 index f07cf90..0000000 --- a/lib/libcrypt/crypt.3 +++ /dev/null @@ -1,201 +0,0 @@ -.\" FreeSec: libcrypt for NetBSD -.\" -.\" Copyright (c) 1994 David Burren -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 4. Neither the name of the author nor the names of other contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.\" Manual page, using -mandoc macros -.\" -.Dd January 19, 1997 -.Dt CRYPT 3 -.Os "FreeSec 1.0" -.Sh NAME -.Nm crypt -.Nd Trapdoor encryption -.Sh SYNOPSIS -.Ft char -.Fn *crypt "const char *key" "const char *salt" -.Ft char -.Fn *malloc_crypt "const char *key" "const char *salt" -.Sh DESCRIPTION -The -.Fn crypt -function performs password hashing with additional code added to -deter key search attempts. Different algorithms can be used to -in the hash. -.\" -.\" NOTICE: -.\" If you add more algorithms, make sure to update this list -.\" and the default used for the Traditional format, below. -.\" -Currently these include the -.Tn NBS -Data Encryption Standard (DES), MD5 or SHS. The algorithm -used will depend upon the format of the Salt--following the Modular -Crypt Format (MCF)--and if DES is installed or not. -.Pp -The first argument to -.Nm crypt -is the data to hash (usually a password), in a -.Dv null Ns -terminated -string. -The second is the salt, in one of three forms: -.Pp -.Bl -tag -width Traditional -compact -offset indent -.It Extended -If it begins with an underscore (``_'') then the DES Extended Format -is used in interpreting both the the key and the salt, as outlined below. -.It Modular -If it begins with the string ``$token$'' (where ``token'' is a digit or -alphanumeric token) then the Modular Crypt Format is used, as outlined -below. -.It Traditional -If neither of the above is true, it assumes the Traditional Format, -using the entire string as the salt (or the first portion). -.El -.Pp -The function -.Fn malloc_crypt -differs from -.Fn crypt -in not using a static buffer. The results are instead returned in a -string buffer allocated with -.Fn malloc . -.Pp -All routines are designed to be time-consuming. A brief test on a -Pentium 166/MMX shows the DES crypt to do approximately 2640 crypts -a CPU second, MD5 to do about 62 crypts a CPU second and SHA1 -to do about 18 crypts a CPU second. -.Ss DES Extended Format: -.Pp -The -.Ar key -is divided into groups of 8 characters (the last group is null-padded) -and the low-order 7 bits of each each character (56 bits per group) are -used to form the DES key as follows: -the first group of 56 bits becomes the initial DES key. -For each additional group, the XOR of the encryption of the current DES -key with itself and the group bits becomes the next DES key. -.Pp -The salt is a 9-character array consisting of an underscore followed -by 4 bytes of iteration count and 4 bytes of salt. -These are encoded as printable characters, 6 bits per character, -least significant character first. -The values 0 to 63 are encoded as ``./0-9A-Za-z''. -This allows 24 bits for both -.Fa count -and -.Fa salt . -.Pp -Note: this should be clarified. -.Ss "Modular" crypt: -.Pp -If the salt begins with the string -.Fa $token$ -(where -.Fa token -is a digit or alphanumeric token) then the Modular Crypt Format is used. The -.Fa token -represents which algorithm is used in encryption. Following the token is -the actual salt to use in the encryption. The length of the salt is limited -to 16 characters--because the length of the returned output is also limited -(_PASSWORD_LEN). The salt must be terminated with the end of the string -(NULL) or a dollar sign. Any characters after the dollar sign are ignored. -.Pp -Currently supported tokens are: -.Pp -.Bl -tag -width 012345678 -compact -offset indent -.It MD5 -MD5 encryption--a token of 1 will also work. -.It SHA1 -SHA1 encryption. -.El -.Pp -Other crypt formats may be easilly added. An example salt would be: -.Bl -tag -offset indent -.It Cm "$SHA1$thesalt$rest" -.El -.Pp -.Ss "Traditional" crypt: -.Pp -The algorithm used will depend upon if DES is installed or not. If it is, -DES will be used. Otherwise, the best algorithm is used, which is currently -.\" -.\" NOTICE: Also make sure to update this -.\" -SHA-1. -.Pp -How the salt is used will depend upon the algorithm for the hash. For -best results, specify at least two characters of salt. -.Sh RETURN VALUES -.Pp -.Fn crypt -returns a pointer to the encrypted value on success, and NULL on failure. -Note: this is not a standard behaviour, AT&T -.Fn crypt -will always return a pointer to a string. -.Pp -.Fn malloc_crypt -returns a pointer to the encrypted value, which is in a dynamically -allocated buffer rather than a static buffer, using -.Fn malloc . -.Sh SEE ALSO -.Xr login 1 , -.Xr passwd 1 , -.Xr getpass 3 , -.Xr passwd 5 , -.Xr descrypt 3 , -.Xr shs 3 , -.Sh BUGS -The -.Fn crypt -function returns a pointer to static data, and subsequent calls to -.Fn crypt -will modify the same data. -.Fn malloc_crypt -can be used to avoid this problem--but it is not standard (so your code -will not be portable). -.Sh HISTORY -A rotor-based -.Fn crypt -function appeared in -.At v6 . -The current style -.Fn crypt -first appeared in -.At v7 . -.Pp -The DES section of the code (FreeSec 1.0) was developed outside the United -States of America as an unencumbered replacement for the U.S.-only NetBSD -libcrypt encryption library. -Users should be aware that this code (and programs staticly linked with it) -may not be exported from the U.S., although it apparently can be imported. -.Sh AUTHORS -Originally written by David Burren <davidb@werj.com.au>, later additions -and changes by Brandon Gillespie, Poul-henning Kamp and Mark R V Murray. -SHS Library written and Copyright 1995, 1996 by Paul C. Kocher. diff --git a/lib/libcrypt/crypt.c b/lib/libcrypt/crypt.c index 3d001a4..cdd4bbc 100644 --- a/lib/libcrypt/crypt.c +++ b/lib/libcrypt/crypt.c @@ -5,185 +5,153 @@ * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- - */ - -/* - * It has since been changed by Brandon Gillespie, the end result is not - * too clean, but it is clear and modular; there is no need for crypt() - * to be optimized (and actually a desire for the opposite) so I am not - * overly concerned. - */ - -/* - * Assumptions made with the format of passwords: * - * + Any password beginning with a dollar-sign is assumed to be in - * the Modular Crypt Format (MCF), namely: $tag$salt$hash. Any - * algorithms added will also use this format. Other MCF assumptions: - * + The algorithm tag (field 1) will be less than five characters - * long (yay, arbitrary limits). Anything longer is ignored. - * New algorithm names are not allowed to be fully numeric as - * anything fully numeric is mapped from other OS's not following - * our standard, and from older versions of this standard (such as - * $1$ for MD5 passwords, rather than $MD5$). - * + The salt can be up to 16 characters in length (more arbitrary - * limits). - * + An invalid or unrecognized algorithm tag will default to use the - * 'best' encryption method--whatever that may be at the time. - * + If the MCF is not specified, use the 'best' method, unless DES - * is installed--then use DES. - * + Any password beginning with an underscore '_' is assumed to be - * the Extended DES Format, which has its own salt requirements, - * and is not the same as the MCF. - * + Salt must be limited to the same ascii64 character set the hash - * is encoded in (namely "./0-9A-Za-z"). + * $Id$ + * */ +#if defined(LIBC_SCCS) && !defined(lint) +static char rcsid[] = "$Header$"; +#endif /* LIBC_SCCS and not lint */ + #include <unistd.h> #include <stdio.h> -#include <stdlib.h> #include <string.h> -#include <ctype.h> - -#define _CRYPT_C_ - -#include "crypt.h" - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif +#include <md5.h> +#include <string.h> -/* - * commonly used througout all algorithms - */ +static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */ + "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; -static unsigned char ascii64[] = /* 0 ... 63 => ascii - 64 */ - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; +static void to64 __P((char *, unsigned long, int)); -void +static void to64(s, v, n) char *s; unsigned long v; int n; { +static void to64 __P((char *, unsigned long, int)); + while (--n >= 0) { - *s++ = ascii64[v&0x3f]; + *s++ = itoa64[v&0x3f]; v >>= 6; } } -static char * hash_word(password, salt, output) - const char *password; - const char *salt; - char *output; -{ - unsigned char spbuf[_CRYPT_MAX_SALT_LEN+1], - pwbuf[_CRYPT_OUTPUT_SIZE+1], - * ep, * sp, * pw; - unsigned int sl, pl, - tag = _CRYPT_DEFAULT_VERSION, - mcf = FALSE; - - memset(spbuf, 0, _CRYPT_MAX_SALT_LEN+1); - memset(pwbuf, 0, _CRYPT_MAX_SALT_LEN+1); - strncpy((char *) spbuf, (unsigned char *) salt, _CRYPT_MAX_SALT_LEN); - strncpy((char *) pwbuf, (unsigned char *) password, _CRYPT_OUTPUT_SIZE); - sp = &spbuf[0]; - pw = &pwbuf[0]; - pl = strlen((char *) pw); - - /* figure out what type of crypt is wanted */ - if (sp && sp[0] == '$') { - mcf = TRUE; - sp++; - if (strncasecmp((char *) sp, "MD5$", 4)==0) { - tag = _MD5_CRYPT; - sp += 4; - } else if (strncasecmp((char *) sp, "1$", 2)==0) { - tag = _MD5_CRYPT_OLD; - sp += 2; - } else if (strncasecmp((char *) sp, "SHA1$", 5)==0) { - tag = _SHS_CRYPT; - sp += 5; - } else { - tag = _CRYPT_DEFAULT_VERSION; - while (*sp && *sp != '$') - sp++; - if (*sp == '$') - sp++; - } - } - - /* Refine the salt. Go to the end, it stops at the first '$' or NULL */ - for (ep=sp; *ep && *ep != '$'; ep++) - continue; - - /* we have to do this so we dont overflow _PASSWORD_LEN */ - if ((ep - sp) > 16) { - sl = 16; - sp[16] = (char) NULL; - } else { - sl = ep - sp; - } - - switch (tag) { - case _MD5_CRYPT_OLD: - return crypt_md5(pw, pl, sp, sl, output, "$1$"); - case _MD5_CRYPT: - return crypt_md5(pw, pl, sp, sl, output, "$MD5$"); -#ifdef DES_CRYPT - case _DES_CRYPT: - return crypt_des(pw, pl, sp, sl, output, ""); -#endif - /* dropping a DES password through will likely cause problems, - but at least crypt() will return as it says it will (we cannot - return an error condition) */ - case _SHS_CRYPT: - default: - return crypt_shs(pw, pl, sp, sl, output, "$SHA1$"); - } -} - -char * -crypt(password, salt) - const char *password; - const char *salt; -{ - static char output[_CRYPT_OUTPUT_SIZE]; - - return hash_word(password, salt, output); -} +/* + * UNIX password + * + * Use MD5 for what it is best at... + */ char * -malloc_crypt(password, salt) - const char *password; - const char *salt; +crypt(pw, salt) + register const char *pw; + register const char *salt; { - char * output; - - output = (char *) malloc(sizeof(char) * _CRYPT_OUTPUT_SIZE); - return hash_word(password, salt, output); -} - -int -match_crypted(possible, crypted) - const char * possible, - * crypted; -{ - char * pc; - int match; + static char *magic = "$1$"; /* + * This string is magic for + * this algorithm. Having + * it this way, we can get + * get better later on + */ + static char passwd[120], *p; + static const char *sp,*ep; + unsigned char final[16]; + int sl,pl,i,j; + MD5_CTX ctx,ctx1; + unsigned long l; + + /* Refine the Salt first */ + sp = salt; + + /* If it starts with the magic string, then skip that */ + if(!strncmp(sp,magic,strlen(magic))) + sp += strlen(magic); + + /* It stops at the first '$', max 8 chars */ + for(ep=sp;*ep && *ep != '$' && ep < (sp+8);ep++) + continue; + + /* get the length of the true salt */ + sl = ep - sp; + + MD5Init(&ctx); + + /* The password first, since that is what is most unknown */ + MD5Update(&ctx,pw,strlen(pw)); + + /* Then our magic string */ + MD5Update(&ctx,magic,strlen(magic)); + + /* Then the raw salt */ + MD5Update(&ctx,sp,sl); + + /* Then just as many characters of the MD5(pw,salt,pw) */ + MD5Init(&ctx1); + MD5Update(&ctx1,pw,strlen(pw)); + MD5Update(&ctx1,sp,sl); + MD5Update(&ctx1,pw,strlen(pw)); + MD5Final(final,&ctx1); + for(pl = strlen(pw); pl > 0; pl -= 16) + MD5Update(&ctx,final,pl>16 ? 16 : pl); + + /* Don't leave anything around in vm they could use. */ + memset(final,0,sizeof final); + + /* Then something really weird... */ + for (i = strlen(pw); i ; i >>= 1) + if(i&1) + MD5Update(&ctx, final, 1); + else + MD5Update(&ctx, pw, 1); + + /* Now make the output string */ + strcpy(passwd,magic); + strncat(passwd,sp,sl); + strcat(passwd,"$"); + + MD5Final(final,&ctx); + + /* + * and now, just to make sure things don't run too fast + * On a 60 Mhz Pentium this takes 34 msec, so you would + * need 30 seconds to build a 1000 entry dictionary... + */ + for(i=0;i<1000;i++) { + MD5Init(&ctx1); + if(i & 1) + MD5Update(&ctx1,pw,strlen(pw)); + else + MD5Update(&ctx1,final,16); + + if(i % 3) + MD5Update(&ctx1,sp,sl); + + if(i % 7) + MD5Update(&ctx1,pw,strlen(pw)); + + if(i & 1) + MD5Update(&ctx1,final,16); + else + MD5Update(&ctx1,pw,strlen(pw)); + MD5Final(final,&ctx1); + } - pc = malloc_crypt(possible, crypted); + p = passwd + strlen(passwd); - match = !strcmp(pc, crypted); + l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p,l,4); p += 4; + l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p,l,4); p += 4; + l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p,l,4); p += 4; + l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p,l,4); p += 4; + l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(p,l,4); p += 4; + l = final[11] ; to64(p,l,2); p += 2; + *p = '\0'; - free(pc); + /* Don't leave anything around in vm they could use. */ + memset(final,0,sizeof final); - return match; + return passwd; } -#undef _CRYPT_C_ diff --git a/lib/libcrypt/crypt.h b/lib/libcrypt/crypt.h deleted file mode 100644 index 3b43407..0000000 --- a/lib/libcrypt/crypt.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 1996 - * Brandon Gillespie. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY Brandon Gillespie AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL Brandon Gillespie OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* -// -------------------------------------------------------------------------- -// to add a new algorithm, have it export the function 'crypt_<algo>' -// (where <algo> is whichever algorithm, such as 'des' or 'md5), with -// the arguments ordered as follows, and the return value 'char *': -// -// register const unsigned char * -- word to encrypt -// const unsigned int -- length of word to encrypt -// register const unsigned char * -- salt to encrypt with -// const unsigned int -- salt length -// char * -- output buffer, _CRYPT_OUTPUT_SIZE max -// char * -- identifier token -// -// such as: -// -// char * -// crypt_des(register const unsigned char *pw, -// const unsigned int pl, -// register const unsigned char *sp, -// const unsigned int sl, -// char * passwd, -// char * token); -// -// Prototype the function below, include libraries here. -// You can use the macro CRYPT_HOOK() to make it easy. -*/ - -#include <md5.h> -#include <pwd.h> -#include "shs.h" - -#define _DES_CRYPT 0 -#define _MD5_CRYPT 1 -#define _MD5_CRYPT_OLD 3 -#define _BF_CRYPT 2 -#define _BF_CRYPT_OpenBSD 4 -#define _SHS_CRYPT 5 - -/* -// -------------------------------------------------------------------------- -// Prototypes -*/ - -#define _CRYPT_HOOK(_type_) \ - char * crypt_ ## _type_ ( \ - register const unsigned char * pw, \ - const unsigned int pl, \ - register const unsigned char * sw, \ - const unsigned int sp, \ - char * passwd, \ - char * token) - -#ifdef DES_CRYPT -_CRYPT_HOOK(des); -#endif - -_CRYPT_HOOK(md5); -_CRYPT_HOOK(shs); - -#undef _CRYPT_HOOK - -/* -// -------------------------------------------------------------------------- -// What is the default? -*/ -#ifdef _CRYPT_DEFAULT_DES - -/* use the 'best' encryption */ -/* currently SHA-1 */ -#define _CRYPT_DEFAULT_VERSION _SHS_CRYPT - -#else - -/* else use DES encryption */ -#define _CRYPT_DEFAULT_VERSION _DES_CRYPT - -#endif - -/* -// -------------------------------------------------------------------------- -// other unimportant magic, enlarge as algorithms warrant, do not reduce. -*/ - -/* largest size of encrypted password */ -#define _CRYPT_OUTPUT_SIZE _PASSWORD_LEN -#define _CRYPT_MAX_SALT_LEN 24 /* token=5 salt=16 extra=4 */ - -/* magic sizes not defined elsewhere, cleaner through defs */ -#define _MD5_SIZE 16 -#define _SHS_SIZE 20 - -#ifndef _CRYPT_C_ -extern void to64(char * s, unsigned long v, int n); -#endif - diff --git a/lib/libcrypt/descrypt.3 b/lib/libcrypt/descrypt.3 deleted file mode 100644 index c028b19..0000000 --- a/lib/libcrypt/descrypt.3 +++ /dev/null @@ -1,90 +0,0 @@ -.\" FreeSec: libcrypt for NetBSD -.\" -.\" Copyright (c) 1994 David Burren -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 4. Neither the name of the author nor the names of other contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.\" Manual page, using -mandoc macros -.\" -.Dd January 19, 1997 -.Dt DES 3 -.Os "FreeSec 1.0" -.Sh NAME -.Nm des -.Nd Trapdoor encryption -.Sh DESCRIPTION -.Pp -The -.Fa salt -introduces disorder in the -.Tn DES -algorithm in one of 16777216 or 4096 possible ways -(ie. with 24 or 12 bits: if bit -.Em i -of the -.Ar salt -is set, then bits -.Em i -and -.Em i+24 -are swapped in the -.Tn DES -E-box output). -.Pp -The DES key is used to encrypt a 64-bit constant using -.Ar count -iterations of -.Tn DES . -The value returned is a -.Dv null Ns -terminated -string, 20 or 13 bytes (plus null) in length, consisting of the -.Ar salt -followed by the encoded 64-bit encryption. -.Sh SEE ALSO -.Xr crypt 3 -.Sh AVAILABILITY -.Pp -DES Crypt is only available if it has been added. It is not available -by default. -.Sh HISTORY -A rotor-based -.Fn crypt -function appeared in -.At v6 . -The current style -.Fn crypt -first appeared in -.At v7 . -.Pp -The DES section of the code (FreeSec 1.0) was developed outside the United -States of America as an unencumbered replacement for the U.S.-only NetBSD -libcrypt encryption library. -Users should be aware that this code (and programs staticly linked with it) -may not be exported from the U.S., although it apparently can be imported. -.Sh AUTHORS -David Burren <davidb@werj.com.au> diff --git a/lib/libcrypt/shs.3 b/lib/libcrypt/shs.3 deleted file mode 100644 index 6db63dee..0000000 --- a/lib/libcrypt/shs.3 +++ /dev/null @@ -1,42 +0,0 @@ -.\" SHS 180-1 Reference Implementation (with unrolled loops) -.\" Copyright 1995-6 by Paul C. Kocher. -.\" -.\" This file is provided as-is, without warranty of any kind; -.\" use at your own risk. This file may be copied and used, -.\" even for commercial purposes, for free. For information, -.\" updates, updates, or consulting help, send e-mail to the -.\" author at pck@cryptography.com. -.\" -.\" EXPORT STATUS: In informal discussions, the U.S. National -.\" Security Agency has indicated to me that source code for -.\" can be exported from the U.S. freely, but programs using -.\" or incorporating this code may be restricted. Please make -.\" sure you understand the applicable export regulations -.\" before doing any work with cryptography. -.\" -.\" For links to other cryptography source code, papers, etc. see -.\" http://www.cryptography.com. -.\" -.Dd December 54, 1996 -.Dt SHS 3 -.Sh NAME -.Nm shs -.Nd encryption -.Sh DESCRIPTION -.Pp -EXPORT STATUS: In informal discussions, the U.S. National -Security Agency has indicated to me that source code for -can be exported from the U.S. freely, but programs using -or incorporating this code may be restricted. Please make -sure you understand the applicable export regulations -before doing any work with cryptography. -.Sh SEE ALSO -.Xr crypt 3 -.Sh AUTHOR -This file is provided as-is, without warranty of any kind; -use at your own risk. This file may be copied and used, -even for commercial purposes, for free. For information, -updates, updates, or consulting help, send e-mail to the -author at pck@cryptography.com -.Pp -Copyright 1995-6 by Paul C. Kocher. diff --git a/lib/libcrypt/shs.c b/lib/libcrypt/shs.c deleted file mode 100644 index b382a24..0000000 --- a/lib/libcrypt/shs.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - ******************************************************************** - * SHS 180-1 Reference Implementation (with unrolled loops) * - * Copyright 1995-6 by Paul C. Kocher. * - * * - * This file is provided as-is, without warranty of any kind; * - * use at your own risk. This file may be copied and used, * - * even for commercial purposes, for free. For information, * - * updates, updates, or consulting help, send e-mail to the * - * author at pck@cryptography.com. * - * * - * EXPORT STATUS: In informal discussions, the U.S. National * - * Security Agency has indicated to me that source code for * - * can be exported from the U.S. freely, but programs using * - * or incorporating this code may be restricted. Please make * - * sure you understand the applicable export regulations * - * before doing any work with cryptography. * - * * - * For links to other cryptography source code, papers, etc. see * - * http://www.cryptography.com. * - ******************************************************************** - */ - -#include "shs.h" - -static void shsCompress(SHS_CTX *ctx); - -#define SHS_ROTL(X,n) (((X) << (n)) | ((X) >> (32-(n)))) -#define SHS_F1(X,Y,Z) ((((Y)^(Z))&(X))^(Z)) -#define SHS_F2(X,Y,Z) ((X)^(Y)^(Z)) -#define SHS_F3(X,Y,Z) (((X)&(Y))|((Z)&((X)|(Y)))) -#define SHS_F4(X,Y,Z) ((X)^(Y)^(Z)) - - -/* - * SHS: Initialize context - */ -void shsInit(SHS_CTX *ctx) { - ctx->lenW = 0; - ctx->sizeHi = ctx->sizeLo = 0; - - /* - * Initialize H with constants from FIPS180-1. - */ - ctx->H[0] = 0x67452301L; - ctx->H[1] = 0xefcdab89L; - ctx->H[2] = 0x98badcfeL; - ctx->H[3] = 0x10325476L; - ctx->H[4] = 0xc3d2e1f0L; -} - - -/* - * SHS: Add data to context. - */ -void shsUpdate(SHS_CTX *ctx, const unsigned char * dataIn, int len) { - /* - * Read the data into W and process blocks as they get full - * - * NOTE: The shifts can be eliminated on big-endian machines, since - * the byte-to-word transformation can be done with a copy. In - * assembly language on 80486+ computers, the BSWAP instruction - * can be used. - */ - ctx->sizeLo += 8*len; - ctx->sizeHi += (ctx->sizeLo < 8*len) + (len >> 29); - while (len--) { - ctx->W[ctx->lenW / 4] <<= 8; - ctx->W[ctx->lenW / 4] |= *(dataIn++); - if (((++ctx->lenW) & 63) == 0) { - shsCompress(ctx); - ctx->lenW = 0; - } - } -} - - -/* - * SHS: Generate hash value from context - */ -void shsFinal(SHS_CTX * ctx, unsigned char hashOut[20]) { - static unsigned char bulk_pad[64] = { 0x80,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - unsigned char length_pad[8]; - int i; - - /* - * Pad with a binary 1 (e.g. 0x80), then zeroes, then length - */ - length_pad[0] = (unsigned char)((ctx->sizeHi >> 24) & 255); - length_pad[1] = (unsigned char)((ctx->sizeHi >> 16) & 255); - length_pad[2] = (unsigned char)((ctx->sizeHi >> 8) & 255); - length_pad[3] = (unsigned char)((ctx->sizeHi >> 0) & 255); - length_pad[4] = (unsigned char)((ctx->sizeLo >> 24) & 255); - length_pad[5] = (unsigned char)((ctx->sizeLo >> 16) & 255); - length_pad[6] = (unsigned char)((ctx->sizeLo >> 8) & 255); - length_pad[7] = (unsigned char)((ctx->sizeLo >> 0) & 255); - shsUpdate(ctx, bulk_pad, ((56+64) - ctx->lenW) & 63); - shsUpdate(ctx, length_pad, 8); - - /* - * Output hash - */ - for (i = 0; i < 5; i++) { - *(hashOut++) = ((unsigned char)(ctx->H[i] >> 24)) & 255; - *(hashOut++) = ((unsigned char)(ctx->H[i] >> 16)) & 255; - *(hashOut++) = ((unsigned char)(ctx->H[i] >> 8)) & 255; - *(hashOut++) = ((unsigned char)(ctx->H[i] )) & 255; - } - - /* - * Re-initialize the context (also zeroizes contents) - */ - shsInit(ctx); -} - - -/* - * SHS: Hash a block in memory - */ -void shsBlock(const unsigned char *dataIn, int len, unsigned char hashOut[20]) { - SHS_CTX ctx; - - shsInit(&ctx); - shsUpdate(&ctx, dataIn, len); - shsFinal(&ctx, hashOut); -} - - -/* - * SHS: Compression function, unrolled. - */ -static void shsCompress(SHS_CTX *ctx) { - int t; - register unsigned long A,B,C,D,E; - - /* - * This can be moved into the main code block below, but doing - * so can cause some compilers to run out of registers and resort - * to storing intermediates in RAM. - */ - for (t = 16; t <= 79; t++) - ctx->W[t] = - SHS_ROTL(ctx->W[t-3] ^ ctx->W[t-8] ^ ctx->W[t-14] ^ ctx->W[t-16], 1); - - A = ctx->H[0]; - B = ctx->H[1]; - C = ctx->H[2]; - D = ctx->H[3]; - E = ctx->H[4]; - - E = SHS_ROTL(A,5)+SHS_F1(B,C,D)+E+ctx->W[ 0]+0x5a827999L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F1(A,B,C)+D+ctx->W[ 1]+0x5a827999L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F1(E,A,B)+C+ctx->W[ 2]+0x5a827999L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F1(D,E,A)+B+ctx->W[ 3]+0x5a827999L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F1(C,D,E)+A+ctx->W[ 4]+0x5a827999L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F1(B,C,D)+E+ctx->W[ 5]+0x5a827999L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F1(A,B,C)+D+ctx->W[ 6]+0x5a827999L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F1(E,A,B)+C+ctx->W[ 7]+0x5a827999L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F1(D,E,A)+B+ctx->W[ 8]+0x5a827999L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F1(C,D,E)+A+ctx->W[ 9]+0x5a827999L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F1(B,C,D)+E+ctx->W[10]+0x5a827999L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F1(A,B,C)+D+ctx->W[11]+0x5a827999L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F1(E,A,B)+C+ctx->W[12]+0x5a827999L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F1(D,E,A)+B+ctx->W[13]+0x5a827999L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F1(C,D,E)+A+ctx->W[14]+0x5a827999L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F1(B,C,D)+E+ctx->W[15]+0x5a827999L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F1(A,B,C)+D+ctx->W[16]+0x5a827999L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F1(E,A,B)+C+ctx->W[17]+0x5a827999L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F1(D,E,A)+B+ctx->W[18]+0x5a827999L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F1(C,D,E)+A+ctx->W[19]+0x5a827999L; C=SHS_ROTL(C,30); - - E = SHS_ROTL(A,5)+SHS_F2(B,C,D)+E+ctx->W[20]+0x6ed9eba1L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F2(A,B,C)+D+ctx->W[21]+0x6ed9eba1L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F2(E,A,B)+C+ctx->W[22]+0x6ed9eba1L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F2(D,E,A)+B+ctx->W[23]+0x6ed9eba1L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F2(C,D,E)+A+ctx->W[24]+0x6ed9eba1L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F2(B,C,D)+E+ctx->W[25]+0x6ed9eba1L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F2(A,B,C)+D+ctx->W[26]+0x6ed9eba1L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F2(E,A,B)+C+ctx->W[27]+0x6ed9eba1L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F2(D,E,A)+B+ctx->W[28]+0x6ed9eba1L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F2(C,D,E)+A+ctx->W[29]+0x6ed9eba1L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F2(B,C,D)+E+ctx->W[30]+0x6ed9eba1L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F2(A,B,C)+D+ctx->W[31]+0x6ed9eba1L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F2(E,A,B)+C+ctx->W[32]+0x6ed9eba1L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F2(D,E,A)+B+ctx->W[33]+0x6ed9eba1L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F2(C,D,E)+A+ctx->W[34]+0x6ed9eba1L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F2(B,C,D)+E+ctx->W[35]+0x6ed9eba1L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F2(A,B,C)+D+ctx->W[36]+0x6ed9eba1L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F2(E,A,B)+C+ctx->W[37]+0x6ed9eba1L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F2(D,E,A)+B+ctx->W[38]+0x6ed9eba1L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F2(C,D,E)+A+ctx->W[39]+0x6ed9eba1L; C=SHS_ROTL(C,30); - - E = SHS_ROTL(A,5)+SHS_F3(B,C,D)+E+ctx->W[40]+0x8f1bbcdcL; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F3(A,B,C)+D+ctx->W[41]+0x8f1bbcdcL; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F3(E,A,B)+C+ctx->W[42]+0x8f1bbcdcL; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F3(D,E,A)+B+ctx->W[43]+0x8f1bbcdcL; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F3(C,D,E)+A+ctx->W[44]+0x8f1bbcdcL; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F3(B,C,D)+E+ctx->W[45]+0x8f1bbcdcL; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F3(A,B,C)+D+ctx->W[46]+0x8f1bbcdcL; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F3(E,A,B)+C+ctx->W[47]+0x8f1bbcdcL; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F3(D,E,A)+B+ctx->W[48]+0x8f1bbcdcL; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F3(C,D,E)+A+ctx->W[49]+0x8f1bbcdcL; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F3(B,C,D)+E+ctx->W[50]+0x8f1bbcdcL; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F3(A,B,C)+D+ctx->W[51]+0x8f1bbcdcL; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F3(E,A,B)+C+ctx->W[52]+0x8f1bbcdcL; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F3(D,E,A)+B+ctx->W[53]+0x8f1bbcdcL; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F3(C,D,E)+A+ctx->W[54]+0x8f1bbcdcL; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F3(B,C,D)+E+ctx->W[55]+0x8f1bbcdcL; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F3(A,B,C)+D+ctx->W[56]+0x8f1bbcdcL; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F3(E,A,B)+C+ctx->W[57]+0x8f1bbcdcL; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F3(D,E,A)+B+ctx->W[58]+0x8f1bbcdcL; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F3(C,D,E)+A+ctx->W[59]+0x8f1bbcdcL; C=SHS_ROTL(C,30); - - E = SHS_ROTL(A,5)+SHS_F4(B,C,D)+E+ctx->W[60]+0xca62c1d6L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F4(A,B,C)+D+ctx->W[61]+0xca62c1d6L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F4(E,A,B)+C+ctx->W[62]+0xca62c1d6L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F4(D,E,A)+B+ctx->W[63]+0xca62c1d6L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F4(C,D,E)+A+ctx->W[64]+0xca62c1d6L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F4(B,C,D)+E+ctx->W[65]+0xca62c1d6L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F4(A,B,C)+D+ctx->W[66]+0xca62c1d6L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F4(E,A,B)+C+ctx->W[67]+0xca62c1d6L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F4(D,E,A)+B+ctx->W[68]+0xca62c1d6L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F4(C,D,E)+A+ctx->W[69]+0xca62c1d6L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F4(B,C,D)+E+ctx->W[70]+0xca62c1d6L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F4(A,B,C)+D+ctx->W[71]+0xca62c1d6L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F4(E,A,B)+C+ctx->W[72]+0xca62c1d6L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F4(D,E,A)+B+ctx->W[73]+0xca62c1d6L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F4(C,D,E)+A+ctx->W[74]+0xca62c1d6L; C=SHS_ROTL(C,30); - E = SHS_ROTL(A,5)+SHS_F4(B,C,D)+E+ctx->W[75]+0xca62c1d6L; B=SHS_ROTL(B,30); - D = SHS_ROTL(E,5)+SHS_F4(A,B,C)+D+ctx->W[76]+0xca62c1d6L; A=SHS_ROTL(A,30); - C = SHS_ROTL(D,5)+SHS_F4(E,A,B)+C+ctx->W[77]+0xca62c1d6L; E=SHS_ROTL(E,30); - B = SHS_ROTL(C,5)+SHS_F4(D,E,A)+B+ctx->W[78]+0xca62c1d6L; D=SHS_ROTL(D,30); - A = SHS_ROTL(B,5)+SHS_F4(C,D,E)+A+ctx->W[79]+0xca62c1d6L; C=SHS_ROTL(C,30); - - ctx->H[0] += A; - ctx->H[1] += B; - ctx->H[2] += C; - ctx->H[3] += D; - ctx->H[4] += E; -} - diff --git a/lib/libcrypt/shs.h b/lib/libcrypt/shs.h deleted file mode 100644 index 6d8959e..0000000 --- a/lib/libcrypt/shs.h +++ /dev/null @@ -1,14 +0,0 @@ - -typedef struct { - unsigned long H[5]; - unsigned long W[80]; - int lenW; - unsigned long sizeHi,sizeLo; -} SHS_CTX; - - -void shsInit(SHS_CTX *ctx); -void shsUpdate(SHS_CTX *ctx, const unsigned char *dataIn, int len); -void shsFinal(SHS_CTX *ctx, unsigned char hashOut[20]); -void shsBlock(const unsigned char *dataIn, int len, unsigned char hashOut[20]); - diff --git a/lib/libcrypt/test/Makefile b/lib/libcrypt/test/Makefile deleted file mode 100644 index 91aa289..0000000 --- a/lib/libcrypt/test/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# Hacked Makefile to compile and run the DES-certification program, -# but not install anything. -# -# $Id: Makefile,v 1.5 1996/06/24 20:28:35 markm Exp $ -# -LIBCRYPT= -lcrypt - -#CFLAGS+= -DHAVE_CRYPT16 -CFLAGS+= -ggdb - -TARGETS=cert speedcrypt - -all: ${TARGETS} - -test: all testcrypt testspeed - -testcrypt: cert - @./cert -c - -testspeed: cryptspeed - -cryptspeed: speedcrypt - @./speedcrypt 30 1 - @./speedcrypt 30 1 - @./speedcrypt 30 0 - @./speedcrypt 30 0 - -cert: cert.c - $(CC) $(CFLAGS) -o cert ${.CURDIR}/cert.c ${LIBCRYPT} - -speedcrypt: speedcrypt.c - $(CC) $(CFLAGS) -o speedcrypt ${.CURDIR}/speedcrypt.c ${LIBCRYPT} - -clean: - rm -f ${TARGETS} - -install: - -obj: - -.include <bsd.prog.mk> diff --git a/lib/libcrypt/test/README b/lib/libcrypt/test/README deleted file mode 100644 index b80a71b..0000000 --- a/lib/libcrypt/test/README +++ /dev/null @@ -1,15 +0,0 @@ -This directory contains test programs to certify DES operation and to -time the crypt() call (of curiosity value). - -Simply type `make test` to run the tests. - -The normal `make all` and `make install` that get done during library building -and installation will build these programs BUT NOT INSTALL THEM. After all, -they're only for testing... - -- David Burren, January 1994 - -Rewrote 'cert' a bit. It checks many more cases now, and also considers -md5 and sha1. Same with speedcrypt. - -- Brandon Gillespie, 1997 diff --git a/lib/libcrypt/test/cert.c b/lib/libcrypt/test/cert.c deleted file mode 100644 index 3c20fb3..0000000 --- a/lib/libcrypt/test/cert.c +++ /dev/null @@ -1,226 +0,0 @@ -/* - * This DES validation program shipped with FreeSec is derived from that - * shipped with UFC-crypt which is apparently derived from one distributed - * with Phil Karns PD DES package. - * - * $Id: cert.c,v 1.4 1995/07/25 14:04:10 mark Exp $ - */ - -#include <stdio.h> - -int totfails = 0; - -char *crypt(); -#ifdef HAVE_CRYPT16 -char *crypt16(); -#endif /* HAVE_CRYPT16 */ - - -static struct crypt_test { - char *key, *setting, *answer; -} crypt_tests[] = { - {"foob", "arblat", "arlEKn0OzVJn."}, - /* only if DEScrypt is installed... */ - {"holyhooplasbatman!", "", "hoPVB2cPNzIgc"}, - {"holyhooplasbatman!", "_X.......", "_X.......N89y2Z.e4WU"}, - {"holyhooplasbatman!", "_X...X...", "_X...X...rSUDQ5Na/QM"}, - {"holyhooplasbatman!", "_XX..X...", "_XX..X...P8vb9xU4JAk"}, - {"holyhooplasbatman!", "_XX..XX..", "_XX..XX..JDs5IlGLqT2"}, - {"holyhooplasbatman!", "_XX..XXa.", "_XX..XXa.bFVsOnCNh8Y"}, - {"holyhooplasbatman!", "_XXa.X...", "_XXa.X...Ghsb3QKNaps"}, - {"holyhooplasbatman!", "$1$.....$", "$1$.....$0Tf8T5oeUy8eCFrOGJ896/"}, - {"holyhooplasbatman!", "$1$ababa$", "$1$ababa$H7GvivY4uBBap2AQHTIdu0"}, - {"holyhooplasbatman!", "$1$D4p1.$", "$1$D4p1.$7oaIfQAEilVqtOVPZjd.T0"}, - {"holyhooplasbatman!", "$MD5$.....$", "$MD5$.....$F2ZOUu/EHsBSdvnymyml/."}, - {"holyhooplasbatman!", "$MD5$ababa$", "$MD5$ababa$TQ2ecNtRba.5dbOfMUrX9."}, - {"holyhooplasbatman!", "$MD5$D4p1.$", "$MD5$D4p1.$L6gLg9tn/P2QTxmUhCebG0"}, - {"holyhooplasbatman!", "$MD5$12345678$", "$MD5$12345678$OjLi0vSkTvbIcm/2MqW4O."}, - {"holyhooplasbatman!", "$MD5$123456789012$", "$MD5$123456789012$PanjJQOwRD4shvHcEsFms/"}, - {"holyhooplasbatman!", "$MD5$1234567890123456789$", "$MD5$1234567890123456$XXJ0C2AviF.UkEqhojYlT1"}, - {"holyhooplasbatman!", "$MD5$$", "$MD5$$LiING./7/azVlSHzgErgc1"}, - {"holyhooplasbatman!","$SHA1$.....$","$SHA1$.....$AqA7OVFePjxzR3iDGlhT8HTqR56"}, - {"holyhooplasbatman!","$SHA1$12345678$","$SHA1$12345678$f3GWs.tBaliuVNkL8i6FLwKDkqD"}, - {"holyhooplasbatman!","$SHA1$1234567890123456789$","$SHA1$1234567890123456$xWBUsEoBIqR5ljh8MS.5NFfNBV1"}, - {"holyhooplasbatman!","$SHA1$ababa$","$SHA1$ababa$ZzzoL86v1dZ54ZDMNowVHzFu1S1"}, - {"holyhooplasbatman!","$SHA1$D4p1.$","$SHA1$D4p1.$7r2mYdgZidt.BC2Ngn.979LfTQA"}, - {"holyhooplasbatman!","$SHA1$$","$SHA1$$nulODJKXMzUlhSREYhKZmrfV3XA"}, -#ifdef TAKES_TOO_LONG_ON_SOME_CRYPTS - {"holyhooplasbatman!", "_arararar", "_ararararNGMzvpNjeCc"}, -#endif - {NULL, NULL, NULL}, -}; - - -static struct crypt_test crypt16_tests[] = { - "foob", "ar", "arxo23jZDD5AYbHbqoy9Dalg", - "holyhooplasbatman!", "ar", "arU5FRLJ3kxIoedlmyrOelEw", - NULL, NULL, NULL -}; - - -void good_bye() -{ - if(totfails == 0) { - printf(" Passed validation\n"); - exit(0); - } else { - printf(" %d failures during validation!!!\n", totfails); - exit(1); - } -} - - -void put8(cp) -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); - } -} - - -void print_bits(bits) -unsigned char *bits; -{ - int i; - - for (i = 0; i < 8; i++) { - printf("%02x", bits[i]); - } -} - - -int parse_line(buff, salt, key, plain, answer) -char *buff; -long *salt; -char *key, *plain, *answer; -{ - char *ptr1, *ptr2; - int val; - int i,j,t; - - /* - * Extract salt - */ - if (sscanf(buff, "%lu", salt) != 1) - return(-1); - for (ptr2 = buff; *ptr2 && !isspace(*ptr2); ptr2++) - ; - - /* - * Extract key - */ - for (ptr1 = ptr2; *ptr1 && isspace(*ptr1); ptr1++) - ; - for (ptr2 = ptr1; *ptr2 && !isspace(*ptr2); ptr2++) - ; - if (ptr2 - ptr1 != 16) - return(-1); - for (i = 0; i < 8; i++){ - if (sscanf(ptr1 + 2*i, "%2x", &t) != 1) - return(-2); - for (j = 0; j < 8; j++) - *key++ = (t & 1 << (7 - j)) != 0; - } - - /* - * Extract plain - */ - for (ptr1 = ptr2; *ptr1 && isspace(*ptr1); ptr1++) - ; - for (ptr2 = ptr1; *ptr2 && !isspace(*ptr2); ptr2++) - ; - if (ptr2 - ptr1 != 16) - return(-1); - for (i = 0; i < 8; i++){ - if (sscanf(ptr1 + 2*i, "%2x", &t) != 1) - return(-2); - for (j = 0; j < 8; j++) - *plain++ = (t & 1 << (7 - j)) != 0; - } - - /* - * Extract answer - */ - for (ptr1 = ptr2; *ptr1 && isspace(*ptr1); ptr1++) - ; - for (ptr2 = ptr1; *ptr2 && !isspace(*ptr2); ptr2++) - ; - if (ptr2 - ptr1 != 16) - return(-1); - for (i = 0; i < 8; i++){ - if (sscanf(ptr1 + 2*i, "%2x", &t) != 1) - return(-2); - for (j = 0; j < 8; j++) - *answer++ = (t & 1 << (7 - j)) != 0; - } - return(0); -} - -void bytes_to_bits(bytes, bits) -char *bytes; -unsigned char *bits; -{ - int i, j; - - for (i = 0; i < 8; i++) { - bits[i] = 0; - for (j = 0; j < 8; j++) { - bits[i] |= (bytes[i*8+j] & 1) << (7 - j); - } - } -} - - - -/* - * Test the old-style crypt(), the new-style crypt(), and crypt16(). - */ -void test_crypt() -{ - char *result; - struct crypt_test *p; - - printf("Testing crypt() family\n"); - - for (p = crypt_tests; p->key; p++) { - printf(" crypt(\"%s\", \"%s\")\n\texpecting: \"%s\" ..", - p->key, p->setting, p->answer); - fflush(stdout); - result = crypt(p->key, p->setting); - if(!strcmp(result, p->answer)) { - printf(" OK\n"); - } else { - printf("\n\tfailed: \"%s\"\n", result); - totfails++; - } - } - -#ifdef HAVE_CRYPT16 - for (p = crypt16_tests; p->key; p++) { - printf(" crypt16(\"%s\", \"%s\")\n\texpecting: \"%s\" ..", - p->key, p->setting, p->answer); - fflush(stdout); - result = crypt16(p->key, p->setting); - if(!strcmp(result, p->answer)) { - printf(" OK\n"); - } else { - printf("\n\tfailed: \"%s\"\n", result); - totfails++; - } - } -#endif /* HAVE_CRYPT16 */ -} - -main(argc, argv) -int argc; -char *argv[]; -{ - test_crypt(); - good_bye(); -} diff --git a/lib/libcrypt/test/cert.input b/lib/libcrypt/test/cert.input deleted file mode 100644 index db1749e..0000000 --- a/lib/libcrypt/test/cert.input +++ /dev/null @@ -1,179 +0,0 @@ -# $Id$ -# -# Salt, key, plaintext, ciphertext -# -0 0101010101010101 95f8a5e5dd31d900 8000000000000000 -0 0101010101010101 dd7f121ca5015619 4000000000000000 -0 0101010101010101 2e8653104f3834ea 2000000000000000 -0 0101010101010101 4bd388ff6cd81d4f 1000000000000000 -0 0101010101010101 20b9e767b2fb1456 0800000000000000 -0 0101010101010101 55579380d77138ef 0400000000000000 -0 0101010101010101 6cc5defaaf04512f 0200000000000000 -0 0101010101010101 0d9f279ba5d87260 0100000000000000 -0 0101010101010101 d9031b0271bd5a0a 0080000000000000 -0 0101010101010101 424250b37c3dd951 0040000000000000 -0 0101010101010101 b8061b7ecd9a21e5 0020000000000000 -0 0101010101010101 f15d0f286b65bd28 0010000000000000 -0 0101010101010101 add0cc8d6e5deba1 0008000000000000 -0 0101010101010101 e6d5f82752ad63d1 0004000000000000 -0 0101010101010101 ecbfe3bd3f591a5e 0002000000000000 -0 0101010101010101 f356834379d165cd 0001000000000000 -0 0101010101010101 2b9f982f20037fa9 0000800000000000 -0 0101010101010101 889de068a16f0be6 0000400000000000 -0 0101010101010101 e19e275d846a1298 0000200000000000 -0 0101010101010101 329a8ed523d71aec 0000100000000000 -0 0101010101010101 e7fce22557d23c97 0000080000000000 -0 0101010101010101 12a9f5817ff2d65d 0000040000000000 -0 0101010101010101 a484c3ad38dc9c19 0000020000000000 -0 0101010101010101 fbe00a8a1ef8ad72 0000010000000000 -0 0101010101010101 750d079407521363 0000008000000000 -0 0101010101010101 64feed9c724c2faf 0000004000000000 -0 0101010101010101 f02b263b328e2b60 0000002000000000 -0 0101010101010101 9d64555a9a10b852 0000001000000000 -0 0101010101010101 d106ff0bed5255d7 0000000800000000 -0 0101010101010101 e1652c6b138c64a5 0000000400000000 -0 0101010101010101 e428581186ec8f46 0000000200000000 -0 0101010101010101 aeb5f5ede22d1a36 0000000100000000 -0 0101010101010101 e943d7568aec0c5c 0000000080000000 -0 0101010101010101 df98c8276f54b04b 0000000040000000 -0 0101010101010101 b160e4680f6c696f 0000000020000000 -0 0101010101010101 fa0752b07d9c4ab8 0000000010000000 -0 0101010101010101 ca3a2b036dbc8502 0000000008000000 -0 0101010101010101 5e0905517bb59bcf 0000000004000000 -0 0101010101010101 814eeb3b91d90726 0000000002000000 -0 0101010101010101 4d49db1532919c9f 0000000001000000 -0 0101010101010101 25eb5fc3f8cf0621 0000000000800000 -0 0101010101010101 ab6a20c0620d1c6f 0000000000400000 -0 0101010101010101 79e90dbc98f92cca 0000000000200000 -0 0101010101010101 866ecedd8072bb0e 0000000000100000 -0 0101010101010101 8b54536f2f3e64a8 0000000000080000 -0 0101010101010101 ea51d3975595b86b 0000000000040000 -0 0101010101010101 caffc6ac4542de31 0000000000020000 -0 0101010101010101 8dd45a2ddf90796c 0000000000010000 -0 0101010101010101 1029d55e880ec2d0 0000000000008000 -0 0101010101010101 5d86cb23639dbea9 0000000000004000 -0 0101010101010101 1d1ca853ae7c0c5f 0000000000002000 -0 0101010101010101 ce332329248f3228 0000000000001000 -0 0101010101010101 8405d1abe24fb942 0000000000000800 -0 0101010101010101 e643d78090ca4207 0000000000000400 -0 0101010101010101 48221b9937748a23 0000000000000200 -0 0101010101010101 dd7c0bbd61fafd54 0000000000000100 -0 0101010101010101 2fbc291a570db5c4 0000000000000080 -0 0101010101010101 e07c30d7e4e26e12 0000000000000040 -0 0101010101010101 0953e2258e8e90a1 0000000000000020 -0 0101010101010101 5b711bc4ceebf2ee 0000000000000010 -0 0101010101010101 cc083f1e6d9e85f6 0000000000000008 -0 0101010101010101 d2fd8867d50d2dfe 0000000000000004 -0 0101010101010101 06e7ea22ce92708f 0000000000000002 -0 0101010101010101 166b40b44aba4bd6 0000000000000001 -0 8001010101010101 0000000000000000 95a8d72813daa94d -0 4001010101010101 0000000000000000 0eec1487dd8c26d5 -0 2001010101010101 0000000000000000 7ad16ffb79c45926 -0 1001010101010101 0000000000000000 d3746294ca6a6cf3 -0 0801010101010101 0000000000000000 809f5f873c1fd761 -0 0401010101010101 0000000000000000 c02faffec989d1fc -0 0201010101010101 0000000000000000 4615aa1d33e72f10 -0 0180010101010101 0000000000000000 2055123350c00858 -0 0140010101010101 0000000000000000 df3b99d6577397c8 -0 0120010101010101 0000000000000000 31fe17369b5288c9 -0 0110010101010101 0000000000000000 dfdd3cc64dae1642 -0 0108010101010101 0000000000000000 178c83ce2b399d94 -0 0104010101010101 0000000000000000 50f636324a9b7f80 -0 0102010101010101 0000000000000000 a8468ee3bc18f06d -0 0101800101010101 0000000000000000 a2dc9e92fd3cde92 -0 0101400101010101 0000000000000000 cac09f797d031287 -0 0101200101010101 0000000000000000 90ba680b22aeb525 -0 0101100101010101 0000000000000000 ce7a24f350e280b6 -0 0101080101010101 0000000000000000 882bff0aa01a0b87 -0 0101040101010101 0000000000000000 25610288924511c2 -0 0101020101010101 0000000000000000 c71516c29c75d170 -0 0101018001010101 0000000000000000 5199c29a52c9f059 -0 0101014001010101 0000000000000000 c22f0a294a71f29f -0 0101012001010101 0000000000000000 ee371483714c02ea -0 0101011001010101 0000000000000000 a81fbd448f9e522f -0 0101010801010101 0000000000000000 4f644c92e192dfed -0 0101010401010101 0000000000000000 1afa9a66a6df92ae -0 0101010201010101 0000000000000000 b3c1cc715cb879d8 -0 0101010180010101 0000000000000000 19d032e64ab0bd8b -0 0101010140010101 0000000000000000 3cfaa7a7dc8720dc -0 0101010120010101 0000000000000000 b7265f7f447ac6f3 -0 0101010110010101 0000000000000000 9db73b3c0d163f54 -0 0101010108010101 0000000000000000 8181b65babf4a975 -0 0101010104010101 0000000000000000 93c9b64042eaa240 -0 0101010102010101 0000000000000000 5570530829705592 -0 0101010101800101 0000000000000000 8638809e878787a0 -0 0101010101400101 0000000000000000 41b9a79af79ac208 -0 0101010101200101 0000000000000000 7a9be42f2009a892 -0 0101010101100101 0000000000000000 29038d56ba6d2745 -0 0101010101080101 0000000000000000 5495c6abf1e5df51 -0 0101010101040101 0000000000000000 ae13dbd561488933 -0 0101010101020101 0000000000000000 024d1ffa8904e389 -0 0101010101018001 0000000000000000 d1399712f99bf02e -0 0101010101014001 0000000000000000 14c1d7c1cffec79e -0 0101010101012001 0000000000000000 1de5279dae3bed6f -0 0101010101011001 0000000000000000 e941a33f85501303 -0 0101010101010801 0000000000000000 da99dbbc9a03f379 -0 0101010101010401 0000000000000000 b7fc92f91d8e92e9 -0 0101010101010201 0000000000000000 ae8e5caa3ca04e85 -0 0101010101010180 0000000000000000 9cc62df43b6eed74 -0 0101010101010140 0000000000000000 d863dbb5c59a91a0 -0 0101010101010120 0000000000000000 a1ab2190545b91d7 -0 0101010101010110 0000000000000000 0875041e64c570f7 -0 0101010101010108 0000000000000000 5a594528bebef1cc -0 0101010101010104 0000000000000000 fcdb3291de21f0c0 -0 0101010101010102 0000000000000000 869efd7f9f265a09 -0 1046913489980131 0000000000000000 88d55e54f54c97b4 -0 1007103489988020 0000000000000000 0c0cc00c83ea48fd -0 10071034c8980120 0000000000000000 83bc8ef3a6570183 -0 1046103489988020 0000000000000000 df725dcad94ea2e9 -0 1086911519190101 0000000000000000 e652b53b550be8b0 -0 1086911519580101 0000000000000000 af527120c485cbb0 -0 5107b01519580101 0000000000000000 0f04ce393db926d5 -0 1007b01519190101 0000000000000000 c9f00ffc74079067 -0 3107915498080101 0000000000000000 7cfd82a593252b4e -0 3107919498080101 0000000000000000 cb49a2f9e91363e3 -0 10079115b9080140 0000000000000000 00b588be70d23f56 -0 3107911598080140 0000000000000000 406a9a6ab43399ae -0 1007d01589980101 0000000000000000 6cb773611dca9ada -0 9107911589980101 0000000000000000 67fd21c17dbb5d70 -0 9107d01589190101 0000000000000000 9592cb4110430787 -0 1007d01598980120 0000000000000000 a6b7ff68a318ddd3 -0 1007940498190101 0000000000000000 4d102196c914ca16 -0 0107910491190401 0000000000000000 2dfa9f4573594965 -0 0107910491190101 0000000000000000 b46604816c0e0774 -0 0107940491190401 0000000000000000 6e7e6221a4f34e87 -0 19079210981a0101 0000000000000000 aa85e74643233199 -0 1007911998190801 0000000000000000 2e5a19db4d1962d6 -0 10079119981a0801 0000000000000000 23a866a809d30894 -0 1007921098190101 0000000000000000 d812d961f017d320 -0 100791159819010b 0000000000000000 055605816e58608f -0 1004801598190101 0000000000000000 abd88e8b1b7716f1 -0 1004801598190102 0000000000000000 537ac95be69da1e1 -0 1004801598190108 0000000000000000 aed0f6ae3c25cdd8 -0 1002911598100104 0000000000000000 b3e35a5ee53e7b8d -0 1002911598190104 0000000000000000 61c79c71921a2ef8 -0 1002911598100201 0000000000000000 e2f5728f0995013c -0 1002911698100101 0000000000000000 1aeac39a61f0a464 -0 7ca110454a1a6e57 01a1d6d039776742 690f5b0d9a26939b -0 0131d9619dc1376e 5cd54ca83def57da 7a389d10354bd271 -0 07a1133e4a0b2686 0248d43806f67172 868ebb51cab4599a -0 3849674c2602319e 51454b582ddf440a 7178876e01f19b2a -0 04b915ba43feb5b6 42fd443059577fa2 af37fb421f8c4095 -0 0113b970fd34f2ce 059b5e0851cf143a 86a560f10ec6d85b -0 0170f175468fb5e6 0756d8e0774761d2 0cd3da020021dc09 -0 43297fad38e373fe 762514b829bf486a ea676b2cb7db2b7a -0 07a7137045da2a16 3bdd119049372802 dfd64a815caf1a0f -0 04689104c2fd3b2f 26955f6835af609a 5c513c9c4886c088 -0 37d06bb516cb7546 164d5e404f275232 0a2aeeae3ff4ab77 -0 1f08260d1ac2465e 6b056e18759f5cca ef1bf03e5dfa575a -0 584023641aba6176 004bd6ef09176062 88bf0db6d70dee56 -0 025816164629b007 480d39006ee762f2 a1f9915541020b56 -0 49793ebc79b3258f 437540c8698f3cfa 6fbf1cafcffd0556 -0 4fb05e1515ab73a7 072d43a077075292 2f22e49bab7ca1ac -0 49e95d6d4ca229bf 02fe55778117f12a 5a6b612cc26cce4a -0 018310dc409b26d6 1d9d5c5018f728c2 5f4c038ed12b2e41 -0 1c587f1c13924fef 305532286d6f295a 63fac0d034d9f793 -1 1c587f1c13924fef 305532286d6f295a 400d307ca24fee60 -57 1c587f1c13924fef 305532286d6f295a 28b568f40e7d43ae -1 8001010101010101 0000000000000000 f501029f268e45dc -0 1c587f1c13924fef 305532286d6f295a 63fac0d034d9f793 diff --git a/lib/libcrypt/test/speedcrypt.c b/lib/libcrypt/test/speedcrypt.c deleted file mode 100644 index 13c8f82..0000000 --- a/lib/libcrypt/test/speedcrypt.c +++ /dev/null @@ -1,70 +0,0 @@ -#include <sys/types.h> -#include <sys/time.h> -#include <sys/resource.h> -#include <signal.h> -#include <stdio.h> - -int keep_going, count, seconds; -struct rusage prior, now; - -void -finish() -{ - keep_going = 0; -} - - -main(int argc, char *argv[]) -{ - struct itimerval itv; - u_long msecs, key1[8], key2[8]; - char *k1, *k2; - char *token, deftok[] = "eek"; - - if (argc < 2 || sscanf(argv[1], "%d", &seconds) != 1) - seconds = 20; - - if (argc < 3) { - token = &deftok[0]; - } else { - token = argv[2]; - } - - printf ("Running crypt for %d seconds of vtime\n", seconds); - - bzero(&itv, sizeof (itv)); - signal (SIGVTALRM, finish); - itv.it_value.tv_sec = seconds; - itv.it_value.tv_usec = 0; - setitimer(ITIMER_VIRTUAL, &itv, NULL); - - keep_going = 1; - - k1 = (char *) key1; - k2 = (char *) key2; - strcpy(k1, "fredfredfredfredfred"); - strcpy(k2, "joejoejoejoejoejoejo"); - - printf("Dry run (to verify seed token):\n\tcrypt(\"test\", \"%s\")\n", - token); - printf("\t=> \"%s\"\nTesting...", crypt("test", token)); - fflush(stdout); - - if (getrusage(0, &prior) < 0) { - perror("getrusage"); - exit(1); - } - - for (count = 0; keep_going; count++) { - crypt((count & 1) ? k1 : k2, token); - } - - if (getrusage(0, &now) < 0) { - perror("getrusage"); - exit(1); - } - msecs = (now.ru_utime.tv_sec - prior.ru_utime.tv_sec) * 1000 - + (now.ru_utime.tv_usec - prior.ru_utime.tv_usec) / 1000; - printf ("\tDid %d crypt()s per second.\n", 1000 * count / msecs); - exit(0); -} |