Initial Commit
This commit is contained in:
96
openssl-1.0.2f/crypto/rc5/Makefile
Normal file
96
openssl-1.0.2f/crypto/rc5/Makefile
Normal file
@@ -0,0 +1,96 @@
|
||||
#
|
||||
# OpenSSL/crypto/rc5/Makefile
|
||||
#
|
||||
|
||||
DIR= rc5
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
CPP= $(CC) -E
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
MAKEFILE= Makefile
|
||||
AR= ar r
|
||||
|
||||
RC5_ENC= rc5_enc.o
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
ASFLAGS= $(INCLUDES) $(ASFLAG)
|
||||
AFLAGS= $(ASFLAGS)
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST=rc5test.c
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC=rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c
|
||||
LIBOBJ=rc5_skey.o rc5_ecb.o $(RC5_ENC) rc5cfb64.o rc5ofb64.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER= rc5.h
|
||||
HEADER= rc5_locl.h $(EXHEADER)
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
|
||||
|
||||
all: lib
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
rc5-586.s: asm/rc5-586.pl ../perlasm/x86asm.pl ../perlasm/cbc.pl
|
||||
$(PERL) asm/rc5-586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
|
||||
@headerlist="$(EXHEADER)"; for i in $$headerlist ; \
|
||||
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
|
||||
|
||||
update: depend
|
||||
|
||||
depend:
|
||||
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
|
||||
$(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 *.s *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
rc5_ecb.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
rc5_ecb.o: ../../include/openssl/rc5.h rc5_ecb.c rc5_locl.h
|
||||
rc5_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc5.h
|
||||
rc5_enc.o: rc5_enc.c rc5_locl.h
|
||||
rc5_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc5.h
|
||||
rc5_skey.o: rc5_locl.h rc5_skey.c
|
||||
rc5cfb64.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc5.h
|
||||
rc5cfb64.o: rc5_locl.h rc5cfb64.c
|
||||
rc5ofb64.o: ../../include/openssl/opensslconf.h ../../include/openssl/rc5.h
|
||||
rc5ofb64.o: rc5_locl.h rc5ofb64.c
|
||||
110
openssl-1.0.2f/crypto/rc5/asm/rc5-586.pl
Normal file
110
openssl-1.0.2f/crypto/rc5/asm/rc5-586.pl
Normal file
@@ -0,0 +1,110 @@
|
||||
#!/usr/local/bin/perl
|
||||
|
||||
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
||||
push(@INC,"${dir}","${dir}../../perlasm");
|
||||
require "x86asm.pl";
|
||||
require "cbc.pl";
|
||||
|
||||
&asm_init($ARGV[0],"rc5-586.pl");
|
||||
|
||||
$RC5_MAX_ROUNDS=16;
|
||||
$RC5_32_OFF=($RC5_MAX_ROUNDS+2)*4;
|
||||
$A="edi";
|
||||
$B="esi";
|
||||
$S="ebp";
|
||||
$tmp1="eax";
|
||||
$r="ebx";
|
||||
$tmpc="ecx";
|
||||
$tmp4="edx";
|
||||
|
||||
&RC5_32_encrypt("RC5_32_encrypt",1);
|
||||
&RC5_32_encrypt("RC5_32_decrypt",0);
|
||||
&cbc("RC5_32_cbc_encrypt","RC5_32_encrypt","RC5_32_decrypt",0,4,5,3,-1,-1);
|
||||
&asm_finish();
|
||||
|
||||
sub RC5_32_encrypt
|
||||
{
|
||||
local($name,$enc)=@_;
|
||||
|
||||
&function_begin_B($name,"");
|
||||
|
||||
&comment("");
|
||||
|
||||
&push("ebp");
|
||||
&push("esi");
|
||||
&push("edi");
|
||||
&mov($tmp4,&wparam(0));
|
||||
&mov($S,&wparam(1));
|
||||
|
||||
&comment("Load the 2 words");
|
||||
&mov($A,&DWP(0,$tmp4,"",0));
|
||||
&mov($B,&DWP(4,$tmp4,"",0));
|
||||
|
||||
&push($r);
|
||||
&mov($r, &DWP(0,$S,"",0));
|
||||
|
||||
# encrypting part
|
||||
|
||||
if ($enc)
|
||||
{
|
||||
&add($A, &DWP(4+0,$S,"",0));
|
||||
&add($B, &DWP(4+4,$S,"",0));
|
||||
|
||||
for ($i=0; $i<$RC5_MAX_ROUNDS; $i++)
|
||||
{
|
||||
&xor($A, $B);
|
||||
&mov($tmp1, &DWP(12+$i*8,$S,"",0));
|
||||
&mov($tmpc, $B);
|
||||
&rotl($A, &LB("ecx"));
|
||||
&add($A, $tmp1);
|
||||
|
||||
&xor($B, $A);
|
||||
&mov($tmp1, &DWP(16+$i*8,$S,"",0));
|
||||
&mov($tmpc, $A);
|
||||
&rotl($B, &LB("ecx"));
|
||||
&add($B, $tmp1);
|
||||
if (($i == 7) || ($i == 11))
|
||||
{
|
||||
&cmp($r, $i+1);
|
||||
&je(&label("rc5_exit"));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
&cmp($r, 12);
|
||||
&je(&label("rc5_dec_12"));
|
||||
&cmp($r, 8);
|
||||
&je(&label("rc5_dec_8"));
|
||||
for ($i=$RC5_MAX_ROUNDS; $i > 0; $i--)
|
||||
{
|
||||
&set_label("rc5_dec_$i") if ($i == 12) || ($i == 8);
|
||||
&mov($tmp1, &DWP($i*8+8,$S,"",0));
|
||||
&sub($B, $tmp1);
|
||||
&mov($tmpc, $A);
|
||||
&rotr($B, &LB("ecx"));
|
||||
&xor($B, $A);
|
||||
|
||||
&mov($tmp1, &DWP($i*8+4,$S,"",0));
|
||||
&sub($A, $tmp1);
|
||||
&mov($tmpc, $B);
|
||||
&rotr($A, &LB("ecx"));
|
||||
&xor($A, $B);
|
||||
}
|
||||
&sub($B, &DWP(4+4,$S,"",0));
|
||||
&sub($A, &DWP(4+0,$S,"",0));
|
||||
}
|
||||
|
||||
&set_label("rc5_exit");
|
||||
&mov(&DWP(0,$tmp4,"",0),$A);
|
||||
&mov(&DWP(4,$tmp4,"",0),$B);
|
||||
|
||||
&pop("ebx");
|
||||
&pop("edi");
|
||||
&pop("esi");
|
||||
&pop("ebp");
|
||||
&ret();
|
||||
&function_end_B($name);
|
||||
}
|
||||
|
||||
|
||||
115
openssl-1.0.2f/crypto/rc5/rc5.h
Normal file
115
openssl-1.0.2f/crypto/rc5/rc5.h
Normal file
@@ -0,0 +1,115 @@
|
||||
/* crypto/rc5/rc5.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.]
|
||||
*/
|
||||
|
||||
#ifndef HEADER_RC5_H
|
||||
# define HEADER_RC5_H
|
||||
|
||||
# include <openssl/opensslconf.h>/* OPENSSL_NO_RC5 */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
# ifdef OPENSSL_NO_RC5
|
||||
# error RC5 is disabled.
|
||||
# endif
|
||||
|
||||
# define RC5_ENCRYPT 1
|
||||
# define RC5_DECRYPT 0
|
||||
|
||||
/* 32 bit. For Alpha, things may get weird */
|
||||
# define RC5_32_INT unsigned long
|
||||
|
||||
# define RC5_32_BLOCK 8
|
||||
# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */
|
||||
|
||||
/*
|
||||
* This are the only values supported. Tweak the code if you want more The
|
||||
* most supported modes will be RC5-32/12/16 RC5-32/16/8
|
||||
*/
|
||||
# define RC5_8_ROUNDS 8
|
||||
# define RC5_12_ROUNDS 12
|
||||
# define RC5_16_ROUNDS 16
|
||||
|
||||
typedef struct rc5_key_st {
|
||||
/* Number of rounds */
|
||||
int rounds;
|
||||
RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)];
|
||||
} RC5_32_KEY;
|
||||
|
||||
void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data,
|
||||
int rounds);
|
||||
void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
||||
RC5_32_KEY *key, int enc);
|
||||
void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key);
|
||||
void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key);
|
||||
void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
||||
long length, RC5_32_KEY *ks, unsigned char *iv,
|
||||
int enc);
|
||||
void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
||||
long length, RC5_32_KEY *schedule,
|
||||
unsigned char *ivec, int *num, int enc);
|
||||
void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out,
|
||||
long length, RC5_32_KEY *schedule,
|
||||
unsigned char *ivec, int *num);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
83
openssl-1.0.2f/crypto/rc5/rc5_ecb.c
Normal file
83
openssl-1.0.2f/crypto/rc5/rc5_ecb.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/* crypto/rc5/rc5_ecb.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 <openssl/rc5.h>
|
||||
#include "rc5_locl.h"
|
||||
#include <openssl/opensslv.h>
|
||||
|
||||
const char RC5_version[] = "RC5" OPENSSL_VERSION_PTEXT;
|
||||
|
||||
void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
||||
RC5_32_KEY *ks, int encrypt)
|
||||
{
|
||||
unsigned long l, d[2];
|
||||
|
||||
c2l(in, l);
|
||||
d[0] = l;
|
||||
c2l(in, l);
|
||||
d[1] = l;
|
||||
if (encrypt)
|
||||
RC5_32_encrypt(d, ks);
|
||||
else
|
||||
RC5_32_decrypt(d, ks);
|
||||
l = d[0];
|
||||
l2c(l, out);
|
||||
l = d[1];
|
||||
l2c(l, out);
|
||||
l = d[0] = d[1] = 0;
|
||||
}
|
||||
209
openssl-1.0.2f/crypto/rc5/rc5_enc.c
Normal file
209
openssl-1.0.2f/crypto/rc5/rc5_enc.c
Normal file
@@ -0,0 +1,209 @@
|
||||
/* crypto/rc5/rc5_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 <stdio.h>
|
||||
#include <openssl/rc5.h>
|
||||
#include "rc5_locl.h"
|
||||
|
||||
void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
||||
long length, RC5_32_KEY *ks, unsigned char *iv,
|
||||
int encrypt)
|
||||
{
|
||||
register unsigned long tin0, tin1;
|
||||
register unsigned long tout0, tout1, xor0, xor1;
|
||||
register long l = length;
|
||||
unsigned long tin[2];
|
||||
|
||||
if (encrypt) {
|
||||
c2l(iv, tout0);
|
||||
c2l(iv, tout1);
|
||||
iv -= 8;
|
||||
for (l -= 8; l >= 0; l -= 8) {
|
||||
c2l(in, tin0);
|
||||
c2l(in, tin1);
|
||||
tin0 ^= tout0;
|
||||
tin1 ^= tout1;
|
||||
tin[0] = tin0;
|
||||
tin[1] = tin1;
|
||||
RC5_32_encrypt(tin, ks);
|
||||
tout0 = tin[0];
|
||||
l2c(tout0, out);
|
||||
tout1 = tin[1];
|
||||
l2c(tout1, out);
|
||||
}
|
||||
if (l != -8) {
|
||||
c2ln(in, tin0, tin1, l + 8);
|
||||
tin0 ^= tout0;
|
||||
tin1 ^= tout1;
|
||||
tin[0] = tin0;
|
||||
tin[1] = tin1;
|
||||
RC5_32_encrypt(tin, ks);
|
||||
tout0 = tin[0];
|
||||
l2c(tout0, out);
|
||||
tout1 = tin[1];
|
||||
l2c(tout1, out);
|
||||
}
|
||||
l2c(tout0, iv);
|
||||
l2c(tout1, iv);
|
||||
} else {
|
||||
c2l(iv, xor0);
|
||||
c2l(iv, xor1);
|
||||
iv -= 8;
|
||||
for (l -= 8; l >= 0; l -= 8) {
|
||||
c2l(in, tin0);
|
||||
tin[0] = tin0;
|
||||
c2l(in, tin1);
|
||||
tin[1] = tin1;
|
||||
RC5_32_decrypt(tin, ks);
|
||||
tout0 = tin[0] ^ xor0;
|
||||
tout1 = tin[1] ^ xor1;
|
||||
l2c(tout0, out);
|
||||
l2c(tout1, out);
|
||||
xor0 = tin0;
|
||||
xor1 = tin1;
|
||||
}
|
||||
if (l != -8) {
|
||||
c2l(in, tin0);
|
||||
tin[0] = tin0;
|
||||
c2l(in, tin1);
|
||||
tin[1] = tin1;
|
||||
RC5_32_decrypt(tin, ks);
|
||||
tout0 = tin[0] ^ xor0;
|
||||
tout1 = tin[1] ^ xor1;
|
||||
l2cn(tout0, tout1, out, l + 8);
|
||||
xor0 = tin0;
|
||||
xor1 = tin1;
|
||||
}
|
||||
l2c(xor0, iv);
|
||||
l2c(xor1, iv);
|
||||
}
|
||||
tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
|
||||
tin[0] = tin[1] = 0;
|
||||
}
|
||||
|
||||
void RC5_32_encrypt(unsigned long *d, RC5_32_KEY *key)
|
||||
{
|
||||
RC5_32_INT a, b, *s;
|
||||
|
||||
s = key->data;
|
||||
|
||||
a = d[0] + s[0];
|
||||
b = d[1] + s[1];
|
||||
E_RC5_32(a, b, s, 2);
|
||||
E_RC5_32(a, b, s, 4);
|
||||
E_RC5_32(a, b, s, 6);
|
||||
E_RC5_32(a, b, s, 8);
|
||||
E_RC5_32(a, b, s, 10);
|
||||
E_RC5_32(a, b, s, 12);
|
||||
E_RC5_32(a, b, s, 14);
|
||||
E_RC5_32(a, b, s, 16);
|
||||
if (key->rounds == 12) {
|
||||
E_RC5_32(a, b, s, 18);
|
||||
E_RC5_32(a, b, s, 20);
|
||||
E_RC5_32(a, b, s, 22);
|
||||
E_RC5_32(a, b, s, 24);
|
||||
} else if (key->rounds == 16) {
|
||||
/* Do a full expansion to avoid a jump */
|
||||
E_RC5_32(a, b, s, 18);
|
||||
E_RC5_32(a, b, s, 20);
|
||||
E_RC5_32(a, b, s, 22);
|
||||
E_RC5_32(a, b, s, 24);
|
||||
E_RC5_32(a, b, s, 26);
|
||||
E_RC5_32(a, b, s, 28);
|
||||
E_RC5_32(a, b, s, 30);
|
||||
E_RC5_32(a, b, s, 32);
|
||||
}
|
||||
d[0] = a;
|
||||
d[1] = b;
|
||||
}
|
||||
|
||||
void RC5_32_decrypt(unsigned long *d, RC5_32_KEY *key)
|
||||
{
|
||||
RC5_32_INT a, b, *s;
|
||||
|
||||
s = key->data;
|
||||
|
||||
a = d[0];
|
||||
b = d[1];
|
||||
if (key->rounds == 16) {
|
||||
D_RC5_32(a, b, s, 32);
|
||||
D_RC5_32(a, b, s, 30);
|
||||
D_RC5_32(a, b, s, 28);
|
||||
D_RC5_32(a, b, s, 26);
|
||||
/* Do a full expansion to avoid a jump */
|
||||
D_RC5_32(a, b, s, 24);
|
||||
D_RC5_32(a, b, s, 22);
|
||||
D_RC5_32(a, b, s, 20);
|
||||
D_RC5_32(a, b, s, 18);
|
||||
} else if (key->rounds == 12) {
|
||||
D_RC5_32(a, b, s, 24);
|
||||
D_RC5_32(a, b, s, 22);
|
||||
D_RC5_32(a, b, s, 20);
|
||||
D_RC5_32(a, b, s, 18);
|
||||
}
|
||||
D_RC5_32(a, b, s, 16);
|
||||
D_RC5_32(a, b, s, 14);
|
||||
D_RC5_32(a, b, s, 12);
|
||||
D_RC5_32(a, b, s, 10);
|
||||
D_RC5_32(a, b, s, 8);
|
||||
D_RC5_32(a, b, s, 6);
|
||||
D_RC5_32(a, b, s, 4);
|
||||
D_RC5_32(a, b, s, 2);
|
||||
d[0] = a - s[0];
|
||||
d[1] = b - s[1];
|
||||
}
|
||||
207
openssl-1.0.2f/crypto/rc5/rc5_locl.h
Normal file
207
openssl-1.0.2f/crypto/rc5/rc5_locl.h
Normal file
@@ -0,0 +1,207 @@
|
||||
/* crypto/rc5/rc5_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>
|
||||
|
||||
#undef c2l
|
||||
#define c2l(c,l) (l =((unsigned long)(*((c)++))) , \
|
||||
l|=((unsigned long)(*((c)++)))<< 8L, \
|
||||
l|=((unsigned long)(*((c)++)))<<16L, \
|
||||
l|=((unsigned long)(*((c)++)))<<24L)
|
||||
|
||||
/* NOTE - c is not incremented as per c2l */
|
||||
#undef c2ln
|
||||
#define c2ln(c,l1,l2,n) { \
|
||||
c+=n; \
|
||||
l1=l2=0; \
|
||||
switch (n) { \
|
||||
case 8: l2 =((unsigned long)(*(--(c))))<<24L; \
|
||||
case 7: l2|=((unsigned long)(*(--(c))))<<16L; \
|
||||
case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \
|
||||
case 5: l2|=((unsigned long)(*(--(c)))); \
|
||||
case 4: l1 =((unsigned long)(*(--(c))))<<24L; \
|
||||
case 3: l1|=((unsigned long)(*(--(c))))<<16L; \
|
||||
case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \
|
||||
case 1: l1|=((unsigned long)(*(--(c)))); \
|
||||
} \
|
||||
}
|
||||
|
||||
#undef l2c
|
||||
#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))
|
||||
|
||||
/* NOTE - c is not incremented as per l2c */
|
||||
#undef l2cn
|
||||
#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); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* NOTE - c is not incremented as per n2l */
|
||||
#define n2ln(c,l1,l2,n) { \
|
||||
c+=n; \
|
||||
l1=l2=0; \
|
||||
switch (n) { \
|
||||
case 8: l2 =((unsigned long)(*(--(c)))) ; \
|
||||
case 7: l2|=((unsigned long)(*(--(c))))<< 8; \
|
||||
case 6: l2|=((unsigned long)(*(--(c))))<<16; \
|
||||
case 5: l2|=((unsigned long)(*(--(c))))<<24; \
|
||||
case 4: l1 =((unsigned long)(*(--(c)))) ; \
|
||||
case 3: l1|=((unsigned long)(*(--(c))))<< 8; \
|
||||
case 2: l1|=((unsigned long)(*(--(c))))<<16; \
|
||||
case 1: l1|=((unsigned long)(*(--(c))))<<24; \
|
||||
} \
|
||||
}
|
||||
|
||||
/* NOTE - c is not incremented as per l2n */
|
||||
#define l2nn(l1,l2,c,n) { \
|
||||
c+=n; \
|
||||
switch (n) { \
|
||||
case 8: *(--(c))=(unsigned char)(((l2) )&0xff); \
|
||||
case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
|
||||
case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
|
||||
case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
|
||||
case 4: *(--(c))=(unsigned char)(((l1) )&0xff); \
|
||||
case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
|
||||
case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
|
||||
case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
|
||||
} \
|
||||
}
|
||||
|
||||
#undef n2l
|
||||
#define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24L, \
|
||||
l|=((unsigned long)(*((c)++)))<<16L, \
|
||||
l|=((unsigned long)(*((c)++)))<< 8L, \
|
||||
l|=((unsigned long)(*((c)++))))
|
||||
|
||||
#undef l2n
|
||||
#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))
|
||||
|
||||
#if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER))
|
||||
# define ROTATE_l32(a,n) _lrotl(a,n)
|
||||
# define ROTATE_r32(a,n) _lrotr(a,n)
|
||||
#elif defined(__ICC)
|
||||
# define ROTATE_l32(a,n) _rotl(a,n)
|
||||
# define ROTATE_r32(a,n) _rotr(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_l32(a,n) ({ register unsigned int ret; \
|
||||
asm ("roll %%cl,%0" \
|
||||
: "=r"(ret) \
|
||||
: "c"(n),"0"((unsigned int)(a)) \
|
||||
: "cc"); \
|
||||
ret; \
|
||||
})
|
||||
# define ROTATE_r32(a,n) ({ register unsigned int ret; \
|
||||
asm ("rorl %%cl,%0" \
|
||||
: "=r"(ret) \
|
||||
: "c"(n),"0"((unsigned int)(a)) \
|
||||
: "cc"); \
|
||||
ret; \
|
||||
})
|
||||
# endif
|
||||
#endif
|
||||
#ifndef ROTATE_l32
|
||||
# define ROTATE_l32(a,n) (((a)<<(n&0x1f))|(((a)&0xffffffff)>>(32-(n&0x1f))))
|
||||
#endif
|
||||
#ifndef ROTATE_r32
|
||||
# define ROTATE_r32(a,n) (((a)<<(32-(n&0x1f)))|(((a)&0xffffffff)>>(n&0x1f)))
|
||||
#endif
|
||||
|
||||
#define RC5_32_MASK 0xffffffffL
|
||||
|
||||
#define RC5_16_P 0xB7E1
|
||||
#define RC5_16_Q 0x9E37
|
||||
#define RC5_32_P 0xB7E15163L
|
||||
#define RC5_32_Q 0x9E3779B9L
|
||||
#define RC5_64_P 0xB7E151628AED2A6BLL
|
||||
#define RC5_64_Q 0x9E3779B97F4A7C15LL
|
||||
|
||||
#define E_RC5_32(a,b,s,n) \
|
||||
a^=b; \
|
||||
a=ROTATE_l32(a,b); \
|
||||
a+=s[n]; \
|
||||
a&=RC5_32_MASK; \
|
||||
b^=a; \
|
||||
b=ROTATE_l32(b,a); \
|
||||
b+=s[n+1]; \
|
||||
b&=RC5_32_MASK;
|
||||
|
||||
#define D_RC5_32(a,b,s,n) \
|
||||
b-=s[n+1]; \
|
||||
b&=RC5_32_MASK; \
|
||||
b=ROTATE_r32(b,a); \
|
||||
b^=a; \
|
||||
a-=s[n]; \
|
||||
a&=RC5_32_MASK; \
|
||||
a=ROTATE_r32(a,b); \
|
||||
a^=b;
|
||||
110
openssl-1.0.2f/crypto/rc5/rc5_skey.c
Normal file
110
openssl-1.0.2f/crypto/rc5/rc5_skey.c
Normal file
@@ -0,0 +1,110 @@
|
||||
/* crypto/rc5/rc5_skey.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 <openssl/rc5.h>
|
||||
#include "rc5_locl.h"
|
||||
|
||||
void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data,
|
||||
int rounds)
|
||||
{
|
||||
RC5_32_INT L[64], l, ll, A, B, *S, k;
|
||||
int i, j, m, c, t, ii, jj;
|
||||
|
||||
if ((rounds != RC5_16_ROUNDS) &&
|
||||
(rounds != RC5_12_ROUNDS) && (rounds != RC5_8_ROUNDS))
|
||||
rounds = RC5_16_ROUNDS;
|
||||
|
||||
key->rounds = rounds;
|
||||
S = &(key->data[0]);
|
||||
j = 0;
|
||||
for (i = 0; i <= (len - 8); i += 8) {
|
||||
c2l(data, l);
|
||||
L[j++] = l;
|
||||
c2l(data, l);
|
||||
L[j++] = l;
|
||||
}
|
||||
ii = len - i;
|
||||
if (ii) {
|
||||
k = len & 0x07;
|
||||
c2ln(data, l, ll, k);
|
||||
L[j + 0] = l;
|
||||
L[j + 1] = ll;
|
||||
}
|
||||
|
||||
c = (len + 3) / 4;
|
||||
t = (rounds + 1) * 2;
|
||||
S[0] = RC5_32_P;
|
||||
for (i = 1; i < t; i++)
|
||||
S[i] = (S[i - 1] + RC5_32_Q) & RC5_32_MASK;
|
||||
|
||||
j = (t > c) ? t : c;
|
||||
j *= 3;
|
||||
ii = jj = 0;
|
||||
A = B = 0;
|
||||
for (i = 0; i < j; i++) {
|
||||
k = (S[ii] + A + B) & RC5_32_MASK;
|
||||
A = S[ii] = ROTATE_l32(k, 3);
|
||||
m = (int)(A + B);
|
||||
k = (L[jj] + A + B) & RC5_32_MASK;
|
||||
B = L[jj] = ROTATE_l32(k, m);
|
||||
if (++ii >= t)
|
||||
ii = 0;
|
||||
if (++jj >= c)
|
||||
jj = 0;
|
||||
}
|
||||
}
|
||||
123
openssl-1.0.2f/crypto/rc5/rc5cfb64.c
Normal file
123
openssl-1.0.2f/crypto/rc5/rc5cfb64.c
Normal file
@@ -0,0 +1,123 @@
|
||||
/* crypto/rc5/rc5cfb64.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 <openssl/rc5.h>
|
||||
#include "rc5_locl.h"
|
||||
|
||||
/*
|
||||
* The input and output encrypted as though 64bit cfb mode is being used.
|
||||
* The extra state information to record how much of the 64bit block we have
|
||||
* used is contained in *num;
|
||||
*/
|
||||
|
||||
void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
||||
long length, RC5_32_KEY *schedule,
|
||||
unsigned char *ivec, int *num, int encrypt)
|
||||
{
|
||||
register unsigned long v0, v1, t;
|
||||
register int n = *num;
|
||||
register long l = length;
|
||||
unsigned long ti[2];
|
||||
unsigned char *iv, c, cc;
|
||||
|
||||
iv = (unsigned char *)ivec;
|
||||
if (encrypt) {
|
||||
while (l--) {
|
||||
if (n == 0) {
|
||||
c2l(iv, v0);
|
||||
ti[0] = v0;
|
||||
c2l(iv, v1);
|
||||
ti[1] = v1;
|
||||
RC5_32_encrypt((unsigned long *)ti, schedule);
|
||||
iv = (unsigned char *)ivec;
|
||||
t = ti[0];
|
||||
l2c(t, iv);
|
||||
t = ti[1];
|
||||
l2c(t, iv);
|
||||
iv = (unsigned char *)ivec;
|
||||
}
|
||||
c = *(in++) ^ iv[n];
|
||||
*(out++) = c;
|
||||
iv[n] = c;
|
||||
n = (n + 1) & 0x07;
|
||||
}
|
||||
} else {
|
||||
while (l--) {
|
||||
if (n == 0) {
|
||||
c2l(iv, v0);
|
||||
ti[0] = v0;
|
||||
c2l(iv, v1);
|
||||
ti[1] = v1;
|
||||
RC5_32_encrypt((unsigned long *)ti, schedule);
|
||||
iv = (unsigned char *)ivec;
|
||||
t = ti[0];
|
||||
l2c(t, iv);
|
||||
t = ti[1];
|
||||
l2c(t, iv);
|
||||
iv = (unsigned char *)ivec;
|
||||
}
|
||||
cc = *(in++);
|
||||
c = iv[n];
|
||||
iv[n] = cc;
|
||||
*(out++) = c ^ cc;
|
||||
n = (n + 1) & 0x07;
|
||||
}
|
||||
}
|
||||
v0 = v1 = ti[0] = ti[1] = t = c = cc = 0;
|
||||
*num = n;
|
||||
}
|
||||
110
openssl-1.0.2f/crypto/rc5/rc5ofb64.c
Normal file
110
openssl-1.0.2f/crypto/rc5/rc5ofb64.c
Normal file
@@ -0,0 +1,110 @@
|
||||
/* crypto/rc5/rc5ofb64.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 <openssl/rc5.h>
|
||||
#include "rc5_locl.h"
|
||||
|
||||
/*
|
||||
* The input and output encrypted as though 64bit ofb mode is being used.
|
||||
* The extra state information to record how much of the 64bit block we have
|
||||
* used is contained in *num;
|
||||
*/
|
||||
void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out,
|
||||
long length, RC5_32_KEY *schedule,
|
||||
unsigned char *ivec, int *num)
|
||||
{
|
||||
register unsigned long v0, v1, t;
|
||||
register int n = *num;
|
||||
register long l = length;
|
||||
unsigned char d[8];
|
||||
register char *dp;
|
||||
unsigned long ti[2];
|
||||
unsigned char *iv;
|
||||
int save = 0;
|
||||
|
||||
iv = (unsigned char *)ivec;
|
||||
c2l(iv, v0);
|
||||
c2l(iv, v1);
|
||||
ti[0] = v0;
|
||||
ti[1] = v1;
|
||||
dp = (char *)d;
|
||||
l2c(v0, dp);
|
||||
l2c(v1, dp);
|
||||
while (l--) {
|
||||
if (n == 0) {
|
||||
RC5_32_encrypt((unsigned long *)ti, schedule);
|
||||
dp = (char *)d;
|
||||
t = ti[0];
|
||||
l2c(t, dp);
|
||||
t = ti[1];
|
||||
l2c(t, dp);
|
||||
save++;
|
||||
}
|
||||
*(out++) = *(in++) ^ d[n];
|
||||
n = (n + 1) & 0x07;
|
||||
}
|
||||
if (save) {
|
||||
v0 = ti[0];
|
||||
v1 = ti[1];
|
||||
iv = (unsigned char *)ivec;
|
||||
l2c(v0, iv);
|
||||
l2c(v1, iv);
|
||||
}
|
||||
t = v0 = v1 = ti[0] = ti[1] = 0;
|
||||
*num = n;
|
||||
}
|
||||
70
openssl-1.0.2f/crypto/rc5/rc5s.cpp
Normal file
70
openssl-1.0.2f/crypto/rc5/rc5s.cpp
Normal file
@@ -0,0 +1,70 @@
|
||||
//
|
||||
// gettsc.inl
|
||||
//
|
||||
// gives access to the Pentium's (secret) cycle counter
|
||||
//
|
||||
// This software was written by Leonard Janke (janke@unixg.ubc.ca)
|
||||
// in 1996-7 and is entered, by him, into the public domain.
|
||||
|
||||
#if defined(__WATCOMC__)
|
||||
void GetTSC(unsigned long&);
|
||||
#pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax];
|
||||
#elif defined(__GNUC__)
|
||||
inline
|
||||
void GetTSC(unsigned long& tsc)
|
||||
{
|
||||
asm volatile(".byte 15, 49\n\t"
|
||||
: "=eax" (tsc)
|
||||
:
|
||||
: "%edx", "%eax");
|
||||
}
|
||||
#elif defined(_MSC_VER)
|
||||
inline
|
||||
void GetTSC(unsigned long& tsc)
|
||||
{
|
||||
unsigned long a;
|
||||
__asm _emit 0fh
|
||||
__asm _emit 31h
|
||||
__asm mov a, eax;
|
||||
tsc=a;
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/rc5.h>
|
||||
|
||||
void main(int argc,char *argv[])
|
||||
{
|
||||
RC5_32_KEY key;
|
||||
unsigned long s1,s2,e1,e2;
|
||||
unsigned long data[2];
|
||||
int i,j;
|
||||
static unsigned char d[16]={0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
|
||||
|
||||
RC5_32_set_key(&key, 16,d,12);
|
||||
|
||||
for (j=0; j<6; j++)
|
||||
{
|
||||
for (i=0; i<1000; i++) /**/
|
||||
{
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
GetTSC(s1);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
GetTSC(e1);
|
||||
GetTSC(s2);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
GetTSC(e2);
|
||||
RC5_32_encrypt(&data[0],&key);
|
||||
}
|
||||
|
||||
printf("cast %d %d (%d)\n",
|
||||
e1-s1,e2-s2,((e2-s2)-(e1-s1)));
|
||||
}
|
||||
}
|
||||
|
||||
265
openssl-1.0.2f/crypto/rc5/rc5speed.c
Normal file
265
openssl-1.0.2f/crypto/rc5/rc5speed.c
Normal file
@@ -0,0 +1,265 @@
|
||||
/* crypto/rc5/rc5speed.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.]
|
||||
*/
|
||||
|
||||
/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
|
||||
/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
|
||||
|
||||
#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
|
||||
# define TIMES
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <openssl/e_os2.h>
|
||||
#include OPENSSL_UNISTD_IO
|
||||
OPENSSL_DECLARE_EXIT
|
||||
#ifndef OPENSSL_SYS_NETWARE
|
||||
# include <signal.h>
|
||||
#endif
|
||||
#ifndef _IRIX
|
||||
# include <time.h>
|
||||
#endif
|
||||
#ifdef TIMES
|
||||
# include <sys/types.h>
|
||||
# include <sys/times.h>
|
||||
#endif
|
||||
/*
|
||||
* Depending on the VMS version, the tms structure is perhaps defined.
|
||||
* The __TMS macro will show if it was. If it wasn't defined, we should
|
||||
* undefine TIMES, since that tells the rest of the program how things
|
||||
* should be handled. -- Richard Levitte
|
||||
*/
|
||||
#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
|
||||
# undef TIMES
|
||||
#endif
|
||||
#ifndef TIMES
|
||||
# include <sys/timeb.h>
|
||||
#endif
|
||||
#if defined(sun) || defined(__ultrix)
|
||||
# define _POSIX_SOURCE
|
||||
# include <limits.h>
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#include <openssl/rc5.h>
|
||||
/* The following if from times(3) man page. It may need to be changed */
|
||||
#ifndef HZ
|
||||
# ifndef CLK_TCK
|
||||
# define HZ 100.0
|
||||
# else /* CLK_TCK */
|
||||
# define HZ ((double)CLK_TCK)
|
||||
# endif
|
||||
#endif
|
||||
#define BUFSIZE ((long)1024)
|
||||
long run = 0;
|
||||
|
||||
double Time_F(int s);
|
||||
#ifdef SIGALRM
|
||||
# if defined(__STDC__) || defined(sgi) || defined(_AIX)
|
||||
# define SIGRETTYPE void
|
||||
# else
|
||||
# define SIGRETTYPE int
|
||||
# endif
|
||||
|
||||
SIGRETTYPE sig_done(int sig);
|
||||
SIGRETTYPE sig_done(int sig)
|
||||
{
|
||||
signal(SIGALRM, sig_done);
|
||||
run = 0;
|
||||
# ifdef LINT
|
||||
sig = sig;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#define START 0
|
||||
#define STOP 1
|
||||
|
||||
double Time_F(int s)
|
||||
{
|
||||
double ret;
|
||||
#ifdef TIMES
|
||||
static struct tms tstart, tend;
|
||||
|
||||
if (s == START) {
|
||||
times(&tstart);
|
||||
return (0);
|
||||
} else {
|
||||
times(&tend);
|
||||
ret = ((double)(tend.tms_utime - tstart.tms_utime)) / HZ;
|
||||
return ((ret == 0.0) ? 1e-6 : ret);
|
||||
}
|
||||
#else /* !times() */
|
||||
static struct timeb tstart, tend;
|
||||
long i;
|
||||
|
||||
if (s == START) {
|
||||
ftime(&tstart);
|
||||
return (0);
|
||||
} else {
|
||||
ftime(&tend);
|
||||
i = (long)tend.millitm - (long)tstart.millitm;
|
||||
ret = ((double)(tend.time - tstart.time)) + ((double)i) / 1e3;
|
||||
return ((ret == 0.0) ? 1e-6 : ret);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
long count;
|
||||
static unsigned char buf[BUFSIZE];
|
||||
static unsigned char key[] = {
|
||||
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
|
||||
0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
|
||||
};
|
||||
RC5_32_KEY sch;
|
||||
double a, b, c, d;
|
||||
#ifndef SIGALRM
|
||||
long ca, cb, cc;
|
||||
#endif
|
||||
|
||||
#ifndef TIMES
|
||||
printf("To get the most accurate results, try to run this\n");
|
||||
printf("program when this computer is idle.\n");
|
||||
#endif
|
||||
|
||||
#ifndef SIGALRM
|
||||
printf("First we calculate the approximate speed ...\n");
|
||||
RC5_32_set_key(&sch, 16, key, 12);
|
||||
count = 10;
|
||||
do {
|
||||
long i;
|
||||
unsigned long data[2];
|
||||
|
||||
count *= 2;
|
||||
Time_F(START);
|
||||
for (i = count; i; i--)
|
||||
RC5_32_encrypt(data, &sch);
|
||||
d = Time_F(STOP);
|
||||
} while (d < 3.0);
|
||||
ca = count / 512;
|
||||
cb = count;
|
||||
cc = count * 8 / BUFSIZE + 1;
|
||||
printf("Doing RC5_32_set_key %ld times\n", ca);
|
||||
# define COND(d) (count != (d))
|
||||
# define COUNT(d) (d)
|
||||
#else
|
||||
# define COND(c) (run)
|
||||
# define COUNT(d) (count)
|
||||
signal(SIGALRM, sig_done);
|
||||
printf("Doing RC5_32_set_key for 10 seconds\n");
|
||||
alarm(10);
|
||||
#endif
|
||||
|
||||
Time_F(START);
|
||||
for (count = 0, run = 1; COND(ca); count += 4) {
|
||||
RC5_32_set_key(&sch, 16, key, 12);
|
||||
RC5_32_set_key(&sch, 16, key, 12);
|
||||
RC5_32_set_key(&sch, 16, key, 12);
|
||||
RC5_32_set_key(&sch, 16, key, 12);
|
||||
}
|
||||
d = Time_F(STOP);
|
||||
printf("%ld RC5_32_set_key's in %.2f seconds\n", count, d);
|
||||
a = ((double)COUNT(ca)) / d;
|
||||
|
||||
#ifdef SIGALRM
|
||||
printf("Doing RC5_32_encrypt's for 10 seconds\n");
|
||||
alarm(10);
|
||||
#else
|
||||
printf("Doing RC5_32_encrypt %ld times\n", cb);
|
||||
#endif
|
||||
Time_F(START);
|
||||
for (count = 0, run = 1; COND(cb); count += 4) {
|
||||
unsigned long data[2];
|
||||
|
||||
RC5_32_encrypt(data, &sch);
|
||||
RC5_32_encrypt(data, &sch);
|
||||
RC5_32_encrypt(data, &sch);
|
||||
RC5_32_encrypt(data, &sch);
|
||||
}
|
||||
d = Time_F(STOP);
|
||||
printf("%ld RC5_32_encrypt's in %.2f second\n", count, d);
|
||||
b = ((double)COUNT(cb) * 8) / d;
|
||||
|
||||
#ifdef SIGALRM
|
||||
printf("Doing RC5_32_cbc_encrypt on %ld byte blocks for 10 seconds\n",
|
||||
BUFSIZE);
|
||||
alarm(10);
|
||||
#else
|
||||
printf("Doing RC5_32_cbc_encrypt %ld times on %ld byte blocks\n", cc,
|
||||
BUFSIZE);
|
||||
#endif
|
||||
Time_F(START);
|
||||
for (count = 0, run = 1; COND(cc); count++)
|
||||
RC5_32_cbc_encrypt(buf, buf, BUFSIZE, &sch, &(key[0]), RC5_ENCRYPT);
|
||||
d = Time_F(STOP);
|
||||
printf("%ld RC5_32_cbc_encrypt's of %ld byte blocks in %.2f second\n",
|
||||
count, BUFSIZE, d);
|
||||
c = ((double)COUNT(cc) * BUFSIZE) / d;
|
||||
|
||||
printf("RC5_32/12/16 set_key per sec = %12.2f (%9.3fuS)\n", a,
|
||||
1.0e6 / a);
|
||||
printf("RC5_32/12/16 raw ecb bytes per sec = %12.2f (%9.3fuS)\n", b,
|
||||
8.0e6 / b);
|
||||
printf("RC5_32/12/16 cbc bytes per sec = %12.2f (%9.3fuS)\n", c,
|
||||
8.0e6 / c);
|
||||
exit(0);
|
||||
#if defined(LINT) || defined(OPENSSL_SYS_MSDOS)
|
||||
return (0);
|
||||
#endif
|
||||
}
|
||||
381
openssl-1.0.2f/crypto/rc5/rc5test.c
Normal file
381
openssl-1.0.2f/crypto/rc5/rc5test.c
Normal file
@@ -0,0 +1,381 @@
|
||||
/* crypto/rc5/rc5test.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.]
|
||||
*/
|
||||
|
||||
/*
|
||||
* This has been a quickly hacked 'ideatest.c'. When I add tests for other
|
||||
* RC5 modes, more of the code will be uncommented.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../e_os.h"
|
||||
|
||||
#ifdef OPENSSL_NO_RC5
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
printf("No RC5 support\n");
|
||||
return (0);
|
||||
}
|
||||
#else
|
||||
# include <openssl/rc5.h>
|
||||
|
||||
static unsigned char RC5key[5][16] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x91, 0x5f, 0x46, 0x19, 0xbe, 0x41, 0xb2, 0x51,
|
||||
0x63, 0x55, 0xa5, 0x01, 0x10, 0xa9, 0xce, 0x91},
|
||||
{0x78, 0x33, 0x48, 0xe7, 0x5a, 0xeb, 0x0f, 0x2f,
|
||||
0xd7, 0xb1, 0x69, 0xbb, 0x8d, 0xc1, 0x67, 0x87},
|
||||
{0xdc, 0x49, 0xdb, 0x13, 0x75, 0xa5, 0x58, 0x4f,
|
||||
0x64, 0x85, 0xb4, 0x13, 0xb5, 0xf1, 0x2b, 0xaf},
|
||||
{0x52, 0x69, 0xf1, 0x49, 0xd4, 0x1b, 0xa0, 0x15,
|
||||
0x24, 0x97, 0x57, 0x4d, 0x7f, 0x15, 0x31, 0x25},
|
||||
};
|
||||
|
||||
static unsigned char RC5plain[5][8] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
|
||||
{0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
|
||||
{0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
|
||||
{0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
|
||||
};
|
||||
|
||||
static unsigned char RC5cipher[5][8] = {
|
||||
{0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
|
||||
{0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
|
||||
{0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
|
||||
{0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
|
||||
{0xEB, 0x44, 0xE4, 0x15, 0xDA, 0x31, 0x98, 0x24},
|
||||
};
|
||||
|
||||
# define RC5_CBC_NUM 27
|
||||
static unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8] = {
|
||||
{0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1e},
|
||||
{0x79, 0x7b, 0xba, 0x4d, 0x78, 0x11, 0x1d, 0x1e},
|
||||
{0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
|
||||
{0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
|
||||
{0x8b, 0x9d, 0xed, 0x91, 0xce, 0x77, 0x94, 0xa6},
|
||||
{0x2f, 0x75, 0x9f, 0xe7, 0xad, 0x86, 0xa3, 0x78},
|
||||
{0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
|
||||
{0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
|
||||
{0xdc, 0xfe, 0x09, 0x85, 0x77, 0xec, 0xa5, 0xff},
|
||||
{0x96, 0x46, 0xfb, 0x77, 0x63, 0x8f, 0x9c, 0xa8},
|
||||
{0xb2, 0xb3, 0x20, 0x9d, 0xb6, 0x59, 0x4d, 0xa4},
|
||||
{0x54, 0x5f, 0x7f, 0x32, 0xa5, 0xfc, 0x38, 0x36},
|
||||
{0x82, 0x85, 0xe7, 0xc1, 0xb5, 0xbc, 0x74, 0x02},
|
||||
{0xfc, 0x58, 0x6f, 0x92, 0xf7, 0x08, 0x09, 0x34},
|
||||
{0xcf, 0x27, 0x0e, 0xf9, 0x71, 0x7f, 0xf7, 0xc4},
|
||||
{0xe4, 0x93, 0xf1, 0xc1, 0xbb, 0x4d, 0x6e, 0x8c},
|
||||
{0x5c, 0x4c, 0x04, 0x1e, 0x0f, 0x21, 0x7a, 0xc3},
|
||||
{0x92, 0x1f, 0x12, 0x48, 0x53, 0x73, 0xb4, 0xf7},
|
||||
{0x5b, 0xa0, 0xca, 0x6b, 0xbe, 0x7f, 0x5f, 0xad},
|
||||
{0xc5, 0x33, 0x77, 0x1c, 0xd0, 0x11, 0x0e, 0x63},
|
||||
{0x29, 0x4d, 0xdb, 0x46, 0xb3, 0x27, 0x8d, 0x60},
|
||||
{0xda, 0xd6, 0xbd, 0xa9, 0xdf, 0xe8, 0xf7, 0xe8},
|
||||
{0x97, 0xe0, 0x78, 0x78, 0x37, 0xed, 0x31, 0x7f},
|
||||
{0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
|
||||
{0x8f, 0x34, 0xc3, 0xc6, 0x81, 0xc9, 0x96, 0x95},
|
||||
{0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
|
||||
{0x7f, 0xd1, 0xa0, 0x23, 0xa5, 0xbb, 0xa2, 0x17},
|
||||
};
|
||||
|
||||
static unsigned char rc5_cbc_key[RC5_CBC_NUM][17] = {
|
||||
{1, 0x00},
|
||||
{1, 0x00},
|
||||
{1, 0x00},
|
||||
{1, 0x00},
|
||||
{1, 0x00},
|
||||
{1, 0x11},
|
||||
{1, 0x00},
|
||||
{4, 0x00, 0x00, 0x00, 0x00},
|
||||
{1, 0x00},
|
||||
{1, 0x00},
|
||||
{1, 0x00},
|
||||
{1, 0x00},
|
||||
{4, 0x01, 0x02, 0x03, 0x04},
|
||||
{4, 0x01, 0x02, 0x03, 0x04},
|
||||
{4, 0x01, 0x02, 0x03, 0x04},
|
||||
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
|
||||
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
|
||||
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
|
||||
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
|
||||
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
|
||||
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
|
||||
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
|
||||
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
|
||||
};
|
||||
|
||||
static unsigned char rc5_cbc_plain[RC5_CBC_NUM][8] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{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},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{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},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
|
||||
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
|
||||
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
|
||||
{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x01},
|
||||
};
|
||||
|
||||
static int rc5_cbc_rounds[RC5_CBC_NUM] = {
|
||||
0, 0, 0, 0, 0, 1, 2, 2,
|
||||
8, 8, 12, 16, 8, 12, 16, 12,
|
||||
8, 12, 16, 8, 12, 16, 12, 8,
|
||||
8, 8, 8,
|
||||
};
|
||||
|
||||
static unsigned char rc5_cbc_iv[RC5_CBC_NUM][8] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{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},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{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},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i, n, err = 0;
|
||||
RC5_32_KEY key;
|
||||
unsigned char buf[8], buf2[8], ivb[8];
|
||||
|
||||
for (n = 0; n < 5; n++) {
|
||||
RC5_32_set_key(&key, 16, &(RC5key[n][0]), 12);
|
||||
|
||||
RC5_32_ecb_encrypt(&(RC5plain[n][0]), buf, &key, RC5_ENCRYPT);
|
||||
if (memcmp(&(RC5cipher[n][0]), buf, 8) != 0) {
|
||||
printf("ecb RC5 error encrypting (%d)\n", n + 1);
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", buf[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", RC5cipher[n][i]);
|
||||
err = 20;
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
RC5_32_ecb_encrypt(buf, buf2, &key, RC5_DECRYPT);
|
||||
if (memcmp(&(RC5plain[n][0]), buf2, 8) != 0) {
|
||||
printf("ecb RC5 error decrypting (%d)\n", n + 1);
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", buf2[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", RC5plain[n][i]);
|
||||
printf("\n");
|
||||
err = 3;
|
||||
}
|
||||
}
|
||||
if (err == 0)
|
||||
printf("ecb RC5 ok\n");
|
||||
|
||||
for (n = 0; n < RC5_CBC_NUM; n++) {
|
||||
i = rc5_cbc_rounds[n];
|
||||
if (i < 8)
|
||||
continue;
|
||||
|
||||
RC5_32_set_key(&key, rc5_cbc_key[n][0], &(rc5_cbc_key[n][1]), i);
|
||||
|
||||
memcpy(ivb, &(rc5_cbc_iv[n][0]), 8);
|
||||
RC5_32_cbc_encrypt(&(rc5_cbc_plain[n][0]), buf, 8,
|
||||
&key, &(ivb[0]), RC5_ENCRYPT);
|
||||
|
||||
if (memcmp(&(rc5_cbc_cipher[n][0]), buf, 8) != 0) {
|
||||
printf("cbc RC5 error encrypting (%d)\n", n + 1);
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", buf[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", rc5_cbc_cipher[n][i]);
|
||||
err = 30;
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
memcpy(ivb, &(rc5_cbc_iv[n][0]), 8);
|
||||
RC5_32_cbc_encrypt(buf, buf2, 8, &key, &(ivb[0]), RC5_DECRYPT);
|
||||
if (memcmp(&(rc5_cbc_plain[n][0]), buf2, 8) != 0) {
|
||||
printf("cbc RC5 error decrypting (%d)\n", n + 1);
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", buf2[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", rc5_cbc_plain[n][i]);
|
||||
printf("\n");
|
||||
err = 3;
|
||||
}
|
||||
}
|
||||
if (err == 0)
|
||||
printf("cbc RC5 ok\n");
|
||||
|
||||
EXIT(err);
|
||||
return (err);
|
||||
}
|
||||
|
||||
# ifdef undef
|
||||
static int cfb64_test(unsigned char *cfb_cipher)
|
||||
{
|
||||
IDEA_KEY_SCHEDULE eks, dks;
|
||||
int err = 0, i, n;
|
||||
|
||||
idea_set_encrypt_key(cfb_key, &eks);
|
||||
idea_set_decrypt_key(&eks, &dks);
|
||||
memcpy(cfb_tmp, cfb_iv, 8);
|
||||
n = 0;
|
||||
idea_cfb64_encrypt(plain, cfb_buf1, (long)12, &eks,
|
||||
cfb_tmp, &n, IDEA_ENCRYPT);
|
||||
idea_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]),
|
||||
(long)CFB_TEST_SIZE - 12, &eks,
|
||||
cfb_tmp, &n, IDEA_ENCRYPT);
|
||||
if (memcmp(cfb_cipher, cfb_buf1, CFB_TEST_SIZE) != 0) {
|
||||
err = 1;
|
||||
printf("idea_cfb64_encrypt encrypt error\n");
|
||||
for (i = 0; i < CFB_TEST_SIZE; i += 8)
|
||||
printf("%s\n", pt(&(cfb_buf1[i])));
|
||||
}
|
||||
memcpy(cfb_tmp, cfb_iv, 8);
|
||||
n = 0;
|
||||
idea_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)17, &eks,
|
||||
cfb_tmp, &n, IDEA_DECRYPT);
|
||||
idea_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]),
|
||||
(long)CFB_TEST_SIZE - 17, &dks,
|
||||
cfb_tmp, &n, IDEA_DECRYPT);
|
||||
if (memcmp(plain, cfb_buf2, CFB_TEST_SIZE) != 0) {
|
||||
err = 1;
|
||||
printf("idea_cfb_encrypt decrypt error\n");
|
||||
for (i = 0; i < 24; i += 8)
|
||||
printf("%s\n", pt(&(cfb_buf2[i])));
|
||||
}
|
||||
return (err);
|
||||
}
|
||||
|
||||
static char *pt(unsigned char *p)
|
||||
{
|
||||
static char bufs[10][20];
|
||||
static int bnum = 0;
|
||||
char *ret;
|
||||
int i;
|
||||
static char *f = "0123456789ABCDEF";
|
||||
|
||||
ret = &(bufs[bnum++][0]);
|
||||
bnum %= 10;
|
||||
for (i = 0; i < 8; i++) {
|
||||
ret[i * 2] = f[(p[i] >> 4) & 0xf];
|
||||
ret[i * 2 + 1] = f[p[i] & 0xf];
|
||||
}
|
||||
ret[16] = '\0';
|
||||
return (ret);
|
||||
}
|
||||
|
||||
# endif
|
||||
#endif
|
||||
Reference in New Issue
Block a user