A new branch for FIPS-related changes has been created with the name
OpenSSL-fips-0_9_7-stable. Since the 0.9.7-stable branch is supposed to be in freeze and should only contain bug corrections, this change removes the FIPS changes from that branch.
This commit is contained in:
parent
94a1183fab
commit
4ed9388e5d
@ -140,8 +140,6 @@ my %table=(
|
||||
"debug-ben-openbsd-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
|
||||
"debug-ben-debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::::",
|
||||
"debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::",
|
||||
"debug-ben-fips","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DFIPS -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::asm/bn86-elf.o asm/co86-elf.o",
|
||||
"debug-ben-fips-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DFIPS -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::asm/bn86-elf.o asm/co86-elf.o",
|
||||
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
|
||||
"debug-bodo", "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
|
||||
"debug-ulf", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -g -O2 -m486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT:::${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
|
||||
|
42
Makefile.org
42
Makefile.org
@ -173,19 +173,17 @@ LIBKRB5=
|
||||
# we might set SHLIB_MARK to '$(SHARED_LIBS)'.
|
||||
SHLIB_MARK=
|
||||
|
||||
DIRS= crypto fips ssl $(SHLIB_MARK) apps test tools
|
||||
SHLIBDIRS= fips crypto ssl
|
||||
DIRS= crypto ssl $(SHLIB_MARK) apps test tools
|
||||
SHLIBDIRS= crypto ssl
|
||||
|
||||
# dirs in crypto to build
|
||||
SDIRS= objects \
|
||||
SDIRS= \
|
||||
md2 md4 md5 sha mdc2 hmac ripemd \
|
||||
des rc2 rc4 rc5 idea bf cast \
|
||||
bn ec rsa dsa dh dso engine aes \
|
||||
buffer bio stack lhash rand err \
|
||||
buffer bio stack lhash rand err objects \
|
||||
evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5
|
||||
|
||||
FDIRS= rand sha1 des aes dsa
|
||||
|
||||
# tests to perform. "alltests" is a special word indicating that all tests
|
||||
# should be performed.
|
||||
TESTS = alltests
|
||||
@ -204,7 +202,6 @@ ONEDIRS=out tmp
|
||||
EDIRS= times doc bugs util include certs ms shlib mt demos perl sf dep VMS
|
||||
WDIRS= windows
|
||||
LIBS= libcrypto.a libssl.a
|
||||
SIGS= libcrypto.sha1
|
||||
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
|
||||
SHARED_SSL=libssl$(SHLIB_EXT)
|
||||
SHARED_LIBS=
|
||||
@ -222,29 +219,14 @@ HEADER= e_os.h
|
||||
# When we're prepared to use shared libraries in the programs we link here
|
||||
# we might remove 'clean-shared' from the targets to perform at this stage
|
||||
|
||||
all: Makefile.ssl sub_all openssl.pc sigs
|
||||
|
||||
sigs:
|
||||
fips/sha1/fips_standalone_sha1 libcrypto.a > libcrypto.sha1
|
||||
if [ "$(SHLIBEXT)" != "" ]; then fips/sha1/fips_standalone_sha1 libcrypto$(SHLIBEXT) >> libcrypto.sha1; fi
|
||||
all: Makefile.ssl sub_all openssl.pc
|
||||
|
||||
sub_all:
|
||||
@for i in $(DIRS); \
|
||||
do \
|
||||
if [ -d "$$i" ]; then \
|
||||
(cd $$i && echo "making all in $$i..." && \
|
||||
$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' AS='${AS}' ASFLAG='${ASFLAG}' SDIRS='$(SDIRS)' FDIRS='$(FDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' all ) || exit 1; \
|
||||
else \
|
||||
$(MAKE) $$i; \
|
||||
fi; \
|
||||
done;
|
||||
|
||||
sub_target:
|
||||
@for i in $(DIRS); \
|
||||
do \
|
||||
if [ -d "$$i" ]; then \
|
||||
(cd $$i && echo "making $(TARGET) in $$i..." && \
|
||||
$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' AS='${AS}' ASFLAG='${ASFLAG}' SDIRS='$(SDIRS)' FDIRS='$(FDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' TARGET='$(TARGET)' sub_target ) || exit 1; \
|
||||
$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' AS='${AS}' ASFLAG='${ASFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' all ) || exit 1; \
|
||||
else \
|
||||
$(MAKE) $$i; \
|
||||
fi; \
|
||||
@ -499,7 +481,7 @@ do_hpux-shared:
|
||||
libs="$(LIBKRB5) $$libs"; \
|
||||
fi; \
|
||||
( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
|
||||
+vnocompatwarnings \
|
||||
+vnocompatwarnings \
|
||||
-b -z +s \
|
||||
-o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
|
||||
+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
|
||||
@ -522,7 +504,7 @@ do_hpux64-shared:
|
||||
libs="$(LIBKRB5) $$libs"; \
|
||||
fi; \
|
||||
( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
|
||||
-b -z \
|
||||
-b -z \
|
||||
-o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
|
||||
+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
|
||||
+forceload lib$$i.a -ldl -lc ) || exit 1; \
|
||||
@ -849,14 +831,6 @@ install: all install_docs
|
||||
sed -e '1,/^$$/d' doc/openssl-shared.txt; \
|
||||
fi; \
|
||||
fi
|
||||
@for i in $(SIGS) ;\
|
||||
do \
|
||||
if [ -f "$$i" ]; then \
|
||||
( echo installing $$i; \
|
||||
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
|
||||
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
|
||||
fi; \
|
||||
done;
|
||||
cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
|
||||
|
||||
|
50
TABLE
50
TABLE
@ -1550,56 +1550,6 @@ $shared_extension =
|
||||
$ranlib =
|
||||
$arflags =
|
||||
|
||||
*** debug-ben-fips
|
||||
$cc = gcc
|
||||
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DFIPS -O2 -pedantic -Wall -Wshadow -Werror -pipe
|
||||
$unistd =
|
||||
$thread_cflag = (unknown)
|
||||
$sys_id =
|
||||
$lflags =
|
||||
$bn_ops =
|
||||
$bn_obj = asm/bn86-elf.o asm/co86-elf.o
|
||||
$des_obj =
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj =
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$dso_scheme =
|
||||
$shared_target=
|
||||
$shared_cflag =
|
||||
$shared_ldflag =
|
||||
$shared_extension =
|
||||
$ranlib =
|
||||
$arflags =
|
||||
|
||||
*** debug-ben-fips-debug
|
||||
$cc = gcc
|
||||
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DFIPS -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe
|
||||
$unistd =
|
||||
$thread_cflag = (unknown)
|
||||
$sys_id =
|
||||
$lflags =
|
||||
$bn_ops =
|
||||
$bn_obj = asm/bn86-elf.o asm/co86-elf.o
|
||||
$des_obj =
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj =
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$dso_scheme =
|
||||
$shared_target=
|
||||
$shared_cflag =
|
||||
$shared_ldflag =
|
||||
$shared_extension =
|
||||
$ranlib =
|
||||
$arflags =
|
||||
|
||||
*** debug-ben-openbsd
|
||||
$cc = gcc
|
||||
$cflags = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe
|
||||
|
@ -91,8 +91,7 @@ aes_cbc.o: ../../include/openssl/opensslconf.h aes_cbc.c aes_locl.h
|
||||
aes_cfb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
|
||||
aes_cfb.o: ../../include/openssl/opensslconf.h aes_cfb.c aes_locl.h
|
||||
aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
|
||||
aes_core.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
|
||||
aes_core.o: aes_core.c aes_locl.h
|
||||
aes_core.o: ../../include/openssl/opensslconf.h aes_core.c aes_locl.h
|
||||
aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
|
||||
aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h
|
||||
aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
|
||||
|
@ -95,15 +95,6 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
||||
void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const unsigned long length, const AES_KEY *key,
|
||||
unsigned char *ivec, int *num, const int enc);
|
||||
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const unsigned long length, const AES_KEY *key,
|
||||
unsigned char *ivec, int *num, const int enc);
|
||||
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const unsigned long length, const AES_KEY *key,
|
||||
unsigned char *ivec, int *num, const int enc);
|
||||
void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
|
||||
const int nbits,const AES_KEY *key,
|
||||
unsigned char *ivec,const int enc);
|
||||
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const unsigned long length, const AES_KEY *key,
|
||||
unsigned char *ivec, int *num);
|
||||
|
@ -155,96 +155,3 @@ void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
*num=n;
|
||||
}
|
||||
|
||||
/* This expects a single block of size nbits for both in and out. Note that
|
||||
it corrupts any extra bits in the last byte of out */
|
||||
/* Untested, once it is working, it will be optimised */
|
||||
void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
|
||||
const int nbits,const AES_KEY *key,
|
||||
unsigned char *ivec,const int enc)
|
||||
{
|
||||
unsigned int n;
|
||||
unsigned char ovec[AES_BLOCK_SIZE*2];
|
||||
|
||||
assert(in && out && key && ivec);
|
||||
if(enc)
|
||||
{
|
||||
/* construct the new IV */
|
||||
AES_encrypt(ivec,ovec,key);
|
||||
/* encrypt the input */
|
||||
for(n=0 ; n < (nbits+7)/8 ; ++n)
|
||||
out[n]=in[n]^ovec[n];
|
||||
/* fill in the first half of the new IV with the current IV */
|
||||
memcpy(ovec,ivec,AES_BLOCK_SIZE);
|
||||
/* and put the ciphertext in the second half */
|
||||
memcpy(ovec+AES_BLOCK_SIZE,out,(nbits+7)/8);
|
||||
/* shift ovec left most of the bits... */
|
||||
memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
|
||||
/* now the remaining bits */
|
||||
if(nbits%8 != 0)
|
||||
for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
|
||||
{
|
||||
ovec[n]<<=nbits%8;
|
||||
ovec[n]|=ovec[n+1]>>(8-nbits%8);
|
||||
}
|
||||
/* finally, move it back into place */
|
||||
memcpy(ivec,ovec,AES_BLOCK_SIZE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* construct the new IV in the first half of ovec */
|
||||
AES_encrypt(ivec,ovec,key);
|
||||
/* decrypt the input */
|
||||
for(n=0 ; n < (nbits+7)/8 ; ++n)
|
||||
out[n]=in[n]^ovec[n];
|
||||
/* fill in the first half of the new IV with the current IV */
|
||||
memcpy(ovec,ivec,AES_BLOCK_SIZE);
|
||||
/* append the ciphertext */
|
||||
memcpy(ovec+AES_BLOCK_SIZE,in,(nbits+7)/8);
|
||||
/* shift ovec left most of the bits... */
|
||||
memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
|
||||
/* now the remaining bits */
|
||||
if(nbits%8 != 0)
|
||||
for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
|
||||
{
|
||||
ovec[n]<<=nbits%8;
|
||||
ovec[n]|=ovec[n+1]>>(8-nbits%8);
|
||||
}
|
||||
/* finally, move it back into place */
|
||||
memcpy(ivec,ovec,AES_BLOCK_SIZE);
|
||||
}
|
||||
/* it is not necessary to cleanse ovec, since the IV is not secret */
|
||||
}
|
||||
|
||||
/* N.B. This expects the input to be packed, MS bit first */
|
||||
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const unsigned long length, const AES_KEY *key,
|
||||
unsigned char *ivec, int *num, const int enc)
|
||||
{
|
||||
unsigned int n;
|
||||
unsigned char c[1],d[1];
|
||||
|
||||
assert(in && out && key && ivec && num);
|
||||
assert(*num == 0);
|
||||
|
||||
memset(out,0,(length+7)/8);
|
||||
for(n=0 ; n < length ; ++n)
|
||||
{
|
||||
c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
|
||||
AES_cfbr_encrypt_block(c,d,1,key,ivec,enc);
|
||||
out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8));
|
||||
}
|
||||
}
|
||||
|
||||
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const unsigned long length, const AES_KEY *key,
|
||||
unsigned char *ivec, int *num, const int enc)
|
||||
{
|
||||
unsigned int n;
|
||||
|
||||
assert(in && out && key && ivec && num);
|
||||
assert(*num == 0);
|
||||
|
||||
for(n=0 ; n < length ; ++n)
|
||||
AES_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc);
|
||||
}
|
||||
|
||||
|
@ -37,11 +37,8 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <openssl/aes.h>
|
||||
#include <openssl/fips.h>
|
||||
#include "aes_locl.h"
|
||||
|
||||
#ifndef FIPS
|
||||
|
||||
/*
|
||||
Te0[x] = S [x].[02, 01, 01, 03];
|
||||
Te1[x] = S [x].[03, 02, 01, 01];
|
||||
@ -1258,4 +1255,3 @@ void AES_decrypt(const unsigned char *in, unsigned char *out,
|
||||
PUTU32(out + 12, s3);
|
||||
}
|
||||
|
||||
#endif /* ndef FIPS */
|
||||
|
@ -66,11 +66,6 @@
|
||||
static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */
|
||||
#endif
|
||||
|
||||
#ifdef FIPS
|
||||
int FIPS_mode;
|
||||
void *FIPS_rand_check;
|
||||
#endif /* def FIPS */
|
||||
|
||||
DECLARE_STACK_OF(CRYPTO_dynlock)
|
||||
IMPLEMENT_STACK_OF(CRYPTO_dynlock)
|
||||
|
||||
|
@ -128,7 +128,7 @@ OPENSSL_DECLARE_GLOBAL(int,DES_rw_mode); /* defaults to DES_PCBC_MODE */
|
||||
#define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode)
|
||||
|
||||
const char *DES_options(void);
|
||||
void DES_ecb3_encrypt(const unsigned char *input, unsigned char *output,
|
||||
void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
|
||||
DES_key_schedule *ks1,DES_key_schedule *ks2,
|
||||
DES_key_schedule *ks3, int enc);
|
||||
DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output,
|
||||
|
@ -58,8 +58,6 @@
|
||||
|
||||
#include "des_locl.h"
|
||||
|
||||
#ifndef FIPS
|
||||
|
||||
void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc)
|
||||
{
|
||||
register DES_LONG l,r,t,u;
|
||||
@ -289,8 +287,6 @@ void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
|
||||
data[1]=r;
|
||||
}
|
||||
|
||||
#endif /* ndef FIPS */
|
||||
|
||||
#ifndef DES_DEFAULT_OPTIONS
|
||||
|
||||
#undef CBC_ENC_C__DONT_UPDATE_IV
|
||||
|
@ -84,7 +84,7 @@ void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input,_ossl_old_des_cblock
|
||||
des_key_schedule ks1,des_key_schedule ks2,
|
||||
des_key_schedule ks3, int enc)
|
||||
{
|
||||
DES_ecb3_encrypt((const unsigned char *)input, (unsigned char *)output,
|
||||
DES_ecb3_encrypt((const_DES_cblock *)input, output,
|
||||
(DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
|
||||
(DES_key_schedule *)ks3, enc);
|
||||
}
|
||||
|
@ -439,8 +439,8 @@ int main(int argc, char *argv[])
|
||||
memcpy(in,plain_data[i],8);
|
||||
memset(out,0,8);
|
||||
memset(outin,0,8);
|
||||
des_ecb2_encrypt(in,out,ks,ks2,DES_ENCRYPT);
|
||||
des_ecb2_encrypt(out,outin,ks,ks2,DES_DECRYPT);
|
||||
des_ecb2_encrypt(&in,&out,ks,ks2,DES_ENCRYPT);
|
||||
des_ecb2_encrypt(&out,&outin,ks,ks2,DES_DECRYPT);
|
||||
|
||||
if (memcmp(out,cipher_ecb2[i],8) != 0)
|
||||
{
|
||||
|
@ -58,13 +58,15 @@
|
||||
|
||||
#include "des_locl.h"
|
||||
|
||||
void DES_ecb3_encrypt(const unsigned char *in, unsigned char *out,
|
||||
void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
|
||||
DES_key_schedule *ks1, DES_key_schedule *ks2,
|
||||
DES_key_schedule *ks3,
|
||||
int enc)
|
||||
{
|
||||
register DES_LONG l0,l1;
|
||||
DES_LONG ll[2];
|
||||
const unsigned char *in = &(*input)[0];
|
||||
unsigned char *out = &(*output)[0];
|
||||
|
||||
c2l(in,l0);
|
||||
c2l(in,l1);
|
||||
|
@ -153,23 +153,19 @@ dsa_sign.o: ../../e_os.h ../../include/openssl/asn1.h
|
||||
dsa_sign.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
|
||||
dsa_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
|
||||
dsa_sign.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||
dsa_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||
dsa_sign.o: ../../include/openssl/err.h ../../include/openssl/fips.h
|
||||
dsa_sign.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
dsa_sign.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
|
||||
dsa_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
dsa_sign.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h
|
||||
dsa_sign.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
||||
dsa_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
|
||||
dsa_sign.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
|
||||
dsa_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
dsa_sign.o: ../cryptlib.h dsa_sign.c
|
||||
dsa_vrf.o: ../../e_os.h ../../include/openssl/asn1.h
|
||||
dsa_vrf.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
|
||||
dsa_vrf.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
|
||||
dsa_vrf.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
|
||||
dsa_vrf.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
|
||||
dsa_vrf.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||
dsa_vrf.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
|
||||
dsa_vrf.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
|
||||
dsa_vrf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
dsa_vrf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
|
||||
dsa_vrf.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||
dsa_vrf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
dsa_vrf.o: ../../include/openssl/ui.h ../cryptlib.h dsa_vrf.c
|
||||
dsa_vrf.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
||||
dsa_vrf.o: ../../include/openssl/symhacks.h ../cryptlib.h dsa_vrf.c
|
||||
|
@ -65,7 +65,6 @@
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/asn1.h>
|
||||
|
||||
#ifndef FIPS
|
||||
static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);
|
||||
static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp);
|
||||
static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
||||
@ -347,4 +346,3 @@ static int dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||
{
|
||||
return BN_mod_exp_mont(r, a, p, m, ctx, m_ctx);
|
||||
}
|
||||
#endif
|
||||
|
@ -64,17 +64,9 @@
|
||||
#include <openssl/dsa.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/asn1.h>
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
#include <openssl/engine.h>
|
||||
#endif
|
||||
#include <openssl/fips.h>
|
||||
|
||||
DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
||||
{
|
||||
#ifdef FIPS
|
||||
if(FIPS_mode && !FIPS_dsa_check(dsa))
|
||||
return NULL;
|
||||
#endif
|
||||
return dsa->meth->dsa_do_sign(dgst, dlen, dsa);
|
||||
}
|
||||
|
||||
@ -95,10 +87,6 @@ int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
|
||||
|
||||
int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
|
||||
{
|
||||
#ifdef FIPS
|
||||
if(FIPS_mode && !FIPS_dsa_check(dsa))
|
||||
return 0;
|
||||
#endif
|
||||
return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp);
|
||||
}
|
||||
|
||||
|
@ -65,18 +65,10 @@
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/asn1.h>
|
||||
#include <openssl/asn1_mac.h>
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
#include <openssl/engine.h>
|
||||
#endif
|
||||
#include <openssl/fips.h>
|
||||
|
||||
int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
||||
DSA *dsa)
|
||||
{
|
||||
#ifdef FIPS
|
||||
if(FIPS_mode && !FIPS_dsa_check(dsa))
|
||||
return -1;
|
||||
#endif
|
||||
return dsa->meth->dsa_do_verify(dgst, dgst_len, sig, dsa);
|
||||
}
|
||||
|
||||
|
@ -94,23 +94,22 @@ err_all.o: ../../include/openssl/des_old.h ../../include/openssl/dh.h
|
||||
err_all.o: ../../include/openssl/dsa.h ../../include/openssl/dso.h
|
||||
err_all.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
err_all.o: ../../include/openssl/engine.h ../../include/openssl/err.h
|
||||
err_all.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
|
||||
err_all.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||
err_all.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||
err_all.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||
err_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
err_all.o: ../../include/openssl/ocsp.h ../../include/openssl/opensslconf.h
|
||||
err_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
err_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h
|
||||
err_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
|
||||
err_all.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||
err_all.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||
err_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||
err_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||
err_all.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
|
||||
err_all.o: ../../include/openssl/ui_compat.h ../../include/openssl/x509.h
|
||||
err_all.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
|
||||
err_all.o: err_all.c
|
||||
err_all.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||
err_all.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||
err_all.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||
err_all.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||
err_all.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
|
||||
err_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
err_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem2.h
|
||||
err_all.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
|
||||
err_all.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h
|
||||
err_all.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
|
||||
err_all.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
|
||||
err_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
err_all.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
err_all.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
|
||||
err_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
err_all.o: ../../include/openssl/x509v3.h err_all.c
|
||||
err_prn.o: ../../e_os.h ../../include/openssl/bio.h
|
||||
err_prn.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
|
||||
err_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
|
@ -131,7 +131,6 @@ typedef struct err_state_st
|
||||
#define ERR_LIB_OCSP 39
|
||||
#define ERR_LIB_UI 40
|
||||
#define ERR_LIB_COMP 41
|
||||
#define ERR_LIB_FIPS 42
|
||||
|
||||
#define ERR_LIB_USER 128
|
||||
|
||||
@ -160,7 +159,6 @@ typedef struct err_state_st
|
||||
#define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__)
|
||||
#define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__)
|
||||
#define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__)
|
||||
#define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__)
|
||||
|
||||
/* Borland C seems too stupid to be able to shift and do longs in
|
||||
* the pre-processor :-( */
|
||||
|
@ -87,7 +87,6 @@
|
||||
#endif
|
||||
#include <openssl/ocsp.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/fips.h>
|
||||
|
||||
void ERR_load_crypto_strings(void)
|
||||
{
|
||||
@ -130,8 +129,5 @@ void ERR_load_crypto_strings(void)
|
||||
#endif
|
||||
ERR_load_OCSP_strings();
|
||||
ERR_load_UI_strings();
|
||||
#endif
|
||||
#ifdef FIPS
|
||||
ERR_load_FIPS_strings();
|
||||
#endif
|
||||
}
|
||||
|
@ -27,7 +27,6 @@ L DSO crypto/dso/dso.h crypto/dso/dso_err.c
|
||||
L ENGINE crypto/engine/engine.h crypto/engine/eng_err.c
|
||||
L OCSP crypto/ocsp/ocsp.h crypto/ocsp/ocsp_err.c
|
||||
L UI crypto/ui/ui.h crypto/ui/ui_err.c
|
||||
L FIPS fips/fips.h fips/fips_err.c
|
||||
|
||||
# additional header files to be scanned for function names
|
||||
L NONE crypto/x509/x509_vfy.h NONE
|
||||
|
@ -185,14 +185,13 @@ c_all.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
|
||||
c_all.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
|
||||
c_all.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
|
||||
c_all.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||
c_all.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||
c_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
c_all.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||
c_all.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||
c_all.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||
c_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
c_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
c_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
|
||||
c_all.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
c_all.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||
c_all.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||
c_all.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||
c_all.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||
c_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
|
||||
c_all.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
c_all.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||
c_all.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||
c_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||
|
@ -67,8 +67,6 @@ void OpenSSL_add_all_ciphers(void)
|
||||
|
||||
#ifndef OPENSSL_NO_DES
|
||||
EVP_add_cipher(EVP_des_cfb());
|
||||
EVP_add_cipher(EVP_des_cfb1());
|
||||
EVP_add_cipher(EVP_des_cfb8());
|
||||
EVP_add_cipher(EVP_des_ede_cfb());
|
||||
EVP_add_cipher(EVP_des_ede3_cfb());
|
||||
|
||||
@ -152,8 +150,6 @@ void OpenSSL_add_all_ciphers(void)
|
||||
EVP_add_cipher(EVP_aes_128_ecb());
|
||||
EVP_add_cipher(EVP_aes_128_cbc());
|
||||
EVP_add_cipher(EVP_aes_128_cfb());
|
||||
EVP_add_cipher(EVP_aes_128_cfb1());
|
||||
EVP_add_cipher(EVP_aes_128_cfb8());
|
||||
EVP_add_cipher(EVP_aes_128_ofb());
|
||||
#if 0
|
||||
EVP_add_cipher(EVP_aes_128_ctr());
|
||||
|
@ -84,35 +84,17 @@ IMPLEMENT_BLOCK_CIPHER(aes_256, ks, AES, EVP_AES_KEY,
|
||||
EVP_CIPHER_get_asn1_iv,
|
||||
NULL)
|
||||
|
||||
#define IMPLEMENT_AES_CFBR(ksize,cbits) IMPLEMENT_CFBR(aes,AES,EVP_AES_KEY,ks,ksize,cbits,16)
|
||||
|
||||
IMPLEMENT_AES_CFBR(128,1)
|
||||
IMPLEMENT_AES_CFBR(192,1)
|
||||
IMPLEMENT_AES_CFBR(256,1)
|
||||
|
||||
IMPLEMENT_AES_CFBR(128,8)
|
||||
IMPLEMENT_AES_CFBR(192,8)
|
||||
IMPLEMENT_AES_CFBR(256,8)
|
||||
|
||||
static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
const unsigned char *iv, int enc)
|
||||
{
|
||||
int ret;
|
||||
const unsigned char *iv, int enc) {
|
||||
|
||||
if ((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CFB_MODE
|
||||
|| (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_OFB_MODE
|
||||
|| enc)
|
||||
ret=AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
|
||||
AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
|
||||
else
|
||||
ret=AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
|
||||
|
||||
if(ret < 0)
|
||||
{
|
||||
EVPerr(EVP_F_AES_INIT_KEY,EVP_R_AES_KEY_SETUP_FAILED);
|
||||
return 0;
|
||||
}
|
||||
AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -92,61 +92,20 @@ static int des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int des_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, unsigned int inl)
|
||||
static int des_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, unsigned int inl)
|
||||
{
|
||||
DES_cfb64_encrypt(in, out, (long)inl, ctx->cipher_data,
|
||||
(DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Although we have a CFB-r implementation for DES, it doesn't pack the right
|
||||
way, so wrap it here */
|
||||
static int des_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, unsigned int inl)
|
||||
{
|
||||
unsigned int n;
|
||||
unsigned char c[8],d[8]; /* DES_cfb_encrypt rudely overwrites the whole buffer*/
|
||||
|
||||
memset(out,0,(inl+7)/8);
|
||||
for(n=0 ; n < inl ; ++n)
|
||||
{
|
||||
c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
|
||||
DES_cfb_encrypt(c,d,1,1,ctx->cipher_data,(DES_cblock *)ctx->iv,
|
||||
ctx->encrypt);
|
||||
out[n/8]=(out[n/8]&~(0x80 >> (n%8)))|((d[0]&0x80) >> (n%8));
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, unsigned int inl)
|
||||
{
|
||||
unsigned char *tmp; /* DES_cfb_encrypt rudely overwrites the whole buffer*/
|
||||
|
||||
tmp=alloca(inl);
|
||||
memcpy(tmp,in,inl);
|
||||
DES_cfb_encrypt(tmp,tmp,8,inl,ctx->cipher_data,(DES_cblock *)ctx->iv,
|
||||
ctx->encrypt);
|
||||
memcpy(out,tmp,inl);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64,
|
||||
0, des_init_key, NULL,
|
||||
EVP_CIPHER_set_asn1_iv,
|
||||
EVP_CIPHER_get_asn1_iv,
|
||||
NULL)
|
||||
|
||||
BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1,0,des_init_key,NULL,
|
||||
EVP_CIPHER_set_asn1_iv,
|
||||
EVP_CIPHER_get_asn1_iv,NULL)
|
||||
|
||||
BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8,0,des_init_key,NULL,
|
||||
EVP_CIPHER_set_asn1_iv,
|
||||
EVP_CIPHER_get_asn1_iv,NULL)
|
||||
|
||||
static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
const unsigned char *iv, int enc)
|
||||
|
@ -85,7 +85,7 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, unsigned int inl)
|
||||
{
|
||||
BLOCK_CIPHER_ecb_loop()
|
||||
DES_ecb3_encrypt(in + i,out + i,
|
||||
DES_ecb3_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i),
|
||||
&data(ctx)->ks1, &data(ctx)->ks2,
|
||||
&data(ctx)->ks3,
|
||||
ctx->encrypt);
|
||||
@ -121,7 +121,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
static int des_ede_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, unsigned int inl)
|
||||
{
|
||||
DES_ede3_cfb64_encrypt(in, out, (long)inl,
|
||||
@ -136,7 +136,7 @@ BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64,
|
||||
EVP_CIPHER_get_asn1_iv,
|
||||
NULL)
|
||||
|
||||
#define des_ede3_cfb64_cipher des_ede_cfb64_cipher
|
||||
#define des_ede3_cfb_cipher des_ede_cfb_cipher
|
||||
#define des_ede3_ofb_cipher des_ede_ofb_cipher
|
||||
#define des_ede3_cbc_cipher des_ede_cbc_cipher
|
||||
#define des_ede3_ecb_cipher des_ede_ecb_cipher
|
||||
|
@ -638,18 +638,9 @@ const EVP_CIPHER *EVP_des_ede(void);
|
||||
const EVP_CIPHER *EVP_des_ede3(void);
|
||||
const EVP_CIPHER *EVP_des_ede_ecb(void);
|
||||
const EVP_CIPHER *EVP_des_ede3_ecb(void);
|
||||
const EVP_CIPHER *EVP_des_cfb64(void);
|
||||
# define EVP_des_cfb EVP_des_cfb64
|
||||
const EVP_CIPHER *EVP_des_cfb1(void);
|
||||
const EVP_CIPHER *EVP_des_cfb8(void);
|
||||
const EVP_CIPHER *EVP_des_ede_cfb64(void);
|
||||
# define EVP_des_ede_cfb EVP_des_ede_cfb64
|
||||
const EVP_CIPHER *EVP_des_ede_cfb1(void);
|
||||
const EVP_CIPHER *EVP_des_ede_cfb8(void);
|
||||
const EVP_CIPHER *EVP_des_ede3_cfb64(void);
|
||||
# define EVP_des_ede3_cfb EVP_des_ede3_cfb64
|
||||
const EVP_CIPHER *EVP_des_ede3_cfb1(void);
|
||||
const EVP_CIPHER *EVP_des_ede3_cfb8(void);
|
||||
const EVP_CIPHER *EVP_des_cfb(void);
|
||||
const EVP_CIPHER *EVP_des_ede_cfb(void);
|
||||
const EVP_CIPHER *EVP_des_ede3_cfb(void);
|
||||
const EVP_CIPHER *EVP_des_ofb(void);
|
||||
const EVP_CIPHER *EVP_des_ede_ofb(void);
|
||||
const EVP_CIPHER *EVP_des_ede3_ofb(void);
|
||||
@ -673,8 +664,7 @@ const EVP_CIPHER *EVP_rc4_40(void);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_IDEA
|
||||
const EVP_CIPHER *EVP_idea_ecb(void);
|
||||
const EVP_CIPHER *EVP_idea_cfb64(void);
|
||||
# define EVP_idea_cfb EVP_idea_cfb64
|
||||
const EVP_CIPHER *EVP_idea_cfb(void);
|
||||
const EVP_CIPHER *EVP_idea_ofb(void);
|
||||
const EVP_CIPHER *EVP_idea_cbc(void);
|
||||
#endif
|
||||
@ -683,58 +673,45 @@ const EVP_CIPHER *EVP_rc2_ecb(void);
|
||||
const EVP_CIPHER *EVP_rc2_cbc(void);
|
||||
const EVP_CIPHER *EVP_rc2_40_cbc(void);
|
||||
const EVP_CIPHER *EVP_rc2_64_cbc(void);
|
||||
const EVP_CIPHER *EVP_rc2_cfb64(void);
|
||||
# define EVP_rc2_cfb EVP_rc2_cfb64
|
||||
const EVP_CIPHER *EVP_rc2_cfb(void);
|
||||
const EVP_CIPHER *EVP_rc2_ofb(void);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_BF
|
||||
const EVP_CIPHER *EVP_bf_ecb(void);
|
||||
const EVP_CIPHER *EVP_bf_cbc(void);
|
||||
const EVP_CIPHER *EVP_bf_cfb64(void);
|
||||
# define EVP_bf_cfb EVP_bf_cfb64
|
||||
const EVP_CIPHER *EVP_bf_cfb(void);
|
||||
const EVP_CIPHER *EVP_bf_ofb(void);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_CAST
|
||||
const EVP_CIPHER *EVP_cast5_ecb(void);
|
||||
const EVP_CIPHER *EVP_cast5_cbc(void);
|
||||
const EVP_CIPHER *EVP_cast5_cfb64(void);
|
||||
# define EVP_cast5_cfb EVP_cast5_cfb64
|
||||
const EVP_CIPHER *EVP_cast5_cfb(void);
|
||||
const EVP_CIPHER *EVP_cast5_ofb(void);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_RC5
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);
|
||||
# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_cfb(void);
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_AES
|
||||
const EVP_CIPHER *EVP_aes_128_ecb(void);
|
||||
const EVP_CIPHER *EVP_aes_128_cbc(void);
|
||||
const EVP_CIPHER *EVP_aes_128_cfb1(void);
|
||||
const EVP_CIPHER *EVP_aes_128_cfb8(void);
|
||||
const EVP_CIPHER *EVP_aes_128_cfb128(void);
|
||||
# define EVP_aes_128_cfb EVP_aes_128_cfb128
|
||||
const EVP_CIPHER *EVP_aes_128_cfb(void);
|
||||
const EVP_CIPHER *EVP_aes_128_ofb(void);
|
||||
#if 0
|
||||
const EVP_CIPHER *EVP_aes_128_ctr(void);
|
||||
#endif
|
||||
const EVP_CIPHER *EVP_aes_192_ecb(void);
|
||||
const EVP_CIPHER *EVP_aes_192_cbc(void);
|
||||
const EVP_CIPHER *EVP_aes_192_cfb1(void);
|
||||
const EVP_CIPHER *EVP_aes_192_cfb8(void);
|
||||
const EVP_CIPHER *EVP_aes_192_cfb128(void);
|
||||
# define EVP_aes_192_cfb EVP_aes_192_cfb128
|
||||
const EVP_CIPHER *EVP_aes_192_cfb(void);
|
||||
const EVP_CIPHER *EVP_aes_192_ofb(void);
|
||||
#if 0
|
||||
const EVP_CIPHER *EVP_aes_192_ctr(void);
|
||||
#endif
|
||||
const EVP_CIPHER *EVP_aes_256_ecb(void);
|
||||
const EVP_CIPHER *EVP_aes_256_cbc(void);
|
||||
const EVP_CIPHER *EVP_aes_256_cfb1(void);
|
||||
const EVP_CIPHER *EVP_aes_256_cfb8(void);
|
||||
const EVP_CIPHER *EVP_aes_256_cfb128(void);
|
||||
# define EVP_aes_256_cfb EVP_aes_256_cfb128
|
||||
const EVP_CIPHER *EVP_aes_256_cfb(void);
|
||||
const EVP_CIPHER *EVP_aes_256_ofb(void);
|
||||
#if 0
|
||||
const EVP_CIPHER *EVP_aes_256_ctr(void);
|
||||
@ -846,7 +823,6 @@ void ERR_load_EVP_strings(void);
|
||||
/* Error codes for the EVP functions. */
|
||||
|
||||
/* Function codes. */
|
||||
#define EVP_F_AES_INIT_KEY 129
|
||||
#define EVP_F_D2I_PKEY 100
|
||||
#define EVP_F_EVP_CIPHERINIT 123
|
||||
#define EVP_F_EVP_CIPHER_CTX_CTRL 124
|
||||
@ -877,7 +853,6 @@ void ERR_load_EVP_strings(void);
|
||||
#define EVP_F_RC5_CTRL 125
|
||||
|
||||
/* Reason codes. */
|
||||
#define EVP_R_AES_KEY_SETUP_FAILED 140
|
||||
#define EVP_R_BAD_BLOCK_LENGTH 136
|
||||
#define EVP_R_BAD_DECRYPT 100
|
||||
#define EVP_R_BAD_KEY_LENGTH 137
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* crypto/evp/evp_err.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved.
|
||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -66,7 +66,6 @@
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
static ERR_STRING_DATA EVP_str_functs[]=
|
||||
{
|
||||
{ERR_PACK(0,EVP_F_AES_INIT_KEY,0), "AES_INIT_KEY"},
|
||||
{ERR_PACK(0,EVP_F_D2I_PKEY,0), "D2I_PKEY"},
|
||||
{ERR_PACK(0,EVP_F_EVP_CIPHERINIT,0), "EVP_CipherInit"},
|
||||
{ERR_PACK(0,EVP_F_EVP_CIPHER_CTX_CTRL,0), "EVP_CIPHER_CTX_ctrl"},
|
||||
@ -100,7 +99,6 @@ static ERR_STRING_DATA EVP_str_functs[]=
|
||||
|
||||
static ERR_STRING_DATA EVP_str_reasons[]=
|
||||
{
|
||||
{EVP_R_AES_KEY_SETUP_FAILED ,"aes key setup failed"},
|
||||
{EVP_R_BAD_BLOCK_LENGTH ,"bad block length"},
|
||||
{EVP_R_BAD_DECRYPT ,"bad decrypt"},
|
||||
{EVP_R_BAD_KEY_LENGTH ,"bad key length"},
|
||||
|
@ -133,30 +133,6 @@ int EVP_CIPHER_type(const EVP_CIPHER *ctx)
|
||||
|
||||
return NID_rc4;
|
||||
|
||||
case NID_aes_128_cfb128:
|
||||
case NID_aes_128_cfb8:
|
||||
case NID_aes_128_cfb1:
|
||||
|
||||
return NID_aes_128_cfb128;
|
||||
|
||||
case NID_aes_192_cfb128:
|
||||
case NID_aes_192_cfb8:
|
||||
case NID_aes_192_cfb1:
|
||||
|
||||
return NID_aes_192_cfb128;
|
||||
|
||||
case NID_aes_256_cfb128:
|
||||
case NID_aes_256_cfb8:
|
||||
case NID_aes_256_cfb1:
|
||||
|
||||
return NID_aes_256_cfb128;
|
||||
|
||||
case NID_des_cfb64:
|
||||
case NID_des_cfb8:
|
||||
case NID_des_cfb1:
|
||||
|
||||
return NID_des_cfb64;
|
||||
|
||||
default:
|
||||
/* Check it has an OID and it is valid */
|
||||
otmp = OBJ_nid2obj(nid);
|
||||
|
@ -90,7 +90,7 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns
|
||||
}
|
||||
|
||||
#define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \
|
||||
static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
|
||||
static int cname##_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
|
||||
{\
|
||||
cprefix##_cfb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\
|
||||
return 1;\
|
||||
@ -127,7 +127,7 @@ BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \
|
||||
#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \
|
||||
iv_len, cbits, flags, init_key, cleanup, \
|
||||
set_asn1, get_asn1, ctrl) \
|
||||
BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \
|
||||
BLOCK_CIPHER_def1(cname, cfb##cbits, cfb, CFB, kstruct, nid, 1, \
|
||||
key_len, iv_len, flags, init_key, cleanup, set_asn1, \
|
||||
get_asn1, ctrl)
|
||||
|
||||
@ -225,12 +225,3 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; }
|
||||
get_asn1, ctrl)
|
||||
|
||||
#define EVP_C_DATA(kstruct, ctx) ((kstruct *)(ctx)->cipher_data)
|
||||
|
||||
#define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len) \
|
||||
BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \
|
||||
BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \
|
||||
NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \
|
||||
0, cipher##_init_key, NULL, \
|
||||
EVP_CIPHER_set_asn1_iv, \
|
||||
EVP_CIPHER_get_asn1_iv, \
|
||||
NULL)
|
||||
|
@ -136,7 +136,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
|
||||
const unsigned char *iv,int in,
|
||||
const unsigned char *plaintext,int pn,
|
||||
const unsigned char *ciphertext,int cn,
|
||||
int encdec,int multiplier)
|
||||
int encdec)
|
||||
{
|
||||
EVP_CIPHER_CTX ctx;
|
||||
unsigned char out[4096];
|
||||
@ -166,7 +166,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
|
||||
}
|
||||
EVP_CIPHER_CTX_set_padding(&ctx,0);
|
||||
|
||||
if(!EVP_EncryptUpdate(&ctx,out,&outl,plaintext,pn*multiplier))
|
||||
if(!EVP_EncryptUpdate(&ctx,out,&outl,plaintext,pn))
|
||||
{
|
||||
fprintf(stderr,"Encrypt failed\n");
|
||||
test1_exit(6);
|
||||
@ -177,7 +177,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
|
||||
test1_exit(7);
|
||||
}
|
||||
|
||||
if(outl+outl2 != cn*multiplier)
|
||||
if(outl+outl2 != cn)
|
||||
{
|
||||
fprintf(stderr,"Ciphertext length mismatch got %d expected %d\n",
|
||||
outl+outl2,cn);
|
||||
@ -202,7 +202,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
|
||||
}
|
||||
EVP_CIPHER_CTX_set_padding(&ctx,0);
|
||||
|
||||
if(!EVP_DecryptUpdate(&ctx,out,&outl,ciphertext,cn*multiplier))
|
||||
if(!EVP_DecryptUpdate(&ctx,out,&outl,ciphertext,cn))
|
||||
{
|
||||
fprintf(stderr,"Decrypt failed\n");
|
||||
test1_exit(6);
|
||||
@ -213,7 +213,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
|
||||
test1_exit(7);
|
||||
}
|
||||
|
||||
if(outl+outl2 != cn*multiplier)
|
||||
if(outl+outl2 != cn)
|
||||
{
|
||||
fprintf(stderr,"Plaintext length mismatch got %d expected %d\n",
|
||||
outl+outl2,cn);
|
||||
@ -238,7 +238,7 @@ static int test_cipher(const char *cipher,const unsigned char *key,int kn,
|
||||
const unsigned char *iv,int in,
|
||||
const unsigned char *plaintext,int pn,
|
||||
const unsigned char *ciphertext,int cn,
|
||||
int encdec,int multiplier)
|
||||
int encdec)
|
||||
{
|
||||
const EVP_CIPHER *c;
|
||||
|
||||
@ -246,7 +246,7 @@ static int test_cipher(const char *cipher,const unsigned char *key,int kn,
|
||||
if(!c)
|
||||
return 0;
|
||||
|
||||
test1(c,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec,multiplier);
|
||||
test1(c,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -359,7 +359,6 @@ int main(int argc,char **argv)
|
||||
unsigned char *iv,*key,*plaintext,*ciphertext;
|
||||
int encdec;
|
||||
int kn,in,pn,cn;
|
||||
int multiplier=1;
|
||||
|
||||
if(!fgets((char *)line,sizeof line,f))
|
||||
break;
|
||||
@ -384,15 +383,7 @@ int main(int argc,char **argv)
|
||||
pn=convert(plaintext);
|
||||
cn=convert(ciphertext);
|
||||
|
||||
if(strchr(cipher,'*'))
|
||||
{
|
||||
p=cipher;
|
||||
sstrsep(&p,"*");
|
||||
multiplier=atoi(sstrsep(&p,"*"));
|
||||
}
|
||||
|
||||
if(!test_cipher(cipher,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec,
|
||||
multiplier)
|
||||
if(!test_cipher(cipher,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec)
|
||||
&& !test_digest(cipher,plaintext,pn,ciphertext,cn))
|
||||
{
|
||||
fprintf(stderr,"Can't find %s\n",cipher);
|
||||
|
@ -92,102 +92,7 @@ AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000
|
||||
AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:F58C4C04D6E5F1BA779EABFB5F7BFBD6:AE2D8A571E03AC9C9EB76FAC45AF8E51:9CFC4E967EDB808D679F777BC6702C7D
|
||||
AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:9CFC4E967EDB808D679F777BC6702C7D:30C81C46A35CE411E5FBC1191A0A52EF:39F23369A9D9BACFA530E26304231461
|
||||
AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:39F23369A9D9BACFA530E26304231461:F69F2445DF4F9B17AD2B417BE66C3710:B2EB05E2C39BE9FCDA6C19078C6A9D1B
|
||||
|
||||
# CFB1-AES128.Encrypt
|
||||
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:00:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00020406080a0c0e10121416181a1c1e:80:80:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0004080c1014181c2024282c3034383d:80:80:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0008101820283038404850586068707b:00:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00102030405060708090a0b0c0d0e0f6:80:80:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0020406080a0c0e10121416181a1c1ed:00:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:004080c1014181c2024282c3034383da:80:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:008101820283038404850586068707b4:80:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f68:80:80:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:020406080a0c0e10121416181a1c1ed1:80:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:04080c1014181c2024282c3034383da2:00:80:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:08101820283038404850586068707b45:00:80:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:102030405060708090a0b0c0d0e0f68b:00:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:20406080a0c0e10121416181a1c1ed16:00:00:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:4080c1014181c2024282c3034383da2c:00:80:1
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:8101820283038404850586068707b459:80:80:1
|
||||
# all of the above packed into one...
|
||||
# in: 0110 1011 1100 0001 = 6bc1
|
||||
# out: 0110 1000 1011 0011 = 68b3
|
||||
AES-128-CFB1*8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1:68b3:1
|
||||
|
||||
# CFB1-AES128.Decrypt
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:00:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00020406080a0c0e10121416181a1c1e:80:80:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0004080c1014181c2024282c3034383d:80:80:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0008101820283038404850586068707b:00:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00102030405060708090a0b0c0d0e0f6:80:80:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0020406080a0c0e10121416181a1c1ed:00:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:004080c1014181c2024282c3034383da:80:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:008101820283038404850586068707b4:80:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f68:80:80:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:020406080a0c0e10121416181a1c1ed1:80:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:04080c1014181c2024282c3034383da2:00:80:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:08101820283038404850586068707b45:00:80:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:102030405060708090a0b0c0d0e0f68b:00:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:20406080a0c0e10121416181a1c1ed16:00:00:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:4080c1014181c2024282c3034383da2c:00:80:0
|
||||
AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:8101820283038404850586068707b459:80:80:0
|
||||
# all of the above packed into one...
|
||||
# in: 0110 1000 1011 0011 = 68b3
|
||||
# out: 0110 1011 1100 0001 = 6bc1
|
||||
AES-128-CFB1*8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1:68b3:0
|
||||
|
||||
# TODO: CFB1-AES192 and 256
|
||||
|
||||
# CFB8-AES128.Encrypt
|
||||
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6b:3b:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f3b:c1:79:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:02030405060708090a0b0c0d0e0f3b79:be:42:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:030405060708090a0b0c0d0e0f3b7942:e2:4c:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0405060708090a0b0c0d0e0f3b79424c:2e:9c:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:05060708090a0b0c0d0e0f3b79424c9c:40:0d:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:060708090a0b0c0d0e0f3b79424c9c0d:9f:d4:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0708090a0b0c0d0e0f3b79424c9c0dd4:96:36:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:08090a0b0c0d0e0f3b79424c9c0dd436:e9:ba:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:090a0b0c0d0e0f3b79424c9c0dd436ba:3d:ce:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0a0b0c0d0e0f3b79424c9c0dd436bace:7e:9e:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0b0c0d0e0f3b79424c9c0dd436bace9e:11:0e:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0c0d0e0f3b79424c9c0dd436bace9e0e:73:d4:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0d0e0f3b79424c9c0dd436bace9e0ed4:93:58:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0e0f3b79424c9c0dd436bace9e0ed458:17:6a:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0f3b79424c9c0dd436bace9e0ed4586a:2a:4f:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:3b79424c9c0dd436bace9e0ed4586a4f:ae:32:1
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:79424c9c0dd436bace9e0ed4586a4f32:2d:b9:1
|
||||
# all of the above packed into one
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1bee22e409f96e93d7e117393172aae2d:3b79424c9c0dd436bace9e0ed4586a4f32b9:1
|
||||
|
||||
# CFB8-AES128.Decrypt
|
||||
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6b:3b:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f3b:c1:79:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:02030405060708090a0b0c0d0e0f3b79:be:42:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:030405060708090a0b0c0d0e0f3b7942:e2:4c:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0405060708090a0b0c0d0e0f3b79424c:2e:9c:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:05060708090a0b0c0d0e0f3b79424c9c:40:0d:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:060708090a0b0c0d0e0f3b79424c9c0d:9f:d4:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0708090a0b0c0d0e0f3b79424c9c0dd4:96:36:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:08090a0b0c0d0e0f3b79424c9c0dd436:e9:ba:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:090a0b0c0d0e0f3b79424c9c0dd436ba:3d:ce:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0a0b0c0d0e0f3b79424c9c0dd436bace:7e:9e:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0b0c0d0e0f3b79424c9c0dd436bace9e:11:0e:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0c0d0e0f3b79424c9c0dd436bace9e0e:73:d4:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0d0e0f3b79424c9c0dd436bace9e0ed4:93:58:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0e0f3b79424c9c0dd436bace9e0ed458:17:6a:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0f3b79424c9c0dd436bace9e0ed4586a:2a:4f:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:3b79424c9c0dd436bace9e0ed4586a4f:ae:32:0
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:79424c9c0dd436bace9e0ed4586a4f32:2d:b9:0
|
||||
# all of the above packed into one
|
||||
AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1bee22e409f96e93d7e117393172aae2d:3b79424c9c0dd436bace9e0ed4586a4f32b9:0
|
||||
|
||||
# TODO: 192 and 256 bit keys
|
||||
|
||||
# We don't support CFB{1,8}-AESxxx.{En,De}crypt
|
||||
# For all CFB128 encrypts and decrypts, the transformed sequence is
|
||||
# AES-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec
|
||||
# CFB128-AES128.Encrypt
|
||||
@ -269,16 +174,6 @@ DESX-CBC:0123456789abcdeff1e0d3c2b5a49786fedcba9876543210:fedcba9876543210:37363
|
||||
# DES EDE3 CBC tests (from destest)
|
||||
DES-EDE3-CBC:0123456789abcdeff1e0d3c2b5a49786fedcba9876543210:fedcba9876543210:37363534333231204E6F77206973207468652074696D6520666F722000000000:3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D41C673812CFDE9675
|
||||
|
||||
# DES CFB1 from FIPS 81
|
||||
# plaintext: 0100 1110 0110 1111 0111 0111 = 4e6f77
|
||||
# ciphertext: 1100 1101 0001 1110 1100 1001 = cd1ec9
|
||||
|
||||
DES-CFB1*8:0123456789abcdef:1234567890abcdef:4e6f77:cd1ec9
|
||||
|
||||
# DES CFB8 from FIPS 81
|
||||
|
||||
DES-CFB8:0123456789abcdef:1234567890abcdef:4e6f7720697320746865:f31fda07011462ee187f
|
||||
|
||||
# RC4 tests (from rc4test)
|
||||
RC4:0123456789abcdef0123456789abcdef::0123456789abcdef:75b7878099e0c596
|
||||
RC4:0123456789abcdef0123456789abcdef::0000000000000000:7494c2e7104b0879
|
||||
|
@ -128,9 +128,6 @@
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
|
||||
#include <openssl/fips.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
#error "DATA_ORDER must be defined!"
|
||||
#endif
|
||||
@ -558,14 +555,6 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
|
||||
static const unsigned char end[4]={0x80,0x00,0x00,0x00};
|
||||
const unsigned char *cp=end;
|
||||
|
||||
#ifdef FIPS
|
||||
if(FIPS_mode)
|
||||
{
|
||||
FIPSerr(FIPS_F_HASH_FINAL,FIPS_R_NON_FIPS_METHOD);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* c->num should definitly have room for at least one more byte. */
|
||||
p=c->data;
|
||||
i=c->num>>2;
|
||||
|
@ -80,13 +80,10 @@ clean:
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
md4_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
|
||||
md4_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
md4_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
|
||||
md4_dgst.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h
|
||||
md4_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||
md4_dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
md4_dgst.o: ../md32_common.h md4_dgst.c md4_locl.h
|
||||
md4_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/md4.h
|
||||
md4_dgst.o: ../../include/openssl/opensslconf.h
|
||||
md4_dgst.o: ../../include/openssl/opensslv.h ../md32_common.h md4_dgst.c
|
||||
md4_dgst.o: md4_locl.h
|
||||
md4_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
|
||||
md4_one.o: ../../include/openssl/md4.h ../../include/openssl/opensslconf.h
|
||||
md4_one.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||
|
@ -116,13 +116,10 @@ clean:
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
md5_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
|
||||
md5_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
md5_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
|
||||
md5_dgst.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h
|
||||
md5_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||
md5_dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
md5_dgst.o: ../md32_common.h md5_dgst.c md5_locl.h
|
||||
md5_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/md5.h
|
||||
md5_dgst.o: ../../include/openssl/opensslconf.h
|
||||
md5_dgst.o: ../../include/openssl/opensslv.h ../md32_common.h md5_dgst.c
|
||||
md5_dgst.o: md5_locl.h
|
||||
md5_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
|
||||
md5_one.o: ../../include/openssl/md5.h ../../include/openssl/opensslconf.h
|
||||
md5_one.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||
|
@ -62,9 +62,9 @@
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#define NUM_NID 658
|
||||
#define NUM_SN 651
|
||||
#define NUM_LN 651
|
||||
#define NUM_NID 650
|
||||
#define NUM_SN 643
|
||||
#define NUM_LN 643
|
||||
#define NUM_OBJ 617
|
||||
|
||||
static unsigned char lvalues[4455]={
|
||||
@ -1728,34 +1728,20 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
|
||||
10,&(lvalues[4434]),0},
|
||||
{"msUPN","Microsoft Universal Principal Name",NID_ms_upn,10,
|
||||
&(lvalues[4444]),0},
|
||||
{"AES-128-CFB1","aes-128-cfb1",NID_aes_128_cfb1,0,NULL},
|
||||
{"AES-192-CFB1","aes-192-cfb1",NID_aes_192_cfb1,0,NULL},
|
||||
{"AES-256-CFB1","aes-256-cfb1",NID_aes_256_cfb1,0,NULL},
|
||||
{"AES-128-CFB8","aes-128-cfb8",NID_aes_128_cfb8,0,NULL},
|
||||
{"AES-192-CFB8","aes-192-cfb8",NID_aes_192_cfb8,0,NULL},
|
||||
{"AES-256-CFB8","aes-256-cfb8",NID_aes_256_cfb8,0,NULL},
|
||||
{"DES-CFB1","des-cfb1",NID_des_cfb1,0,NULL},
|
||||
{"DES-CFB8","des-cfb8",NID_des_cfb8,0,NULL},
|
||||
};
|
||||
|
||||
static ASN1_OBJECT *sn_objs[NUM_SN]={
|
||||
&(nid_objs[364]),/* "AD_DVCS" */
|
||||
&(nid_objs[419]),/* "AES-128-CBC" */
|
||||
&(nid_objs[421]),/* "AES-128-CFB" */
|
||||
&(nid_objs[650]),/* "AES-128-CFB1" */
|
||||
&(nid_objs[653]),/* "AES-128-CFB8" */
|
||||
&(nid_objs[418]),/* "AES-128-ECB" */
|
||||
&(nid_objs[420]),/* "AES-128-OFB" */
|
||||
&(nid_objs[423]),/* "AES-192-CBC" */
|
||||
&(nid_objs[425]),/* "AES-192-CFB" */
|
||||
&(nid_objs[651]),/* "AES-192-CFB1" */
|
||||
&(nid_objs[654]),/* "AES-192-CFB8" */
|
||||
&(nid_objs[422]),/* "AES-192-ECB" */
|
||||
&(nid_objs[424]),/* "AES-192-OFB" */
|
||||
&(nid_objs[427]),/* "AES-256-CBC" */
|
||||
&(nid_objs[429]),/* "AES-256-CFB" */
|
||||
&(nid_objs[652]),/* "AES-256-CFB1" */
|
||||
&(nid_objs[655]),/* "AES-256-CFB8" */
|
||||
&(nid_objs[426]),/* "AES-256-ECB" */
|
||||
&(nid_objs[428]),/* "AES-256-OFB" */
|
||||
&(nid_objs[91]),/* "BF-CBC" */
|
||||
@ -1776,8 +1762,6 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
|
||||
&(nid_objs[31]),/* "DES-CBC" */
|
||||
&(nid_objs[643]),/* "DES-CDMF" */
|
||||
&(nid_objs[30]),/* "DES-CFB" */
|
||||
&(nid_objs[656]),/* "DES-CFB1" */
|
||||
&(nid_objs[657]),/* "DES-CFB8" */
|
||||
&(nid_objs[29]),/* "DES-ECB" */
|
||||
&(nid_objs[32]),/* "DES-EDE" */
|
||||
&(nid_objs[43]),/* "DES-EDE-CBC" */
|
||||
@ -2501,20 +2485,14 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
|
||||
&(nid_objs[606]),/* "additional verification" */
|
||||
&(nid_objs[419]),/* "aes-128-cbc" */
|
||||
&(nid_objs[421]),/* "aes-128-cfb" */
|
||||
&(nid_objs[650]),/* "aes-128-cfb1" */
|
||||
&(nid_objs[653]),/* "aes-128-cfb8" */
|
||||
&(nid_objs[418]),/* "aes-128-ecb" */
|
||||
&(nid_objs[420]),/* "aes-128-ofb" */
|
||||
&(nid_objs[423]),/* "aes-192-cbc" */
|
||||
&(nid_objs[425]),/* "aes-192-cfb" */
|
||||
&(nid_objs[651]),/* "aes-192-cfb1" */
|
||||
&(nid_objs[654]),/* "aes-192-cfb8" */
|
||||
&(nid_objs[422]),/* "aes-192-ecb" */
|
||||
&(nid_objs[424]),/* "aes-192-ofb" */
|
||||
&(nid_objs[427]),/* "aes-256-cbc" */
|
||||
&(nid_objs[429]),/* "aes-256-cfb" */
|
||||
&(nid_objs[652]),/* "aes-256-cfb1" */
|
||||
&(nid_objs[655]),/* "aes-256-cfb8" */
|
||||
&(nid_objs[426]),/* "aes-256-ecb" */
|
||||
&(nid_objs[428]),/* "aes-256-ofb" */
|
||||
&(nid_objs[376]),/* "algorithm" */
|
||||
@ -2553,8 +2531,6 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
|
||||
&(nid_objs[31]),/* "des-cbc" */
|
||||
&(nid_objs[643]),/* "des-cdmf" */
|
||||
&(nid_objs[30]),/* "des-cfb" */
|
||||
&(nid_objs[656]),/* "des-cfb1" */
|
||||
&(nid_objs[657]),/* "des-cfb8" */
|
||||
&(nid_objs[29]),/* "des-ecb" */
|
||||
&(nid_objs[32]),/* "des-ede" */
|
||||
&(nid_objs[43]),/* "des-ede-cbc" */
|
||||
|
@ -2009,38 +2009,6 @@
|
||||
#define NID_aes_256_cfb128 429
|
||||
#define OBJ_aes_256_cfb128 OBJ_aes,44L
|
||||
|
||||
#define SN_aes_128_cfb1 "AES-128-CFB1"
|
||||
#define LN_aes_128_cfb1 "aes-128-cfb1"
|
||||
#define NID_aes_128_cfb1 650
|
||||
|
||||
#define SN_aes_192_cfb1 "AES-192-CFB1"
|
||||
#define LN_aes_192_cfb1 "aes-192-cfb1"
|
||||
#define NID_aes_192_cfb1 651
|
||||
|
||||
#define SN_aes_256_cfb1 "AES-256-CFB1"
|
||||
#define LN_aes_256_cfb1 "aes-256-cfb1"
|
||||
#define NID_aes_256_cfb1 652
|
||||
|
||||
#define SN_aes_128_cfb8 "AES-128-CFB8"
|
||||
#define LN_aes_128_cfb8 "aes-128-cfb8"
|
||||
#define NID_aes_128_cfb8 653
|
||||
|
||||
#define SN_aes_192_cfb8 "AES-192-CFB8"
|
||||
#define LN_aes_192_cfb8 "aes-192-cfb8"
|
||||
#define NID_aes_192_cfb8 654
|
||||
|
||||
#define SN_aes_256_cfb8 "AES-256-CFB8"
|
||||
#define LN_aes_256_cfb8 "aes-256-cfb8"
|
||||
#define NID_aes_256_cfb8 655
|
||||
|
||||
#define SN_des_cfb1 "DES-CFB1"
|
||||
#define LN_des_cfb1 "des-cfb1"
|
||||
#define NID_des_cfb1 656
|
||||
|
||||
#define SN_des_cfb8 "DES-CFB8"
|
||||
#define LN_des_cfb8 "des-cfb8"
|
||||
#define NID_des_cfb8 657
|
||||
|
||||
#define SN_hold_instruction_code "holdInstructionCode"
|
||||
#define LN_hold_instruction_code "Hold Instruction Code"
|
||||
#define NID_hold_instruction_code 430
|
||||
|
@ -647,11 +647,3 @@ joint_iso_itu_t 646
|
||||
international_organizations 647
|
||||
ms_smartcard_login 648
|
||||
ms_upn 649
|
||||
aes_128_cfb1 650
|
||||
aes_192_cfb1 651
|
||||
aes_256_cfb1 652
|
||||
aes_128_cfb8 653
|
||||
aes_192_cfb8 654
|
||||
aes_256_cfb8 655
|
||||
des_cfb1 656
|
||||
des_cfb8 657
|
||||
|
@ -681,17 +681,6 @@ aes 43 : AES-256-OFB : aes-256-ofb
|
||||
!Cname aes-256-cfb128
|
||||
aes 44 : AES-256-CFB : aes-256-cfb
|
||||
|
||||
# There are no OIDs for these modes...
|
||||
|
||||
: AES-128-CFB1 : aes-128-cfb1
|
||||
: AES-192-CFB1 : aes-192-cfb1
|
||||
: AES-256-CFB1 : aes-256-cfb1
|
||||
: AES-128-CFB8 : aes-128-cfb8
|
||||
: AES-192-CFB8 : aes-192-cfb8
|
||||
: AES-256-CFB8 : aes-256-cfb8
|
||||
: DES-CFB1 : des-cfb1
|
||||
: DES-CFB8 : des-cfb8
|
||||
|
||||
# Hold instruction CRL entry extension
|
||||
!Cname hold-instruction-code
|
||||
id-ce 23 : holdInstructionCode : Hold Instruction Code
|
||||
|
@ -88,19 +88,19 @@ md_rand.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
|
||||
md_rand.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
|
||||
md_rand.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||
md_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
md_rand.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
|
||||
md_rand.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
|
||||
md_rand.o: ../../include/openssl/md2.h ../../include/openssl/md4.h
|
||||
md_rand.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
|
||||
md_rand.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
md_rand.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
md_rand.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
|
||||
md_rand.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
|
||||
md_rand.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
|
||||
md_rand.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||
md_rand.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||
md_rand.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
|
||||
md_rand.o: ../../include/openssl/ui_compat.h md_rand.c rand_lcl.h
|
||||
md_rand.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
|
||||
md_rand.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||
md_rand.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||
md_rand.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||
md_rand.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
|
||||
md_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
md_rand.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h
|
||||
md_rand.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
|
||||
md_rand.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
|
||||
md_rand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
md_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
md_rand.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
|
||||
md_rand.o: md_rand.c rand_lcl.h
|
||||
rand_egd.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
|
||||
rand_egd.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
|
||||
rand_egd.o: rand_egd.c
|
||||
@ -114,17 +114,15 @@ rand_err.o: rand_err.c
|
||||
rand_lib.o: ../../e_os.h ../../include/openssl/asn1.h
|
||||
rand_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
|
||||
rand_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
|
||||
rand_lib.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
|
||||
rand_lib.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||
rand_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||
rand_lib.o: ../../include/openssl/err.h ../../include/openssl/fips.h
|
||||
rand_lib.o: ../../include/openssl/fips_rand.h ../../include/openssl/lhash.h
|
||||
rand_lib.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
|
||||
rand_lib.o: ../../include/openssl/opensslconf.h
|
||||
rand_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
rand_lib.o: ../../include/openssl/rand.h ../../include/openssl/rsa.h
|
||||
rand_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
||||
rand_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
|
||||
rand_lib.o: ../../include/openssl/ui_compat.h ../cryptlib.h rand_lib.c
|
||||
rand_lib.o: ../cryptlib.h rand_lib.c
|
||||
rand_os2.o: ../../e_os.h ../../include/openssl/aes.h
|
||||
rand_os2.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
rand_os2.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
|
||||
|
@ -126,7 +126,6 @@
|
||||
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/fips.h>
|
||||
|
||||
#ifdef BN_DEBUG
|
||||
# define PREDICT
|
||||
@ -333,14 +332,6 @@ static int ssleay_rand_bytes(unsigned char *buf, int num)
|
||||
#endif
|
||||
int do_stir_pool = 0;
|
||||
|
||||
#ifdef FIPS
|
||||
if(FIPS_mode)
|
||||
{
|
||||
FIPSerr(FIPS_F_SSLEAY_RAND_BYTES,FIPS_R_NON_FIPS_METHOD);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PREDICT
|
||||
if (rand_predictable)
|
||||
{
|
||||
|
@ -121,12 +121,10 @@ void ERR_load_RAND_strings(void);
|
||||
/* Error codes for the RAND functions. */
|
||||
|
||||
/* Function codes. */
|
||||
#define RAND_F_FIPS_RAND_BYTES 102
|
||||
#define RAND_F_RAND_GET_RAND_METHOD 101
|
||||
#define RAND_F_SSLEAY_RAND_BYTES 100
|
||||
|
||||
/* Reason codes. */
|
||||
#define RAND_R_NON_FIPS_METHOD 101
|
||||
#define RAND_R_PRNG_NOT_SEEDED 100
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* crypto/rand/rand_err.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved.
|
||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -66,7 +66,6 @@
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
static ERR_STRING_DATA RAND_str_functs[]=
|
||||
{
|
||||
{ERR_PACK(0,RAND_F_FIPS_RAND_BYTES,0), "FIPS_RAND_BYTES"},
|
||||
{ERR_PACK(0,RAND_F_RAND_GET_RAND_METHOD,0), "RAND_get_rand_method"},
|
||||
{ERR_PACK(0,RAND_F_SSLEAY_RAND_BYTES,0), "SSLEAY_RAND_BYTES"},
|
||||
{0,NULL}
|
||||
@ -74,7 +73,6 @@ static ERR_STRING_DATA RAND_str_functs[]=
|
||||
|
||||
static ERR_STRING_DATA RAND_str_reasons[]=
|
||||
{
|
||||
{RAND_R_NON_FIPS_METHOD ,"non fips method"},
|
||||
{RAND_R_PRNG_NOT_SEEDED ,"PRNG not seeded"},
|
||||
{0,NULL}
|
||||
};
|
||||
|
@ -63,8 +63,6 @@
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
#include <openssl/engine.h>
|
||||
#endif
|
||||
#include <openssl/fips.h>
|
||||
#include <openssl/fips_rand.h>
|
||||
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
/* non-NULL if default_RAND_meth is ENGINE-provided */
|
||||
@ -87,15 +85,6 @@ int RAND_set_rand_method(const RAND_METHOD *meth)
|
||||
|
||||
const RAND_METHOD *RAND_get_rand_method(void)
|
||||
{
|
||||
#ifdef FIPS
|
||||
if(FIPS_mode && default_RAND_meth != FIPS_rand_check)
|
||||
{
|
||||
RANDerr(RAND_F_RAND_GET_RAND_METHOD,RAND_R_NON_FIPS_METHOD);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if (!default_RAND_meth)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
|
@ -97,14 +97,9 @@ clean:
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
rmd_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
|
||||
rmd_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
rmd_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
|
||||
rmd_dgst.o: ../../include/openssl/opensslconf.h
|
||||
rmd_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
|
||||
rmd_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ripemd.h
|
||||
rmd_dgst.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
||||
rmd_dgst.o: ../../include/openssl/symhacks.h ../md32_common.h rmd_dgst.c
|
||||
rmd_dgst.o: rmd_locl.h rmdconst.h
|
||||
rmd_dgst.o: ../md32_common.h rmd_dgst.c rmd_locl.h rmdconst.h
|
||||
rmd_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
|
||||
rmd_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
rmd_one.o: ../../include/openssl/ripemd.h ../../include/openssl/safestack.h
|
||||
|
@ -102,22 +102,12 @@ sha1_one.o: ../../include/openssl/opensslconf.h
|
||||
sha1_one.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||
sha1_one.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||
sha1_one.o: ../../include/openssl/symhacks.h sha1_one.c
|
||||
sha1dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
|
||||
sha1dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
sha1dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
|
||||
sha1dgst.o: ../../include/openssl/opensslconf.h
|
||||
sha1dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||
sha1dgst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||
sha1dgst.o: ../../include/openssl/symhacks.h ../md32_common.h sha1dgst.c
|
||||
sha1dgst.o: sha_locl.h
|
||||
sha_dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
|
||||
sha_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
sha_dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
|
||||
sha_dgst.o: ../../include/openssl/opensslconf.h
|
||||
sha_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
|
||||
sha_dgst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
|
||||
sha_dgst.o: ../../include/openssl/symhacks.h ../md32_common.h sha_dgst.c
|
||||
sha_dgst.o: sha_locl.h
|
||||
sha1dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
|
||||
sha1dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h
|
||||
sha1dgst.o: ../md32_common.h sha1dgst.c sha_locl.h
|
||||
sha_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
|
||||
sha_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h
|
||||
sha_dgst.o: ../md32_common.h sha_dgst.c sha_locl.h
|
||||
sha_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
|
||||
sha_one.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
sha_one.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
|
@ -1 +0,0 @@
|
||||
Makefile.save
|
@ -1,163 +0,0 @@
|
||||
#
|
||||
# SSLeay/fips/Makefile
|
||||
#
|
||||
|
||||
DIR= fips
|
||||
TOP= ..
|
||||
CC= cc
|
||||
INCLUDE= -I. -I$(TOP) -I../include
|
||||
INCLUDES= -I.. -I../.. -I../../include
|
||||
CFLAG= -g
|
||||
INSTALL_PREFIX=
|
||||
OPENSSLDIR= /usr/local/ssl
|
||||
INSTALLTOP= /usr/local/ssl
|
||||
MAKE= make -f Makefile.ssl
|
||||
MAKEDEPPROG= makedepend
|
||||
MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
|
||||
MAKEFILE= Makefile.ssl
|
||||
RM= rm -f
|
||||
AR= ar r
|
||||
|
||||
PEX_LIBS=
|
||||
EX_LIBS=
|
||||
|
||||
CFLAGS= $(INCLUDE) $(CFLAG)
|
||||
|
||||
|
||||
LIBS=
|
||||
|
||||
FDIRS=rand sha1 des aes dsa
|
||||
|
||||
GENERAL=Makefile README fips-lib.com install.com
|
||||
|
||||
LIB= $(TOP)/libcrypto.a
|
||||
SHARED_LIB= libcrypto$(SHLIB_EXT)
|
||||
LIBSRC=fips.c fips_err_wrapper.c
|
||||
LIBOBJ=fips.o fips_err_wrapper.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER=fips.h
|
||||
HEADER=$(EXHEADER) fips_err.c
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
@(cd ..; $(MAKE) DIRS=$(DIR) all)
|
||||
|
||||
all: check lib subdirs shared
|
||||
|
||||
check:
|
||||
TOP=`pwd`/$(TOP) ./fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
|
||||
|
||||
subdirs:
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making all in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 1; \
|
||||
done;
|
||||
|
||||
sub_target:
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making $(TARGET) in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' $(TARGET) ) || exit 1; \
|
||||
done;
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making 'files' in fips/$$i..." && \
|
||||
$(MAKE) PERL='${PERL}' files ); \
|
||||
done;
|
||||
|
||||
links:
|
||||
@$(TOP)/util/point.sh Makefile.ssl Makefile
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
|
||||
@for i in $(FDIRS); do \
|
||||
(cd $$i && echo "making links in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PERL='${PERL}' links ); \
|
||||
done;
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
shared:
|
||||
if [ -n "$(SHARED_LIBS)" ]; then \
|
||||
(cd ..; $(MAKE) $(SHARED_LIB)); \
|
||||
fi
|
||||
|
||||
libs:
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making libs in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' lib ); \
|
||||
done;
|
||||
|
||||
tests:
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making tests in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' tests ); \
|
||||
done;
|
||||
|
||||
install:
|
||||
@for i in $(EXHEADER) ;\
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making install in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' install ); \
|
||||
done;
|
||||
|
||||
lint:
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making lint in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' lint ); \
|
||||
done;
|
||||
|
||||
depend:
|
||||
if [ ! -f buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does not exist
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
|
||||
if [ ! -s buildinf.h ]; then rm buildinf.h; fi
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making depend in fips/$$i..." && \
|
||||
$(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ); \
|
||||
done;
|
||||
|
||||
clean:
|
||||
rm -f buildinf.h *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making clean in fips/$$i..." && \
|
||||
$(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' clean ); \
|
||||
done;
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
@for i in $(FDIRS) ;\
|
||||
do \
|
||||
(cd $$i && echo "making dclean in fips/$$i..." && \
|
||||
$(MAKE) PERL='${PERL}' CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' dclean ); \
|
||||
done;
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
fips.o: ../include/openssl/crypto.h ../include/openssl/des.h
|
||||
fips.o: ../include/openssl/des_old.h ../include/openssl/e_os2.h
|
||||
fips.o: ../include/openssl/fips.h ../include/openssl/fips_rand.h
|
||||
fips.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||
fips.o: ../include/openssl/ossl_typ.h ../include/openssl/rand.h
|
||||
fips.o: ../include/openssl/safestack.h ../include/openssl/stack.h
|
||||
fips.o: ../include/openssl/symhacks.h ../include/openssl/ui.h
|
||||
fips.o: ../include/openssl/ui_compat.h fips.c
|
||||
fips_err_wrapper.o: fips_err_wrapper.c
|
@ -1,4 +0,0 @@
|
||||
lib
|
||||
fips_aesavs
|
||||
testlist
|
||||
Makefile.save
|
@ -1,117 +0,0 @@
|
||||
#
|
||||
# SSLeay/fips/aes/Makefile
|
||||
#
|
||||
|
||||
DIR= aes
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
INSTALL_PREFIX=
|
||||
OPENSSLDIR= /usr/local/ssl
|
||||
INSTALLTOP=/usr/local/ssl
|
||||
MAKE= make -f Makefile.ssl
|
||||
MAKEDEPPROG= makedepend
|
||||
MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
|
||||
MAKEFILE= Makefile.ssl
|
||||
AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST=fips_aesavs.c fips_aes_data
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC=fips_aes_core.c
|
||||
LIBOBJ=fips_aes_core.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER=
|
||||
HEADER= $(EXHEADER) fips_aes_locl.h
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
|
||||
|
||||
all: check lib fips_aesavs
|
||||
|
||||
check:
|
||||
TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(TOP)/util/point.sh Makefile.ssl Makefile
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@for i in $(EXHEADER) ; \
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
tags:
|
||||
ctags $(SRC)
|
||||
|
||||
tests:
|
||||
|
||||
fips_aesavs: fips_aesavs.o ../../libcrypto.a
|
||||
$(CC) $(CFLAGS) -o fips_aesavs fips_aesavs.o ../../libcrypto.a
|
||||
|
||||
fips_test: top
|
||||
find ../testvectors/aes/req -name '*.req' > testlist
|
||||
-rm -rf ../testvectors/aes/rsp
|
||||
mkdir ../testvectors/aes/rsp
|
||||
./fips_aesavs -d testlist
|
||||
|
||||
lint:
|
||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||
|
||||
depend:
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) \
|
||||
$(LIBSRC) fips_aesavs.c
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
fips_aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h
|
||||
fips_aes_core.o: ../../include/openssl/opensslconf.h fips_aes_core.c
|
||||
fips_aes_core.o: fips_aes_locl.h
|
||||
fips_aesavs.o: ../../include/openssl/aes.h ../../include/openssl/asn1.h
|
||||
fips_aesavs.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
|
||||
fips_aesavs.o: ../../include/openssl/bn.h ../../include/openssl/cast.h
|
||||
fips_aesavs.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||
fips_aesavs.o: ../../include/openssl/des_old.h ../../include/openssl/dh.h
|
||||
fips_aesavs.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
|
||||
fips_aesavs.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
fips_aesavs.o: ../../include/openssl/fips.h ../../include/openssl/idea.h
|
||||
fips_aesavs.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
|
||||
fips_aesavs.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
|
||||
fips_aesavs.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
|
||||
fips_aesavs.o: ../../include/openssl/objects.h
|
||||
fips_aesavs.o: ../../include/openssl/opensslconf.h
|
||||
fips_aesavs.o: ../../include/openssl/opensslv.h
|
||||
fips_aesavs.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rc2.h
|
||||
fips_aesavs.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
|
||||
fips_aesavs.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
|
||||
fips_aesavs.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
fips_aesavs.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
fips_aesavs.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
|
||||
fips_aesavs.o: fips_aesavs.c
|
@ -1,2 +0,0 @@
|
||||
SHA1(fips_aes_core.c)= 5298df7807877eed470a1ee5f8331fc0876689da
|
||||
SHA1(fips_aes_locl.h)= a3c01d9a4f9d5211e9e785852f6f1a2febfd73b6
|
File diff suppressed because it is too large
Load Diff
@ -1,85 +0,0 @@
|
||||
/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef HEADER_AES_LOCL_H
|
||||
#define HEADER_AES_LOCL_H
|
||||
|
||||
#include <openssl/e_os2.h>
|
||||
|
||||
#ifdef OPENSSL_NO_AES
|
||||
#error AES is disabled.
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE)
|
||||
# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
|
||||
# define GETU32(p) SWAP(*((u32 *)(p)))
|
||||
# define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
|
||||
#else
|
||||
# define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] << 8) ^ ((u32)(pt)[3]))
|
||||
# define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >> 8); (ct)[3] = (u8)(st); }
|
||||
#endif
|
||||
|
||||
typedef unsigned long u32;
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned char u8;
|
||||
|
||||
#define MAXKC (256/32)
|
||||
#define MAXKB (256/8)
|
||||
#define MAXNR 14
|
||||
|
||||
/* This controls loop-unrolling in aes_core.c */
|
||||
#undef FULL_UNROLL
|
||||
|
||||
#endif /* !HEADER_AES_LOCL_H */
|
@ -1,950 +0,0 @@
|
||||
/*---------------------------------------------
|
||||
NIST AES Algorithm Validation Suite
|
||||
Test Program
|
||||
|
||||
Copyright
|
||||
V-ONE Corporation
|
||||
20250 Century Blvd, Suite 300
|
||||
Germantown, MD 20874
|
||||
U.S.A.
|
||||
----------------------------------------------*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <openssl/aes.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/fips.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
#define AES_BLOCK_SIZE 16
|
||||
|
||||
#define VERBOSE 0
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
int AESTest(EVP_CIPHER_CTX *ctx,
|
||||
char *amode, int akeysz, unsigned char *aKey,
|
||||
unsigned char *iVec,
|
||||
int dir, /* 0 = decrypt, 1 = encrypt */
|
||||
unsigned char *plaintext, unsigned char *ciphertext, int len)
|
||||
{
|
||||
const EVP_CIPHER *cipher = NULL;
|
||||
int ret = 1;
|
||||
int kt = 0;
|
||||
|
||||
if (ctx)
|
||||
memset(ctx, 0, sizeof(EVP_CIPHER_CTX));
|
||||
|
||||
if (strcasecmp(amode, "CBC") == 0)
|
||||
kt = 1000;
|
||||
else if (strcasecmp(amode, "ECB") == 0)
|
||||
kt = 2000;
|
||||
else if (strcasecmp(amode, "CFB128") == 0)
|
||||
kt = 3000;
|
||||
else if (strncasecmp(amode, "OFB", 3) == 0)
|
||||
kt = 4000;
|
||||
else if(!strcasecmp(amode,"CFB1"))
|
||||
kt=5000;
|
||||
else if(!strcasecmp(amode,"CFB8"))
|
||||
kt=6000;
|
||||
else
|
||||
{
|
||||
printf("Unknown mode: %s\n", amode);
|
||||
exit(1);
|
||||
}
|
||||
if (ret)
|
||||
{
|
||||
if ((akeysz != 128) && (akeysz != 192) && (akeysz != 256))
|
||||
{
|
||||
printf("Invalid key size: %d\n", akeysz);
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
kt += akeysz;
|
||||
switch (kt)
|
||||
{
|
||||
case 1128: /* CBC 128 */
|
||||
cipher = EVP_aes_128_cbc();
|
||||
break;
|
||||
case 1192: /* CBC 192 */
|
||||
cipher = EVP_aes_192_cbc();
|
||||
break;
|
||||
case 1256: /* CBC 256 */
|
||||
cipher = EVP_aes_256_cbc();
|
||||
break;
|
||||
case 2128: /* ECB 128 */
|
||||
cipher = EVP_aes_128_ecb();
|
||||
break;
|
||||
case 2192: /* ECB 192 */
|
||||
cipher = EVP_aes_192_ecb();
|
||||
break;
|
||||
case 2256: /* ECB 256 */
|
||||
cipher = EVP_aes_256_ecb();
|
||||
break;
|
||||
case 3128: /* CFB 128 */
|
||||
cipher = EVP_aes_128_cfb();
|
||||
break;
|
||||
case 3192: /* CFB 192 */
|
||||
cipher = EVP_aes_192_cfb();
|
||||
break;
|
||||
case 3256: /* CFB 256 */
|
||||
cipher = EVP_aes_256_cfb();
|
||||
break;
|
||||
case 4128: /* OFB 128 */
|
||||
cipher = EVP_aes_128_ofb();
|
||||
break;
|
||||
case 4192: /* OFB 192 */
|
||||
cipher = EVP_aes_192_ofb();
|
||||
break;
|
||||
case 4256: /* OFB 256 */
|
||||
cipher = EVP_aes_256_ofb();
|
||||
break;
|
||||
case 5128:
|
||||
cipher=EVP_aes_128_cfb1();
|
||||
break;
|
||||
case 5192:
|
||||
cipher=EVP_aes_192_cfb1();
|
||||
break;
|
||||
case 5256:
|
||||
cipher=EVP_aes_256_cfb1();
|
||||
break;
|
||||
case 6128:
|
||||
cipher=EVP_aes_128_cfb8();
|
||||
break;
|
||||
case 6192:
|
||||
cipher=EVP_aes_192_cfb8();
|
||||
break;
|
||||
case 6256:
|
||||
cipher=EVP_aes_256_cfb8();
|
||||
break;
|
||||
default:
|
||||
printf("Didn't handle mode %d\n",kt);
|
||||
exit(1);
|
||||
}
|
||||
if (dir)
|
||||
{ /* encrypt */
|
||||
if(!EVP_CipherInit(ctx, cipher, aKey, iVec, AES_ENCRYPT))
|
||||
{
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
EVP_Cipher(ctx, ciphertext, (unsigned char*)plaintext, len);
|
||||
}
|
||||
else
|
||||
{ /* decrypt */
|
||||
if(!EVP_CipherInit(ctx, cipher, aKey, iVec, AES_DECRYPT))
|
||||
{
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(1);
|
||||
}
|
||||
EVP_Cipher(ctx, (unsigned char*)plaintext, ciphertext, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
int hex2bin(char *in, int len, unsigned char *out)
|
||||
{
|
||||
int n1, n2;
|
||||
unsigned char ch;
|
||||
|
||||
for (n1 = 0, n2 = 0; n1 < len; )
|
||||
{ /* first byte */
|
||||
if ((in[n1] >= '0') && (in[n1] <= '9'))
|
||||
ch = in[n1++] - '0';
|
||||
else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
|
||||
ch = in[n1++] - 'A' + 10;
|
||||
else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
|
||||
ch = in[n1++] - 'a' + 10;
|
||||
else
|
||||
return -1;
|
||||
if(len == 1)
|
||||
{
|
||||
out[n2++]=ch;
|
||||
break;
|
||||
}
|
||||
out[n2] = ch << 4;
|
||||
/* second byte */
|
||||
if ((in[n1] >= '0') && (in[n1] <= '9'))
|
||||
ch = in[n1++] - '0';
|
||||
else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
|
||||
ch = in[n1++] - 'A' + 10;
|
||||
else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
|
||||
ch = in[n1++] - 'a' + 10;
|
||||
else
|
||||
return -1;
|
||||
out[n2++] |= ch;
|
||||
}
|
||||
return n2;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
int bin2hex(unsigned char *in, int len, char *out)
|
||||
{
|
||||
int n1, n2;
|
||||
unsigned char ch;
|
||||
|
||||
for (n1 = 0, n2 = 0; n1 < len; ++n1)
|
||||
{
|
||||
/* first nibble */
|
||||
ch = in[n1] >> 4;
|
||||
if (ch <= 0x09)
|
||||
out[n2++] = ch + '0';
|
||||
else
|
||||
out[n2++] = ch - 10 + 'a';
|
||||
/* second nibble */
|
||||
ch = in[n1] & 0x0f;
|
||||
if (ch <= 0x09)
|
||||
out[n2++] = ch + '0';
|
||||
else
|
||||
out[n2++] = ch - 10 + 'a';
|
||||
}
|
||||
return n2;
|
||||
}
|
||||
|
||||
/* NB: this return the number of _bits_ read */
|
||||
int bint2bin(const char *in, int len, unsigned char *out)
|
||||
{
|
||||
int n;
|
||||
|
||||
memset(out,0,len);
|
||||
for(n=0 ; n < len ; ++n)
|
||||
if(in[n] == '1')
|
||||
out[n/8]|=(0x80 >> (n%8));
|
||||
return len;
|
||||
}
|
||||
|
||||
int bin2bint(const unsigned char *in,int len,char *out)
|
||||
{
|
||||
int n;
|
||||
|
||||
for(n=0 ; n < len ; ++n)
|
||||
out[n]=(in[n/8]&(0x80 >> (n%8))) ? '1' : '0';
|
||||
return n;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
void PrintValue(char *tag, unsigned char *val, int len)
|
||||
{
|
||||
#if VERBOSE
|
||||
char obuf[2048];
|
||||
int olen;
|
||||
olen = bin2hex(val, len, obuf);
|
||||
printf("%s = %.*s\n", tag, olen, obuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
void OutputValue(char *tag, unsigned char *val, int len, FILE *rfp,int bitmode)
|
||||
{
|
||||
char obuf[2048];
|
||||
int olen;
|
||||
|
||||
if(bitmode)
|
||||
olen=bin2bint(val,len,obuf);
|
||||
else
|
||||
olen=bin2hex(val,len,obuf);
|
||||
|
||||
fprintf(rfp, "%s = %.*s\n", tag, olen, obuf);
|
||||
#if VERBOSE
|
||||
printf("%s = %.*s\n", tag, olen, obuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
char *t_tag[2] = {"PLAINTEXT", "CIPHERTEXT"};
|
||||
char *t_mode[6] = {"CBC","ECB","OFB","CFB1","CFB8","CFB128"};
|
||||
enum Mode {CBC, ECB, OFB, CFB1, CFB8, CFB128};
|
||||
enum XCrypt {XDECRYPT, XENCRYPT};
|
||||
|
||||
/*=============================*/
|
||||
/* Monte Carlo Tests */
|
||||
/*-----------------------------*/
|
||||
|
||||
/*#define gb(a,b) (((a)[(b)/8] >> ((b)%8))&1)*/
|
||||
/*#define sb(a,b,v) ((a)[(b)/8]=((a)[(b)/8]&~(1 << ((b)%8)))|(!!(v) << ((b)%8)))*/
|
||||
|
||||
#define gb(a,b) (((a)[(b)/8] >> (7-(b)%8))&1)
|
||||
#define sb(a,b,v) ((a)[(b)/8]=((a)[(b)/8]&~(1 << (7-(b)%8)))|(!!(v) << (7-(b)%8)))
|
||||
|
||||
int do_mct(char *amode,
|
||||
int akeysz, unsigned char *aKey,unsigned char *iVec,
|
||||
int dir, unsigned char *text, int len,
|
||||
FILE *rfp)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned char key[101][32];
|
||||
unsigned char iv[101][AES_BLOCK_SIZE];
|
||||
unsigned char ptext[1001][32];
|
||||
unsigned char ctext[1001][32];
|
||||
unsigned char ciphertext[64+4];
|
||||
int i, j, n, n1, n2;
|
||||
int imode = 0, nkeysz = akeysz/8;
|
||||
EVP_CIPHER_CTX ctx;
|
||||
|
||||
if (len > 32)
|
||||
{
|
||||
printf("\n>>>> Length exceeds 32 for %s %d <<<<\n\n",
|
||||
amode, akeysz);
|
||||
return -1;
|
||||
}
|
||||
for (imode = 0; imode < 6; ++imode)
|
||||
if (strcmp(amode, t_mode[imode]) == 0)
|
||||
break;
|
||||
if (imode == 6)
|
||||
{
|
||||
printf("Unrecognized mode: %s\n", amode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memcpy(key[0], aKey, nkeysz);
|
||||
if (iVec)
|
||||
memcpy(iv[0], iVec, AES_BLOCK_SIZE);
|
||||
if (dir == XENCRYPT)
|
||||
memcpy(ptext[0], text, len);
|
||||
else
|
||||
memcpy(ctext[0], text, len);
|
||||
for (i = 0; i < 100; ++i)
|
||||
{
|
||||
/* printf("Iteration %d\n", i); */
|
||||
if (i > 0)
|
||||
{
|
||||
OutputValue("KEY",key[i],nkeysz,rfp,0);
|
||||
if (imode != ECB) /* ECB */
|
||||
OutputValue("IV",iv[i],AES_BLOCK_SIZE,rfp,0);
|
||||
/* Output Ciphertext | Plaintext */
|
||||
OutputValue(t_tag[dir^1],dir ? ptext[0] : ctext[0],len,rfp,
|
||||
imode == CFB1);
|
||||
}
|
||||
for (j = 0; j < 1000; ++j)
|
||||
{
|
||||
switch (imode)
|
||||
{
|
||||
case ECB:
|
||||
if (j == 0)
|
||||
{ /* set up encryption */
|
||||
ret = AESTest(&ctx, amode, akeysz, key[i], NULL,
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
ptext[j], ctext[j], len);
|
||||
if (dir == XENCRYPT)
|
||||
memcpy(ptext[j+1], ctext[j], len);
|
||||
else
|
||||
memcpy(ctext[j+1], ptext[j], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dir == XENCRYPT)
|
||||
{
|
||||
EVP_Cipher(&ctx, ctext[j], ptext[j], len);
|
||||
memcpy(ptext[j+1], ctext[j], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
EVP_Cipher(&ctx, ptext[j], ctext[j], len);
|
||||
memcpy(ctext[j+1], ptext[j], len);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CBC:
|
||||
case OFB:
|
||||
case CFB128:
|
||||
if (j == 0)
|
||||
{
|
||||
ret = AESTest(&ctx, amode, akeysz, key[i], iv[i],
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
ptext[j], ctext[j], len);
|
||||
if (dir == XENCRYPT)
|
||||
memcpy(ptext[j+1], iv[i], len);
|
||||
else
|
||||
memcpy(ctext[j+1], iv[i], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dir == XENCRYPT)
|
||||
{
|
||||
EVP_Cipher(&ctx, ctext[j], ptext[j], len);
|
||||
memcpy(ptext[j+1], ctext[j-1], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
EVP_Cipher(&ctx, ptext[j], ctext[j], len);
|
||||
memcpy(ctext[j+1], ptext[j-1], len);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CFB8:
|
||||
if (j == 0)
|
||||
{
|
||||
ret = AESTest(&ctx, amode, akeysz, key[i], iv[i],
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
ptext[j], ctext[j], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dir == XENCRYPT)
|
||||
EVP_Cipher(&ctx, ctext[j], ptext[j], len);
|
||||
else
|
||||
EVP_Cipher(&ctx, ptext[j], ctext[j], len);
|
||||
}
|
||||
if (dir == XENCRYPT)
|
||||
{
|
||||
if (j < 16)
|
||||
memcpy(ptext[j+1], &iv[i][j], len);
|
||||
else
|
||||
memcpy(ptext[j+1], ctext[j-16], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (j < 16)
|
||||
memcpy(ctext[j+1], &iv[i][j], len);
|
||||
else
|
||||
memcpy(ctext[j+1], ptext[j-16], len);
|
||||
}
|
||||
break;
|
||||
|
||||
case CFB1:
|
||||
if(j == 0)
|
||||
{
|
||||
/* compensate for wrong endianness of input file */
|
||||
if(i == 0)
|
||||
ptext[0][0]<<=7;
|
||||
ret=AESTest(&ctx,amode,akeysz,key[i],iv[i],dir,
|
||||
ptext[j], ctext[j], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dir == XENCRYPT)
|
||||
EVP_Cipher(&ctx, ctext[j], ptext[j], len);
|
||||
else
|
||||
EVP_Cipher(&ctx, ptext[j], ctext[j], len);
|
||||
|
||||
}
|
||||
if(dir == XENCRYPT)
|
||||
{
|
||||
if(j < 128)
|
||||
sb(ptext[j+1],0,gb(iv[i],j));
|
||||
else
|
||||
sb(ptext[j+1],0,gb(ctext[j-128],0));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(j < 128)
|
||||
sb(ctext[j+1],0,gb(iv[i],j));
|
||||
else
|
||||
sb(ctext[j+1],0,gb(ptext[j-128],0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
--j; /* reset to last of range */
|
||||
/* Output Ciphertext | Plaintext */
|
||||
OutputValue(t_tag[dir],dir ? ctext[j] : ptext[j],len,rfp,
|
||||
imode == CFB1);
|
||||
fprintf(rfp, "\n"); /* add separator */
|
||||
|
||||
/* Compute next KEY */
|
||||
if (dir == XENCRYPT)
|
||||
{
|
||||
if (imode == CFB8)
|
||||
{ /* ct = CT[j-15] || CT[j-14] || ... || CT[j] */
|
||||
for (n1 = 0, n2 = nkeysz-1; n1 < nkeysz; ++n1, --n2)
|
||||
ciphertext[n1] = ctext[j-n2][0];
|
||||
}
|
||||
else if(imode == CFB1)
|
||||
{
|
||||
for(n1=0,n2=akeysz-1 ; n1 < akeysz ; ++n1,--n2)
|
||||
sb(ciphertext,n1,gb(ctext[j-n2],0));
|
||||
}
|
||||
else
|
||||
switch (akeysz)
|
||||
{
|
||||
case 128:
|
||||
memcpy(ciphertext, ctext[j], 16);
|
||||
break;
|
||||
case 192:
|
||||
memcpy(ciphertext, ctext[j-1]+8, 8);
|
||||
memcpy(ciphertext+8, ctext[j], 16);
|
||||
break;
|
||||
case 256:
|
||||
memcpy(ciphertext, ctext[j-1], 16);
|
||||
memcpy(ciphertext+16, ctext[j], 16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (imode == CFB8)
|
||||
{ /* ct = CT[j-15] || CT[j-14] || ... || CT[j] */
|
||||
for (n1 = 0, n2 = nkeysz-1; n1 < nkeysz; ++n1, --n2)
|
||||
ciphertext[n1] = ptext[j-n2][0];
|
||||
}
|
||||
else if(imode == CFB1)
|
||||
{
|
||||
for(n1=0,n2=akeysz-1 ; n1 < akeysz ; ++n1,--n2)
|
||||
sb(ciphertext,n1,gb(ptext[j-n2],0));
|
||||
}
|
||||
else
|
||||
switch (akeysz)
|
||||
{
|
||||
case 128:
|
||||
memcpy(ciphertext, ptext[j], 16);
|
||||
break;
|
||||
case 192:
|
||||
memcpy(ciphertext, ptext[j-1]+8, 8);
|
||||
memcpy(ciphertext+8, ptext[j], 16);
|
||||
break;
|
||||
case 256:
|
||||
memcpy(ciphertext, ptext[j-1], 16);
|
||||
memcpy(ciphertext+16, ptext[j], 16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Compute next key: Key[i+1] = Key[i] xor ct */
|
||||
for (n = 0; n < nkeysz; ++n)
|
||||
key[i+1][n] = key[i][n] ^ ciphertext[n];
|
||||
|
||||
/* Compute next IV and text */
|
||||
if (dir == XENCRYPT)
|
||||
{
|
||||
switch (imode)
|
||||
{
|
||||
case ECB:
|
||||
memcpy(ptext[0], ctext[j], AES_BLOCK_SIZE);
|
||||
break;
|
||||
case CBC:
|
||||
case OFB:
|
||||
case CFB128:
|
||||
memcpy(iv[i+1], ctext[j], AES_BLOCK_SIZE);
|
||||
memcpy(ptext[0], ctext[j-1], AES_BLOCK_SIZE);
|
||||
break;
|
||||
case CFB8:
|
||||
/* IV[i+1] = ct */
|
||||
for (n1 = 0, n2 = 15; n1 < 16; ++n1, --n2)
|
||||
iv[i+1][n1] = ctext[j-n2][0];
|
||||
ptext[0][0] = ctext[j-16][0];
|
||||
break;
|
||||
case CFB1:
|
||||
for(n1=0,n2=127 ; n1 < 128 ; ++n1,--n2)
|
||||
sb(iv[i+1],n1,gb(ctext[j-n2],0));
|
||||
ptext[0][0]=ctext[j-128][0]&0x80;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (imode)
|
||||
{
|
||||
case ECB:
|
||||
memcpy(ctext[0], ptext[j], AES_BLOCK_SIZE);
|
||||
break;
|
||||
case CBC:
|
||||
case OFB:
|
||||
case CFB128:
|
||||
memcpy(iv[i+1], ptext[j], AES_BLOCK_SIZE);
|
||||
memcpy(ctext[0], ptext[j-1], AES_BLOCK_SIZE);
|
||||
break;
|
||||
case CFB8:
|
||||
for (n1 = 0, n2 = 15; n < 16; ++n1, --n2)
|
||||
iv[i+1][n1] = ptext[j-n2][0];
|
||||
ctext[0][0] = ptext[j-16][0];
|
||||
break;
|
||||
case CFB1:
|
||||
for(n1=0,n2=127 ; n1 < 128 ; ++n1,--n2)
|
||||
sb(iv[i+1],n1,gb(ptext[j-n2],0));
|
||||
ctext[0][0]=ptext[j-128][0]&0x80;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*================================================*/
|
||||
/*----------------------------
|
||||
# Config info for v-one
|
||||
# AESVS MMT test data for ECB
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 256
|
||||
# Fri Aug 30 04:07:22 PM
|
||||
----------------------------*/
|
||||
|
||||
int proc_file(char *rqfile)
|
||||
{
|
||||
char afn[256], rfn[256];
|
||||
FILE *afp = NULL, *rfp = NULL;
|
||||
char ibuf[2048];
|
||||
int ilen, len, ret = 0;
|
||||
char algo[8] = "";
|
||||
char amode[8] = "";
|
||||
char atest[8] = "";
|
||||
int akeysz = 0;
|
||||
unsigned char iVec[20], aKey[40];
|
||||
int dir = -1, err = 0, step = 0;
|
||||
unsigned char plaintext[2048];
|
||||
unsigned char ciphertext[2048];
|
||||
char *rp;
|
||||
EVP_CIPHER_CTX ctx;
|
||||
|
||||
if (!rqfile || !(*rqfile))
|
||||
{
|
||||
printf("No req file\n");
|
||||
return -1;
|
||||
}
|
||||
strcpy(afn, rqfile);
|
||||
|
||||
if ((afp = fopen(afn, "r")) == NULL)
|
||||
{
|
||||
printf("Cannot open file: %s, %s\n",
|
||||
afn, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
strcpy(rfn,afn);
|
||||
rp=strstr(rfn,"req/");
|
||||
assert(rp);
|
||||
memcpy(rp,"rsp",3);
|
||||
rp = strstr(rfn, ".req");
|
||||
memcpy(rp, ".rsp", 4);
|
||||
if ((rfp = fopen(rfn, "w")) == NULL)
|
||||
{
|
||||
printf("Cannot open file: %s, %s\n",
|
||||
rfn, strerror(errno));
|
||||
fclose(afp);
|
||||
afp = NULL;
|
||||
return -1;
|
||||
}
|
||||
while (!err && (fgets(ibuf, sizeof(ibuf), afp)) != NULL)
|
||||
{
|
||||
ilen = strlen(ibuf);
|
||||
/* printf("step=%d ibuf=%s",step,ibuf); */
|
||||
switch (step)
|
||||
{
|
||||
case 0: /* read preamble */
|
||||
if (ibuf[0] == '\n')
|
||||
{ /* end of preamble */
|
||||
if ((*algo == '\0') ||
|
||||
(*amode == '\0') ||
|
||||
(akeysz == 0))
|
||||
{
|
||||
printf("Missing Algorithm, Mode or KeySize (%s/%s/%d)\n",
|
||||
algo,amode,akeysz);
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs(ibuf, rfp);
|
||||
++ step;
|
||||
}
|
||||
}
|
||||
else if (ibuf[0] != '#')
|
||||
{
|
||||
printf("Invalid preamble item: %s\n", ibuf);
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{ /* process preamble */
|
||||
char *xp, *pp = ibuf+2;
|
||||
int n;
|
||||
if (akeysz)
|
||||
{ /* insert current time & date */
|
||||
time_t rtim = time(0);
|
||||
fprintf(rfp, "# %s", ctime(&rtim));
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs(ibuf, rfp);
|
||||
if (strncmp(pp, "AESVS ", 6) == 0)
|
||||
{
|
||||
strcpy(algo, "AES");
|
||||
/* get test type */
|
||||
pp += 6;
|
||||
xp = strchr(pp, ' ');
|
||||
n = xp-pp;
|
||||
strncpy(atest, pp, n);
|
||||
atest[n] = '\0';
|
||||
/* get mode */
|
||||
xp = strrchr(pp, ' '); /* get mode" */
|
||||
n = strlen(xp+1)-1;
|
||||
strncpy(amode, xp+1, n);
|
||||
amode[n] = '\0';
|
||||
/* amode[3] = '\0'; */
|
||||
printf("Test = %s, Mode = %s\n", atest, amode);
|
||||
}
|
||||
else if (strncasecmp(pp, "Key Length : ", 13) == 0)
|
||||
{
|
||||
akeysz = atoi(pp+13);
|
||||
printf("Key size = %d\n", akeysz);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: /* [ENCRYPT] | [DECRYPT] */
|
||||
if (ibuf[0] == '[')
|
||||
{
|
||||
fputs(ibuf, rfp);
|
||||
++step;
|
||||
if (strncasecmp(ibuf, "[ENCRYPT]", 9) == 0)
|
||||
dir = 1;
|
||||
else if (strncasecmp(ibuf, "[DECRYPT]", 9) == 0)
|
||||
dir = 0;
|
||||
else
|
||||
{
|
||||
printf("Invalid keyword: %s\n", ibuf);
|
||||
err = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (dir == -1)
|
||||
{
|
||||
err = 1;
|
||||
printf("Missing ENCRYPT/DECRYPT keyword\n");
|
||||
break;
|
||||
}
|
||||
else
|
||||
step = 2;
|
||||
|
||||
case 2: /* KEY = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if(*ibuf == '\n')
|
||||
break;
|
||||
if(!strncasecmp(ibuf,"COUNT = ",8))
|
||||
break;
|
||||
|
||||
if (strncasecmp(ibuf, "KEY = ", 6) != 0)
|
||||
{
|
||||
printf("Missing KEY\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = hex2bin((char*)ibuf+6, strlen(ibuf+6)-1, aKey);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid KEY\n");
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
PrintValue("KEY", aKey, len);
|
||||
if (strcmp(amode, "ECB") == 0)
|
||||
{
|
||||
memset(iVec, 0, sizeof(iVec));
|
||||
step = (dir)? 4: 5; /* no ivec for ECB */
|
||||
}
|
||||
else
|
||||
++step;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: /* IV = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if (strncasecmp(ibuf, "IV = ", 5) != 0)
|
||||
{
|
||||
printf("Missing IV\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = hex2bin((char*)ibuf+5, strlen(ibuf+5)-1, iVec);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid IV\n");
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
PrintValue("IV", iVec, len);
|
||||
step = (dir)? 4: 5;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: /* PLAINTEXT = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if (strncasecmp(ibuf, "PLAINTEXT = ", 12) != 0)
|
||||
{
|
||||
printf("Missing PLAINTEXT\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
int nn = strlen(ibuf+12);
|
||||
if(!strcmp(amode,"CFB1"))
|
||||
len=bint2bin(ibuf+12,nn-1,plaintext);
|
||||
else
|
||||
len=hex2bin(ibuf+12, nn-1,plaintext);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid PLAINTEXT: %s", ibuf+12);
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
if (len >= sizeof(plaintext))
|
||||
{
|
||||
printf("Buffer overflow\n");
|
||||
}
|
||||
PrintValue("PLAINTEXT", (unsigned char*)plaintext, len);
|
||||
if (strcmp(atest, "MCT") == 0) /* Monte Carlo Test */
|
||||
{
|
||||
if(do_mct(amode, akeysz, aKey, iVec,
|
||||
dir, (unsigned char*)plaintext, len,
|
||||
rfp) < 0)
|
||||
exit(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = AESTest(&ctx, amode, akeysz, aKey, iVec,
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
plaintext, ciphertext, len);
|
||||
OutputValue("CIPHERTEXT",ciphertext,len,rfp,
|
||||
!strcmp(amode,"CFB1"));
|
||||
}
|
||||
step = 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: /* CIPHERTEXT = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if (strncasecmp(ibuf, "CIPHERTEXT = ", 13) != 0)
|
||||
{
|
||||
printf("Missing KEY\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!strcmp(amode,"CFB1"))
|
||||
len=bint2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
|
||||
else
|
||||
len = hex2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid CIPHERTEXT\n");
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
|
||||
PrintValue("CIPHERTEXT", ciphertext, len);
|
||||
if (strcmp(atest, "MCT") == 0) /* Monte Carlo Test */
|
||||
{
|
||||
do_mct(amode, akeysz, aKey, iVec,
|
||||
dir, ciphertext, len, rfp);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = AESTest(&ctx, amode, akeysz, aKey, iVec,
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
plaintext, ciphertext, len);
|
||||
OutputValue("PLAINTEXT",(unsigned char *)plaintext,len,rfp,
|
||||
!strcmp(amode,"CFB1"));
|
||||
}
|
||||
step = 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
if (ibuf[0] != '\n')
|
||||
{
|
||||
err = 1;
|
||||
printf("Missing terminator\n");
|
||||
}
|
||||
else if (strcmp(atest, "MCT") != 0)
|
||||
{ /* MCT already added terminating nl */
|
||||
fputs(ibuf, rfp);
|
||||
}
|
||||
step = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (rfp)
|
||||
fclose(rfp);
|
||||
if (afp)
|
||||
fclose(afp);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
Processes either a single file or
|
||||
a set of files whose names are passed in a file.
|
||||
A single file is specified as:
|
||||
aes_test -f xxx.req
|
||||
A set of files is specified as:
|
||||
aes_test -d xxxxx.xxx
|
||||
The default is: -d req.txt
|
||||
--------------------------------------------------*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char *rqlist = "req.txt";
|
||||
FILE *fp = NULL;
|
||||
char fn[250] = "", rfn[256] = "";
|
||||
int f_opt = 0, d_opt = 1;
|
||||
|
||||
#ifdef FIPS
|
||||
FIPS_mode_set(1);
|
||||
#endif
|
||||
ERR_load_crypto_strings();
|
||||
if (argc > 1)
|
||||
{
|
||||
if (strcasecmp(argv[1], "-d") == 0)
|
||||
{
|
||||
d_opt = 1;
|
||||
}
|
||||
else if (strcasecmp(argv[1], "-f") == 0)
|
||||
{
|
||||
f_opt = 1;
|
||||
d_opt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Invalid parameter: %s\n", argv[1]);
|
||||
return 0;
|
||||
}
|
||||
if (argc < 3)
|
||||
{
|
||||
printf("Missing parameter\n");
|
||||
return 0;
|
||||
}
|
||||
if (d_opt)
|
||||
rqlist = argv[2];
|
||||
else
|
||||
strcpy(fn, argv[2]);
|
||||
}
|
||||
if (d_opt)
|
||||
{ /* list of files (directory) */
|
||||
if (!(fp = fopen(rqlist, "r")))
|
||||
{
|
||||
printf("Cannot open req list file\n");
|
||||
return -1;
|
||||
}
|
||||
while (fgets(fn, sizeof(fn), fp))
|
||||
{
|
||||
strtok(fn, "\r\n");
|
||||
strcpy(rfn, fn);
|
||||
printf("Processing: %s\n", rfn);
|
||||
if (proc_file(rfn))
|
||||
{
|
||||
printf(">>> Processing failed for: %s <<<\n", rfn);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
else /* single file */
|
||||
{
|
||||
printf("Processing: %s\n", fn);
|
||||
if (proc_file(fn))
|
||||
{
|
||||
printf(">>> Processing failed for: %s <<<\n", fn);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
lib
|
||||
fips_desmovs
|
||||
testlist
|
@ -1,105 +0,0 @@
|
||||
#
|
||||
# SSLeay/fips/des/Makefile
|
||||
#
|
||||
|
||||
DIR= des
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
INSTALL_PREFIX=
|
||||
OPENSSLDIR= /usr/local/ssl
|
||||
INSTALLTOP=/usr/local/ssl
|
||||
MAKE= make -f Makefile.ssl
|
||||
MAKEDEPPROG= makedepend
|
||||
MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
|
||||
MAKEFILE= Makefile.ssl
|
||||
AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG) -g
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC=fips_des_enc.c
|
||||
LIBOBJ=fips_des_enc.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER=
|
||||
HEADER= $(EXHEADER) fips_des_locl.h
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
|
||||
|
||||
all: check lib
|
||||
|
||||
check:
|
||||
TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(TOP)/util/point.sh Makefile.ssl Makefile
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@for i in $(EXHEADER) ; \
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
tags:
|
||||
ctags $(SRC)
|
||||
|
||||
tests:
|
||||
|
||||
top_fips_desmovs:
|
||||
(cd ../..; $(MAKE) DIRS=fips FDIRS=$(DIR) TARGET=fips_desmovs sub_target)
|
||||
|
||||
|
||||
fips_desmovs: fips_desmovs.o ../../libcrypto.a
|
||||
$(CC) $(CFLAGS) -o fips_desmovs fips_desmovs.o ../../libcrypto.a
|
||||
|
||||
fips_test: top_fips_desmovs
|
||||
find ../testvectors/des/req -name '*.req' > testlist
|
||||
-rm -rf ../testvectors/des/rsp
|
||||
mkdir ../testvectors/des/rsp
|
||||
./fips_desmovs -d testlist
|
||||
|
||||
lint:
|
||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||
|
||||
depend:
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) \
|
||||
$(LIBSRC) fips_aesavs.c
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
fips_des_enc.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
|
||||
fips_des_enc.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
|
||||
fips_des_enc.o: ../../include/openssl/opensslconf.h
|
||||
fips_des_enc.o: ../../include/openssl/opensslv.h
|
||||
fips_des_enc.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
|
||||
fips_des_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
|
||||
fips_des_enc.o: ../../include/openssl/ui_compat.h fips_des_enc.c
|
||||
fips_des_enc.o: fips_des_locl.h
|
@ -1,2 +0,0 @@
|
||||
SHA1(fips_des_enc.c)= 1661dde9506404376f9565d8c6f49c205a468995
|
||||
SHA1(fips_des_locl.h)= 5e5128f074485e72d6fdee00d22d46a694bd5abe
|
@ -1,297 +0,0 @@
|
||||
/* crypto/des/des_enc.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* 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 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#include "fips_des_locl.h"
|
||||
|
||||
#ifdef FIPS
|
||||
|
||||
void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc)
|
||||
{
|
||||
register DES_LONG l,r,t,u;
|
||||
#ifdef DES_PTR
|
||||
register const unsigned char *des_SP=(const unsigned char *)DES_SPtrans;
|
||||
#endif
|
||||
#ifndef DES_UNROLL
|
||||
register int i;
|
||||
#endif
|
||||
register DES_LONG *s;
|
||||
|
||||
r=data[0];
|
||||
l=data[1];
|
||||
|
||||
IP(r,l);
|
||||
/* Things have been modified so that the initial rotate is
|
||||
* done outside the loop. This required the
|
||||
* DES_SPtrans values in sp.h to be rotated 1 bit to the right.
|
||||
* One perl script later and things have a 5% speed up on a sparc2.
|
||||
* Thanks to Richard Outerbridge <71755.204@CompuServe.COM>
|
||||
* for pointing this out. */
|
||||
/* clear the top bits on machines with 8byte longs */
|
||||
/* shift left by 2 */
|
||||
r=ROTATE(r,29)&0xffffffffL;
|
||||
l=ROTATE(l,29)&0xffffffffL;
|
||||
|
||||
s=ks->ks->deslong;
|
||||
/* I don't know if it is worth the effort of loop unrolling the
|
||||
* inner loop */
|
||||
if (enc)
|
||||
{
|
||||
#ifdef DES_UNROLL
|
||||
D_ENCRYPT(l,r, 0); /* 1 */
|
||||
D_ENCRYPT(r,l, 2); /* 2 */
|
||||
D_ENCRYPT(l,r, 4); /* 3 */
|
||||
D_ENCRYPT(r,l, 6); /* 4 */
|
||||
D_ENCRYPT(l,r, 8); /* 5 */
|
||||
D_ENCRYPT(r,l,10); /* 6 */
|
||||
D_ENCRYPT(l,r,12); /* 7 */
|
||||
D_ENCRYPT(r,l,14); /* 8 */
|
||||
D_ENCRYPT(l,r,16); /* 9 */
|
||||
D_ENCRYPT(r,l,18); /* 10 */
|
||||
D_ENCRYPT(l,r,20); /* 11 */
|
||||
D_ENCRYPT(r,l,22); /* 12 */
|
||||
D_ENCRYPT(l,r,24); /* 13 */
|
||||
D_ENCRYPT(r,l,26); /* 14 */
|
||||
D_ENCRYPT(l,r,28); /* 15 */
|
||||
D_ENCRYPT(r,l,30); /* 16 */
|
||||
#else
|
||||
for (i=0; i<32; i+=8)
|
||||
{
|
||||
D_ENCRYPT(l,r,i+0); /* 1 */
|
||||
D_ENCRYPT(r,l,i+2); /* 2 */
|
||||
D_ENCRYPT(l,r,i+4); /* 3 */
|
||||
D_ENCRYPT(r,l,i+6); /* 4 */
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef DES_UNROLL
|
||||
D_ENCRYPT(l,r,30); /* 16 */
|
||||
D_ENCRYPT(r,l,28); /* 15 */
|
||||
D_ENCRYPT(l,r,26); /* 14 */
|
||||
D_ENCRYPT(r,l,24); /* 13 */
|
||||
D_ENCRYPT(l,r,22); /* 12 */
|
||||
D_ENCRYPT(r,l,20); /* 11 */
|
||||
D_ENCRYPT(l,r,18); /* 10 */
|
||||
D_ENCRYPT(r,l,16); /* 9 */
|
||||
D_ENCRYPT(l,r,14); /* 8 */
|
||||
D_ENCRYPT(r,l,12); /* 7 */
|
||||
D_ENCRYPT(l,r,10); /* 6 */
|
||||
D_ENCRYPT(r,l, 8); /* 5 */
|
||||
D_ENCRYPT(l,r, 6); /* 4 */
|
||||
D_ENCRYPT(r,l, 4); /* 3 */
|
||||
D_ENCRYPT(l,r, 2); /* 2 */
|
||||
D_ENCRYPT(r,l, 0); /* 1 */
|
||||
#else
|
||||
for (i=30; i>0; i-=8)
|
||||
{
|
||||
D_ENCRYPT(l,r,i-0); /* 16 */
|
||||
D_ENCRYPT(r,l,i-2); /* 15 */
|
||||
D_ENCRYPT(l,r,i-4); /* 14 */
|
||||
D_ENCRYPT(r,l,i-6); /* 13 */
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* rotate and clear the top bits on machines with 8byte longs */
|
||||
l=ROTATE(l,3)&0xffffffffL;
|
||||
r=ROTATE(r,3)&0xffffffffL;
|
||||
|
||||
FP(r,l);
|
||||
data[0]=l;
|
||||
data[1]=r;
|
||||
l=r=t=u=0;
|
||||
}
|
||||
|
||||
void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc)
|
||||
{
|
||||
register DES_LONG l,r,t,u;
|
||||
#ifdef DES_PTR
|
||||
register const unsigned char *des_SP=(const unsigned char *)DES_SPtrans;
|
||||
#endif
|
||||
#ifndef DES_UNROLL
|
||||
register int i;
|
||||
#endif
|
||||
register DES_LONG *s;
|
||||
|
||||
r=data[0];
|
||||
l=data[1];
|
||||
|
||||
/* Things have been modified so that the initial rotate is
|
||||
* done outside the loop. This required the
|
||||
* DES_SPtrans values in sp.h to be rotated 1 bit to the right.
|
||||
* One perl script later and things have a 5% speed up on a sparc2.
|
||||
* Thanks to Richard Outerbridge <71755.204@CompuServe.COM>
|
||||
* for pointing this out. */
|
||||
/* clear the top bits on machines with 8byte longs */
|
||||
r=ROTATE(r,29)&0xffffffffL;
|
||||
l=ROTATE(l,29)&0xffffffffL;
|
||||
|
||||
s=ks->ks->deslong;
|
||||
/* I don't know if it is worth the effort of loop unrolling the
|
||||
* inner loop */
|
||||
if (enc)
|
||||
{
|
||||
#ifdef DES_UNROLL
|
||||
D_ENCRYPT(l,r, 0); /* 1 */
|
||||
D_ENCRYPT(r,l, 2); /* 2 */
|
||||
D_ENCRYPT(l,r, 4); /* 3 */
|
||||
D_ENCRYPT(r,l, 6); /* 4 */
|
||||
D_ENCRYPT(l,r, 8); /* 5 */
|
||||
D_ENCRYPT(r,l,10); /* 6 */
|
||||
D_ENCRYPT(l,r,12); /* 7 */
|
||||
D_ENCRYPT(r,l,14); /* 8 */
|
||||
D_ENCRYPT(l,r,16); /* 9 */
|
||||
D_ENCRYPT(r,l,18); /* 10 */
|
||||
D_ENCRYPT(l,r,20); /* 11 */
|
||||
D_ENCRYPT(r,l,22); /* 12 */
|
||||
D_ENCRYPT(l,r,24); /* 13 */
|
||||
D_ENCRYPT(r,l,26); /* 14 */
|
||||
D_ENCRYPT(l,r,28); /* 15 */
|
||||
D_ENCRYPT(r,l,30); /* 16 */
|
||||
#else
|
||||
for (i=0; i<32; i+=8)
|
||||
{
|
||||
D_ENCRYPT(l,r,i+0); /* 1 */
|
||||
D_ENCRYPT(r,l,i+2); /* 2 */
|
||||
D_ENCRYPT(l,r,i+4); /* 3 */
|
||||
D_ENCRYPT(r,l,i+6); /* 4 */
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef DES_UNROLL
|
||||
D_ENCRYPT(l,r,30); /* 16 */
|
||||
D_ENCRYPT(r,l,28); /* 15 */
|
||||
D_ENCRYPT(l,r,26); /* 14 */
|
||||
D_ENCRYPT(r,l,24); /* 13 */
|
||||
D_ENCRYPT(l,r,22); /* 12 */
|
||||
D_ENCRYPT(r,l,20); /* 11 */
|
||||
D_ENCRYPT(l,r,18); /* 10 */
|
||||
D_ENCRYPT(r,l,16); /* 9 */
|
||||
D_ENCRYPT(l,r,14); /* 8 */
|
||||
D_ENCRYPT(r,l,12); /* 7 */
|
||||
D_ENCRYPT(l,r,10); /* 6 */
|
||||
D_ENCRYPT(r,l, 8); /* 5 */
|
||||
D_ENCRYPT(l,r, 6); /* 4 */
|
||||
D_ENCRYPT(r,l, 4); /* 3 */
|
||||
D_ENCRYPT(l,r, 2); /* 2 */
|
||||
D_ENCRYPT(r,l, 0); /* 1 */
|
||||
#else
|
||||
for (i=30; i>0; i-=8)
|
||||
{
|
||||
D_ENCRYPT(l,r,i-0); /* 16 */
|
||||
D_ENCRYPT(r,l,i-2); /* 15 */
|
||||
D_ENCRYPT(l,r,i-4); /* 14 */
|
||||
D_ENCRYPT(r,l,i-6); /* 13 */
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/* rotate and clear the top bits on machines with 8byte longs */
|
||||
data[0]=ROTATE(l,3)&0xffffffffL;
|
||||
data[1]=ROTATE(r,3)&0xffffffffL;
|
||||
l=r=t=u=0;
|
||||
}
|
||||
|
||||
void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1,
|
||||
DES_key_schedule *ks2, DES_key_schedule *ks3)
|
||||
{
|
||||
register DES_LONG l,r;
|
||||
|
||||
l=data[0];
|
||||
r=data[1];
|
||||
IP(l,r);
|
||||
data[0]=l;
|
||||
data[1]=r;
|
||||
DES_encrypt2((DES_LONG *)data,ks1,DES_ENCRYPT);
|
||||
DES_encrypt2((DES_LONG *)data,ks2,DES_DECRYPT);
|
||||
DES_encrypt2((DES_LONG *)data,ks3,DES_ENCRYPT);
|
||||
l=data[0];
|
||||
r=data[1];
|
||||
FP(r,l);
|
||||
data[0]=l;
|
||||
data[1]=r;
|
||||
}
|
||||
|
||||
void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
|
||||
DES_key_schedule *ks2, DES_key_schedule *ks3)
|
||||
{
|
||||
register DES_LONG l,r;
|
||||
|
||||
l=data[0];
|
||||
r=data[1];
|
||||
IP(l,r);
|
||||
data[0]=l;
|
||||
data[1]=r;
|
||||
DES_encrypt2((DES_LONG *)data,ks3,DES_DECRYPT);
|
||||
DES_encrypt2((DES_LONG *)data,ks2,DES_ENCRYPT);
|
||||
DES_encrypt2((DES_LONG *)data,ks1,DES_DECRYPT);
|
||||
l=data[0];
|
||||
r=data[1];
|
||||
FP(r,l);
|
||||
data[0]=l;
|
||||
data[1]=r;
|
||||
}
|
||||
|
||||
#else /* ndef FIPS */
|
||||
|
||||
static void *dummy=&dummy;
|
||||
|
||||
#endif /* ndef FIPS */
|
||||
|
@ -1,428 +0,0 @@
|
||||
/* crypto/des/des_locl.h */
|
||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* 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 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#ifndef HEADER_DES_LOCL_H
|
||||
#define HEADER_DES_LOCL_H
|
||||
|
||||
#include <openssl/e_os2.h>
|
||||
|
||||
#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16)
|
||||
#ifndef OPENSSL_SYS_MSDOS
|
||||
#define OPENSSL_SYS_MSDOS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef OPENSSL_SYS_MSDOS
|
||||
#if !defined(OPENSSL_SYS_VMS) || defined(__DECC)
|
||||
#ifdef OPENSSL_UNISTD
|
||||
# include OPENSSL_UNISTD
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
#include <math.h>
|
||||
#endif
|
||||
#endif
|
||||
#include <openssl/des.h>
|
||||
|
||||
#ifdef OPENSSL_SYS_MSDOS /* Visual C++ 2.1 (Windows NT/95) */
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
||||
#if defined(__STDC__) || defined(OPENSSL_SYS_VMS) || defined(M_XENIX) || defined(OPENSSL_SYS_MSDOS)
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_BUILD_SHLIBCRYPTO
|
||||
# undef OPENSSL_EXTERN
|
||||
# define OPENSSL_EXTERN OPENSSL_EXPORT
|
||||
#endif
|
||||
|
||||
#define ITERATIONS 16
|
||||
#define HALF_ITERATIONS 8
|
||||
|
||||
/* used in des_read and des_write */
|
||||
#define MAXWRITE (1024*16)
|
||||
#define BSIZE (MAXWRITE+4)
|
||||
|
||||
#define c2l(c,l) (l =((DES_LONG)(*((c)++))) , \
|
||||
l|=((DES_LONG)(*((c)++)))<< 8L, \
|
||||
l|=((DES_LONG)(*((c)++)))<<16L, \
|
||||
l|=((DES_LONG)(*((c)++)))<<24L)
|
||||
|
||||
/* NOTE - c is not incremented as per c2l */
|
||||
#define c2ln(c,l1,l2,n) { \
|
||||
c+=n; \
|
||||
l1=l2=0; \
|
||||
switch (n) { \
|
||||
case 8: l2 =((DES_LONG)(*(--(c))))<<24L; \
|
||||
case 7: l2|=((DES_LONG)(*(--(c))))<<16L; \
|
||||
case 6: l2|=((DES_LONG)(*(--(c))))<< 8L; \
|
||||
case 5: l2|=((DES_LONG)(*(--(c)))); \
|
||||
case 4: l1 =((DES_LONG)(*(--(c))))<<24L; \
|
||||
case 3: l1|=((DES_LONG)(*(--(c))))<<16L; \
|
||||
case 2: l1|=((DES_LONG)(*(--(c))))<< 8L; \
|
||||
case 1: l1|=((DES_LONG)(*(--(c)))); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>24L)&0xff))
|
||||
|
||||
/* replacements for htonl and ntohl since I have no idea what to do
|
||||
* when faced with machines with 8 byte longs. */
|
||||
#define HDRSIZE 4
|
||||
|
||||
#define n2l(c,l) (l =((DES_LONG)(*((c)++)))<<24L, \
|
||||
l|=((DES_LONG)(*((c)++)))<<16L, \
|
||||
l|=((DES_LONG)(*((c)++)))<< 8L, \
|
||||
l|=((DES_LONG)(*((c)++))))
|
||||
|
||||
#define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l) )&0xff))
|
||||
|
||||
/* NOTE - c is not incremented as per l2c */
|
||||
#define l2cn(l1,l2,c,n) { \
|
||||
c+=n; \
|
||||
switch (n) { \
|
||||
case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
|
||||
case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
|
||||
case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
|
||||
case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
|
||||
case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
|
||||
case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
|
||||
case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
|
||||
case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
|
||||
} \
|
||||
}
|
||||
|
||||
#if defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)
|
||||
#define ROTATE(a,n) (_lrotr(a,n))
|
||||
#elif defined(__GNUC__) && __GNUC__>=2 && !defined(__STRICT_ANSI__) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) && !defined(PEDANTIC)
|
||||
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
|
||||
# define ROTATE(a,n) ({ register unsigned int ret; \
|
||||
asm ("rorl %1,%0" \
|
||||
: "=r"(ret) \
|
||||
: "I"(n),"0"(a) \
|
||||
: "cc"); \
|
||||
ret; \
|
||||
})
|
||||
# endif
|
||||
#endif
|
||||
#ifndef ROTATE
|
||||
#define ROTATE(a,n) (((a)>>(n))+((a)<<(32-(n))))
|
||||
#endif
|
||||
|
||||
/* Don't worry about the LOAD_DATA() stuff, that is used by
|
||||
* fcrypt() to add it's little bit to the front */
|
||||
|
||||
#ifdef DES_FCRYPT
|
||||
|
||||
#define LOAD_DATA_tmp(R,S,u,t,E0,E1) \
|
||||
{ DES_LONG tmp; LOAD_DATA(R,S,u,t,E0,E1,tmp); }
|
||||
|
||||
#define LOAD_DATA(R,S,u,t,E0,E1,tmp) \
|
||||
t=R^(R>>16L); \
|
||||
u=t&E0; t&=E1; \
|
||||
tmp=(u<<16); u^=R^s[S ]; u^=tmp; \
|
||||
tmp=(t<<16); t^=R^s[S+1]; t^=tmp
|
||||
#else
|
||||
#define LOAD_DATA_tmp(a,b,c,d,e,f) LOAD_DATA(a,b,c,d,e,f,g)
|
||||
#define LOAD_DATA(R,S,u,t,E0,E1,tmp) \
|
||||
u=R^s[S ]; \
|
||||
t=R^s[S+1]
|
||||
#endif
|
||||
|
||||
/* The changes to this macro may help or hinder, depending on the
|
||||
* compiler and the architecture. gcc2 always seems to do well :-).
|
||||
* Inspired by Dana How <how@isl.stanford.edu>
|
||||
* DO NOT use the alternative version on machines with 8 byte longs.
|
||||
* It does not seem to work on the Alpha, even when DES_LONG is 4
|
||||
* bytes, probably an issue of accessing non-word aligned objects :-( */
|
||||
#ifdef DES_PTR
|
||||
|
||||
/* It recently occurred to me that 0^0^0^0^0^0^0 == 0, so there
|
||||
* is no reason to not xor all the sub items together. This potentially
|
||||
* saves a register since things can be xored directly into L */
|
||||
|
||||
#if defined(DES_RISC1) || defined(DES_RISC2)
|
||||
#ifdef DES_RISC1
|
||||
#define D_ENCRYPT(LL,R,S) { \
|
||||
unsigned int u1,u2,u3; \
|
||||
LOAD_DATA(R,S,u,t,E0,E1,u1); \
|
||||
u2=(int)u>>8L; \
|
||||
u1=(int)u&0xfc; \
|
||||
u2&=0xfc; \
|
||||
t=ROTATE(t,4); \
|
||||
u>>=16L; \
|
||||
LL^= *(const DES_LONG *)(des_SP +u1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x200+u2); \
|
||||
u3=(int)(u>>8L); \
|
||||
u1=(int)u&0xfc; \
|
||||
u3&=0xfc; \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x400+u1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x600+u3); \
|
||||
u2=(int)t>>8L; \
|
||||
u1=(int)t&0xfc; \
|
||||
u2&=0xfc; \
|
||||
t>>=16L; \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x100+u1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x300+u2); \
|
||||
u3=(int)t>>8L; \
|
||||
u1=(int)t&0xfc; \
|
||||
u3&=0xfc; \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x500+u1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x700+u3); }
|
||||
#endif
|
||||
#ifdef DES_RISC2
|
||||
#define D_ENCRYPT(LL,R,S) { \
|
||||
unsigned int u1,u2,s1,s2; \
|
||||
LOAD_DATA(R,S,u,t,E0,E1,u1); \
|
||||
u2=(int)u>>8L; \
|
||||
u1=(int)u&0xfc; \
|
||||
u2&=0xfc; \
|
||||
t=ROTATE(t,4); \
|
||||
LL^= *(const DES_LONG *)(des_SP +u1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x200+u2); \
|
||||
s1=(int)(u>>16L); \
|
||||
s2=(int)(u>>24L); \
|
||||
s1&=0xfc; \
|
||||
s2&=0xfc; \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x400+s1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x600+s2); \
|
||||
u2=(int)t>>8L; \
|
||||
u1=(int)t&0xfc; \
|
||||
u2&=0xfc; \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x100+u1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x300+u2); \
|
||||
s1=(int)(t>>16L); \
|
||||
s2=(int)(t>>24L); \
|
||||
s1&=0xfc; \
|
||||
s2&=0xfc; \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x500+s1); \
|
||||
LL^= *(const DES_LONG *)(des_SP+0x700+s2); }
|
||||
#endif
|
||||
#else
|
||||
#define D_ENCRYPT(LL,R,S) { \
|
||||
LOAD_DATA_tmp(R,S,u,t,E0,E1); \
|
||||
t=ROTATE(t,4); \
|
||||
LL^= \
|
||||
*(const DES_LONG *)(des_SP +((u )&0xfc))^ \
|
||||
*(const DES_LONG *)(des_SP+0x200+((u>> 8L)&0xfc))^ \
|
||||
*(const DES_LONG *)(des_SP+0x400+((u>>16L)&0xfc))^ \
|
||||
*(const DES_LONG *)(des_SP+0x600+((u>>24L)&0xfc))^ \
|
||||
*(const DES_LONG *)(des_SP+0x100+((t )&0xfc))^ \
|
||||
*(const DES_LONG *)(des_SP+0x300+((t>> 8L)&0xfc))^ \
|
||||
*(const DES_LONG *)(des_SP+0x500+((t>>16L)&0xfc))^ \
|
||||
*(const DES_LONG *)(des_SP+0x700+((t>>24L)&0xfc)); }
|
||||
#endif
|
||||
|
||||
#else /* original version */
|
||||
|
||||
#if defined(DES_RISC1) || defined(DES_RISC2)
|
||||
#ifdef DES_RISC1
|
||||
#define D_ENCRYPT(LL,R,S) {\
|
||||
unsigned int u1,u2,u3; \
|
||||
LOAD_DATA(R,S,u,t,E0,E1,u1); \
|
||||
u>>=2L; \
|
||||
t=ROTATE(t,6); \
|
||||
u2=(int)u>>8L; \
|
||||
u1=(int)u&0x3f; \
|
||||
u2&=0x3f; \
|
||||
u>>=16L; \
|
||||
LL^=DES_SPtrans[0][u1]; \
|
||||
LL^=DES_SPtrans[2][u2]; \
|
||||
u3=(int)u>>8L; \
|
||||
u1=(int)u&0x3f; \
|
||||
u3&=0x3f; \
|
||||
LL^=DES_SPtrans[4][u1]; \
|
||||
LL^=DES_SPtrans[6][u3]; \
|
||||
u2=(int)t>>8L; \
|
||||
u1=(int)t&0x3f; \
|
||||
u2&=0x3f; \
|
||||
t>>=16L; \
|
||||
LL^=DES_SPtrans[1][u1]; \
|
||||
LL^=DES_SPtrans[3][u2]; \
|
||||
u3=(int)t>>8L; \
|
||||
u1=(int)t&0x3f; \
|
||||
u3&=0x3f; \
|
||||
LL^=DES_SPtrans[5][u1]; \
|
||||
LL^=DES_SPtrans[7][u3]; }
|
||||
#endif
|
||||
#ifdef DES_RISC2
|
||||
#define D_ENCRYPT(LL,R,S) {\
|
||||
unsigned int u1,u2,s1,s2; \
|
||||
LOAD_DATA(R,S,u,t,E0,E1,u1); \
|
||||
u>>=2L; \
|
||||
t=ROTATE(t,6); \
|
||||
u2=(int)u>>8L; \
|
||||
u1=(int)u&0x3f; \
|
||||
u2&=0x3f; \
|
||||
LL^=DES_SPtrans[0][u1]; \
|
||||
LL^=DES_SPtrans[2][u2]; \
|
||||
s1=(int)u>>16L; \
|
||||
s2=(int)u>>24L; \
|
||||
s1&=0x3f; \
|
||||
s2&=0x3f; \
|
||||
LL^=DES_SPtrans[4][s1]; \
|
||||
LL^=DES_SPtrans[6][s2]; \
|
||||
u2=(int)t>>8L; \
|
||||
u1=(int)t&0x3f; \
|
||||
u2&=0x3f; \
|
||||
LL^=DES_SPtrans[1][u1]; \
|
||||
LL^=DES_SPtrans[3][u2]; \
|
||||
s1=(int)t>>16; \
|
||||
s2=(int)t>>24L; \
|
||||
s1&=0x3f; \
|
||||
s2&=0x3f; \
|
||||
LL^=DES_SPtrans[5][s1]; \
|
||||
LL^=DES_SPtrans[7][s2]; }
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define D_ENCRYPT(LL,R,S) {\
|
||||
LOAD_DATA_tmp(R,S,u,t,E0,E1); \
|
||||
t=ROTATE(t,4); \
|
||||
LL^=\
|
||||
DES_SPtrans[0][(u>> 2L)&0x3f]^ \
|
||||
DES_SPtrans[2][(u>>10L)&0x3f]^ \
|
||||
DES_SPtrans[4][(u>>18L)&0x3f]^ \
|
||||
DES_SPtrans[6][(u>>26L)&0x3f]^ \
|
||||
DES_SPtrans[1][(t>> 2L)&0x3f]^ \
|
||||
DES_SPtrans[3][(t>>10L)&0x3f]^ \
|
||||
DES_SPtrans[5][(t>>18L)&0x3f]^ \
|
||||
DES_SPtrans[7][(t>>26L)&0x3f]; }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* IP and FP
|
||||
* The problem is more of a geometric problem that random bit fiddling.
|
||||
0 1 2 3 4 5 6 7 62 54 46 38 30 22 14 6
|
||||
8 9 10 11 12 13 14 15 60 52 44 36 28 20 12 4
|
||||
16 17 18 19 20 21 22 23 58 50 42 34 26 18 10 2
|
||||
24 25 26 27 28 29 30 31 to 56 48 40 32 24 16 8 0
|
||||
|
||||
32 33 34 35 36 37 38 39 63 55 47 39 31 23 15 7
|
||||
40 41 42 43 44 45 46 47 61 53 45 37 29 21 13 5
|
||||
48 49 50 51 52 53 54 55 59 51 43 35 27 19 11 3
|
||||
56 57 58 59 60 61 62 63 57 49 41 33 25 17 9 1
|
||||
|
||||
The output has been subject to swaps of the form
|
||||
0 1 -> 3 1 but the odd and even bits have been put into
|
||||
2 3 2 0
|
||||
different words. The main trick is to remember that
|
||||
t=((l>>size)^r)&(mask);
|
||||
r^=t;
|
||||
l^=(t<<size);
|
||||
can be used to swap and move bits between words.
|
||||
|
||||
So l = 0 1 2 3 r = 16 17 18 19
|
||||
4 5 6 7 20 21 22 23
|
||||
8 9 10 11 24 25 26 27
|
||||
12 13 14 15 28 29 30 31
|
||||
becomes (for size == 2 and mask == 0x3333)
|
||||
t = 2^16 3^17 -- -- l = 0 1 16 17 r = 2 3 18 19
|
||||
6^20 7^21 -- -- 4 5 20 21 6 7 22 23
|
||||
10^24 11^25 -- -- 8 9 24 25 10 11 24 25
|
||||
14^28 15^29 -- -- 12 13 28 29 14 15 28 29
|
||||
|
||||
Thanks for hints from Richard Outerbridge - he told me IP&FP
|
||||
could be done in 15 xor, 10 shifts and 5 ands.
|
||||
When I finally started to think of the problem in 2D
|
||||
I first got ~42 operations without xors. When I remembered
|
||||
how to use xors :-) I got it to its final state.
|
||||
*/
|
||||
#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
|
||||
(b)^=(t),\
|
||||
(a)^=((t)<<(n)))
|
||||
|
||||
#define IP(l,r) \
|
||||
{ \
|
||||
register DES_LONG tt; \
|
||||
PERM_OP(r,l,tt, 4,0x0f0f0f0fL); \
|
||||
PERM_OP(l,r,tt,16,0x0000ffffL); \
|
||||
PERM_OP(r,l,tt, 2,0x33333333L); \
|
||||
PERM_OP(l,r,tt, 8,0x00ff00ffL); \
|
||||
PERM_OP(r,l,tt, 1,0x55555555L); \
|
||||
}
|
||||
|
||||
#define FP(l,r) \
|
||||
{ \
|
||||
register DES_LONG tt; \
|
||||
PERM_OP(l,r,tt, 1,0x55555555L); \
|
||||
PERM_OP(r,l,tt, 8,0x00ff00ffL); \
|
||||
PERM_OP(l,r,tt, 2,0x33333333L); \
|
||||
PERM_OP(r,l,tt,16,0x0000ffffL); \
|
||||
PERM_OP(l,r,tt, 4,0x0f0f0f0fL); \
|
||||
}
|
||||
|
||||
OPENSSL_EXTERN const DES_LONG DES_SPtrans[8][64];
|
||||
|
||||
void fcrypt_body(DES_LONG *out,DES_key_schedule *ks,
|
||||
DES_LONG Eswap0, DES_LONG Eswap1);
|
||||
#endif
|
@ -1,677 +0,0 @@
|
||||
/*---------------------------------------------
|
||||
NIST DES Modes of Operation Validation System
|
||||
Test Program
|
||||
|
||||
Based on the AES Validation Suite, which was:
|
||||
Copyright
|
||||
V-ONE Corporation
|
||||
20250 Century Blvd, Suite 300
|
||||
Germantown, MD 20874
|
||||
U.S.A.
|
||||
----------------------------------------------*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <openssl/des.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/fips.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
//#define AES_BLOCK_SIZE 16
|
||||
|
||||
#define VERBOSE 0
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
int DESTest(EVP_CIPHER_CTX *ctx,
|
||||
char *amode, int akeysz, unsigned char *aKey,
|
||||
unsigned char *iVec,
|
||||
int dir, /* 0 = decrypt, 1 = encrypt */
|
||||
unsigned char *out, unsigned char *in, int len)
|
||||
{
|
||||
const EVP_CIPHER *cipher = NULL;
|
||||
int ret = 1;
|
||||
int kt = 0;
|
||||
|
||||
if (ctx)
|
||||
memset(ctx, 0, sizeof(EVP_CIPHER_CTX));
|
||||
|
||||
if (strcasecmp(amode, "CBC") == 0)
|
||||
kt = 1000;
|
||||
else if (strcasecmp(amode, "ECB") == 0)
|
||||
kt = 2000;
|
||||
else if (strcasecmp(amode, "CFB64") == 0)
|
||||
kt = 3000;
|
||||
else if (strncasecmp(amode, "OFB", 3) == 0)
|
||||
kt = 4000;
|
||||
else if(!strcasecmp(amode,"CFB1"))
|
||||
kt=5000;
|
||||
else if(!strcasecmp(amode,"CFB8"))
|
||||
kt=6000;
|
||||
else
|
||||
{
|
||||
printf("Unknown mode: %s\n", amode);
|
||||
exit(1);
|
||||
}
|
||||
if (ret)
|
||||
{
|
||||
if (akeysz != 64)
|
||||
{
|
||||
printf("Invalid key size: %d\n", akeysz);
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
kt += akeysz;
|
||||
switch (kt)
|
||||
{
|
||||
case 1064:
|
||||
cipher=EVP_des_cbc();
|
||||
break;
|
||||
case 2064:
|
||||
cipher=EVP_des_ecb();
|
||||
break;
|
||||
case 3064:
|
||||
cipher=EVP_des_cfb64();
|
||||
break;
|
||||
case 4064:
|
||||
cipher=EVP_des_ofb();
|
||||
break;
|
||||
case 5064:
|
||||
cipher=EVP_des_cfb1();
|
||||
break;
|
||||
case 6064:
|
||||
cipher=EVP_des_cfb8();
|
||||
break;
|
||||
default:
|
||||
printf("Didn't handle mode %d\n",kt);
|
||||
exit(1);
|
||||
}
|
||||
if(!EVP_CipherInit(ctx, cipher, aKey, iVec, dir))
|
||||
{
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(1);
|
||||
}
|
||||
EVP_Cipher(ctx, out, in, len);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
int hex2bin(char *in, int len, unsigned char *out)
|
||||
{
|
||||
int n1, n2;
|
||||
unsigned char ch;
|
||||
|
||||
for (n1 = 0, n2 = 0; n1 < len; )
|
||||
{ /* first byte */
|
||||
if ((in[n1] >= '0') && (in[n1] <= '9'))
|
||||
ch = in[n1++] - '0';
|
||||
else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
|
||||
ch = in[n1++] - 'A' + 10;
|
||||
else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
|
||||
ch = in[n1++] - 'a' + 10;
|
||||
else
|
||||
return -1;
|
||||
if(len == 1)
|
||||
{
|
||||
out[n2++]=ch;
|
||||
break;
|
||||
}
|
||||
out[n2] = ch << 4;
|
||||
/* second byte */
|
||||
if ((in[n1] >= '0') && (in[n1] <= '9'))
|
||||
ch = in[n1++] - '0';
|
||||
else if ((in[n1] >= 'A') && (in[n1] <= 'F'))
|
||||
ch = in[n1++] - 'A' + 10;
|
||||
else if ((in[n1] >= 'a') && (in[n1] <= 'f'))
|
||||
ch = in[n1++] - 'a' + 10;
|
||||
else
|
||||
return -1;
|
||||
out[n2++] |= ch;
|
||||
}
|
||||
return n2;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
int bin2hex(unsigned char *in, int len, char *out)
|
||||
{
|
||||
int n1, n2;
|
||||
unsigned char ch;
|
||||
|
||||
for (n1 = 0, n2 = 0; n1 < len; ++n1)
|
||||
{
|
||||
/* first nibble */
|
||||
ch = in[n1] >> 4;
|
||||
if (ch <= 0x09)
|
||||
out[n2++] = ch + '0';
|
||||
else
|
||||
out[n2++] = ch - 10 + 'a';
|
||||
/* second nibble */
|
||||
ch = in[n1] & 0x0f;
|
||||
if (ch <= 0x09)
|
||||
out[n2++] = ch + '0';
|
||||
else
|
||||
out[n2++] = ch - 10 + 'a';
|
||||
}
|
||||
return n2;
|
||||
}
|
||||
|
||||
/* NB: this return the number of _bits_ read */
|
||||
int bint2bin(const char *in, int len, unsigned char *out)
|
||||
{
|
||||
int n;
|
||||
|
||||
memset(out,0,len);
|
||||
for(n=0 ; n < len ; ++n)
|
||||
if(in[n] == '1')
|
||||
out[n/8]|=(0x80 >> (n%8));
|
||||
return len;
|
||||
}
|
||||
|
||||
int bin2bint(const unsigned char *in,int len,char *out)
|
||||
{
|
||||
int n;
|
||||
|
||||
for(n=0 ; n < len ; ++n)
|
||||
out[n]=(in[n/8]&(0x80 >> (n%8))) ? '1' : '0';
|
||||
return n;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
void PrintValue(char *tag, unsigned char *val, int len)
|
||||
{
|
||||
#if VERBOSE
|
||||
char obuf[2048];
|
||||
int olen;
|
||||
olen = bin2hex(val, len, obuf);
|
||||
printf("%s = %.*s\n", tag, olen, obuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
void DebugValue(char *tag, unsigned char *val, int len)
|
||||
{
|
||||
char obuf[2048];
|
||||
int olen;
|
||||
olen = bin2hex(val, len, obuf);
|
||||
printf("%s = %.*s\n", tag, olen, obuf);
|
||||
}
|
||||
|
||||
void OutputValue(char *tag, unsigned char *val, int len, FILE *rfp,int bitmode)
|
||||
{
|
||||
char obuf[2048];
|
||||
int olen;
|
||||
|
||||
if(bitmode)
|
||||
olen=bin2bint(val,len,obuf);
|
||||
else
|
||||
olen=bin2hex(val,len,obuf);
|
||||
|
||||
fprintf(rfp, "%s = %.*s\n", tag, olen, obuf);
|
||||
#if VERBOSE
|
||||
printf("%s = %.*s\n", tag, olen, obuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
void shiftin(unsigned char *dst,unsigned char *src,int nbits)
|
||||
{
|
||||
int n;
|
||||
|
||||
/* move the bytes... */
|
||||
memmove(dst,dst+nbits/8,8-nbits/8);
|
||||
/* append new data */
|
||||
memcpy(dst+8-nbits/8,src,(nbits+7)/8);
|
||||
/* left shift the bits */
|
||||
if(nbits%8)
|
||||
for(n=0 ; n < 8 ; ++n)
|
||||
dst[n]=(dst[n] << (nbits%8))|(dst[n+1] >> (8-nbits%8));
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
char *t_tag[2] = {"PLAINTEXT", "CIPHERTEXT"};
|
||||
char *t_mode[6] = {"CBC","ECB","OFB","CFB1","CFB8","CFB64"};
|
||||
enum Mode {CBC, ECB, OFB, CFB1, CFB8, CFB64};
|
||||
int Sizes[6]={64,0,64,1,8,64};
|
||||
enum XCrypt {XDECRYPT, XENCRYPT};
|
||||
|
||||
void do_mct(char *amode,
|
||||
int akeysz, unsigned char *akey,unsigned char *ivec,
|
||||
int dir, unsigned char *text, int len,
|
||||
FILE *rfp)
|
||||
{
|
||||
int i,imode;
|
||||
unsigned char nk[16]; // double size to make the bitshift easier
|
||||
|
||||
for (imode=0 ; imode < 6 ; ++imode)
|
||||
if(!strcmp(amode,t_mode[imode]))
|
||||
break;
|
||||
if (imode == 6)
|
||||
{
|
||||
printf("Unrecognized mode: %s\n", amode);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for(i=0 ; i < 400 ; ++i)
|
||||
{
|
||||
int j;
|
||||
int n;
|
||||
EVP_CIPHER_CTX ctx;
|
||||
unsigned char old_iv[8];
|
||||
|
||||
fprintf(rfp,"\nCOUNT = %d\n",i);
|
||||
OutputValue("KEY",akey,akeysz/8,rfp,0);
|
||||
if(imode != ECB)
|
||||
OutputValue("IV",ivec,8,rfp,0);
|
||||
OutputValue(t_tag[dir^1],text,len,rfp,imode == CFB1);
|
||||
|
||||
/* compensate for endianness */
|
||||
if(imode == CFB1)
|
||||
text[0]<<=7;
|
||||
|
||||
for(j=0 ; j < 10000 ; ++j)
|
||||
{
|
||||
if(j == 0)
|
||||
{
|
||||
memcpy(old_iv,ivec,8);
|
||||
DESTest(&ctx,amode,akeysz,akey,ivec,dir,text,text,len);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(old_iv,ctx.iv,8);
|
||||
EVP_Cipher(&ctx,text,text,len);
|
||||
}
|
||||
if(j == 9999)
|
||||
{
|
||||
OutputValue(t_tag[dir],text,len,rfp,imode == CFB1);
|
||||
// memcpy(ivec,text,8);
|
||||
}
|
||||
// DebugValue("iv",ctx.iv,8);
|
||||
/* accumulate material for the next key */
|
||||
shiftin(nk,text,Sizes[imode]);
|
||||
// DebugValue("nk",nk,8);
|
||||
if(imode == CFB1 || imode == CFB8 || imode == CBC)
|
||||
memcpy(text,old_iv,8);
|
||||
}
|
||||
for(n=0 ; n < 8 ; ++n)
|
||||
akey[n]^=nk[n];
|
||||
memcpy(ivec,ctx.iv,8);
|
||||
}
|
||||
}
|
||||
|
||||
int proc_file(char *rqfile)
|
||||
{
|
||||
char afn[256], rfn[256];
|
||||
FILE *afp = NULL, *rfp = NULL;
|
||||
char ibuf[2048];
|
||||
int ilen, len, ret = 0;
|
||||
char algo[8] = "";
|
||||
char amode[8] = "";
|
||||
char atest[100] = "";
|
||||
int akeysz=0;
|
||||
unsigned char iVec[20], aKey[40];
|
||||
int dir = -1, err = 0, step = 0;
|
||||
unsigned char plaintext[2048];
|
||||
unsigned char ciphertext[2048];
|
||||
char *rp;
|
||||
EVP_CIPHER_CTX ctx;
|
||||
|
||||
if (!rqfile || !(*rqfile))
|
||||
{
|
||||
printf("No req file\n");
|
||||
return -1;
|
||||
}
|
||||
strcpy(afn, rqfile);
|
||||
|
||||
if ((afp = fopen(afn, "r")) == NULL)
|
||||
{
|
||||
printf("Cannot open file: %s, %s\n",
|
||||
afn, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
strcpy(rfn,afn);
|
||||
rp=strstr(rfn,"req/");
|
||||
assert(rp);
|
||||
memcpy(rp,"rsp",3);
|
||||
rp = strstr(rfn, ".req");
|
||||
memcpy(rp, ".rsp", 4);
|
||||
if ((rfp = fopen(rfn, "w")) == NULL)
|
||||
{
|
||||
printf("Cannot open file: %s, %s\n",
|
||||
rfn, strerror(errno));
|
||||
fclose(afp);
|
||||
afp = NULL;
|
||||
return -1;
|
||||
}
|
||||
while (!err && (fgets(ibuf, sizeof(ibuf), afp)) != NULL)
|
||||
{
|
||||
ilen = strlen(ibuf);
|
||||
// printf("step=%d ibuf=%s",step,ibuf);
|
||||
switch (step)
|
||||
{
|
||||
case 0: /* read preamble */
|
||||
if (ibuf[0] == '\n')
|
||||
{ /* end of preamble */
|
||||
if ((*algo == '\0') ||
|
||||
(*amode == '\0') ||
|
||||
(akeysz == 0))
|
||||
{
|
||||
printf("Missing Algorithm, Mode or KeySize (%s/%s/%d)\n",
|
||||
algo,amode,akeysz);
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs(ibuf, rfp);
|
||||
++ step;
|
||||
}
|
||||
}
|
||||
else if (ibuf[0] != '#')
|
||||
{
|
||||
printf("Invalid preamble item: %s\n", ibuf);
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{ /* process preamble */
|
||||
char *xp, *pp = ibuf+2;
|
||||
int n;
|
||||
if (akeysz)
|
||||
{ /* insert current time & date */
|
||||
time_t rtim = time(0);
|
||||
fprintf(rfp, "# %s", ctime(&rtim));
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs(ibuf, rfp);
|
||||
if(!strncmp(pp,"INVERSE ",8) || !strncmp(pp,"DES ",4)
|
||||
|| !strncmp(pp,"PERMUTATION ",12)
|
||||
|| !strncmp(pp,"SUBSTITUTION ",13)
|
||||
|| !strncmp(pp,"VARIABLE ",9))
|
||||
{
|
||||
strcpy(algo, "DES");
|
||||
/* get test type */
|
||||
if(!strncmp(pp,"DES ",4))
|
||||
pp+=4;
|
||||
xp = strchr(pp, ' ');
|
||||
n = xp-pp;
|
||||
strncpy(atest, pp, n);
|
||||
atest[n] = '\0';
|
||||
/* get mode */
|
||||
xp = strrchr(pp, ' '); /* get mode" */
|
||||
n = strlen(xp+1)-1;
|
||||
strncpy(amode, xp+1, n);
|
||||
amode[n] = '\0';
|
||||
/* amode[3] = '\0'; */
|
||||
printf("Test = %s, Mode = %s\n", atest, amode);
|
||||
}
|
||||
else if(!strncmp(pp,"State :",7))
|
||||
akeysz=64;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: /* [ENCRYPT] | [DECRYPT] */
|
||||
if(ibuf[0] == '\n')
|
||||
break;
|
||||
if (ibuf[0] == '[')
|
||||
{
|
||||
fputs(ibuf, rfp);
|
||||
++step;
|
||||
if (strncasecmp(ibuf, "[ENCRYPT]", 9) == 0)
|
||||
dir = 1;
|
||||
else if (strncasecmp(ibuf, "[DECRYPT]", 9) == 0)
|
||||
dir = 0;
|
||||
else
|
||||
{
|
||||
printf("Invalid keyword: %s\n", ibuf);
|
||||
err = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (dir == -1)
|
||||
{
|
||||
err = 1;
|
||||
printf("Missing ENCRYPT/DECRYPT keyword\n");
|
||||
break;
|
||||
}
|
||||
else
|
||||
step = 2;
|
||||
|
||||
case 2: /* KEY = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if(*ibuf == '\n')
|
||||
break;
|
||||
if(!strncasecmp(ibuf,"COUNT = ",8))
|
||||
break;
|
||||
|
||||
if (strncasecmp(ibuf, "KEY = ", 6) != 0)
|
||||
{
|
||||
printf("Missing KEY\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = hex2bin((char*)ibuf+6, strlen(ibuf+6)-1, aKey);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid KEY\n");
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
PrintValue("KEY", aKey, len);
|
||||
if (strcmp(amode, "ECB") == 0)
|
||||
{
|
||||
memset(iVec, 0, sizeof(iVec));
|
||||
step = (dir)? 4: 5; /* no ivec for ECB */
|
||||
}
|
||||
else
|
||||
++step;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: /* IV = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if (strncasecmp(ibuf, "IV = ", 5) != 0)
|
||||
{
|
||||
printf("Missing IV\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = hex2bin((char*)ibuf+5, strlen(ibuf+5)-1, iVec);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid IV\n");
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
PrintValue("IV", iVec, len);
|
||||
step = (dir)? 4: 5;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: /* PLAINTEXT = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if (strncasecmp(ibuf, "PLAINTEXT = ", 12) != 0)
|
||||
{
|
||||
printf("Missing PLAINTEXT\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
int nn = strlen(ibuf+12);
|
||||
if(!strcmp(amode,"CFB1"))
|
||||
len=bint2bin(ibuf+12,nn-1,plaintext);
|
||||
else
|
||||
len=hex2bin(ibuf+12, nn-1,plaintext);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid PLAINTEXT: %s", ibuf+12);
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
if (len >= sizeof(plaintext))
|
||||
{
|
||||
printf("Buffer overflow\n");
|
||||
}
|
||||
PrintValue("PLAINTEXT", (unsigned char*)plaintext, len);
|
||||
if (strcmp(atest, "Monte") == 0) /* Monte Carlo Test */
|
||||
{
|
||||
do_mct(amode,akeysz,aKey,iVec,dir,plaintext,len,rfp);
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(dir == 1);
|
||||
ret = DESTest(&ctx, amode, akeysz, aKey, iVec,
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
ciphertext, plaintext, len);
|
||||
OutputValue("CIPHERTEXT",ciphertext,len,rfp,
|
||||
!strcmp(amode,"CFB1"));
|
||||
}
|
||||
step = 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: /* CIPHERTEXT = xxxx */
|
||||
fputs(ibuf, rfp);
|
||||
if (strncasecmp(ibuf, "CIPHERTEXT = ", 13) != 0)
|
||||
{
|
||||
printf("Missing KEY\n");
|
||||
err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!strcmp(amode,"CFB1"))
|
||||
len=bint2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
|
||||
else
|
||||
len = hex2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid CIPHERTEXT\n");
|
||||
err =1;
|
||||
break;
|
||||
}
|
||||
|
||||
PrintValue("CIPHERTEXT", ciphertext, len);
|
||||
if (strcmp(atest, "Monte") == 0) /* Monte Carlo Test */
|
||||
{
|
||||
do_mct(amode, akeysz, aKey, iVec,
|
||||
dir, ciphertext, len, rfp);
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(dir == 0);
|
||||
ret = DESTest(&ctx, amode, akeysz, aKey, iVec,
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
plaintext, ciphertext, len);
|
||||
OutputValue("PLAINTEXT",(unsigned char *)plaintext,len,rfp,
|
||||
!strcmp(amode,"CFB1"));
|
||||
}
|
||||
step = 6;
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
if (ibuf[0] != '\n')
|
||||
{
|
||||
err = 1;
|
||||
printf("Missing terminator\n");
|
||||
}
|
||||
else if (strcmp(atest, "MCT") != 0)
|
||||
{ /* MCT already added terminating nl */
|
||||
fputs(ibuf, rfp);
|
||||
}
|
||||
step = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (rfp)
|
||||
fclose(rfp);
|
||||
if (afp)
|
||||
fclose(afp);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
Processes either a single file or
|
||||
a set of files whose names are passed in a file.
|
||||
A single file is specified as:
|
||||
aes_test -f xxx.req
|
||||
A set of files is specified as:
|
||||
aes_test -d xxxxx.xxx
|
||||
The default is: -d req.txt
|
||||
--------------------------------------------------*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char *rqlist = "req.txt";
|
||||
FILE *fp = NULL;
|
||||
char fn[250] = "", rfn[256] = "";
|
||||
int f_opt = 0, d_opt = 1;
|
||||
|
||||
#ifdef FIPS
|
||||
FIPS_mode_set(1);
|
||||
#endif
|
||||
ERR_load_crypto_strings();
|
||||
if (argc > 1)
|
||||
{
|
||||
if (strcasecmp(argv[1], "-d") == 0)
|
||||
{
|
||||
d_opt = 1;
|
||||
}
|
||||
else if (strcasecmp(argv[1], "-f") == 0)
|
||||
{
|
||||
f_opt = 1;
|
||||
d_opt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Invalid parameter: %s\n", argv[1]);
|
||||
return 0;
|
||||
}
|
||||
if (argc < 3)
|
||||
{
|
||||
printf("Missing parameter\n");
|
||||
return 0;
|
||||
}
|
||||
if (d_opt)
|
||||
rqlist = argv[2];
|
||||
else
|
||||
strcpy(fn, argv[2]);
|
||||
}
|
||||
if (d_opt)
|
||||
{ /* list of files (directory) */
|
||||
if (!(fp = fopen(rqlist, "r")))
|
||||
{
|
||||
printf("Cannot open req list file\n");
|
||||
return -1;
|
||||
}
|
||||
while (fgets(fn, sizeof(fn), fp))
|
||||
{
|
||||
strtok(fn, "\r\n");
|
||||
strcpy(rfn, fn);
|
||||
printf("Processing: %s\n", rfn);
|
||||
if (proc_file(rfn))
|
||||
{
|
||||
printf(">>> Processing failed for: %s <<<\n", rfn);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
else /* single file */
|
||||
{
|
||||
printf("Processing: %s\n", fn);
|
||||
if (proc_file(fn))
|
||||
{
|
||||
printf(">>> Processing failed for: %s <<<\n", fn);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
Makefile.save
|
||||
lib
|
@ -1,95 +0,0 @@
|
||||
#
|
||||
# SSLeay/fips/sha1/Makefile
|
||||
#
|
||||
|
||||
DIR= dsa
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
INSTALL_PREFIX=
|
||||
OPENSSLDIR= /usr/local/ssl
|
||||
INSTALLTOP=/usr/local/ssl
|
||||
MAKE= make -f Makefile.ssl
|
||||
MAKEDEPPROG= makedepend
|
||||
MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
|
||||
MAKEFILE= Makefile.ssl
|
||||
AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST=fips_dsatest.c
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC=fips_dsa_ossl.c
|
||||
LIBOBJ=fips_dsa_ossl.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER=
|
||||
HEADER= $(EXHEADER)
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=fips FDIRS=$(DIR) sub_all)
|
||||
|
||||
all: check lib
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
check:
|
||||
TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(TOP)/util/point.sh Makefile.ssl Makefile
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@for i in $(EXHEADER) ; \
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
tags:
|
||||
ctags $(SRC)
|
||||
|
||||
tests:
|
||||
|
||||
lint:
|
||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||
|
||||
depend:
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
fips_dsa_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/err.h ../../include/openssl/fips.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/lhash.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/opensslconf.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/opensslv.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
fips_dsa_ossl.o: ../../include/openssl/ui.h fips_dsa_ossl.c
|
@ -1 +0,0 @@
|
||||
SHA1(fips_dsa_ossl.c)= eb769361b524507754bcbfbda92b973e37433478
|
@ -1,374 +0,0 @@
|
||||
/* crypto/dsa/dsa_ossl.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* 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 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
/* Original version from Steven Schoch <schoch@sheba.arc.nasa.gov> */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/dsa.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/asn1.h>
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
#include <openssl/engine.h>
|
||||
#endif
|
||||
#include <openssl/fips.h>
|
||||
|
||||
#ifdef FIPS
|
||||
|
||||
static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);
|
||||
static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp);
|
||||
static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
||||
DSA *dsa);
|
||||
static int dsa_init(DSA *dsa);
|
||||
static int dsa_finish(DSA *dsa);
|
||||
static int dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1,
|
||||
BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx,
|
||||
BN_MONT_CTX *in_mont);
|
||||
static int dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||
const BIGNUM *m, BN_CTX *ctx,
|
||||
BN_MONT_CTX *m_ctx);
|
||||
|
||||
static DSA_METHOD openssl_dsa_meth = {
|
||||
"OpenSSL FIPS DSA method",
|
||||
dsa_do_sign,
|
||||
dsa_sign_setup,
|
||||
dsa_do_verify,
|
||||
dsa_mod_exp,
|
||||
dsa_bn_mod_exp,
|
||||
dsa_init,
|
||||
dsa_finish,
|
||||
0,
|
||||
NULL
|
||||
};
|
||||
|
||||
int FIPS_dsa_check(struct dsa_st *dsa)
|
||||
{
|
||||
if(dsa->meth != &openssl_dsa_meth || dsa->meth->dsa_do_sign != dsa_do_sign
|
||||
|| dsa->meth->dsa_sign_setup != dsa_sign_setup
|
||||
|| dsa->meth->dsa_mod_exp != dsa_mod_exp
|
||||
|| dsa->meth->bn_mod_exp != dsa_bn_mod_exp
|
||||
|| dsa->meth->init != dsa_init
|
||||
|| dsa->meth->finish != dsa_finish)
|
||||
{
|
||||
FIPSerr(FIPS_F_FIPS_DSA_CHECK,FIPS_R_NON_FIPS_METHOD);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
const DSA_METHOD *DSA_OpenSSL(void)
|
||||
{
|
||||
return &openssl_dsa_meth;
|
||||
}
|
||||
|
||||
static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
|
||||
{
|
||||
BIGNUM *kinv=NULL,*r=NULL,*s=NULL;
|
||||
BIGNUM m;
|
||||
BIGNUM xr;
|
||||
BN_CTX *ctx=NULL;
|
||||
int i,reason=ERR_R_BN_LIB;
|
||||
DSA_SIG *ret=NULL;
|
||||
|
||||
BN_init(&m);
|
||||
BN_init(&xr);
|
||||
|
||||
if (!dsa->p || !dsa->q || !dsa->g)
|
||||
{
|
||||
reason=DSA_R_MISSING_PARAMETERS;
|
||||
goto err;
|
||||
}
|
||||
|
||||
s=BN_new();
|
||||
if (s == NULL) goto err;
|
||||
|
||||
i=BN_num_bytes(dsa->q); /* should be 20 */
|
||||
if ((dlen > i) || (dlen > 50))
|
||||
{
|
||||
reason=DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE;
|
||||
goto err;
|
||||
}
|
||||
|
||||
ctx=BN_CTX_new();
|
||||
if (ctx == NULL) goto err;
|
||||
|
||||
if ((dsa->kinv == NULL) || (dsa->r == NULL))
|
||||
{
|
||||
if (!DSA_sign_setup(dsa,ctx,&kinv,&r)) goto err;
|
||||
}
|
||||
else
|
||||
{
|
||||
kinv=dsa->kinv;
|
||||
dsa->kinv=NULL;
|
||||
r=dsa->r;
|
||||
dsa->r=NULL;
|
||||
}
|
||||
|
||||
if (BN_bin2bn(dgst,dlen,&m) == NULL) goto err;
|
||||
|
||||
/* Compute s = inv(k) (m + xr) mod q */
|
||||
if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */
|
||||
if (!BN_add(s, &xr, &m)) goto err; /* s = m + xr */
|
||||
if (BN_cmp(s,dsa->q) > 0)
|
||||
BN_sub(s,s,dsa->q);
|
||||
if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err;
|
||||
|
||||
ret=DSA_SIG_new();
|
||||
if (ret == NULL) goto err;
|
||||
ret->r = r;
|
||||
ret->s = s;
|
||||
|
||||
err:
|
||||
if (!ret)
|
||||
{
|
||||
DSAerr(DSA_F_DSA_DO_SIGN,reason);
|
||||
BN_free(r);
|
||||
BN_free(s);
|
||||
}
|
||||
if (ctx != NULL) BN_CTX_free(ctx);
|
||||
BN_clear_free(&m);
|
||||
BN_clear_free(&xr);
|
||||
if (kinv != NULL) /* dsa->kinv is NULL now if we used it */
|
||||
BN_clear_free(kinv);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
|
||||
{
|
||||
BN_CTX *ctx;
|
||||
BIGNUM k,*kinv=NULL,*r=NULL;
|
||||
int ret=0;
|
||||
|
||||
if (!dsa->p || !dsa->q || !dsa->g)
|
||||
{
|
||||
DSAerr(DSA_F_DSA_SIGN_SETUP,DSA_R_MISSING_PARAMETERS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_init(&k);
|
||||
|
||||
if (ctx_in == NULL)
|
||||
{
|
||||
if ((ctx=BN_CTX_new()) == NULL) goto err;
|
||||
}
|
||||
else
|
||||
ctx=ctx_in;
|
||||
|
||||
if ((r=BN_new()) == NULL) goto err;
|
||||
kinv=NULL;
|
||||
|
||||
/* Get random k */
|
||||
do
|
||||
if (!BN_rand_range(&k, dsa->q)) goto err;
|
||||
while (BN_is_zero(&k));
|
||||
|
||||
if ((dsa->method_mont_p == NULL) && (dsa->flags & DSA_FLAG_CACHE_MONT_P))
|
||||
{
|
||||
if ((dsa->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL)
|
||||
if (!BN_MONT_CTX_set((BN_MONT_CTX *)dsa->method_mont_p,
|
||||
dsa->p,ctx)) goto err;
|
||||
}
|
||||
|
||||
/* Compute r = (g^k mod p) mod q */
|
||||
if (!dsa->meth->bn_mod_exp(dsa, r,dsa->g,&k,dsa->p,ctx,
|
||||
(BN_MONT_CTX *)dsa->method_mont_p)) goto err;
|
||||
if (!BN_mod(r,r,dsa->q,ctx)) goto err;
|
||||
|
||||
/* Compute part of 's = inv(k) (m + xr) mod q' */
|
||||
if ((kinv=BN_mod_inverse(NULL,&k,dsa->q,ctx)) == NULL) goto err;
|
||||
|
||||
if (*kinvp != NULL) BN_clear_free(*kinvp);
|
||||
*kinvp=kinv;
|
||||
kinv=NULL;
|
||||
if (*rp != NULL) BN_clear_free(*rp);
|
||||
*rp=r;
|
||||
ret=1;
|
||||
err:
|
||||
if (!ret)
|
||||
{
|
||||
DSAerr(DSA_F_DSA_SIGN_SETUP,ERR_R_BN_LIB);
|
||||
if (kinv != NULL) BN_clear_free(kinv);
|
||||
if (r != NULL) BN_clear_free(r);
|
||||
}
|
||||
if (ctx_in == NULL) BN_CTX_free(ctx);
|
||||
if (kinv != NULL) BN_clear_free(kinv);
|
||||
BN_clear_free(&k);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
|
||||
DSA *dsa)
|
||||
{
|
||||
BN_CTX *ctx;
|
||||
BIGNUM u1,u2,t1;
|
||||
BN_MONT_CTX *mont=NULL;
|
||||
int ret = -1;
|
||||
if (!dsa->p || !dsa->q || !dsa->g)
|
||||
{
|
||||
DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_MISSING_PARAMETERS);
|
||||
return -1;
|
||||
}
|
||||
|
||||
BN_init(&u1);
|
||||
BN_init(&u2);
|
||||
BN_init(&t1);
|
||||
|
||||
if ((ctx=BN_CTX_new()) == NULL) goto err;
|
||||
|
||||
if (BN_is_zero(sig->r) || sig->r->neg || BN_ucmp(sig->r, dsa->q) >= 0)
|
||||
{
|
||||
ret = 0;
|
||||
goto err;
|
||||
}
|
||||
if (BN_is_zero(sig->s) || sig->s->neg || BN_ucmp(sig->s, dsa->q) >= 0)
|
||||
{
|
||||
ret = 0;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Calculate W = inv(S) mod Q
|
||||
* save W in u2 */
|
||||
if ((BN_mod_inverse(&u2,sig->s,dsa->q,ctx)) == NULL) goto err;
|
||||
|
||||
/* save M in u1 */
|
||||
if (BN_bin2bn(dgst,dgst_len,&u1) == NULL) goto err;
|
||||
|
||||
/* u1 = M * w mod q */
|
||||
if (!BN_mod_mul(&u1,&u1,&u2,dsa->q,ctx)) goto err;
|
||||
|
||||
/* u2 = r * w mod q */
|
||||
if (!BN_mod_mul(&u2,sig->r,&u2,dsa->q,ctx)) goto err;
|
||||
|
||||
if ((dsa->method_mont_p == NULL) && (dsa->flags & DSA_FLAG_CACHE_MONT_P))
|
||||
{
|
||||
if ((dsa->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL)
|
||||
if (!BN_MONT_CTX_set((BN_MONT_CTX *)dsa->method_mont_p,
|
||||
dsa->p,ctx)) goto err;
|
||||
}
|
||||
mont=(BN_MONT_CTX *)dsa->method_mont_p;
|
||||
|
||||
#if 0
|
||||
{
|
||||
BIGNUM t2;
|
||||
|
||||
BN_init(&t2);
|
||||
/* v = ( g^u1 * y^u2 mod p ) mod q */
|
||||
/* let t1 = g ^ u1 mod p */
|
||||
if (!BN_mod_exp_mont(&t1,dsa->g,&u1,dsa->p,ctx,mont)) goto err;
|
||||
/* let t2 = y ^ u2 mod p */
|
||||
if (!BN_mod_exp_mont(&t2,dsa->pub_key,&u2,dsa->p,ctx,mont)) goto err;
|
||||
/* let u1 = t1 * t2 mod p */
|
||||
if (!BN_mod_mul(&u1,&t1,&t2,dsa->p,ctx)) goto err_bn;
|
||||
BN_free(&t2);
|
||||
}
|
||||
/* let u1 = u1 mod q */
|
||||
if (!BN_mod(&u1,&u1,dsa->q,ctx)) goto err;
|
||||
#else
|
||||
{
|
||||
if (!dsa->meth->dsa_mod_exp(dsa, &t1,dsa->g,&u1,dsa->pub_key,&u2,
|
||||
dsa->p,ctx,mont)) goto err;
|
||||
/* BN_copy(&u1,&t1); */
|
||||
/* let u1 = u1 mod q */
|
||||
if (!BN_mod(&u1,&t1,dsa->q,ctx)) goto err;
|
||||
}
|
||||
#endif
|
||||
/* V is now in u1. If the signature is correct, it will be
|
||||
* equal to R. */
|
||||
ret=(BN_ucmp(&u1, sig->r) == 0);
|
||||
|
||||
err:
|
||||
if (ret != 1) DSAerr(DSA_F_DSA_DO_VERIFY,ERR_R_BN_LIB);
|
||||
if (ctx != NULL) BN_CTX_free(ctx);
|
||||
BN_free(&u1);
|
||||
BN_free(&u2);
|
||||
BN_free(&t1);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
static int dsa_init(DSA *dsa)
|
||||
{
|
||||
dsa->flags|=DSA_FLAG_CACHE_MONT_P;
|
||||
return(1);
|
||||
}
|
||||
|
||||
static int dsa_finish(DSA *dsa)
|
||||
{
|
||||
if(dsa->method_mont_p)
|
||||
BN_MONT_CTX_free((BN_MONT_CTX *)dsa->method_mont_p);
|
||||
return(1);
|
||||
}
|
||||
|
||||
static int dsa_mod_exp(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1,
|
||||
BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx,
|
||||
BN_MONT_CTX *in_mont)
|
||||
{
|
||||
return BN_mod_exp2_mont(rr, a1, p1, a2, p2, m, ctx, in_mont);
|
||||
}
|
||||
|
||||
static int dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||
const BIGNUM *m, BN_CTX *ctx,
|
||||
BN_MONT_CTX *m_ctx)
|
||||
{
|
||||
return BN_mod_exp_mont(r, a, p, m, ctx, m_ctx);
|
||||
}
|
||||
|
||||
#else /* ndef FIPS */
|
||||
|
||||
static void *dummy=&dummy;
|
||||
|
||||
#endif /* ndef FIPS */
|
@ -1,253 +0,0 @@
|
||||
/* crypto/dsa/dsatest.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* 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 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "../e_os.h"
|
||||
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/err.h>
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
#include <openssl/engine.h>
|
||||
#endif
|
||||
#include <openssl/fips.h>
|
||||
#include <openssl/fips_rand.h>
|
||||
|
||||
#ifdef OPENSSL_NO_DSA
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
printf("No DSA support\n");
|
||||
return(0);
|
||||
}
|
||||
#else
|
||||
#include <openssl/dsa.h>
|
||||
|
||||
#ifdef OPENSSL_SYS_WIN16
|
||||
#define MS_CALLBACK _far _loadds
|
||||
#else
|
||||
#define MS_CALLBACK
|
||||
#endif
|
||||
|
||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
|
||||
|
||||
/* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to
|
||||
* FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */
|
||||
static unsigned char seed[20]={
|
||||
0xd5,0x01,0x4e,0x4b,0x60,0xef,0x2b,0xa8,0xb6,0x21,0x1b,0x40,
|
||||
0x62,0xba,0x32,0x24,0xe0,0x42,0x7d,0xd3,
|
||||
};
|
||||
|
||||
static unsigned char out_p[]={
|
||||
0x8d,0xf2,0xa4,0x94,0x49,0x22,0x76,0xaa,
|
||||
0x3d,0x25,0x75,0x9b,0xb0,0x68,0x69,0xcb,
|
||||
0xea,0xc0,0xd8,0x3a,0xfb,0x8d,0x0c,0xf7,
|
||||
0xcb,0xb8,0x32,0x4f,0x0d,0x78,0x82,0xe5,
|
||||
0xd0,0x76,0x2f,0xc5,0xb7,0x21,0x0e,0xaf,
|
||||
0xc2,0xe9,0xad,0xac,0x32,0xab,0x7a,0xac,
|
||||
0x49,0x69,0x3d,0xfb,0xf8,0x37,0x24,0xc2,
|
||||
0xec,0x07,0x36,0xee,0x31,0xc8,0x02,0x91,
|
||||
};
|
||||
|
||||
static unsigned char out_q[]={
|
||||
0xc7,0x73,0x21,0x8c,0x73,0x7e,0xc8,0xee,
|
||||
0x99,0x3b,0x4f,0x2d,0xed,0x30,0xf4,0x8e,
|
||||
0xda,0xce,0x91,0x5f,
|
||||
};
|
||||
|
||||
static unsigned char out_g[]={
|
||||
0x62,0x6d,0x02,0x78,0x39,0xea,0x0a,0x13,
|
||||
0x41,0x31,0x63,0xa5,0x5b,0x4c,0xb5,0x00,
|
||||
0x29,0x9d,0x55,0x22,0x95,0x6c,0xef,0xcb,
|
||||
0x3b,0xff,0x10,0xf3,0x99,0xce,0x2c,0x2e,
|
||||
0x71,0xcb,0x9d,0xe5,0xfa,0x24,0xba,0xbf,
|
||||
0x58,0xe5,0xb7,0x95,0x21,0x92,0x5c,0x9c,
|
||||
0xc4,0x2e,0x9f,0x6f,0x46,0x4b,0x08,0x8c,
|
||||
0xc5,0x72,0xaf,0x53,0xe6,0xd7,0x88,0x02,
|
||||
};
|
||||
|
||||
static const unsigned char str1[]="12345678901234567890";
|
||||
|
||||
static const char rnd_seed[] = "string to make the random number generator think it has entropy";
|
||||
static const unsigned char rnd_key1[]="12345678";
|
||||
static const unsigned char rnd_key2[]="abcdefgh";
|
||||
|
||||
static BIO *bio_err=NULL;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
DSA *dsa=NULL;
|
||||
int counter,ret=0,i,j;
|
||||
unsigned char buf[256];
|
||||
unsigned long h;
|
||||
unsigned char sig[256];
|
||||
unsigned int siglen;
|
||||
|
||||
#ifdef FIPS
|
||||
FIPS_mode_set(1);
|
||||
#endif
|
||||
if (bio_err == NULL)
|
||||
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
||||
|
||||
CRYPTO_malloc_debug_init();
|
||||
CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
ERR_load_crypto_strings();
|
||||
FIPS_set_prng_key(rnd_key1,rnd_key2);
|
||||
RAND_seed(rnd_seed, sizeof rnd_seed);
|
||||
|
||||
BIO_printf(bio_err,"test generation of DSA parameters\n");
|
||||
|
||||
dsa=DSA_generate_parameters(512,seed,20,&counter,&h,dsa_cb,bio_err);
|
||||
|
||||
BIO_printf(bio_err,"seed\n");
|
||||
for (i=0; i<20; i+=4)
|
||||
{
|
||||
BIO_printf(bio_err,"%02X%02X%02X%02X ",
|
||||
seed[i],seed[i+1],seed[i+2],seed[i+3]);
|
||||
}
|
||||
BIO_printf(bio_err,"\ncounter=%d h=%d\n",counter,h);
|
||||
|
||||
if (dsa == NULL) goto end;
|
||||
DSA_print(bio_err,dsa,0);
|
||||
if (counter != 105)
|
||||
{
|
||||
BIO_printf(bio_err,"counter should be 105\n");
|
||||
goto end;
|
||||
}
|
||||
if (h != 2)
|
||||
{
|
||||
BIO_printf(bio_err,"h should be 2\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
i=BN_bn2bin(dsa->q,buf);
|
||||
j=sizeof(out_q);
|
||||
if ((i != j) || (memcmp(buf,out_q,i) != 0))
|
||||
{
|
||||
BIO_printf(bio_err,"q value is wrong\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
i=BN_bn2bin(dsa->p,buf);
|
||||
j=sizeof(out_p);
|
||||
if ((i != j) || (memcmp(buf,out_p,i) != 0))
|
||||
{
|
||||
BIO_printf(bio_err,"p value is wrong\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
i=BN_bn2bin(dsa->g,buf);
|
||||
j=sizeof(out_g);
|
||||
if ((i != j) || (memcmp(buf,out_g,i) != 0))
|
||||
{
|
||||
BIO_printf(bio_err,"g value is wrong\n");
|
||||
goto end;
|
||||
}
|
||||
DSA_generate_key(dsa);
|
||||
DSA_sign(0, str1, 20, sig, &siglen, dsa);
|
||||
if (DSA_verify(0, str1, 20, sig, siglen, dsa) == 1)
|
||||
ret=1;
|
||||
end:
|
||||
if (!ret)
|
||||
ERR_print_errors(bio_err);
|
||||
if (dsa != NULL) DSA_free(dsa);
|
||||
CRYPTO_cleanup_all_ex_data();
|
||||
ERR_remove_state(0);
|
||||
ERR_free_strings();
|
||||
CRYPTO_mem_leaks(bio_err);
|
||||
if (bio_err != NULL)
|
||||
{
|
||||
BIO_free(bio_err);
|
||||
bio_err = NULL;
|
||||
}
|
||||
EXIT(!ret);
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int cb_exit(int ec)
|
||||
{
|
||||
EXIT(ec);
|
||||
return(0); /* To keep some compilers quiet */
|
||||
}
|
||||
|
||||
static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
|
||||
{
|
||||
char c='*';
|
||||
static int ok=0,num=0;
|
||||
|
||||
if (p == 0) { c='.'; num++; };
|
||||
if (p == 1) c='+';
|
||||
if (p == 2) { c='*'; ok++; }
|
||||
if (p == 3) c='\n';
|
||||
BIO_write(arg,&c,1);
|
||||
(void)BIO_flush(arg);
|
||||
|
||||
if (!ok && (p == 0) && (num > 1))
|
||||
{
|
||||
BIO_printf((BIO *)arg,"error in dsatest\n");
|
||||
cb_exit(1);
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,4 +0,0 @@
|
||||
SHA1(fips.c)= 39f2919005cb5c8d3b806b52d81a9247804dbe64
|
||||
SHA1(fips_err_wrapper.c)= 0cbe881739f6e7d91308e2e74b92032e69007528
|
||||
SHA1(fips.h)= 53ce62539f2b69141693d427af9a4c4abc822cd0
|
||||
SHA1(fips_err.c)= 197ccc595c33079de87ae02da868808a9ca60648
|
74
fips/fips.c
74
fips/fips.c
@ -1,74 +0,0 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2003 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <openssl/fips.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/fips_rand.h>
|
||||
|
||||
#ifdef FIPS
|
||||
|
||||
void FIPS_mode_set(int onoff)
|
||||
{
|
||||
FIPS_mode=onoff;
|
||||
if(onoff)
|
||||
{
|
||||
FIPS_rand_check=&rand_fips_meth;
|
||||
RAND_set_rand_method(&rand_fips_meth);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* here just to cause error codes to exist */
|
||||
static void dummy()
|
||||
{
|
||||
FIPSerr(FIPS_F_HASH_FINAL,FIPS_F_NON_FIPS_METHOD);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
85
fips/fips.h
85
fips/fips.h
@ -1,85 +0,0 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2003 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef FIPS
|
||||
/* Note that these are defined in crypto/cryptlib.c so they're
|
||||
* available even without -lfips.
|
||||
*/
|
||||
extern int FIPS_mode;
|
||||
extern void *FIPS_rand_check;
|
||||
struct dsa_st;
|
||||
|
||||
void FIPS_mode_set(int onoff);
|
||||
int FIPS_dsa_check(struct dsa_st *dsa);
|
||||
|
||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
||||
* made after this point may be overwritten when the script is next run.
|
||||
*/
|
||||
void ERR_load_FIPS_strings(void);
|
||||
|
||||
/* BEGIN ERROR CODES */
|
||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
||||
* made after this point may be overwritten when the script is next run.
|
||||
*/
|
||||
void ERR_load_FIPS_strings(void);
|
||||
|
||||
/* Error codes for the FIPS functions. */
|
||||
|
||||
/* Function codes. */
|
||||
#define FIPS_F_FIPS_DSA_CHECK 102
|
||||
#define FIPS_F_HASH_FINAL 100
|
||||
#define FIPS_F_SSLEAY_RAND_BYTES 101
|
||||
|
||||
/* Reason codes. */
|
||||
#define FIPS_R_NON_FIPS_METHOD 100
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
FP=$1
|
||||
shift
|
||||
|
||||
egrep '^CFLAG=.*-DFIPS ' $TOP/Makefile || exit 0
|
||||
|
||||
$TOP/fips/sha1/fips_standalone_sha1 $@ | diff -u $FP -
|
@ -1,96 +0,0 @@
|
||||
/* fips/fips_err.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1999-2002 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@OpenSSL.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
* ====================================================================
|
||||
*
|
||||
* This product includes cryptographic software written by Eric Young
|
||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||
* Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
*/
|
||||
|
||||
/* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
||||
* made to it will be overwritten when the script next updates this file,
|
||||
* only reason strings will be preserved.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/fips.h>
|
||||
|
||||
/* BEGIN ERROR CODES */
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
static ERR_STRING_DATA FIPS_str_functs[]=
|
||||
{
|
||||
{ERR_PACK(0,FIPS_F_FIPS_DSA_CHECK,0), "FIPS_dsa_check"},
|
||||
{ERR_PACK(0,FIPS_F_HASH_FINAL,0), "HASH_FINAL"},
|
||||
{ERR_PACK(0,FIPS_F_SSLEAY_RAND_BYTES,0), "SSLEAY_RAND_BYTES"},
|
||||
{0,NULL}
|
||||
};
|
||||
|
||||
static ERR_STRING_DATA FIPS_str_reasons[]=
|
||||
{
|
||||
{FIPS_R_NON_FIPS_METHOD ,"non fips method"},
|
||||
{0,NULL}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
void ERR_load_FIPS_strings(void)
|
||||
{
|
||||
static int init=1;
|
||||
|
||||
if (init)
|
||||
{
|
||||
init=0;
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
ERR_load_strings(ERR_LIB_FIPS,FIPS_str_functs);
|
||||
ERR_load_strings(ERR_LIB_FIPS,FIPS_str_reasons);
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
#ifdef FIPS
|
||||
# include "fips_err.c"
|
||||
#else
|
||||
static void *dummy=&dummy;
|
||||
#endif
|
@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
S=`pwd`/fips/sha1/fips_standalone_sha1
|
||||
|
||||
cd fips/sha1
|
||||
$S fips_standalone_sha1.c fips_sha1dgst.c fips_sha_locl.h fips_md32_common.h > standalone.sha1
|
||||
|
||||
cd ..
|
||||
$S fips.c fips_err_wrapper.c fips.h fips_err.c > fingerprint.sha1
|
||||
|
||||
cd rand
|
||||
$S fips_rand.c fips_rand.h > fingerprint.sha1
|
||||
|
||||
cd ../sha1
|
||||
$S fips_sha1dgst.c fips_sha_locl.h fips_md32_common.h > fingerprint.sha1
|
||||
|
||||
cd ../aes
|
||||
$S fips_aes_core.c fips_aes_locl.h > fingerprint.sha1
|
||||
|
||||
cd ../dsa
|
||||
$S fips_dsa_ossl.c > fingerprint.sha1
|
||||
|
||||
cd ../des
|
||||
$S fips_des_enc.c fips_des_locl.h > fingerprint.sha1
|
@ -1,2 +0,0 @@
|
||||
Makefile.save
|
||||
lib
|
@ -1,94 +0,0 @@
|
||||
#
|
||||
# SSLeay/fips/rand/Makefile
|
||||
#
|
||||
|
||||
DIR= rand
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
INSTALL_PREFIX=
|
||||
OPENSSLDIR= /usr/local/ssl
|
||||
INSTALLTOP=/usr/local/ssl
|
||||
MAKE= make -f Makefile.ssl
|
||||
MAKEDEPPROG= makedepend
|
||||
MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
|
||||
MAKEFILE= Makefile.ssl
|
||||
AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST= fips_randtest.c
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC=fips_rand.c
|
||||
LIBOBJ=fips_rand.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER= fips_rand.h
|
||||
HEADER= $(EXHEADER)
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=fips SDIRS=$(DIR) sub_all)
|
||||
|
||||
all: check lib
|
||||
|
||||
check:
|
||||
TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(TOP)/util/point.sh Makefile.ssl Makefile
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@for i in $(EXHEADER) ; \
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
tags:
|
||||
ctags $(SRC)
|
||||
|
||||
tests:
|
||||
|
||||
lint:
|
||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||
|
||||
depend:
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
fips_rand.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
|
||||
fips_rand.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
|
||||
fips_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
|
||||
fips_rand.o: ../../include/openssl/fips_rand.h ../../include/openssl/lhash.h
|
||||
fips_rand.o: ../../include/openssl/opensslconf.h
|
||||
fips_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
fips_rand.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
|
||||
fips_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
fips_rand.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
|
||||
fips_rand.o: fips_rand.c
|
@ -1,2 +0,0 @@
|
||||
SHA1(fips_rand.c)= 3ba9ead2bec03b9a31527761472616ee26d005dc
|
||||
SHA1(fips_rand.h)= c25efc81b5fade7d0cc406be5c9a083f20671b7d
|
@ -1,236 +0,0 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2003 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is a FIPS approved PRNG, ANSI X9.17, as specified in HAC,
|
||||
* Menezes et al., p.173
|
||||
*/
|
||||
|
||||
#include <openssl/des.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/fips_rand.h>
|
||||
#include <sys/time.h>
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define SEED_SIZE 8
|
||||
|
||||
static unsigned char seed[SEED_SIZE];
|
||||
static int n_seed;
|
||||
static int o_seed;
|
||||
static DES_cblock key1;
|
||||
static DES_cblock key2;
|
||||
static DES_key_schedule ks1,ks2;
|
||||
static int key_set;
|
||||
static int test_mode;
|
||||
static unsigned char test_faketime[8];
|
||||
|
||||
static void fips_rand_cleanup(void);
|
||||
static void fips_rand_seed(const void *buf, int num);
|
||||
static void fips_rand_add(const void *buf, int num, double add_entropy);
|
||||
static int fips_rand_bytes(unsigned char *buf, int num);
|
||||
static int fips_rand_status(void);
|
||||
|
||||
RAND_METHOD rand_fips_meth=
|
||||
{
|
||||
fips_rand_seed,
|
||||
fips_rand_bytes,
|
||||
fips_rand_cleanup,
|
||||
fips_rand_add,
|
||||
fips_rand_bytes,
|
||||
fips_rand_status
|
||||
};
|
||||
|
||||
void FIPS_set_prng_key(const unsigned char k1[8],const unsigned char k2[8])
|
||||
{
|
||||
memcpy(&key1,k1,sizeof key1);
|
||||
memcpy(&key2,k2,sizeof key2);
|
||||
key_set=1;
|
||||
}
|
||||
|
||||
void FIPS_test_mode(int test,const unsigned char faketime[8])
|
||||
{
|
||||
test_mode=test;
|
||||
if(!test_mode)
|
||||
return;
|
||||
memcpy(test_faketime,faketime,sizeof test_faketime);
|
||||
}
|
||||
|
||||
static void fips_gettime(unsigned char buf[8])
|
||||
{
|
||||
struct timeval tv;
|
||||
#ifndef GETPID_IS_MEANINGLESS
|
||||
long pid;
|
||||
#endif
|
||||
|
||||
if(test_mode)
|
||||
{
|
||||
fprintf(stderr,"WARNING!!! PRNG IN TEST MODE!!!\n");
|
||||
memcpy(buf,test_faketime,sizeof test_faketime);
|
||||
return;
|
||||
}
|
||||
gettimeofday(&tv,NULL);
|
||||
assert(sizeof(long) == 4);
|
||||
*(long *)&buf[0]=tv.tv_sec;
|
||||
*(long *)&buf[4]=tv.tv_usec;
|
||||
|
||||
#ifndef GETPID_IS_MEANINGLESS
|
||||
/* we mix in the PID to ensure that after a fork the children don't give
|
||||
* the same results as each other
|
||||
*/
|
||||
pid=getpid();
|
||||
/* make sure we shift the pid to the MSB */
|
||||
if((pid&0xffff0000) == 0)
|
||||
pid<<=16;
|
||||
*(long *)&buf[0]^=pid;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void fips_rand_encrypt(unsigned char *out,const unsigned char *in)
|
||||
{
|
||||
DES_ecb2_encrypt(in,out,&ks1,&ks2,1);
|
||||
}
|
||||
|
||||
static void fips_rand_cleanup(void)
|
||||
{
|
||||
OPENSSL_cleanse(seed,sizeof seed);
|
||||
n_seed=0;
|
||||
}
|
||||
|
||||
static void fips_rand_seed(const void *buf_, int num)
|
||||
{
|
||||
const char *buf=buf_;
|
||||
int n;
|
||||
static int init;
|
||||
|
||||
/* If the key hasn't been set, we can't seed! */
|
||||
if(!key_set)
|
||||
return;
|
||||
|
||||
CRYPTO_w_lock(CRYPTO_LOCK_RAND);
|
||||
if(!init)
|
||||
{
|
||||
init=1;
|
||||
DES_set_key(&key1,&ks1);
|
||||
DES_set_key(&key2,&ks2);
|
||||
}
|
||||
|
||||
/*
|
||||
* This algorithm only uses 64 bits of seed, so ensure that we use
|
||||
* the most recent 64 bits.
|
||||
*/
|
||||
for(n=0 ; n < num ; )
|
||||
{
|
||||
int t=num-n;
|
||||
|
||||
if(o_seed+t > sizeof seed)
|
||||
t=sizeof seed-o_seed;
|
||||
memcpy(seed+o_seed,buf+n,t);
|
||||
n+=t;
|
||||
o_seed+=t;
|
||||
if(o_seed == sizeof seed)
|
||||
o_seed=0;
|
||||
if(n_seed < sizeof seed)
|
||||
n_seed+=t;
|
||||
}
|
||||
|
||||
CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
|
||||
}
|
||||
|
||||
static void fips_rand_add(const void *buf, int num, double add_entropy)
|
||||
{
|
||||
fips_rand_seed(buf,num);
|
||||
}
|
||||
|
||||
static int fips_rand_bytes(unsigned char *buf,int num)
|
||||
{
|
||||
int n;
|
||||
unsigned char timeseed[8];
|
||||
unsigned char intermediate[SEED_SIZE];
|
||||
unsigned char output[SEED_SIZE];
|
||||
|
||||
if(n_seed < sizeof seed)
|
||||
{
|
||||
RANDerr(RAND_F_FIPS_RAND_BYTES,RAND_R_PRNG_NOT_SEEDED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fips_gettime(timeseed);
|
||||
fips_rand_encrypt(intermediate,timeseed);
|
||||
|
||||
CRYPTO_w_lock(CRYPTO_LOCK_RAND);
|
||||
|
||||
for(n=0 ; n < num ; )
|
||||
{
|
||||
unsigned char t[SEED_SIZE];
|
||||
int l;
|
||||
|
||||
/* now generate a full 64 bits of "randomness" */
|
||||
for(l=0 ; l < sizeof t ; ++l)
|
||||
t[l]=intermediate[l]^seed[l];
|
||||
fips_rand_encrypt(output,t);
|
||||
for(l=0 ; l < sizeof t ; ++l)
|
||||
t[l]=output[l]^seed[l];
|
||||
fips_rand_encrypt(seed,t);
|
||||
|
||||
l=SEED_SIZE < num-n ? SEED_SIZE : num-n;
|
||||
memcpy(buf+n,output,l);
|
||||
n+=l;
|
||||
}
|
||||
|
||||
CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
static int fips_rand_status(void)
|
||||
{
|
||||
return n_seed == sizeof seed;
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2003 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "des.h"
|
||||
|
||||
void FIPS_set_prng_key(const unsigned char k1[8],const unsigned char k2[8]);
|
||||
void FIPS_test_mode(int test,const unsigned char faketime[8]);
|
||||
|
||||
extern RAND_METHOD rand_fips_meth;
|
@ -1,348 +0,0 @@
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* 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 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2003 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/fips_rand.h>
|
||||
|
||||
#include "../e_os.h"
|
||||
|
||||
/* some FIPS 140-1 random number test */
|
||||
/* some simple tests */
|
||||
|
||||
static DES_cblock prng_key1={0x21,0x58,0x47,0xb7,0xc2,0x97,0x5a,0x8e};
|
||||
static DES_cblock prng_key2={0x61,0x23,0x05,0x96,0x18,0x91,0x86,0xac};
|
||||
static unsigned char prng_seed[8]={0x6b,0xa3,0x4f,0x07,0xe4,0x2a,0xb0,0xc};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DES_cblock keys[2];
|
||||
const unsigned char time[8];
|
||||
const unsigned char seed[8];
|
||||
const unsigned char block1[8];
|
||||
const unsigned char block100[8];
|
||||
} PRNGtest;
|
||||
|
||||
/* FIXME: these test vectors are made up! */
|
||||
static PRNGtest t1=
|
||||
{
|
||||
{ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
|
||||
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
|
||||
},
|
||||
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
|
||||
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
|
||||
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
|
||||
{ 0x8c,0xa6,0x4d,0xe9,0xc1,0xb1,0x23,0xa7 }
|
||||
};
|
||||
static PRNGtest t2=
|
||||
{
|
||||
{ { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
|
||||
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff } },
|
||||
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
|
||||
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
|
||||
{ 0xcd,0x57,0xcb,0xfa,0x08,0xd8,0xdb,0x3a },
|
||||
{ 0x05,0xad,0x17,0xbd,0xd8,0x32,0x96,0x79 }
|
||||
};
|
||||
|
||||
static void dump(const unsigned char *b,int n)
|
||||
{
|
||||
while(n-- > 0)
|
||||
{
|
||||
printf(" %02x",*b++);
|
||||
}
|
||||
}
|
||||
|
||||
static void compare(const unsigned char *result,const unsigned char *expected,
|
||||
int n)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0 ; i < n ; ++i)
|
||||
if(result[i] != expected[i])
|
||||
{
|
||||
puts("Random test failed, got:");
|
||||
dump(result,8);
|
||||
puts("\n expected:");
|
||||
dump(expected,8);
|
||||
putchar('\n');
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void run_test(const PRNGtest *t)
|
||||
{
|
||||
unsigned char buf[8];
|
||||
int n;
|
||||
|
||||
FIPS_set_prng_key(t->keys[0],t->keys[1]);
|
||||
FIPS_test_mode(1,t->time);
|
||||
RAND_seed(t->seed,sizeof t->seed);
|
||||
|
||||
RAND_bytes(buf,8);
|
||||
compare(buf,t->block1,8);
|
||||
for(n=0 ; n < 99 ; ++n)
|
||||
RAND_bytes(buf,8);
|
||||
compare(buf,t->block100,8);
|
||||
FIPS_test_mode(0,NULL);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
unsigned char buf[2500];
|
||||
int i,j,k,s,sign,nsign,err=0;
|
||||
unsigned long n1;
|
||||
unsigned long n2[16];
|
||||
unsigned long runs[2][34];
|
||||
/*double d; */
|
||||
long d;
|
||||
|
||||
RAND_set_rand_method(&rand_fips_meth);
|
||||
|
||||
run_test(&t1);
|
||||
run_test(&t2);
|
||||
|
||||
FIPS_set_prng_key(prng_key1,prng_key2);
|
||||
RAND_seed(prng_seed,sizeof prng_seed);
|
||||
|
||||
i = RAND_pseudo_bytes(buf,2500);
|
||||
if (i <= 0)
|
||||
{
|
||||
printf ("init failed, the rand method is not properly installed\n");
|
||||
err++;
|
||||
goto err;
|
||||
}
|
||||
|
||||
n1=0;
|
||||
for (i=0; i<16; i++) n2[i]=0;
|
||||
for (i=0; i<34; i++) runs[0][i]=runs[1][i]=0;
|
||||
|
||||
/* test 1 and 2 */
|
||||
sign=0;
|
||||
nsign=0;
|
||||
for (i=0; i<2500; i++)
|
||||
{
|
||||
j=buf[i];
|
||||
|
||||
n2[j&0x0f]++;
|
||||
n2[(j>>4)&0x0f]++;
|
||||
|
||||
for (k=0; k<8; k++)
|
||||
{
|
||||
s=(j&0x01);
|
||||
if (s == sign)
|
||||
nsign++;
|
||||
else
|
||||
{
|
||||
if (nsign > 34) nsign=34;
|
||||
if (nsign != 0)
|
||||
{
|
||||
runs[sign][nsign-1]++;
|
||||
if (nsign > 6)
|
||||
runs[sign][5]++;
|
||||
}
|
||||
sign=s;
|
||||
nsign=1;
|
||||
}
|
||||
|
||||
if (s) n1++;
|
||||
j>>=1;
|
||||
}
|
||||
}
|
||||
if (nsign > 34) nsign=34;
|
||||
if (nsign != 0) runs[sign][nsign-1]++;
|
||||
|
||||
/* test 1 */
|
||||
if (!((9654 < n1) && (n1 < 10346)))
|
||||
{
|
||||
printf("test 1 failed, X=%lu\n",n1);
|
||||
err++;
|
||||
}
|
||||
printf("test 1 done\n");
|
||||
|
||||
/* test 2 */
|
||||
#ifdef undef
|
||||
d=0;
|
||||
for (i=0; i<16; i++)
|
||||
d+=n2[i]*n2[i];
|
||||
d=d*16.0/5000.0-5000.0;
|
||||
if (!((1.03 < d) && (d < 57.4)))
|
||||
{
|
||||
printf("test 2 failed, X=%.2f\n",d);
|
||||
err++;
|
||||
}
|
||||
#endif
|
||||
d=0;
|
||||
for (i=0; i<16; i++)
|
||||
d+=n2[i]*n2[i];
|
||||
d=(d*8)/25-500000;
|
||||
if (!((103 < d) && (d < 5740)))
|
||||
{
|
||||
printf("test 2 failed, X=%ld.%02ld\n",d/100L,d%100L);
|
||||
err++;
|
||||
}
|
||||
printf("test 2 done\n");
|
||||
|
||||
/* test 3 */
|
||||
for (i=0; i<2; i++)
|
||||
{
|
||||
if (!((2267 < runs[i][0]) && (runs[i][0] < 2733)))
|
||||
{
|
||||
printf("test 3 failed, bit=%d run=%d num=%lu\n",
|
||||
i,1,runs[i][0]);
|
||||
err++;
|
||||
}
|
||||
if (!((1079 < runs[i][1]) && (runs[i][1] < 1421)))
|
||||
{
|
||||
printf("test 3 failed, bit=%d run=%d num=%lu\n",
|
||||
i,2,runs[i][1]);
|
||||
err++;
|
||||
}
|
||||
if (!(( 502 < runs[i][2]) && (runs[i][2] < 748)))
|
||||
{
|
||||
printf("test 3 failed, bit=%d run=%d num=%lu\n",
|
||||
i,3,runs[i][2]);
|
||||
err++;
|
||||
}
|
||||
if (!(( 223 < runs[i][3]) && (runs[i][3] < 402)))
|
||||
{
|
||||
printf("test 3 failed, bit=%d run=%d num=%lu\n",
|
||||
i,4,runs[i][3]);
|
||||
err++;
|
||||
}
|
||||
if (!(( 90 < runs[i][4]) && (runs[i][4] < 223)))
|
||||
{
|
||||
printf("test 3 failed, bit=%d run=%d num=%lu\n",
|
||||
i,5,runs[i][4]);
|
||||
err++;
|
||||
}
|
||||
if (!(( 90 < runs[i][5]) && (runs[i][5] < 223)))
|
||||
{
|
||||
printf("test 3 failed, bit=%d run=%d num=%lu\n",
|
||||
i,6,runs[i][5]);
|
||||
err++;
|
||||
}
|
||||
}
|
||||
printf("test 3 done\n");
|
||||
|
||||
/* test 4 */
|
||||
if (runs[0][33] != 0)
|
||||
{
|
||||
printf("test 4 failed, bit=%d run=%d num=%lu\n",
|
||||
0,34,runs[0][33]);
|
||||
err++;
|
||||
}
|
||||
if (runs[1][33] != 0)
|
||||
{
|
||||
printf("test 4 failed, bit=%d run=%d num=%lu\n",
|
||||
1,34,runs[1][33]);
|
||||
err++;
|
||||
}
|
||||
printf("test 4 done\n");
|
||||
err:
|
||||
err=((err)?1:0);
|
||||
EXIT(err);
|
||||
return(err);
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
Makefile.save
|
||||
lib
|
||||
fips_standalone_sha1
|
@ -1,91 +0,0 @@
|
||||
#
|
||||
# SSLeay/fips/sha1/Makefile
|
||||
#
|
||||
|
||||
DIR= sha1
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
INSTALL_PREFIX=
|
||||
OPENSSLDIR= /usr/local/ssl
|
||||
INSTALLTOP=/usr/local/ssl
|
||||
MAKE= make -f Makefile.ssl
|
||||
MAKEDEPPROG= makedepend
|
||||
MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
|
||||
MAKEFILE= Makefile.ssl
|
||||
AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST= fips_sha1test.c sha1vectors.txt sha1hashes.txt
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC=fips_sha1dgst.c
|
||||
LIBOBJ=fips_sha1dgst.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER=
|
||||
HEADER= $(EXHEADER) fips_sha_locl.h fips_md32_common.h
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=fips SDIRS=$(DIR) sub_all)
|
||||
|
||||
all: check lib fips_standalone_sha1
|
||||
|
||||
check:
|
||||
TOP=`pwd`/$(TOP) ../fips_check_sha1 fingerprint.sha1 $(SRC) $(HEADER)
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
fips_standalone_sha1: fips_standalone_sha1.o fips_sha1dgst.o
|
||||
$(CC) -o fips_standalone_sha1 $(CFLAGS) fips_standalone_sha1.o \
|
||||
fips_sha1dgst.o
|
||||
TOP=`pwd`/$(TOP) ../fips_check_sha1 standalone.sha1 \
|
||||
fips_standalone_sha1.c fips_sha1dgst.c fips_sha_locl.h \
|
||||
fips_md32_common.h
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(TOP)/util/point.sh Makefile.ssl Makefile
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@for i in $(EXHEADER) ; \
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
tags:
|
||||
ctags $(SRC)
|
||||
|
||||
tests:
|
||||
|
||||
lint:
|
||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||
|
||||
depend:
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
fips_sha1dgst.o: ../../include/openssl/opensslv.h fips_sha1dgst.c
|
@ -1,3 +0,0 @@
|
||||
SHA1(fips_sha1dgst.c)= 609e2cbf5d3cdcf318ec10238a0e82b93b78e6b5
|
||||
SHA1(fips_sha_locl.h)= 677427c495b571991f013939ea7e5dea87828f8c
|
||||
SHA1(fips_md32_common.h)= 4f41bcde24750b3b8c99a06bcba2fe06ff8db4d0
|
@ -1,637 +0,0 @@
|
||||
/* crypto/md32_common.h */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1999-2002 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* licensing@OpenSSL.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
* ====================================================================
|
||||
*
|
||||
* This product includes cryptographic software written by Eric Young
|
||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||
* Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is a generic 32 bit "collector" for message digest algorithms.
|
||||
* Whenever needed it collects input character stream into chunks of
|
||||
* 32 bit values and invokes a block function that performs actual hash
|
||||
* calculations.
|
||||
*
|
||||
* Porting guide.
|
||||
*
|
||||
* Obligatory macros:
|
||||
*
|
||||
* DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN
|
||||
* this macro defines byte order of input stream.
|
||||
* HASH_CBLOCK
|
||||
* size of a unit chunk HASH_BLOCK operates on.
|
||||
* HASH_LONG
|
||||
* has to be at lest 32 bit wide, if it's wider, then
|
||||
* HASH_LONG_LOG2 *has to* be defined along
|
||||
* HASH_CTX
|
||||
* context structure that at least contains following
|
||||
* members:
|
||||
* typedef struct {
|
||||
* ...
|
||||
* HASH_LONG Nl,Nh;
|
||||
* HASH_LONG data[HASH_LBLOCK];
|
||||
* int num;
|
||||
* ...
|
||||
* } HASH_CTX;
|
||||
* HASH_UPDATE
|
||||
* name of "Update" function, implemented here.
|
||||
* HASH_TRANSFORM
|
||||
* name of "Transform" function, implemented here.
|
||||
* HASH_FINAL
|
||||
* name of "Final" function, implemented here.
|
||||
* HASH_BLOCK_HOST_ORDER
|
||||
* name of "block" function treating *aligned* input message
|
||||
* in host byte order, implemented externally.
|
||||
* HASH_BLOCK_DATA_ORDER
|
||||
* name of "block" function treating *unaligned* input message
|
||||
* in original (data) byte order, implemented externally (it
|
||||
* actually is optional if data and host are of the same
|
||||
* "endianess").
|
||||
* HASH_MAKE_STRING
|
||||
* macro convering context variables to an ASCII hash string.
|
||||
*
|
||||
* Optional macros:
|
||||
*
|
||||
* B_ENDIAN or L_ENDIAN
|
||||
* defines host byte-order.
|
||||
* HASH_LONG_LOG2
|
||||
* defaults to 2 if not states otherwise.
|
||||
* HASH_LBLOCK
|
||||
* assumed to be HASH_CBLOCK/4 if not stated otherwise.
|
||||
* HASH_BLOCK_DATA_ORDER_ALIGNED
|
||||
* alternative "block" function capable of treating
|
||||
* aligned input message in original (data) order,
|
||||
* implemented externally.
|
||||
*
|
||||
* MD5 example:
|
||||
*
|
||||
* #define DATA_ORDER_IS_LITTLE_ENDIAN
|
||||
*
|
||||
* #define HASH_LONG MD5_LONG
|
||||
* #define HASH_LONG_LOG2 MD5_LONG_LOG2
|
||||
* #define HASH_CTX MD5_CTX
|
||||
* #define HASH_CBLOCK MD5_CBLOCK
|
||||
* #define HASH_LBLOCK MD5_LBLOCK
|
||||
* #define HASH_UPDATE MD5_Update
|
||||
* #define HASH_TRANSFORM MD5_Transform
|
||||
* #define HASH_FINAL MD5_Final
|
||||
* #define HASH_BLOCK_HOST_ORDER md5_block_host_order
|
||||
* #define HASH_BLOCK_DATA_ORDER md5_block_data_order
|
||||
*
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
|
||||
#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
#error "DATA_ORDER must be defined!"
|
||||
#endif
|
||||
|
||||
#ifndef HASH_CBLOCK
|
||||
#error "HASH_CBLOCK must be defined!"
|
||||
#endif
|
||||
#ifndef HASH_LONG
|
||||
#error "HASH_LONG must be defined!"
|
||||
#endif
|
||||
#ifndef HASH_CTX
|
||||
#error "HASH_CTX must be defined!"
|
||||
#endif
|
||||
|
||||
#ifndef HASH_UPDATE
|
||||
#error "HASH_UPDATE must be defined!"
|
||||
#endif
|
||||
#ifndef HASH_TRANSFORM
|
||||
#error "HASH_TRANSFORM must be defined!"
|
||||
#endif
|
||||
#ifndef HASH_FINAL
|
||||
#error "HASH_FINAL must be defined!"
|
||||
#endif
|
||||
|
||||
#ifndef HASH_BLOCK_HOST_ORDER
|
||||
#error "HASH_BLOCK_HOST_ORDER must be defined!"
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* Moved below as it's required only if HASH_BLOCK_DATA_ORDER_ALIGNED
|
||||
* isn't defined.
|
||||
*/
|
||||
#ifndef HASH_BLOCK_DATA_ORDER
|
||||
#error "HASH_BLOCK_DATA_ORDER must be defined!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef HASH_LBLOCK
|
||||
#define HASH_LBLOCK (HASH_CBLOCK/4)
|
||||
#endif
|
||||
|
||||
#ifndef HASH_LONG_LOG2
|
||||
#define HASH_LONG_LOG2 2
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Engage compiler specific rotate intrinsic function if available.
|
||||
*/
|
||||
#undef ROTATE
|
||||
#ifndef PEDANTIC
|
||||
# if 0 /* defined(_MSC_VER) */
|
||||
# define ROTATE(a,n) _lrotl(a,n)
|
||||
# elif defined(__MWERKS__)
|
||||
# if defined(__POWERPC__)
|
||||
# define ROTATE(a,n) __rlwinm(a,n,0,31)
|
||||
# elif defined(__MC68K__)
|
||||
/* Motorola specific tweak. <appro@fy.chalmers.se> */
|
||||
# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
|
||||
# else
|
||||
# define ROTATE(a,n) __rol(a,n)
|
||||
# endif
|
||||
# elif defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
||||
/*
|
||||
* Some GNU C inline assembler templates. Note that these are
|
||||
* rotates by *constant* number of bits! But that's exactly
|
||||
* what we need here...
|
||||
*
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
|
||||
# define ROTATE(a,n) ({ register unsigned int ret; \
|
||||
asm ( \
|
||||
"roll %1,%0" \
|
||||
: "=r"(ret) \
|
||||
: "I"(n), "0"(a) \
|
||||
: "cc"); \
|
||||
ret; \
|
||||
})
|
||||
# elif defined(__powerpc) || defined(__ppc)
|
||||
# define ROTATE(a,n) ({ register unsigned int ret; \
|
||||
asm ( \
|
||||
"rlwinm %0,%1,%2,0,31" \
|
||||
: "=r"(ret) \
|
||||
: "r"(a), "I"(n)); \
|
||||
ret; \
|
||||
})
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/*
|
||||
* Engage compiler specific "fetch in reverse byte order"
|
||||
* intrinsic function if available.
|
||||
*/
|
||||
# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
||||
/* some GNU C inline assembler templates by <appro@fy.chalmers.se> */
|
||||
# if (defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)) && !defined(I386_ONLY)
|
||||
# define BE_FETCH32(a) ({ register unsigned int l=(a);\
|
||||
asm ( \
|
||||
"bswapl %0" \
|
||||
: "=r"(l) : "0"(l)); \
|
||||
l; \
|
||||
})
|
||||
# elif defined(__powerpc)
|
||||
# define LE_FETCH32(a) ({ register unsigned int l; \
|
||||
asm ( \
|
||||
"lwbrx %0,0,%1" \
|
||||
: "=r"(l) \
|
||||
: "r"(a)); \
|
||||
l; \
|
||||
})
|
||||
|
||||
# elif defined(__sparc) && defined(OPENSSL_SYS_ULTRASPARC)
|
||||
# define LE_FETCH32(a) ({ register unsigned int l; \
|
||||
asm ( \
|
||||
"lda [%1]#ASI_PRIMARY_LITTLE,%0"\
|
||||
: "=r"(l) \
|
||||
: "r"(a)); \
|
||||
l; \
|
||||
})
|
||||
# endif
|
||||
# endif
|
||||
#endif /* PEDANTIC */
|
||||
|
||||
#if HASH_LONG_LOG2==2 /* Engage only if sizeof(HASH_LONG)== 4 */
|
||||
/* A nice byte order reversal from Wei Dai <weidai@eskimo.com> */
|
||||
#ifdef ROTATE
|
||||
/* 5 instructions with rotate instruction, else 9 */
|
||||
#define REVERSE_FETCH32(a,l) ( \
|
||||
l=*(const HASH_LONG *)(a), \
|
||||
((ROTATE(l,8)&0x00FF00FF)|(ROTATE((l&0x00FF00FF),24))) \
|
||||
)
|
||||
#else
|
||||
/* 6 instructions with rotate instruction, else 8 */
|
||||
#define REVERSE_FETCH32(a,l) ( \
|
||||
l=*(const HASH_LONG *)(a), \
|
||||
l=(((l>>8)&0x00FF00FF)|((l&0x00FF00FF)<<8)), \
|
||||
ROTATE(l,16) \
|
||||
)
|
||||
/*
|
||||
* Originally the middle line started with l=(((l&0xFF00FF00)>>8)|...
|
||||
* It's rewritten as above for two reasons:
|
||||
* - RISCs aren't good at long constants and have to explicitely
|
||||
* compose 'em with several (well, usually 2) instructions in a
|
||||
* register before performing the actual operation and (as you
|
||||
* already realized:-) having same constant should inspire the
|
||||
* compiler to permanently allocate the only register for it;
|
||||
* - most modern CPUs have two ALUs, but usually only one has
|
||||
* circuitry for shifts:-( this minor tweak inspires compiler
|
||||
* to schedule shift instructions in a better way...
|
||||
*
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ROTATE
|
||||
#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Make some obvious choices. E.g., HASH_BLOCK_DATA_ORDER_ALIGNED
|
||||
* and HASH_BLOCK_HOST_ORDER ought to be the same if input data
|
||||
* and host are of the same "endianess". It's possible to mask
|
||||
* this with blank #define HASH_BLOCK_DATA_ORDER though...
|
||||
*
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
#if defined(B_ENDIAN)
|
||||
# if defined(DATA_ORDER_IS_BIG_ENDIAN)
|
||||
# if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_LONG_LOG2==2
|
||||
# define HASH_BLOCK_DATA_ORDER_ALIGNED HASH_BLOCK_HOST_ORDER
|
||||
# endif
|
||||
# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
# ifndef HOST_FETCH32
|
||||
# ifdef LE_FETCH32
|
||||
# define HOST_FETCH32(p,l) LE_FETCH32(p)
|
||||
# elif defined(REVERSE_FETCH32)
|
||||
# define HOST_FETCH32(p,l) REVERSE_FETCH32(p,l)
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#elif defined(L_ENDIAN)
|
||||
# if defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
# if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_LONG_LOG2==2
|
||||
# define HASH_BLOCK_DATA_ORDER_ALIGNED HASH_BLOCK_HOST_ORDER
|
||||
# endif
|
||||
# elif defined(DATA_ORDER_IS_BIG_ENDIAN)
|
||||
# ifndef HOST_FETCH32
|
||||
# ifdef BE_FETCH32
|
||||
# define HOST_FETCH32(p,l) BE_FETCH32(p)
|
||||
# elif defined(REVERSE_FETCH32)
|
||||
# define HOST_FETCH32(p,l) REVERSE_FETCH32(p,l)
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
|
||||
#ifndef HASH_BLOCK_DATA_ORDER
|
||||
#error "HASH_BLOCK_DATA_ORDER must be defined!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
|
||||
|
||||
#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \
|
||||
l|=(((unsigned long)(*((c)++)))<<16), \
|
||||
l|=(((unsigned long)(*((c)++)))<< 8), \
|
||||
l|=(((unsigned long)(*((c)++))) ), \
|
||||
l)
|
||||
#define HOST_p_c2l(c,l,n) { \
|
||||
switch (n) { \
|
||||
case 0: l =((unsigned long)(*((c)++)))<<24; \
|
||||
case 1: l|=((unsigned long)(*((c)++)))<<16; \
|
||||
case 2: l|=((unsigned long)(*((c)++)))<< 8; \
|
||||
case 3: l|=((unsigned long)(*((c)++))); \
|
||||
} }
|
||||
#define HOST_p_c2l_p(c,l,sc,len) { \
|
||||
switch (sc) { \
|
||||
case 0: l =((unsigned long)(*((c)++)))<<24; \
|
||||
if (--len == 0) break; \
|
||||
case 1: l|=((unsigned long)(*((c)++)))<<16; \
|
||||
if (--len == 0) break; \
|
||||
case 2: l|=((unsigned long)(*((c)++)))<< 8; \
|
||||
} }
|
||||
/* NOTE the pointer is not incremented at the end of this */
|
||||
#define HOST_c2l_p(c,l,n) { \
|
||||
l=0; (c)+=n; \
|
||||
switch (n) { \
|
||||
case 3: l =((unsigned long)(*(--(c))))<< 8; \
|
||||
case 2: l|=((unsigned long)(*(--(c))))<<16; \
|
||||
case 1: l|=((unsigned long)(*(--(c))))<<24; \
|
||||
} }
|
||||
#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l) )&0xff), \
|
||||
l)
|
||||
|
||||
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
|
||||
#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \
|
||||
l|=(((unsigned long)(*((c)++)))<< 8), \
|
||||
l|=(((unsigned long)(*((c)++)))<<16), \
|
||||
l|=(((unsigned long)(*((c)++)))<<24), \
|
||||
l)
|
||||
#define HOST_p_c2l(c,l,n) { \
|
||||
switch (n) { \
|
||||
case 0: l =((unsigned long)(*((c)++))); \
|
||||
case 1: l|=((unsigned long)(*((c)++)))<< 8; \
|
||||
case 2: l|=((unsigned long)(*((c)++)))<<16; \
|
||||
case 3: l|=((unsigned long)(*((c)++)))<<24; \
|
||||
} }
|
||||
#define HOST_p_c2l_p(c,l,sc,len) { \
|
||||
switch (sc) { \
|
||||
case 0: l =((unsigned long)(*((c)++))); \
|
||||
if (--len == 0) break; \
|
||||
case 1: l|=((unsigned long)(*((c)++)))<< 8; \
|
||||
if (--len == 0) break; \
|
||||
case 2: l|=((unsigned long)(*((c)++)))<<16; \
|
||||
} }
|
||||
/* NOTE the pointer is not incremented at the end of this */
|
||||
#define HOST_c2l_p(c,l,n) { \
|
||||
l=0; (c)+=n; \
|
||||
switch (n) { \
|
||||
case 3: l =((unsigned long)(*(--(c))))<<16; \
|
||||
case 2: l|=((unsigned long)(*(--(c))))<< 8; \
|
||||
case 1: l|=((unsigned long)(*(--(c)))); \
|
||||
} }
|
||||
#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>24)&0xff), \
|
||||
l)
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Time for some action:-)
|
||||
*/
|
||||
|
||||
int HASH_UPDATE (HASH_CTX *c, const void *data_, unsigned long len)
|
||||
{
|
||||
const unsigned char *data=data_;
|
||||
register HASH_LONG * p;
|
||||
register unsigned long l;
|
||||
int sw,sc,ew,ec;
|
||||
|
||||
if (len==0) return 1;
|
||||
|
||||
l=(c->Nl+(len<<3))&0xffffffffL;
|
||||
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
|
||||
* Wei Dai <weidai@eskimo.com> for pointing it out. */
|
||||
if (l < c->Nl) /* overflow */
|
||||
c->Nh++;
|
||||
c->Nh+=(len>>29);
|
||||
c->Nl=l;
|
||||
|
||||
if (c->num != 0)
|
||||
{
|
||||
p=c->data;
|
||||
sw=c->num>>2;
|
||||
sc=c->num&0x03;
|
||||
|
||||
if ((c->num+len) >= HASH_CBLOCK)
|
||||
{
|
||||
l=p[sw]; HOST_p_c2l(data,l,sc); p[sw++]=l;
|
||||
for (; sw<HASH_LBLOCK; sw++)
|
||||
{
|
||||
HOST_c2l(data,l); p[sw]=l;
|
||||
}
|
||||
HASH_BLOCK_HOST_ORDER (c,p,1);
|
||||
len-=(HASH_CBLOCK-c->num);
|
||||
c->num=0;
|
||||
/* drop through and do the rest */
|
||||
}
|
||||
else
|
||||
{
|
||||
c->num+=len;
|
||||
if ((sc+len) < 4) /* ugly, add char's to a word */
|
||||
{
|
||||
l=p[sw]; HOST_p_c2l_p(data,l,sc,len); p[sw]=l;
|
||||
}
|
||||
else
|
||||
{
|
||||
ew=(c->num>>2);
|
||||
ec=(c->num&0x03);
|
||||
if (sc)
|
||||
l=p[sw];
|
||||
HOST_p_c2l(data,l,sc);
|
||||
p[sw++]=l;
|
||||
for (; sw < ew; sw++)
|
||||
{
|
||||
HOST_c2l(data,l); p[sw]=l;
|
||||
}
|
||||
if (ec)
|
||||
{
|
||||
HOST_c2l_p(data,l,ec); p[sw]=l;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
sw=len/HASH_CBLOCK;
|
||||
if (sw > 0)
|
||||
{
|
||||
#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
|
||||
/*
|
||||
* Note that HASH_BLOCK_DATA_ORDER_ALIGNED gets defined
|
||||
* only if sizeof(HASH_LONG)==4.
|
||||
*/
|
||||
if ((((unsigned long)data)%4) == 0)
|
||||
{
|
||||
/* data is properly aligned so that we can cast it: */
|
||||
HASH_BLOCK_DATA_ORDER_ALIGNED (c,(HASH_LONG *)data,sw);
|
||||
sw*=HASH_CBLOCK;
|
||||
data+=sw;
|
||||
len-=sw;
|
||||
}
|
||||
else
|
||||
#if !defined(HASH_BLOCK_DATA_ORDER)
|
||||
while (sw--)
|
||||
{
|
||||
memcpy (p=c->data,data,HASH_CBLOCK);
|
||||
HASH_BLOCK_DATA_ORDER_ALIGNED(c,p,1);
|
||||
data+=HASH_CBLOCK;
|
||||
len-=HASH_CBLOCK;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#if defined(HASH_BLOCK_DATA_ORDER)
|
||||
{
|
||||
HASH_BLOCK_DATA_ORDER(c,data,sw);
|
||||
sw*=HASH_CBLOCK;
|
||||
data+=sw;
|
||||
len-=sw;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (len!=0)
|
||||
{
|
||||
p = c->data;
|
||||
c->num = len;
|
||||
ew=len>>2; /* words to copy */
|
||||
ec=len&0x03;
|
||||
for (; ew; ew--,p++)
|
||||
{
|
||||
HOST_c2l(data,l); *p=l;
|
||||
}
|
||||
HOST_c2l_p(data,l,ec);
|
||||
*p=l;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data)
|
||||
{
|
||||
#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
|
||||
if ((((unsigned long)data)%4) == 0)
|
||||
/* data is properly aligned so that we can cast it: */
|
||||
HASH_BLOCK_DATA_ORDER_ALIGNED (c,(HASH_LONG *)data,1);
|
||||
else
|
||||
#if !defined(HASH_BLOCK_DATA_ORDER)
|
||||
{
|
||||
memcpy (c->data,data,HASH_CBLOCK);
|
||||
HASH_BLOCK_DATA_ORDER_ALIGNED (c,c->data,1);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#if defined(HASH_BLOCK_DATA_ORDER)
|
||||
HASH_BLOCK_DATA_ORDER (c,data,1);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int HASH_FINAL (unsigned char *md, HASH_CTX *c)
|
||||
{
|
||||
register HASH_LONG *p;
|
||||
register unsigned long l;
|
||||
register int i,j;
|
||||
static const unsigned char end[4]={0x80,0x00,0x00,0x00};
|
||||
const unsigned char *cp=end;
|
||||
|
||||
/* c->num should definitly have room for at least one more byte. */
|
||||
p=c->data;
|
||||
i=c->num>>2;
|
||||
j=c->num&0x03;
|
||||
|
||||
#if 0
|
||||
/* purify often complains about the following line as an
|
||||
* Uninitialized Memory Read. While this can be true, the
|
||||
* following p_c2l macro will reset l when that case is true.
|
||||
* This is because j&0x03 contains the number of 'valid' bytes
|
||||
* already in p[i]. If and only if j&0x03 == 0, the UMR will
|
||||
* occur but this is also the only time p_c2l will do
|
||||
* l= *(cp++) instead of l|= *(cp++)
|
||||
* Many thanks to Alex Tang <altitude@cic.net> for pickup this
|
||||
* 'potential bug' */
|
||||
#ifdef PURIFY
|
||||
if (j==0) p[i]=0; /* Yeah, but that's not the way to fix it:-) */
|
||||
#endif
|
||||
l=p[i];
|
||||
#else
|
||||
l = (j==0) ? 0 : p[i];
|
||||
#endif
|
||||
HOST_p_c2l(cp,l,j); p[i++]=l; /* i is the next 'undefined word' */
|
||||
|
||||
if (i>(HASH_LBLOCK-2)) /* save room for Nl and Nh */
|
||||
{
|
||||
if (i<HASH_LBLOCK) p[i]=0;
|
||||
HASH_BLOCK_HOST_ORDER (c,p,1);
|
||||
i=0;
|
||||
}
|
||||
for (; i<(HASH_LBLOCK-2); i++)
|
||||
p[i]=0;
|
||||
|
||||
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
|
||||
p[HASH_LBLOCK-2]=c->Nh;
|
||||
p[HASH_LBLOCK-1]=c->Nl;
|
||||
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
p[HASH_LBLOCK-2]=c->Nl;
|
||||
p[HASH_LBLOCK-1]=c->Nh;
|
||||
#endif
|
||||
HASH_BLOCK_HOST_ORDER (c,p,1);
|
||||
|
||||
#ifndef HASH_MAKE_STRING
|
||||
#error "HASH_MAKE_STRING must be defined!"
|
||||
#else
|
||||
HASH_MAKE_STRING(c,md);
|
||||
#endif
|
||||
|
||||
c->num=0;
|
||||
/* clear stuff, HASH_BLOCK may be leaving some stuff on the stack
|
||||
* but I'm not worried :-)
|
||||
OPENSSL_cleanse((void *)c,sizeof(HASH_CTX));
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef MD32_REG_T
|
||||
#define MD32_REG_T long
|
||||
/*
|
||||
* This comment was originaly written for MD5, which is why it
|
||||
* discusses A-D. But it basically applies to all 32-bit digests,
|
||||
* which is why it was moved to common header file.
|
||||
*
|
||||
* In case you wonder why A-D are declared as long and not
|
||||
* as MD5_LONG. Doing so results in slight performance
|
||||
* boost on LP64 architectures. The catch is we don't
|
||||
* really care if 32 MSBs of a 64-bit register get polluted
|
||||
* with eventual overflows as we *save* only 32 LSBs in
|
||||
* *either* case. Now declaring 'em long excuses the compiler
|
||||
* from keeping 32 MSBs zeroed resulting in 13% performance
|
||||
* improvement under SPARC Solaris7/64 and 5% under AlphaLinux.
|
||||
* Well, to be honest it should say that this *prevents*
|
||||
* performance degradation.
|
||||
* <appro@fy.chalmers.se>
|
||||
* Apparently there're LP64 compilers that generate better
|
||||
* code if A-D are declared int. Most notably GCC-x86_64
|
||||
* generates better code.
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
#endif
|
@ -1,80 +0,0 @@
|
||||
/* crypto/sha/sha1dgst.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* 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 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#if !defined(OPENSSL_NO_SHA1) && !defined(OPENSSL_NO_SHA)
|
||||
|
||||
#undef SHA_0
|
||||
#define SHA_1
|
||||
|
||||
#include <openssl/opensslv.h>
|
||||
|
||||
#ifdef FIPS
|
||||
const char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT;
|
||||
|
||||
/* The implementation is in fips_md32_common.h */
|
||||
|
||||
#include "fips_sha_locl.h"
|
||||
|
||||
#else /* ndef FIPS */
|
||||
|
||||
static void *dummy=&dummy;
|
||||
|
||||
#endif /* ndef FIPS */
|
||||
|
||||
#endif
|
||||
|
@ -1,128 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/sha.h>
|
||||
|
||||
#define MAX_TEST_BITS 103432
|
||||
|
||||
static void dump(const unsigned char *b,int n)
|
||||
{
|
||||
while(n-- > 0)
|
||||
printf("%02X",*b++);
|
||||
}
|
||||
|
||||
static void bitfill(unsigned char *buf,int bit,int b,int n)
|
||||
{
|
||||
for( ; n > 0 ; --n,++bit)
|
||||
{
|
||||
assert(bit < MAX_TEST_BITS);
|
||||
buf[bit/8]|=b << (7-bit%8);
|
||||
}
|
||||
}
|
||||
|
||||
void montecarlo(unsigned char *seed,int n)
|
||||
{
|
||||
int i,j;
|
||||
unsigned char m[10240];
|
||||
|
||||
memcpy(m,seed,n);
|
||||
for(j=0 ; j < 100 ; ++j)
|
||||
{
|
||||
for(i=1 ; i <= 50000 ; ++i)
|
||||
{
|
||||
memset(m+n,'\0',j/4+3);
|
||||
n+=j/4+3;
|
||||
m[n++]=i >> 24;
|
||||
m[n++]=i >> 16;
|
||||
m[n++]=i >> 8;
|
||||
m[n++]=i;
|
||||
/* putchar(' '); */
|
||||
/* dump(m,bit/8); */
|
||||
/* putchar('\n'); */
|
||||
SHA1(m,n,m);
|
||||
n=20;
|
||||
}
|
||||
dump(m,20);
|
||||
puts(" ^");
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
FILE *fp;
|
||||
int phase;
|
||||
|
||||
if(argc != 2)
|
||||
{
|
||||
fprintf(stderr,"%s <test vector file>\n",argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fp=fopen(argv[1],"r");
|
||||
if(!fp)
|
||||
{
|
||||
perror(argv[1]);
|
||||
exit(2);
|
||||
}
|
||||
|
||||
for(phase=0 ; ; )
|
||||
{
|
||||
unsigned char buf[MAX_TEST_BITS/8];
|
||||
unsigned char md[20];
|
||||
char line[10240];
|
||||
int n,t,b,bit;
|
||||
char *p;
|
||||
|
||||
fgets(line,1024,fp);
|
||||
if(feof(fp))
|
||||
break;
|
||||
n=strlen(line);
|
||||
line[n-1]='\0';
|
||||
if(!strcmp(line,"D>"))
|
||||
++phase;
|
||||
|
||||
if(!isdigit(line[0]))
|
||||
{
|
||||
puts(line);
|
||||
continue;
|
||||
}
|
||||
for( ; ; )
|
||||
{
|
||||
assert(n > 1);
|
||||
if(line[n-2] == '^')
|
||||
break;
|
||||
fgets(line+n-1,sizeof(line)-n+1,fp);
|
||||
n=strlen(line);
|
||||
/* printf("line=%s\n",line); */
|
||||
assert(!feof(fp));
|
||||
}
|
||||
|
||||
p=strtok(line," ");
|
||||
t=atoi(p);
|
||||
p=strtok(NULL," ");
|
||||
b=atoi(p);
|
||||
memset(buf,'\0',sizeof buf);
|
||||
for(bit=0,p=strtok(NULL," ") ; p && *p != '^' ; p=strtok(NULL," "))
|
||||
{
|
||||
assert(t-- > 0);
|
||||
bitfill(buf,bit,b,atoi(p));
|
||||
bit+=atoi(p);
|
||||
b=1-b;
|
||||
}
|
||||
assert(t == 0);
|
||||
assert((bit%8) == 0);
|
||||
/* dump(buf,bit/8); */
|
||||
/* putchar('\n'); */
|
||||
if(phase < 3)
|
||||
{
|
||||
SHA1(buf,bit/8,md);
|
||||
dump(md,20);
|
||||
puts(" ^");
|
||||
}
|
||||
else
|
||||
montecarlo(buf,bit/8);
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,472 +0,0 @@
|
||||
/* crypto/sha/sha_locl.h */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* 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 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <openssl/opensslconf.h>
|
||||
#include <openssl/sha.h>
|
||||
|
||||
#ifndef SHA_LONG_LOG2
|
||||
#define SHA_LONG_LOG2 2 /* default to 32 bits */
|
||||
#endif
|
||||
|
||||
#define DATA_ORDER_IS_BIG_ENDIAN
|
||||
|
||||
#define HASH_LONG SHA_LONG
|
||||
#define HASH_LONG_LOG2 SHA_LONG_LOG2
|
||||
#define HASH_CTX SHA_CTX
|
||||
#define HASH_CBLOCK SHA_CBLOCK
|
||||
#define HASH_LBLOCK SHA_LBLOCK
|
||||
#define HASH_MAKE_STRING(c,s) do { \
|
||||
unsigned long ll; \
|
||||
ll=(c)->h0; HOST_l2c(ll,(s)); \
|
||||
ll=(c)->h1; HOST_l2c(ll,(s)); \
|
||||
ll=(c)->h2; HOST_l2c(ll,(s)); \
|
||||
ll=(c)->h3; HOST_l2c(ll,(s)); \
|
||||
ll=(c)->h4; HOST_l2c(ll,(s)); \
|
||||
} while (0)
|
||||
|
||||
#if defined(SHA_0)
|
||||
|
||||
# define HASH_UPDATE SHA_Update
|
||||
# define HASH_TRANSFORM SHA_Transform
|
||||
# define HASH_FINAL SHA_Final
|
||||
# define HASH_INIT SHA_Init
|
||||
# define HASH_BLOCK_HOST_ORDER sha_block_host_order
|
||||
# define HASH_BLOCK_DATA_ORDER sha_block_data_order
|
||||
# define Xupdate(a,ix,ia,ib,ic,id) (ix=(a)=(ia^ib^ic^id))
|
||||
|
||||
void sha_block_host_order (SHA_CTX *c, const void *p,int num);
|
||||
void sha_block_data_order (SHA_CTX *c, const void *p,int num);
|
||||
|
||||
#elif defined(SHA_1)
|
||||
|
||||
# define HASH_UPDATE SHA1_Update
|
||||
# define HASH_TRANSFORM SHA1_Transform
|
||||
# define HASH_FINAL SHA1_Final
|
||||
# define HASH_INIT SHA1_Init
|
||||
# define HASH_BLOCK_HOST_ORDER sha1_block_host_order
|
||||
# define HASH_BLOCK_DATA_ORDER sha1_block_data_order
|
||||
# if defined(__MWERKS__) && defined(__MC68K__)
|
||||
/* Metrowerks for Motorola fails otherwise:-( <appro@fy.chalmers.se> */
|
||||
# define Xupdate(a,ix,ia,ib,ic,id) do { (a)=(ia^ib^ic^id); \
|
||||
ix=(a)=ROTATE((a),1); \
|
||||
} while (0)
|
||||
# else
|
||||
# define Xupdate(a,ix,ia,ib,ic,id) ( (a)=(ia^ib^ic^id), \
|
||||
ix=(a)=ROTATE((a),1) \
|
||||
)
|
||||
# endif
|
||||
|
||||
# ifdef SHA1_ASM
|
||||
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(__INTEL__)
|
||||
# define sha1_block_host_order sha1_block_asm_host_order
|
||||
# define DONT_IMPLEMENT_BLOCK_HOST_ORDER
|
||||
# define sha1_block_data_order sha1_block_asm_data_order
|
||||
# define DONT_IMPLEMENT_BLOCK_DATA_ORDER
|
||||
# define HASH_BLOCK_DATA_ORDER_ALIGNED sha1_block_asm_data_order
|
||||
# endif
|
||||
# endif
|
||||
void sha1_block_host_order (SHA_CTX *c, const void *p,int num);
|
||||
void sha1_block_data_order (SHA_CTX *c, const void *p,int num);
|
||||
|
||||
#else
|
||||
# error "Either SHA_0 or SHA_1 must be defined."
|
||||
#endif
|
||||
|
||||
#include "fips_md32_common.h"
|
||||
|
||||
#define INIT_DATA_h0 0x67452301UL
|
||||
#define INIT_DATA_h1 0xefcdab89UL
|
||||
#define INIT_DATA_h2 0x98badcfeUL
|
||||
#define INIT_DATA_h3 0x10325476UL
|
||||
#define INIT_DATA_h4 0xc3d2e1f0UL
|
||||
|
||||
int HASH_INIT (SHA_CTX *c)
|
||||
{
|
||||
c->h0=INIT_DATA_h0;
|
||||
c->h1=INIT_DATA_h1;
|
||||
c->h2=INIT_DATA_h2;
|
||||
c->h3=INIT_DATA_h3;
|
||||
c->h4=INIT_DATA_h4;
|
||||
c->Nl=0;
|
||||
c->Nh=0;
|
||||
c->num=0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define K_00_19 0x5a827999UL
|
||||
#define K_20_39 0x6ed9eba1UL
|
||||
#define K_40_59 0x8f1bbcdcUL
|
||||
#define K_60_79 0xca62c1d6UL
|
||||
|
||||
/* As pointed out by Wei Dai <weidai@eskimo.com>, F() below can be
|
||||
* simplified to the code in F_00_19. Wei attributes these optimisations
|
||||
* to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
|
||||
* #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
|
||||
* I've just become aware of another tweak to be made, again from Wei Dai,
|
||||
* in F_40_59, (x&a)|(y&a) -> (x|y)&a
|
||||
*/
|
||||
#define F_00_19(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
|
||||
#define F_20_39(b,c,d) ((b) ^ (c) ^ (d))
|
||||
#define F_40_59(b,c,d) (((b) & (c)) | (((b)|(c)) & (d)))
|
||||
#define F_60_79(b,c,d) F_20_39(b,c,d)
|
||||
|
||||
#define BODY_00_15(i,a,b,c,d,e,f,xi) \
|
||||
(f)=xi+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
|
||||
(b)=ROTATE((b),30);
|
||||
|
||||
#define BODY_16_19(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
|
||||
Xupdate(f,xi,xa,xb,xc,xd); \
|
||||
(f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
|
||||
(b)=ROTATE((b),30);
|
||||
|
||||
#define BODY_20_31(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
|
||||
Xupdate(f,xi,xa,xb,xc,xd); \
|
||||
(f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
|
||||
(b)=ROTATE((b),30);
|
||||
|
||||
#define BODY_32_39(i,a,b,c,d,e,f,xa,xb,xc,xd) \
|
||||
Xupdate(f,xa,xa,xb,xc,xd); \
|
||||
(f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
|
||||
(b)=ROTATE((b),30);
|
||||
|
||||
#define BODY_40_59(i,a,b,c,d,e,f,xa,xb,xc,xd) \
|
||||
Xupdate(f,xa,xa,xb,xc,xd); \
|
||||
(f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \
|
||||
(b)=ROTATE((b),30);
|
||||
|
||||
#define BODY_60_79(i,a,b,c,d,e,f,xa,xb,xc,xd) \
|
||||
Xupdate(f,xa,xa,xb,xc,xd); \
|
||||
(f)=xa+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
|
||||
(b)=ROTATE((b),30);
|
||||
|
||||
#ifdef X
|
||||
#undef X
|
||||
#endif
|
||||
#ifndef MD32_XARRAY
|
||||
/*
|
||||
* Originally X was an array. As it's automatic it's natural
|
||||
* to expect RISC compiler to accomodate at least part of it in
|
||||
* the register bank, isn't it? Unfortunately not all compilers
|
||||
* "find" this expectation reasonable:-( On order to make such
|
||||
* compilers generate better code I replace X[] with a bunch of
|
||||
* X0, X1, etc. See the function body below...
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
# define X(i) XX##i
|
||||
#else
|
||||
/*
|
||||
* However! Some compilers (most notably HP C) get overwhelmed by
|
||||
* that many local variables so that we have to have the way to
|
||||
* fall down to the original behavior.
|
||||
*/
|
||||
# define X(i) XX[i]
|
||||
#endif
|
||||
|
||||
#ifndef DONT_IMPLEMENT_BLOCK_HOST_ORDER
|
||||
void HASH_BLOCK_HOST_ORDER (SHA_CTX *c, const void *d, int num)
|
||||
{
|
||||
const SHA_LONG *W=d;
|
||||
register unsigned MD32_REG_T A,B,C,D,E,T;
|
||||
#ifndef MD32_XARRAY
|
||||
unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
|
||||
XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
|
||||
#else
|
||||
SHA_LONG XX[16];
|
||||
#endif
|
||||
|
||||
A=c->h0;
|
||||
B=c->h1;
|
||||
C=c->h2;
|
||||
D=c->h3;
|
||||
E=c->h4;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
BODY_00_15( 0,A,B,C,D,E,T,W[ 0]);
|
||||
BODY_00_15( 1,T,A,B,C,D,E,W[ 1]);
|
||||
BODY_00_15( 2,E,T,A,B,C,D,W[ 2]);
|
||||
BODY_00_15( 3,D,E,T,A,B,C,W[ 3]);
|
||||
BODY_00_15( 4,C,D,E,T,A,B,W[ 4]);
|
||||
BODY_00_15( 5,B,C,D,E,T,A,W[ 5]);
|
||||
BODY_00_15( 6,A,B,C,D,E,T,W[ 6]);
|
||||
BODY_00_15( 7,T,A,B,C,D,E,W[ 7]);
|
||||
BODY_00_15( 8,E,T,A,B,C,D,W[ 8]);
|
||||
BODY_00_15( 9,D,E,T,A,B,C,W[ 9]);
|
||||
BODY_00_15(10,C,D,E,T,A,B,W[10]);
|
||||
BODY_00_15(11,B,C,D,E,T,A,W[11]);
|
||||
BODY_00_15(12,A,B,C,D,E,T,W[12]);
|
||||
BODY_00_15(13,T,A,B,C,D,E,W[13]);
|
||||
BODY_00_15(14,E,T,A,B,C,D,W[14]);
|
||||
BODY_00_15(15,D,E,T,A,B,C,W[15]);
|
||||
|
||||
BODY_16_19(16,C,D,E,T,A,B,X( 0),W[ 0],W[ 2],W[ 8],W[13]);
|
||||
BODY_16_19(17,B,C,D,E,T,A,X( 1),W[ 1],W[ 3],W[ 9],W[14]);
|
||||
BODY_16_19(18,A,B,C,D,E,T,X( 2),W[ 2],W[ 4],W[10],W[15]);
|
||||
BODY_16_19(19,T,A,B,C,D,E,X( 3),W[ 3],W[ 5],W[11],X( 0));
|
||||
|
||||
BODY_20_31(20,E,T,A,B,C,D,X( 4),W[ 4],W[ 6],W[12],X( 1));
|
||||
BODY_20_31(21,D,E,T,A,B,C,X( 5),W[ 5],W[ 7],W[13],X( 2));
|
||||
BODY_20_31(22,C,D,E,T,A,B,X( 6),W[ 6],W[ 8],W[14],X( 3));
|
||||
BODY_20_31(23,B,C,D,E,T,A,X( 7),W[ 7],W[ 9],W[15],X( 4));
|
||||
BODY_20_31(24,A,B,C,D,E,T,X( 8),W[ 8],W[10],X( 0),X( 5));
|
||||
BODY_20_31(25,T,A,B,C,D,E,X( 9),W[ 9],W[11],X( 1),X( 6));
|
||||
BODY_20_31(26,E,T,A,B,C,D,X(10),W[10],W[12],X( 2),X( 7));
|
||||
BODY_20_31(27,D,E,T,A,B,C,X(11),W[11],W[13],X( 3),X( 8));
|
||||
BODY_20_31(28,C,D,E,T,A,B,X(12),W[12],W[14],X( 4),X( 9));
|
||||
BODY_20_31(29,B,C,D,E,T,A,X(13),W[13],W[15],X( 5),X(10));
|
||||
BODY_20_31(30,A,B,C,D,E,T,X(14),W[14],X( 0),X( 6),X(11));
|
||||
BODY_20_31(31,T,A,B,C,D,E,X(15),W[15],X( 1),X( 7),X(12));
|
||||
|
||||
BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
|
||||
BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
|
||||
BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
|
||||
BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
|
||||
BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
|
||||
BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
|
||||
BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
|
||||
BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
|
||||
|
||||
BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
|
||||
BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
|
||||
BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
|
||||
BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
|
||||
BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
|
||||
BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
|
||||
BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
|
||||
BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
|
||||
BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
|
||||
BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
|
||||
BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
|
||||
BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
|
||||
BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
|
||||
BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
|
||||
BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
|
||||
BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
|
||||
BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
|
||||
BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
|
||||
BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
|
||||
BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
|
||||
|
||||
BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
|
||||
BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
|
||||
BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
|
||||
BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
|
||||
BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
|
||||
BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
|
||||
BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
|
||||
BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
|
||||
BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
|
||||
BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
|
||||
BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
|
||||
BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
|
||||
BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
|
||||
BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
|
||||
BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
|
||||
BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
|
||||
BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
|
||||
BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
|
||||
BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
|
||||
BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
|
||||
|
||||
c->h0=(c->h0+E)&0xffffffffL;
|
||||
c->h1=(c->h1+T)&0xffffffffL;
|
||||
c->h2=(c->h2+A)&0xffffffffL;
|
||||
c->h3=(c->h3+B)&0xffffffffL;
|
||||
c->h4=(c->h4+C)&0xffffffffL;
|
||||
|
||||
if (--num <= 0) break;
|
||||
|
||||
A=c->h0;
|
||||
B=c->h1;
|
||||
C=c->h2;
|
||||
D=c->h3;
|
||||
E=c->h4;
|
||||
|
||||
W+=SHA_LBLOCK;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef DONT_IMPLEMENT_BLOCK_DATA_ORDER
|
||||
void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, int num)
|
||||
{
|
||||
const unsigned char *data=p;
|
||||
register unsigned MD32_REG_T A,B,C,D,E,T,l;
|
||||
#ifndef MD32_XARRAY
|
||||
unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
|
||||
XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
|
||||
#else
|
||||
SHA_LONG XX[16];
|
||||
#endif
|
||||
|
||||
A=c->h0;
|
||||
B=c->h1;
|
||||
C=c->h2;
|
||||
D=c->h3;
|
||||
E=c->h4;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
||||
HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l;
|
||||
BODY_00_15( 0,A,B,C,D,E,T,X( 0)); HOST_c2l(data,l); X( 2)=l;
|
||||
BODY_00_15( 1,T,A,B,C,D,E,X( 1)); HOST_c2l(data,l); X( 3)=l;
|
||||
BODY_00_15( 2,E,T,A,B,C,D,X( 2)); HOST_c2l(data,l); X( 4)=l;
|
||||
BODY_00_15( 3,D,E,T,A,B,C,X( 3)); HOST_c2l(data,l); X( 5)=l;
|
||||
BODY_00_15( 4,C,D,E,T,A,B,X( 4)); HOST_c2l(data,l); X( 6)=l;
|
||||
BODY_00_15( 5,B,C,D,E,T,A,X( 5)); HOST_c2l(data,l); X( 7)=l;
|
||||
BODY_00_15( 6,A,B,C,D,E,T,X( 6)); HOST_c2l(data,l); X( 8)=l;
|
||||
BODY_00_15( 7,T,A,B,C,D,E,X( 7)); HOST_c2l(data,l); X( 9)=l;
|
||||
BODY_00_15( 8,E,T,A,B,C,D,X( 8)); HOST_c2l(data,l); X(10)=l;
|
||||
BODY_00_15( 9,D,E,T,A,B,C,X( 9)); HOST_c2l(data,l); X(11)=l;
|
||||
BODY_00_15(10,C,D,E,T,A,B,X(10)); HOST_c2l(data,l); X(12)=l;
|
||||
BODY_00_15(11,B,C,D,E,T,A,X(11)); HOST_c2l(data,l); X(13)=l;
|
||||
BODY_00_15(12,A,B,C,D,E,T,X(12)); HOST_c2l(data,l); X(14)=l;
|
||||
BODY_00_15(13,T,A,B,C,D,E,X(13)); HOST_c2l(data,l); X(15)=l;
|
||||
BODY_00_15(14,E,T,A,B,C,D,X(14));
|
||||
BODY_00_15(15,D,E,T,A,B,C,X(15));
|
||||
|
||||
BODY_16_19(16,C,D,E,T,A,B,X( 0),X( 0),X( 2),X( 8),X(13));
|
||||
BODY_16_19(17,B,C,D,E,T,A,X( 1),X( 1),X( 3),X( 9),X(14));
|
||||
BODY_16_19(18,A,B,C,D,E,T,X( 2),X( 2),X( 4),X(10),X(15));
|
||||
BODY_16_19(19,T,A,B,C,D,E,X( 3),X( 3),X( 5),X(11),X( 0));
|
||||
|
||||
BODY_20_31(20,E,T,A,B,C,D,X( 4),X( 4),X( 6),X(12),X( 1));
|
||||
BODY_20_31(21,D,E,T,A,B,C,X( 5),X( 5),X( 7),X(13),X( 2));
|
||||
BODY_20_31(22,C,D,E,T,A,B,X( 6),X( 6),X( 8),X(14),X( 3));
|
||||
BODY_20_31(23,B,C,D,E,T,A,X( 7),X( 7),X( 9),X(15),X( 4));
|
||||
BODY_20_31(24,A,B,C,D,E,T,X( 8),X( 8),X(10),X( 0),X( 5));
|
||||
BODY_20_31(25,T,A,B,C,D,E,X( 9),X( 9),X(11),X( 1),X( 6));
|
||||
BODY_20_31(26,E,T,A,B,C,D,X(10),X(10),X(12),X( 2),X( 7));
|
||||
BODY_20_31(27,D,E,T,A,B,C,X(11),X(11),X(13),X( 3),X( 8));
|
||||
BODY_20_31(28,C,D,E,T,A,B,X(12),X(12),X(14),X( 4),X( 9));
|
||||
BODY_20_31(29,B,C,D,E,T,A,X(13),X(13),X(15),X( 5),X(10));
|
||||
BODY_20_31(30,A,B,C,D,E,T,X(14),X(14),X( 0),X( 6),X(11));
|
||||
BODY_20_31(31,T,A,B,C,D,E,X(15),X(15),X( 1),X( 7),X(12));
|
||||
|
||||
BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
|
||||
BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
|
||||
BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
|
||||
BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
|
||||
BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
|
||||
BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
|
||||
BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
|
||||
BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
|
||||
|
||||
BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
|
||||
BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
|
||||
BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
|
||||
BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
|
||||
BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
|
||||
BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
|
||||
BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
|
||||
BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
|
||||
BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
|
||||
BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
|
||||
BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
|
||||
BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
|
||||
BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
|
||||
BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
|
||||
BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
|
||||
BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
|
||||
BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
|
||||
BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
|
||||
BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
|
||||
BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
|
||||
|
||||
BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
|
||||
BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
|
||||
BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
|
||||
BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
|
||||
BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
|
||||
BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
|
||||
BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
|
||||
BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
|
||||
BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
|
||||
BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
|
||||
BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
|
||||
BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
|
||||
BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
|
||||
BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
|
||||
BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
|
||||
BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
|
||||
BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
|
||||
BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
|
||||
BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
|
||||
BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
|
||||
|
||||
c->h0=(c->h0+E)&0xffffffffL;
|
||||
c->h1=(c->h1+T)&0xffffffffL;
|
||||
c->h2=(c->h2+A)&0xffffffffL;
|
||||
c->h3=(c->h3+B)&0xffffffffL;
|
||||
c->h4=(c->h4+C)&0xffffffffL;
|
||||
|
||||
if (--num <= 0) break;
|
||||
|
||||
A=c->h0;
|
||||
B=c->h1;
|
||||
C=c->h2;
|
||||
D=c->h3;
|
||||
E=c->h4;
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,103 +0,0 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2003 The OpenSSL Project. 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.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED 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 OpenSSL PROJECT OR
|
||||
* ITS 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <openssl/sha.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
#ifdef FIPS
|
||||
int n;
|
||||
|
||||
if(argc < 2)
|
||||
{
|
||||
fprintf(stderr,"%s [<file>]+\n",argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for(n=1 ; n < argc ; ++n)
|
||||
{
|
||||
FILE *f=fopen(argv[n],"rb");
|
||||
SHA_CTX sha;
|
||||
unsigned char md[20];
|
||||
int i;
|
||||
|
||||
if(!f)
|
||||
{
|
||||
perror(argv[n]);
|
||||
exit(2);
|
||||
}
|
||||
|
||||
SHA1_Init(&sha);
|
||||
for( ; ; )
|
||||
{
|
||||
char buf[1024];
|
||||
int l=fread(buf,1,sizeof buf,f);
|
||||
|
||||
if(l == 0)
|
||||
{
|
||||
if(ferror(f))
|
||||
{
|
||||
perror(argv[n]);
|
||||
exit(3);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
SHA1_Update(&sha,buf,l);
|
||||
}
|
||||
SHA1_Final(md,&sha);
|
||||
printf("SHA1(%s)= ",argv[n]);
|
||||
for(i=0 ; i < 20 ; ++i)
|
||||
printf("%02x",md[i]);
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -1,342 +0,0 @@
|
||||
# Configuration information for "SHA-1 Test"
|
||||
# SHA tests are configured for BYTE oriented implementations
|
||||
H>SHS Type 1 Hashes<H
|
||||
D>
|
||||
DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 ^
|
||||
3CDF2936DA2FC556BFA533AB1EB59CE710AC80E5 ^
|
||||
19C1E2048FA7393CFBF2D310AD8209EC11D996E5 ^
|
||||
CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5 ^
|
||||
71AC973D0E4B50AE9E5043FF4D615381120A25A0 ^
|
||||
A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA ^
|
||||
D87A0EE74E4B9AD72E6847C87BDEEB3D07844380 ^
|
||||
1976B8DD509FE66BF09C9A8D33534D4EF4F63BFD ^
|
||||
5A78F439B6DB845BB8A558E4CEB106CD7B7FF783 ^
|
||||
F871BCE62436C1E280357416695EE2EF9B83695C ^
|
||||
62B243D1B780E1D31CF1BA2DE3F01C72AEEA0E47 ^
|
||||
1698994A273404848E56E7FDA4457B5900DE1342 ^
|
||||
056F4CDC02791DA7ED1EB2303314F7667518DEEF ^
|
||||
9FE2DA967BD8441EEA1C32DF68DDAA9DC1FC8E4B ^
|
||||
73A31777B4ACE9384EFA8BBEAD45C51A71ABA6DD ^
|
||||
3F9D7C4E2384EDDABFF5DD8A31E23DE3D03F42AC ^
|
||||
4814908F72B93FFD011135BEE347DE9A08DA838F ^
|
||||
0978374B67A412A3102C5AA0B10E1A6596FC68EB ^
|
||||
44AD6CB618BD935460D46D3F921D87B99AB91C1E ^
|
||||
02DC989AF265B09CF8485640842128DCF95E9F39 ^
|
||||
67507B8D497B35D6E99FC01976D73F54AECA75CF ^
|
||||
1EAE0373C1317CB60C36A42A867B716039D441F5 ^
|
||||
9C3834589E5BFFAC9F50950E0199B3EC2620BEC8 ^
|
||||
209F7ABC7F3B878EE46CDF3A1FBB9C21C3474F32 ^
|
||||
05FC054B00D97753A9B3E2DA8FBBA3EE808CEF22 ^
|
||||
0C4980EA3A46C757DFBFC5BAA38AC6C8E72DDCE7 ^
|
||||
96A460D2972D276928B69864445BEA353BDCFFD2 ^
|
||||
F3EF04D8FA8C6FA9850F394A4554C080956FA64B ^
|
||||
F2A31D875D1D7B30874D416C4D2EA6BAF0FFBAFE ^
|
||||
F4942D3B9E9588DCFDC6312A84DF75D05F111C20 ^
|
||||
310207DF35B014E4676D30806FA34424813734DD ^
|
||||
4DA1955B2FA7C7E74E3F47D7360CE530BBF57CA3 ^
|
||||
74C4BC5B26FB4A08602D40CCEC6C6161B6C11478 ^
|
||||
0B103CE297338DFC7395F7715EE47539B556DDB6 ^
|
||||
EFC72D99E3D2311CE14190C0B726BDC68F4B0821 ^
|
||||
660EDAC0A8F4CE33DA0D8DBAE597650E97687250 ^
|
||||
FE0A55A988B3B93946A63EB36B23785A5E6EFC3E ^
|
||||
0CBDF2A5781C59F907513147A0DE3CC774B54BF3 ^
|
||||
663E40FEE5A44BFCB1C99EA5935A6B5BC9F583B0 ^
|
||||
00162134256952DD9AE6B51EFB159B35C3C138C7 ^
|
||||
CEB88E4736E354416E2010FC1061B3B53B81664B ^
|
||||
A6A2C4B6BCC41DDC67278F3DF4D8D0B9DD7784EF ^
|
||||
C23D083CD8820B57800A869F5F261D45E02DC55D ^
|
||||
E8AC31927B78DDEC41A31CA7A44EB7177165E7AB ^
|
||||
E864EC5DBAB0F9FF6984AB6AD43A8C9B81CC9F9C ^
|
||||
CFED6269069417A84D6DE2347220F4B858BCD530 ^
|
||||
D9217BFB46C96348722C3783D29D4B1A3FEDA38C ^
|
||||
DEC24E5554F79697218D317315FA986229CE3350 ^
|
||||
83A099DF7071437BA5495A5B0BFBFEFE1C0EF7F3 ^
|
||||
AA3198E30891A83E33CE3BFA0587D86A197D4F80 ^
|
||||
9B6ACBEB4989CBEE7015C7D515A75672FFDE3442 ^
|
||||
B021EB08A436B02658EAA7BA3C88D49F1219C035 ^
|
||||
CAE36DAB8AEA29F62E0855D9CB3CD8E7D39094B1 ^
|
||||
02DE8BA699F3C1B0CB5AD89A01F2346E630459D7 ^
|
||||
88021458847DD39B4495368F7254941859FAD44B ^
|
||||
91A165295C666FE85C2ADBC5A10329DAF0CB81A0 ^
|
||||
4B31312EAF8B506811151A9DBD162961F7548C4B ^
|
||||
3FE70971B20558F7E9BAC303ED2BC14BDE659A62 ^
|
||||
93FB769D5BF49D6C563685954E2AECC024DC02D6 ^
|
||||
BC8827C3E614D515E83DEA503989DEA4FDA6EA13 ^
|
||||
E83868DBE4A389AB48E61CFC4ED894F32AE112AC ^
|
||||
55C95459CDE4B33791B4B2BCAAF840930AF3F3BD ^
|
||||
36BB0E2BA438A3E03214D9ED2B28A4D5C578FCAA ^
|
||||
3ACBF874199763EBA20F3789DFC59572ACA4CF33 ^
|
||||
86BE037C4D509C9202020767D860DAB039CADACE ^
|
||||
51B57D7080A87394EEC3EB2E0B242E553F2827C9 ^
|
||||
1EFBFA78866315CE6A71E457F3A750A38FACAB41 ^
|
||||
57D6CB41AEEC20236F365B3A490C61D0CFA39611 ^
|
||||
C532CB64B4BA826372BCCF2B4B5793D5B88BB715 ^
|
||||
15833B5631032663E783686A209C6A2B47A1080E ^
|
||||
D04F2043C96E10CD83B574B1E1C217052CD4A6B2 ^
|
||||
E8882627C64DB743F7DB8B4413DD033FC63BEB20 ^
|
||||
CD2D32286B8867BC124A0AF2236FC74BE3622199 ^
|
||||
019B70D745375091ED5C7B218445EC986D0F5A82 ^
|
||||
E5FF5FEC1DADBAED02BF2DAD4026BE6A96B3F2AF ^
|
||||
6F4E23B3F2E2C068D13921FE4E5E053FFED4E146 ^
|
||||
25E179602A575C915067566FBA6DA930E97F8678 ^
|
||||
67DED0E68E235C8A523E051E86108EEB757EFBFD ^
|
||||
AF78536EA83C822796745556D62A3EE82C7BE098 ^
|
||||
64D7AC52E47834BE72455F6C64325F9C358B610D ^
|
||||
9D4866BAA3639C13E541F250FFA3D8BC157A491F ^
|
||||
2E258811961D3EB876F30E7019241A01F9517BEC ^
|
||||
8E0EBC487146F83BC9077A1630E0FB3AB3C89E63 ^
|
||||
CE8953741FFF3425D2311FBBF4AB481B669DEF70 ^
|
||||
789D1D2DAB52086BD90C0E137E2515ED9C6B59B5 ^
|
||||
B76CE7472700DD68D6328B7AA8437FB051D15745 ^
|
||||
F218669B596C5FFB0B1C14BD03C467FC873230A0 ^
|
||||
1FF3BDBE0D504CB0CDFAB17E6C37ABA6B3CFFDED ^
|
||||
2F3CBACBB14405A4652ED52793C1814FD8C4FCE0 ^
|
||||
982C8AB6CE164F481915AF59AAED9FFF2A391752 ^
|
||||
5CD92012D488A07ECE0E47901D0E083B6BD93E3F ^
|
||||
69603FEC02920851D4B3B8782E07B92BB2963009 ^
|
||||
3E90F76437B1EA44CF98A08D83EA24CECF6E6191 ^
|
||||
34C09F107C42D990EB4881D4BF2DDDCAB01563AE ^
|
||||
474BE0E5892EB2382109BFC5E3C8249A9283B03D ^
|
||||
A04B4F75051786682483252438F6A75BF4705EC6 ^
|
||||
BE88A6716083EB50ED9416719D6A247661299383 ^
|
||||
C67E38717FEE1A5F65EC6C7C7C42AFC00CD37F04 ^
|
||||
959AC4082388E19E9BE5DE571C047EF10C174A8D ^
|
||||
BAA7AA7B7753FA0ABDC4A541842B5D238D949F0A ^
|
||||
351394DCEBC08155D100FCD488578E6AE71D0E9C ^
|
||||
AB8BE94C5AF60D9477EF1252D604E58E27B2A9EE ^
|
||||
3429EC74A695FDD3228F152564952308AFE0680A ^
|
||||
907FA46C029BC67EAA8E4F46E3C2A232F85BD122 ^
|
||||
2644C87D1FBBBC0FC8D65F64BCA2492DA15BAAE4 ^
|
||||
110A3EEB408756E2E81ABAF4C5DCD4D4C6AFCF6D ^
|
||||
CD4FDC35FAC7E1ADB5DE40F47F256EF74D584959 ^
|
||||
8E6E273208AC256F9ECCF296F3F5A37BC8A0F9F7 ^
|
||||
FE0606100BDBC268DB39B503E0FDFE3766185828 ^
|
||||
6C63C3E58047BCDB35A17F74EEBA4E9B14420809 ^
|
||||
BCC2BD305F0BCDA8CF2D478EF9FE080486CB265F ^
|
||||
CE5223FD3DD920A3B666481D5625B16457DCB5E8 ^
|
||||
948886776E42E4F5FAE1B2D0C906AC3759E3F8B0 ^
|
||||
4C12A51FCFE242F832E3D7329304B11B75161EFB ^
|
||||
C54BDD2050504D92F551D378AD5FC72C9ED03932 ^
|
||||
8F53E8FA79EA09FD1B682AF5ED1515ECA965604C ^
|
||||
2D7E17F6294524CE78B33EAB72CDD08E5FF6E313 ^
|
||||
64582B4B57F782C9302BFE7D07F74AA176627A3A ^
|
||||
6D88795B71D3E386BBD1EB830FB9F161BA98869F ^
|
||||
86AD34A6463F12CEE6DE9596ABA72F0DF1397FD1 ^
|
||||
7EB46685A57C0D466152DC339C8122548C757ED1 ^
|
||||
E7A98FB0692684054407CC221ABC60C199D6F52A ^
|
||||
34DF1306662206FD0A5FC2969A4BEEC4EB0197F7 ^
|
||||
56CF7EBF08D10F0CB9FE7EE3B63A5C3A02BCB450 ^
|
||||
3BAE5CB8226642088DA760A6F78B0CF8EDDEA9F1 ^
|
||||
6475DF681E061FA506672C27CBABFA9AA6DDFF62 ^
|
||||
79D81991FA4E4957C8062753439DBFD47BBB277D ^
|
||||
BAE224477B20302E881F5249F52EC6C34DA8ECEF ^
|
||||
EDE4DEB4293CFE4138C2C056B7C46FF821CC0ACC ^
|
||||
<D
|
||||
|
||||
H>SHS Type 2 Hashes<H
|
||||
D>
|
||||
A771FA5C812BD0C9596D869EC99E4F4AC988B13F ^
|
||||
E99D566212BBBCEEE903946F6100C9C96039A8F4 ^
|
||||
B48CE6B1D13903E3925AE0C88CB931388C013F9C ^
|
||||
E647D5BAF670D4BF3AFC0A6B72A2424B0C64F194 ^
|
||||
65C1CD932A06B05CD0B43AFB3BC7891F6BCEF45C ^
|
||||
70FFAE353A5CD0F8A65A8B2746D0F16281B25EC7 ^
|
||||
CC8221F2B829B8CF39646BF46888317C3EB378EA ^
|
||||
26ACCC2D6D51FF7BF3E5895588907765111BB69B ^
|
||||
01072915B8E868D9B28E759CF2BC1AEA4BB92165 ^
|
||||
3016115711D74236ADF0C371E47992F87A428598 ^
|
||||
BF30417999C1368F008C1F19FECA4D18A5E1C3C9 ^
|
||||
62BA49087185F2742C26E1C1F4844112178BF673 ^
|
||||
E1F6B9536F384DD3098285BBFD495A474140DC5A ^
|
||||
B522DAE1D67726EBA7C4136D4E2F6D6D645AC43E ^
|
||||
E9A021C3EB0B9F2C710554D4BF21B19F78E09478 ^
|
||||
DF13573188F3BF705E697A3E1F580145F2183377 ^
|
||||
188835CFE52ECFA0C4135C2825F245DC29973970 ^
|
||||
41B615A34EE2CEC9D84A91B141CFAB115821950B ^
|
||||
AB3DD6221D2AFE6613B815DA1C389EEC74AA0337 ^
|
||||
0706D414B4AA7FB4A9051AA70D6856A7264054FB ^
|
||||
3CBF8151F3A00B1D5A809CBB8C4F3135055A6BD1 ^
|
||||
DA5D6A0319272BBCCEA63ACFA6799756FFDA6840 ^
|
||||
FB4429C95F6277B346D3B389413758DFFFEEDC98 ^
|
||||
2C6E30D9C895B42DCCCFC84C906EC88C09B20DE1 ^
|
||||
3DE3189A5E19F225CDCE254DFF23DACD22C61363 ^
|
||||
93530A9BC9A817F6922518A73A1505C411D05DA2 ^
|
||||
E31354345F832D31E05C1B842D405D4BD4588EC8 ^
|
||||
3FF76957E80B60CF74D015AD431FCA147B3AF232 ^
|
||||
34AE3B806BE143A84DCE82E4B830EB7D3D2BAC69 ^
|
||||
D7447E53D66BB5E4C26E8B41F83EFD107BF4ADDA ^
|
||||
77DD2A4482705BC2E9DC96EC0A13395771AC850C ^
|
||||
EAA1465DB1F59DE3F25EB8629602B568E693BB57 ^
|
||||
9329D5B40E0DC43AA25FED69A0FA9C211A948411 ^
|
||||
E94C0B6AA62AA08C625FAF817DDF8F51EC645273 ^
|
||||
7FF02B909D82AD668E31E547E0FB66CB8E213771 ^
|
||||
5BB3570858FA1744123BAC2873B0BB9810F53FA1 ^
|
||||
905F43940B3591CE39D1145ACB1ECA80AB5E43CD ^
|
||||
336C79FBD82F33E490C577E3F791C3CBFE842AFF ^
|
||||
5C6D07A6B44F7A75A64F6CE592F3BAE91E022210 ^
|
||||
7E0D3E9D33127F4A30EB8D9C134A58409FA8695B ^
|
||||
9A5F50DFCFB19286206C229019F0ABF25283028C ^
|
||||
DCA737E269F9D8626D488988C996E06B352C0708 ^
|
||||
B8FFC1D4972FCE63241E0E77850AC46DDE75DBFA ^
|
||||
E9C9BF41C8549354151B977003CE1D830BE667DB ^
|
||||
0942908960B54F96CB43452E583F4F9CB66E398A ^
|
||||
FCE34051C34D4B81B85DDC4B543CDE8007E284B3 ^
|
||||
61E8916532503627F4024D13884640A46F1D61D4 ^
|
||||
F008D5D7853B6A17B7466CD9E18BD135E520FAF4 ^
|
||||
BD8D2E873CF659B5C77AAC1616827EF8A3B1A3B3 ^
|
||||
B25A04DD425302ED211A1C2412D2410FA10C63B6 ^
|
||||
A404E21588123E0893718B4B44E91414A785B91F ^
|
||||
A1E13BC55BF6DAD83CF3AABDA3287AD68681EA64 ^
|
||||
D5FD35FFABED6733C92365929DF0FB4CAE864D15 ^
|
||||
C12E9C280EE9C079E0506FF89F9B20536E0A83EF ^
|
||||
E22769DC00748A9BBD6C05BBC8E81F2CD1DC4E2D ^
|
||||
F29835A93475740E888E8C14318F3CA45A3C8606 ^
|
||||
1A1D77C6D0F97C4B620FAA90F3F8644408E4B13D ^
|
||||
4EC84870E9BDD25F523C6DFB6EDD605052CA4EAA ^
|
||||
D689513FED08B80C39B67371959BC4E3FECB0537 ^
|
||||
C4FED58F209FC3C34AD19F86A6DACADC86C04D33 ^
|
||||
051888C6D00029C176DE792B84DECE2DC1C74B00 ^
|
||||
1A3540BEE05518505827954F58B751C475AEECE0 ^
|
||||
DFA19180359D5A7A38E842F172359CAF4208FC05 ^
|
||||
7B0FA84EBBCFF7D7F4500F73D79660C4A3431B67 ^
|
||||
9E886081C9ACAAD0F97B10810D1DE6FCDCE6B5F4 ^
|
||||
A4D46E4BA0AE4B012F75B1B50D0534D578AE9CB6 ^
|
||||
6342B199EE64C7B2C9CBCD4F2DCB65ACEF51516F ^
|
||||
AABFD63688EB678357869130083E1B52F6EA861D ^
|
||||
F732B7372DAF44801F81EFFE3108726239837936 ^
|
||||
5E9347FE4574CDCB80281ED092191199BADD7B42 ^
|
||||
D5776B7DFFF75C1358ABDBBB3F27A20BB6CA7C55 ^
|
||||
022B7ADA472FB7A9DA9219621C9C5F563D3792F6 ^
|
||||
7F1DE4ECA20362DA624653D225A5B3F7964A9FF2 ^
|
||||
CA0F2B1BFB4469C11ED006A994734F0F2F5EFD17 ^
|
||||
833D63F5C2EA0CD43EC15F2B9DD97FF12B030479 ^
|
||||
14FD356190416C00592B86FF7CA50B622F85593A ^
|
||||
4AB6B57EDDEF1CE935622F935C1619AE7C1667D6 ^
|
||||
B456A6A968ACD66CAA974F96A9A916E700AA3C5D ^
|
||||
FD1C257FE046B2A27E2F0CD55ED2DECA845F01D7 ^
|
||||
66E0D01780F1063E2929EAAD74826BC64060E38C ^
|
||||
A8478DF406F179FD4EF97F4574D7F99EA1CE9EB8 ^
|
||||
248E58CF09A372114FC2F93B09C5FC14F3D0059E ^
|
||||
F15767DE91796A6816977EFA4FCED4B7FD9B8A57 ^
|
||||
36A6BC5E680E15675D9696338C88B36248BBBAF4 ^
|
||||
4DEA6251B2A6DF017A8093AB066EE3863A4EC369 ^
|
||||
D30E70E357D57E3D82CA554B8A3D58DFF528FA94 ^
|
||||
70CA84D827F7FD61446233F88CF2F990B0F3E2AA ^
|
||||
8D500C9CFDE0288530A2106B70BED39326C52C3C ^
|
||||
F3D4D139EDFC24596377BC97A96FB7621F27FFC7 ^
|
||||
5509BAFFAC6D507860CEFC5AB5832CB63CD4B687 ^
|
||||
0C0AEA0C2FD7A620C77866B1A177481E26B4F592 ^
|
||||
149176007FEE58A591E3F00F8DB658B605F8390C ^
|
||||
17C0D7B0256159F3626786FFDB20237AE154FA84 ^
|
||||
741A58618ABEB1D983D67AFDCBC49AA397A3B8E0 ^
|
||||
B738D6B3409EB9ED2F1719B84D13F7C36169CDEC ^
|
||||
3D33DE31F64055D3B128AC9A6AA3F92DFD4F5330 ^
|
||||
B6925F4DF94949B8844C867428BA3DEDF4CF2B51 ^
|
||||
CF5E7256292ABEC431D8E8B9CBEAF22AF072377E ^
|
||||
975DCE94902923977F129C0E4ACF40AD28DDB9AA ^
|
||||
333B0259B18CE64D6B52CF563DD3041E5F63A516 ^
|
||||
<D
|
||||
|
||||
H>SHS Type 3 Hashes<H
|
||||
D>
|
||||
80E044703A880C20EC41F645120A8A5B5D194ECE ^
|
||||
E142829CA08FC9787F17AA16CE727396169B2713 ^
|
||||
6A2BAF62469D311F9257A0727F52C7EAA87CCEB4 ^
|
||||
362E3E7136CA611D7FBF687D3BBDC54CDA64843F ^
|
||||
F5900ADC6223A5D24A7526ABFC60FA8E2D59A5AB ^
|
||||
AD0CAC6A21D5B10833DDE7FA85927D74EDA142A9 ^
|
||||
47AD337EAFFDC177AAF7CBD035BE6F398B9D0536 ^
|
||||
9CF58595DF80872535BCC7C056E223546F0BB4EE ^
|
||||
7151CEB1918278CED2902B1D663D596F8D1B986F ^
|
||||
ADDC9F09AA4026EF6C4B7F1A84D3A13B4CDC65B3 ^
|
||||
921FE78A863A317B1FA1FB3CA3BE1948DE7EF754 ^
|
||||
64BE10732D71D52CE8A486DA23E6B453DF7C6FBD ^
|
||||
4A450659470DD759ABFAE1D73972A6D2E63AC16C ^
|
||||
0D665E4BBF30B7EAB955BDE84759E185EECAB4CB ^
|
||||
0C1B8EE94D61CDD0837EAED9FE33DE4A8334B596 ^
|
||||
D93BFE2A6227A4BF9B7C61EBCE4A8CDE131593FE ^
|
||||
BDA883F804B470C90BD6AC490DFC34EBC27F9648 ^
|
||||
46A0969373552213632591C52030C38E5DBDC49E ^
|
||||
4781289E48B910C550DC23CA7D3AF5324C03532D ^
|
||||
693A34CFCDDED0F3AC72E7197FCE9BB66A8E3981 ^
|
||||
AE088AF1D8865140963B3ABFB63E32E04CD1506F ^
|
||||
ADF0F8F1D85CA97586F5DC6DC5FD11FA39270F55 ^
|
||||
E484F5AD86C5F4D09E366ADF6E0DE73449F97B28 ^
|
||||
81C49842BA3D7072FB42288E03CE737A2672C091 ^
|
||||
F6CC71AD897C23A16835490DED289BFD45500AB0 ^
|
||||
23E71AED62FE8E28F34F58E7FE5594EC5EB0486C ^
|
||||
92BA7934AA5867EE52960F4E0EDFB90AA7B69305 ^
|
||||
C3D1CC8CBD1B6FFEE0D90CE962CD9C09AB1548AA ^
|
||||
3CE37A583B71A6A77BE325066A0F00C5D11DFC3E ^
|
||||
76EF5D236E1042D356A3234A422C092F86003064 ^
|
||||
8C3F703436C6C882E60263540A8E4C3E5646DC15 ^
|
||||
6138F9F3AB43B988DD3857422CCB304352459F40 ^
|
||||
B812DE98775B4690B4FC2ECFCAB61C73C7271DC7 ^
|
||||
06660985CD80D48E7B9F88455B4233924C3B64BB ^
|
||||
76AB4B6378D6F63499A94EB67EB1CB31AFF8D775 ^
|
||||
F31F6B0BE7AB059A1F59A46481967E88392979E6 ^
|
||||
0C1638498FBB7DB9600B98B4B22EF85E0FE245FB ^
|
||||
5607C6AF600939736795AC523FA43B736F41A118 ^
|
||||
8A03244866BDD21B9D8A82E98436C894FAD86ECC ^
|
||||
8A75BFD911AF87303B9B8FB7A1A47CCA52D3D98A ^
|
||||
16F0F3B5D37411236A1E3D6B1EDAB74CDA25ED4B ^
|
||||
AC72BF45477481F58A302628DC5299FFA32E7C9F ^
|
||||
74CFFD5881F75AC20726E1447DCF7F47024380EF ^
|
||||
5BFBECEECBC27DA05729C4D1AC8C1286EA6DCEC9 ^
|
||||
012AACBC0579FA4CB4F107E9A9AD1A86AD2F6A4D ^
|
||||
F7D552CBC5EF90F1A579388B5A8A9EC71EB67681 ^
|
||||
10C70115C4C34753274BFED477DF01440A67A361 ^
|
||||
078D2FACD293B6B6219D89899C16AA1AA8E3DE82 ^
|
||||
83C6BF9FB0D3091ADF374EBFA0A69916F17E6D26 ^
|
||||
2CDB1924DA62AB64C007C6505FF657E4ADDEA9C1 ^
|
||||
E95D209BCB9864B076FF4DFCA8F8BD75D62D1B48 ^
|
||||
632824CF5025F8F90AD2923BDDF449550D64C0F5 ^
|
||||
02B1C0B41FC27EC5A32E586F1AC480BF0061E56A ^
|
||||
28156BC6769AE390BF32C6512C46169181E1536D ^
|
||||
F730E6E287D992E7F3E013B6F1E088F0B9C41598 ^
|
||||
B056A6A832FA5FE964EF77FF3E0BE1C32E0D58C0 ^
|
||||
D5B3D19AFBB48FB56BA6D44A82DE6BD08DB208DE ^
|
||||
0215AD79BD6B8023C05FD2F8966211897DF6337A ^
|
||||
EC4CF38C244EB6526A44F70570925247145DA8CA ^
|
||||
C0D931262ECE93DA5A6ABC89CD6AD3162EA6B09E ^
|
||||
6BB48FAC26AA2B4859BBDEFCFB53AE4D1D9A0340 ^
|
||||
58611D43741E67A7F0DA9CB337A59DCD1EBE758E ^
|
||||
7C2AEC216AF231509E47B7EED06BB17859812B7E ^
|
||||
F60EE5DBF4A7A676EC98B3DDB1CDD6CDF3CDA33B ^
|
||||
0492E59B1F4C94E97F29A26C3EE7D57E1B0FDD72 ^
|
||||
4FCF549D902D9BE1101A756DB9E45415FB61BCD2 ^
|
||||
95C71D26AD6B38CC771376B4A4F962F12E1E3D4F ^
|
||||
F6A2449E773C72FB886B3C43E2B30EC2A1B7454A ^
|
||||
CDE86695E00AEC9A5DB6FDDB5D5A5934448D58E0 ^
|
||||
502318A758FABFF6AC53844E9E2BCD159C678510 ^
|
||||
589D295148F95F75DAE964DD743FE981FA236D4E ^
|
||||
7973DD33AE3599A556BACC77E8656E782E029EFF ^
|
||||
9F5BE43AADD43C6DB3883C9DA4B52E1A50257AEE ^
|
||||
454289D8FFB237A56D5214EAE88F0A9D328FEA1A ^
|
||||
7E686B36595BEB4C0D4528FF960EDB55088A028D ^
|
||||
F9789D1EF19A0084AC0E9F43A4BC0EE0478939EF ^
|
||||
2F32B0E7CC8BE19C325545C816E77056D7BBE70F ^
|
||||
6B1617746F073CFCD2CEBCAFBBE6FD0E28ED2D56 ^
|
||||
CF8D2EA3888AD76761799383E5A15979F6DB7A88 ^
|
||||
557AF6D9D5947203C60E98C9A79B92B8BD085E2B ^
|
||||
C61A217423DE68ED6CD34C91756C8DD3A650A2A2 ^
|
||||
73F3F79C151B6C1BD9369EDB26B932C2362B0593 ^
|
||||
364141E5FBCDE83F210C5BBBEB6810F6299DE14B ^
|
||||
F806BECD025D264FD59E93D9E3606A674C40F216 ^
|
||||
E0C761A57F00CBFB07D49BCB034C36A7122F4C5B ^
|
||||
5D3831044B9E0032FBE3C3425FFD13698F413B33 ^
|
||||
7EB1AB41E9997753C5D530DF118E71E72D7B86FC ^
|
||||
CC053EA1556269D7E8BCBA30B208FCBF0EE2EE64 ^
|
||||
A57739B1DD41E7DC0C40D6B6159A7E73CE2748AA ^
|
||||
90DA527C9DB9ACC2FD530D560A2F1191A80D0567 ^
|
||||
6AC1F2A0B8CA0E5ABC9FDF1ADCE588FBDF5CC53E ^
|
||||
43C1A0A0EE4163EC929726989F92B03639B233AB ^
|
||||
8927F299462413AC29A74080E54D8EE2DB7165E7 ^
|
||||
0C8D7E22226D91B423E781B508F31517EAAB607B ^
|
||||
7286E20D7F08D18A893254FBD3CC833F7973DCAF ^
|
||||
0CB8C235928B8E936C43B8F29EF3758B9FD54A7B ^
|
||||
F67C24CC23E440CA3F206CEEB5504ECA54CD5CA3 ^
|
||||
D78A25DEAA1E7ADADDB3C145ED0E5263BA4F2910 ^
|
||||
00AA68174D29492C578AC853FFCD55908292D41A ^
|
||||
D5570EEDB09A62A5948F7F311F7ED5EF247F9AD9 ^
|
||||
<D
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +0,0 @@
|
||||
SHA1(fips_standalone_sha1.c)= 74df91daa6670c9989b9395492a4b2627d115574
|
||||
SHA1(fips_sha1dgst.c)= 609e2cbf5d3cdcf318ec10238a0e82b93b78e6b5
|
||||
SHA1(fips_sha_locl.h)= 677427c495b571991f013939ea7e5dea87828f8c
|
||||
SHA1(fips_md32_common.h)= 4f41bcde24750b3b8c99a06bcba2fe06ff8db4d0
|
@ -1,81 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS GFSbox test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 128
|
||||
# Tue Jun 24 02:39:58 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = f34481ec3cc627bacd5dc3fb08f273e6
|
||||
|
||||
COUNT = 1
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 9798c4640bad75c7c3227db910174e72
|
||||
|
||||
COUNT = 2
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 96ab5c2ff612d9dfaae8c31f30c42168
|
||||
|
||||
COUNT = 3
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 6a118a874519e64e9963798a503f1d35
|
||||
|
||||
COUNT = 4
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = cb9fceec81286ca3e989bd979b0cb284
|
||||
|
||||
COUNT = 5
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = b26aeb1874e47ca8358ff22378f09144
|
||||
|
||||
COUNT = 6
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 58c8e00b2631686d54eab84b91f0aca1
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 0336763e966d92595a567cc9ce537f5e
|
||||
|
||||
COUNT = 1
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = a9a1631bf4996954ebc093957b234589
|
||||
|
||||
COUNT = 2
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = ff4f8391a6a40ca5b25d23bedd44a597
|
||||
|
||||
COUNT = 3
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = dc43be40be0e53712f7e2bf5ca707209
|
||||
|
||||
COUNT = 4
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 92beedab1895a94faa69b632e5cc47ce
|
||||
|
||||
COUNT = 5
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 459264f4798f6a78bacb89c15ed3d601
|
||||
|
||||
COUNT = 6
|
||||
KEY = 00000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 08a4e2efec8a8e3312ca7460b9040bbf
|
||||
|
@ -1,71 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS GFSbox test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 192
|
||||
# Tue Jun 24 02:40:04 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 1b077a6af4b7f98229de786d7516b639
|
||||
|
||||
COUNT = 1
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 9c2d8842e5f48f57648205d39a239af1
|
||||
|
||||
COUNT = 2
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = bff52510095f518ecca60af4205444bb
|
||||
|
||||
COUNT = 3
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 51719783d3185a535bd75adc65071ce1
|
||||
|
||||
COUNT = 4
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 26aa49dcfe7629a8901a69a9914e6dfd
|
||||
|
||||
COUNT = 5
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 941a4773058224e1ef66d10e0a6ee782
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 275cfc0413d8ccb70513c3859b1d0f72
|
||||
|
||||
COUNT = 1
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = c9b8135ff1b5adc413dfd053b21bd96d
|
||||
|
||||
COUNT = 2
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 4a3650c3371ce2eb35e389a171427440
|
||||
|
||||
COUNT = 3
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 4f354592ff7c8847d2d0870ca9481b7c
|
||||
|
||||
COUNT = 4
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = d5e08bf9a182e857cf40b3a36ee248cc
|
||||
|
||||
COUNT = 5
|
||||
KEY = 000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 067cd9d3749207791841562507fa9626
|
||||
|
@ -1,61 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS GFSbox test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 256
|
||||
# Tue Jun 24 02:40:12 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 014730f80ac625fe84f026c60bfd547d
|
||||
|
||||
COUNT = 1
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 0b24af36193ce4665f2825d7b4749c98
|
||||
|
||||
COUNT = 2
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 761c1fe41a18acf20d241650611d90f1
|
||||
|
||||
COUNT = 3
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 8a560769d605868ad80d819bdba03771
|
||||
|
||||
COUNT = 4
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 91fbef2d15a97816060bee1feaa49afe
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 5c9d844ed46f9885085e5d6a4f94c7d7
|
||||
|
||||
COUNT = 1
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = a9ff75bd7cf6613d3731c77c3b6d0c04
|
||||
|
||||
COUNT = 2
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 623a52fcea5d443e48d9181ab32c7421
|
||||
|
||||
COUNT = 3
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 38f2c7ae10612415d27ca190d27da8b4
|
||||
|
||||
COUNT = 4
|
||||
KEY = 0000000000000000000000000000000000000000000000000000000000000000
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 1bc704f1bce135ceb810341b216d7abe
|
||||
|
@ -1,221 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS KeySbox test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 128
|
||||
# Tue Jun 24 02:39:58 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 10a58869d74be5a374cf867cfb473859
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 1
|
||||
KEY = caea65cdbb75e9169ecd22ebe6e54675
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 2
|
||||
KEY = a2e2fa9baf7d20822ca9f0542f764a41
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 3
|
||||
KEY = b6364ac4e1de1e285eaf144a2415f7a0
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 4
|
||||
KEY = 64cf9c7abc50b888af65f49d521944b2
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 5
|
||||
KEY = 47d6742eefcc0465dc96355e851b64d9
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 6
|
||||
KEY = 3eb39790678c56bee34bbcdeccf6cdb5
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 7
|
||||
KEY = 64110a924f0743d500ccadae72c13427
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 8
|
||||
KEY = 18d8126516f8a12ab1a36d9f04d68e51
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 9
|
||||
KEY = f530357968578480b398a3c251cd1093
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 10
|
||||
KEY = da84367f325d42d601b4326964802e8e
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 11
|
||||
KEY = e37b1c6aa2846f6fdb413f238b089f23
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 12
|
||||
KEY = 6c002b682483e0cabcc731c253be5674
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 13
|
||||
KEY = 143ae8ed6555aba96110ab58893a8ae1
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 14
|
||||
KEY = b69418a85332240dc82492353956ae0c
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 15
|
||||
KEY = 71b5c08a1993e1362e4d0ce9b22b78d5
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 16
|
||||
KEY = e234cdca2606b81f29408d5f6da21206
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 17
|
||||
KEY = 13237c49074a3da078dc1d828bb78c6f
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 18
|
||||
KEY = 3071a2a48fe6cbd04f1a129098e308f8
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 19
|
||||
KEY = 90f42ec0f68385f2ffc5dfc03a654dce
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 20
|
||||
KEY = febd9a24d8b65c1c787d50a4ed3619a9
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 10a58869d74be5a374cf867cfb473859
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 6d251e6944b051e04eaa6fb4dbf78465
|
||||
|
||||
COUNT = 1
|
||||
KEY = caea65cdbb75e9169ecd22ebe6e54675
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 6e29201190152df4ee058139def610bb
|
||||
|
||||
COUNT = 2
|
||||
KEY = a2e2fa9baf7d20822ca9f0542f764a41
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = c3b44b95d9d2f25670eee9a0de099fa3
|
||||
|
||||
COUNT = 3
|
||||
KEY = b6364ac4e1de1e285eaf144a2415f7a0
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 5d9b05578fc944b3cf1ccf0e746cd581
|
||||
|
||||
COUNT = 4
|
||||
KEY = 64cf9c7abc50b888af65f49d521944b2
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = f7efc89d5dba578104016ce5ad659c05
|
||||
|
||||
COUNT = 5
|
||||
KEY = 47d6742eefcc0465dc96355e851b64d9
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 0306194f666d183624aa230a8b264ae7
|
||||
|
||||
COUNT = 6
|
||||
KEY = 3eb39790678c56bee34bbcdeccf6cdb5
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 858075d536d79ccee571f7d7204b1f67
|
||||
|
||||
COUNT = 7
|
||||
KEY = 64110a924f0743d500ccadae72c13427
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 35870c6a57e9e92314bcb8087cde72ce
|
||||
|
||||
COUNT = 8
|
||||
KEY = 18d8126516f8a12ab1a36d9f04d68e51
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 6c68e9be5ec41e22c825b7c7affb4363
|
||||
|
||||
COUNT = 9
|
||||
KEY = f530357968578480b398a3c251cd1093
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = f5df39990fc688f1b07224cc03e86cea
|
||||
|
||||
COUNT = 10
|
||||
KEY = da84367f325d42d601b4326964802e8e
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = bba071bcb470f8f6586e5d3add18bc66
|
||||
|
||||
COUNT = 11
|
||||
KEY = e37b1c6aa2846f6fdb413f238b089f23
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 43c9f7e62f5d288bb27aa40ef8fe1ea8
|
||||
|
||||
COUNT = 12
|
||||
KEY = 6c002b682483e0cabcc731c253be5674
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 3580d19cff44f1014a7c966a69059de5
|
||||
|
||||
COUNT = 13
|
||||
KEY = 143ae8ed6555aba96110ab58893a8ae1
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 806da864dd29d48deafbe764f8202aef
|
||||
|
||||
COUNT = 14
|
||||
KEY = b69418a85332240dc82492353956ae0c
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = a303d940ded8f0baff6f75414cac5243
|
||||
|
||||
COUNT = 15
|
||||
KEY = 71b5c08a1993e1362e4d0ce9b22b78d5
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = c2dabd117f8a3ecabfbb11d12194d9d0
|
||||
|
||||
COUNT = 16
|
||||
KEY = e234cdca2606b81f29408d5f6da21206
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = fff60a4740086b3b9c56195b98d91a7b
|
||||
|
||||
COUNT = 17
|
||||
KEY = 13237c49074a3da078dc1d828bb78c6f
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 8146a08e2357f0caa30ca8c94d1a0544
|
||||
|
||||
COUNT = 18
|
||||
KEY = 3071a2a48fe6cbd04f1a129098e308f8
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 4b98e06d356deb07ebb824e5713f7be3
|
||||
|
||||
COUNT = 19
|
||||
KEY = 90f42ec0f68385f2ffc5dfc03a654dce
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 7a20a53d460fc9ce0423a7a0764c6cf2
|
||||
|
||||
COUNT = 20
|
||||
KEY = febd9a24d8b65c1c787d50a4ed3619a9
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = f4a70d8af877f9b02b4c40df57d45b17
|
||||
|
@ -1,251 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS KeySbox test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 192
|
||||
# Tue Jun 24 02:40:04 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = e9f065d7c13573587f7875357dfbb16c53489f6a4bd0f7cd
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 1
|
||||
KEY = 15d20f6ebc7e649fd95b76b107e6daba967c8a9484797f29
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 2
|
||||
KEY = a8a282ee31c03fae4f8e9b8930d5473c2ed695a347e88b7c
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 3
|
||||
KEY = cd62376d5ebb414917f0c78f05266433dc9192a1ec943300
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 4
|
||||
KEY = 502a6ab36984af268bf423c7f509205207fc1552af4a91e5
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 5
|
||||
KEY = 25a39dbfd8034f71a81f9ceb55026e4037f8f6aa30ab44ce
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 6
|
||||
KEY = e08c15411774ec4a908b64eadc6ac4199c7cd453f3aaef53
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 7
|
||||
KEY = 3b375a1ff7e8d44409696e6326ec9dec86138e2ae010b980
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 8
|
||||
KEY = 950bb9f22cc35be6fe79f52c320af93dec5bc9c0c2f9cd53
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 9
|
||||
KEY = 7001c487cc3e572cfc92f4d0e697d982e8856fdcc957da40
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 10
|
||||
KEY = f029ce61d4e5a405b41ead0a883cc6a737da2cf50a6c92ae
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 11
|
||||
KEY = 61257134a518a0d57d9d244d45f6498cbc32f2bafc522d79
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 12
|
||||
KEY = b0ab0a6a818baef2d11fa33eac947284fb7d748cfb75e570
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 13
|
||||
KEY = ee053aa011c8b428cdcc3636313c54d6a03cac01c71579d6
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 14
|
||||
KEY = d2926527e0aa9f37b45e2ec2ade5853ef807576104c7ace3
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 15
|
||||
KEY = 982215f4e173dfa0fcffe5d3da41c4812c7bcc8ed3540f93
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 16
|
||||
KEY = 98c6b8e01e379fbd14e61af6af891596583565f2a27d59e9
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 17
|
||||
KEY = b3ad5cea1dddc214ca969ac35f37dae1a9a9d1528f89bb35
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 18
|
||||
KEY = 45899367c3132849763073c435a9288a766c8b9ec2308516
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 19
|
||||
KEY = ec250e04c3903f602647b85a401a1ae7ca2f02f67fa4253e
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 20
|
||||
KEY = d077a03bd8a38973928ccafe4a9d2f455130bd0af5ae46a9
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 21
|
||||
KEY = d184c36cf0dddfec39e654195006022237871a47c33d3198
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 22
|
||||
KEY = 4c6994ffa9dcdc805b60c2c0095334c42d95a8fc0ca5b080
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 23
|
||||
KEY = c88f5b00a4ef9a6840e2acaf33f00a3bdc4e25895303fa72
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = e9f065d7c13573587f7875357dfbb16c53489f6a4bd0f7cd
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 0956259c9cd5cfd0181cca53380cde06
|
||||
|
||||
COUNT = 1
|
||||
KEY = 15d20f6ebc7e649fd95b76b107e6daba967c8a9484797f29
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 8e4e18424e591a3d5b6f0876f16f8594
|
||||
|
||||
COUNT = 2
|
||||
KEY = a8a282ee31c03fae4f8e9b8930d5473c2ed695a347e88b7c
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 93f3270cfc877ef17e106ce938979cb0
|
||||
|
||||
COUNT = 3
|
||||
KEY = cd62376d5ebb414917f0c78f05266433dc9192a1ec943300
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 7f6c25ff41858561bb62f36492e93c29
|
||||
|
||||
COUNT = 4
|
||||
KEY = 502a6ab36984af268bf423c7f509205207fc1552af4a91e5
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 8e06556dcbb00b809a025047cff2a940
|
||||
|
||||
COUNT = 5
|
||||
KEY = 25a39dbfd8034f71a81f9ceb55026e4037f8f6aa30ab44ce
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 3608c344868e94555d23a120f8a5502d
|
||||
|
||||
COUNT = 6
|
||||
KEY = e08c15411774ec4a908b64eadc6ac4199c7cd453f3aaef53
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 77da2021935b840b7f5dcc39132da9e5
|
||||
|
||||
COUNT = 7
|
||||
KEY = 3b375a1ff7e8d44409696e6326ec9dec86138e2ae010b980
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 3b7c24f825e3bf9873c9f14d39a0e6f4
|
||||
|
||||
COUNT = 8
|
||||
KEY = 950bb9f22cc35be6fe79f52c320af93dec5bc9c0c2f9cd53
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 64ebf95686b353508c90ecd8b6134316
|
||||
|
||||
COUNT = 9
|
||||
KEY = 7001c487cc3e572cfc92f4d0e697d982e8856fdcc957da40
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = ff558c5d27210b7929b73fc708eb4cf1
|
||||
|
||||
COUNT = 10
|
||||
KEY = f029ce61d4e5a405b41ead0a883cc6a737da2cf50a6c92ae
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = a2c3b2a818075490a7b4c14380f02702
|
||||
|
||||
COUNT = 11
|
||||
KEY = 61257134a518a0d57d9d244d45f6498cbc32f2bafc522d79
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = cfe4d74002696ccf7d87b14a2f9cafc9
|
||||
|
||||
COUNT = 12
|
||||
KEY = b0ab0a6a818baef2d11fa33eac947284fb7d748cfb75e570
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = d2eafd86f63b109b91f5dbb3a3fb7e13
|
||||
|
||||
COUNT = 13
|
||||
KEY = ee053aa011c8b428cdcc3636313c54d6a03cac01c71579d6
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 9b9fdd1c5975655f539998b306a324af
|
||||
|
||||
COUNT = 14
|
||||
KEY = d2926527e0aa9f37b45e2ec2ade5853ef807576104c7ace3
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = dd619e1cf204446112e0af2b9afa8f8c
|
||||
|
||||
COUNT = 15
|
||||
KEY = 982215f4e173dfa0fcffe5d3da41c4812c7bcc8ed3540f93
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = d4f0aae13c8fe9339fbf9e69ed0ad74d
|
||||
|
||||
COUNT = 16
|
||||
KEY = 98c6b8e01e379fbd14e61af6af891596583565f2a27d59e9
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 19c80ec4a6deb7e5ed1033dda933498f
|
||||
|
||||
COUNT = 17
|
||||
KEY = b3ad5cea1dddc214ca969ac35f37dae1a9a9d1528f89bb35
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 3cf5e1d21a17956d1dffad6a7c41c659
|
||||
|
||||
COUNT = 18
|
||||
KEY = 45899367c3132849763073c435a9288a766c8b9ec2308516
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 69fd12e8505f8ded2fdcb197a121b362
|
||||
|
||||
COUNT = 19
|
||||
KEY = ec250e04c3903f602647b85a401a1ae7ca2f02f67fa4253e
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 8aa584e2cc4d17417a97cb9a28ba29c8
|
||||
|
||||
COUNT = 20
|
||||
KEY = d077a03bd8a38973928ccafe4a9d2f455130bd0af5ae46a9
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = abc786fb1edb504580c4d882ef29a0c7
|
||||
|
||||
COUNT = 21
|
||||
KEY = d184c36cf0dddfec39e654195006022237871a47c33d3198
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 2e19fb60a3e1de0166f483c97824a978
|
||||
|
||||
COUNT = 22
|
||||
KEY = 4c6994ffa9dcdc805b60c2c0095334c42d95a8fc0ca5b080
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 7656709538dd5fec41e0ce6a0f8e207d
|
||||
|
||||
COUNT = 23
|
||||
KEY = c88f5b00a4ef9a6840e2acaf33f00a3bdc4e25895303fa72
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = a67cf333b314d411d3c0ae6e1cfcd8f5
|
||||
|
@ -1,171 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS KeySbox test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 256
|
||||
# Tue Jun 24 02:40:12 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = c47b0294dbbbee0fec4757f22ffeee3587ca4730c3d33b691df38bab076bc558
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 1
|
||||
KEY = 28d46cffa158533194214a91e712fc2b45b518076675affd910edeca5f41ac64
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 2
|
||||
KEY = c1cc358b449909a19436cfbb3f852ef8bcb5ed12ac7058325f56e6099aab1a1c
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 3
|
||||
KEY = 984ca75f4ee8d706f46c2d98c0bf4a45f5b00d791c2dfeb191b5ed8e420fd627
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 4
|
||||
KEY = b43d08a447ac8609baadae4ff12918b9f68fc1653f1269222f123981ded7a92f
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 5
|
||||
KEY = 1d85a181b54cde51f0e098095b2962fdc93b51fe9b88602b3f54130bf76a5bd9
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 6
|
||||
KEY = dc0eba1f2232a7879ded34ed8428eeb8769b056bbaf8ad77cb65c3541430b4cf
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 7
|
||||
KEY = f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 8
|
||||
KEY = 797f8b3d176dac5b7e34a2d539c4ef367a16f8635f6264737591c5c07bf57a3e
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 9
|
||||
KEY = 6838d40caf927749c13f0329d331f448e202c73ef52c5f73a37ca635d4c47707
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 10
|
||||
KEY = ccd1bc3c659cd3c59bc437484e3c5c724441da8d6e90ce556cd57d0752663bbc
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 11
|
||||
KEY = 13428b5e4c005e0636dd338405d173ab135dec2a25c22c5df0722d69dcc43887
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 12
|
||||
KEY = 07eb03a08d291d1b07408bf3512ab40c91097ac77461aad4bb859647f74f00ee
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 13
|
||||
KEY = 90143ae20cd78c5d8ebdd6cb9dc1762427a96c78c639bccc41a61424564eafe1
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 14
|
||||
KEY = b7a5794d52737475d53d5a377200849be0260a67a2b22ced8bbef12882270d07
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
COUNT = 15
|
||||
KEY = fca02f3d5011cfc5c1e23165d413a049d4526a991827424d896fe3435e0bf68e
|
||||
IV = 00000000000000000000000000000000
|
||||
PLAINTEXT = 00000000000000000000000000000000
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = c47b0294dbbbee0fec4757f22ffeee3587ca4730c3d33b691df38bab076bc558
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 46f2fb342d6f0ab477476fc501242c5f
|
||||
|
||||
COUNT = 1
|
||||
KEY = 28d46cffa158533194214a91e712fc2b45b518076675affd910edeca5f41ac64
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 4bf3b0a69aeb6657794f2901b1440ad4
|
||||
|
||||
COUNT = 2
|
||||
KEY = c1cc358b449909a19436cfbb3f852ef8bcb5ed12ac7058325f56e6099aab1a1c
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 352065272169abf9856843927d0674fd
|
||||
|
||||
COUNT = 3
|
||||
KEY = 984ca75f4ee8d706f46c2d98c0bf4a45f5b00d791c2dfeb191b5ed8e420fd627
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 4307456a9e67813b452e15fa8fffe398
|
||||
|
||||
COUNT = 4
|
||||
KEY = b43d08a447ac8609baadae4ff12918b9f68fc1653f1269222f123981ded7a92f
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 4663446607354989477a5c6f0f007ef4
|
||||
|
||||
COUNT = 5
|
||||
KEY = 1d85a181b54cde51f0e098095b2962fdc93b51fe9b88602b3f54130bf76a5bd9
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 531c2c38344578b84d50b3c917bbb6e1
|
||||
|
||||
COUNT = 6
|
||||
KEY = dc0eba1f2232a7879ded34ed8428eeb8769b056bbaf8ad77cb65c3541430b4cf
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = fc6aec906323480005c58e7e1ab004ad
|
||||
|
||||
COUNT = 7
|
||||
KEY = f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = a3944b95ca0b52043584ef02151926a8
|
||||
|
||||
COUNT = 8
|
||||
KEY = 797f8b3d176dac5b7e34a2d539c4ef367a16f8635f6264737591c5c07bf57a3e
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = a74289fe73a4c123ca189ea1e1b49ad5
|
||||
|
||||
COUNT = 9
|
||||
KEY = 6838d40caf927749c13f0329d331f448e202c73ef52c5f73a37ca635d4c47707
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = b91d4ea4488644b56cf0812fa7fcf5fc
|
||||
|
||||
COUNT = 10
|
||||
KEY = ccd1bc3c659cd3c59bc437484e3c5c724441da8d6e90ce556cd57d0752663bbc
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 304f81ab61a80c2e743b94d5002a126b
|
||||
|
||||
COUNT = 11
|
||||
KEY = 13428b5e4c005e0636dd338405d173ab135dec2a25c22c5df0722d69dcc43887
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 649a71545378c783e368c9ade7114f6c
|
||||
|
||||
COUNT = 12
|
||||
KEY = 07eb03a08d291d1b07408bf3512ab40c91097ac77461aad4bb859647f74f00ee
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 47cb030da2ab051dfc6c4bf6910d12bb
|
||||
|
||||
COUNT = 13
|
||||
KEY = 90143ae20cd78c5d8ebdd6cb9dc1762427a96c78c639bccc41a61424564eafe1
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 798c7c005dee432b2c8ea5dfa381ecc3
|
||||
|
||||
COUNT = 14
|
||||
KEY = b7a5794d52737475d53d5a377200849be0260a67a2b22ced8bbef12882270d07
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 637c31dc2591a07636f646b72daabbe7
|
||||
|
||||
COUNT = 15
|
||||
KEY = fca02f3d5011cfc5c1e23165d413a049d4526a991827424d896fe3435e0bf68e
|
||||
IV = 00000000000000000000000000000000
|
||||
CIPHERTEXT = 179a49c712154bbffbe6e7a84a18e220
|
||||
|
@ -1,20 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS MCT test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 128
|
||||
# Tue Jun 24 02:39:58 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = c8ebb8e12ab9bcceb55d3d42b38c6fb1
|
||||
IV = 6c8f49ad89c5e254caa72f39693c6d76
|
||||
PLAINTEXT = 9e2fe1eadfbb36d3451eec24922d6da8
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = fd43cd4edaba8227b05a7bec889aa6ec
|
||||
IV = 53e9756bf95a16ccb81c2e3c224ccf6b
|
||||
CIPHERTEXT = 49c67e5d59d0f8c6e8d1e850ef947041
|
@ -1,20 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS MCT test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 192
|
||||
# Tue Jun 24 02:40:04 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 6cd4432f31885b8d6929dd17d8fa504cce9d1ffda8863c5e
|
||||
IV = af5e8d34443a17ff22974b3676fef814
|
||||
PLAINTEXT = 9908ab77006f5e72eb7d3430742e14c7
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 6e4ed5f9d610e318db20959bca2744837442e8f831f83bdd
|
||||
IV = 70a8e071494862ccd1faa142f1e0e969
|
||||
CIPHERTEXT = 251bc2308ed0271f847b7d178ee5d8ba
|
@ -1,20 +0,0 @@
|
||||
# CAVS 2.0
|
||||
# Config info for OpenSSL
|
||||
# AESVS MCT test data for CBC
|
||||
# State : Encrypt and Decrypt
|
||||
# Key Length : 256
|
||||
# Tue Jun 24 02:40:12 PM
|
||||
|
||||
[ENCRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = d0be86a54fed303d088564f42b8375e048c8100b11cd20c76292ee417ed78d59
|
||||
IV = 8fb1920492ba50b90f7d496ba2621a94
|
||||
PLAINTEXT = 9c75a26e30b0e048ccbd51f41351411f
|
||||
|
||||
[DECRYPT]
|
||||
|
||||
COUNT = 0
|
||||
KEY = 1b863294b141caafed1fbb80d3a2cbbf08715c5a91054bc7dea6179807964650
|
||||
IV = 8c7563e6146fe29bd4c96882860ab335
|
||||
CIPHERTEXT = 5504040e47ce8dc703345aecca8957c9
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user