AES-NI backport from HEAD. Note that e_aes.c doesn't implement all modes
from HEAD yet, more will be back-ported later.
This commit is contained in:
parent
84968e25f3
commit
fbe2e28911
@ -123,11 +123,11 @@ my $tlib="-lnsl -lsocket";
|
||||
my $bits1="THIRTY_TWO_BIT ";
|
||||
my $bits2="SIXTY_FOUR_BIT ";
|
||||
|
||||
my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes-586.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o";
|
||||
my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes-586.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o";
|
||||
|
||||
my $x86_elf_asm="$x86_asm:elf";
|
||||
|
||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o";
|
||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o::aes-x86_64.o aesni-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o";
|
||||
my $ia64_asm="ia64cpuid.o:bn-ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::void";
|
||||
my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o:des_enc-sparc.o fcrypt_b.o:aes_core.o aes_cbc.o aes-sparcv9.o:::sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o:::::::void";
|
||||
my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::void";
|
||||
|
146
TABLE
146
TABLE
@ -228,7 +228,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -259,7 +259,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -290,7 +290,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -321,7 +321,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -383,7 +383,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -538,7 +538,7 @@ $bn_ops = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -724,7 +724,7 @@ $bn_ops = BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -961,6 +961,68 @@ $ranlib =
|
||||
$arflags = -X64
|
||||
$multilib =
|
||||
|
||||
*** android
|
||||
$cc = gcc
|
||||
$cflags = -mandroid -I$(ANDROID_DEV)/include -B$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall
|
||||
$unistd =
|
||||
$thread_cflag = -D_REENTRANT
|
||||
$sys_id =
|
||||
$lflags = -ldl
|
||||
$bn_ops = BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR
|
||||
$cpuid_obj =
|
||||
$bn_obj =
|
||||
$des_obj =
|
||||
$aes_obj =
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj =
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$wp_obj =
|
||||
$cmll_obj =
|
||||
$perlasm_scheme = void
|
||||
$dso_scheme = dlfcn
|
||||
$shared_target= linux-shared
|
||||
$shared_cflag = -fPIC
|
||||
$shared_ldflag =
|
||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
|
||||
$ranlib =
|
||||
$arflags =
|
||||
$multilib =
|
||||
|
||||
*** android-armv7
|
||||
$cc = gcc
|
||||
$cflags = -march=armv7-a -mandroid -I$(ANDROID_DEV)/include -B$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall
|
||||
$unistd =
|
||||
$thread_cflag = -D_REENTRANT
|
||||
$sys_id =
|
||||
$lflags = -ldl
|
||||
$bn_ops = BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR
|
||||
$cpuid_obj =
|
||||
$bn_obj = bn_asm.o armv4-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_cbc.o aes-armv4.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-armv4-large.o sha256-armv4.o sha512-armv4.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$wp_obj =
|
||||
$cmll_obj =
|
||||
$perlasm_scheme = void
|
||||
$dso_scheme = dlfcn
|
||||
$shared_target= linux-shared
|
||||
$shared_cflag = -fPIC
|
||||
$shared_ldflag =
|
||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
|
||||
$ranlib =
|
||||
$arflags =
|
||||
$multilib =
|
||||
|
||||
*** aux3-gcc
|
||||
$cc = gcc
|
||||
$cflags = -O2 -DTERMIO
|
||||
@ -1003,7 +1065,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1034,7 +1096,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1065,7 +1127,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1189,7 +1251,7 @@ $bn_ops = BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1282,7 +1344,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -1344,7 +1406,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1406,7 +1468,7 @@ $bn_ops = BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1685,7 +1747,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1716,7 +1778,7 @@ $bn_ops = BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1840,7 +1902,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1871,7 +1933,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1964,7 +2026,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -1995,7 +2057,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -2119,7 +2181,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -2150,7 +2212,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -2181,7 +2243,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -2212,7 +2274,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -2367,7 +2429,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -2398,7 +2460,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -2429,7 +2491,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -2584,7 +2646,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -3111,7 +3173,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -3452,7 +3514,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -3514,7 +3576,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -3607,7 +3669,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -3886,7 +3948,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -3948,7 +4010,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT EXPORT_V
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -3979,7 +4041,7 @@ $bn_ops = SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -4537,7 +4599,7 @@ $bn_ops = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -4568,7 +4630,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -4816,7 +4878,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -4909,7 +4971,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -4940,7 +5002,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
|
||||
$cpuid_obj = x86_64cpuid.o
|
||||
$bn_obj = x86_64-gcc.o x86_64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes-x86_64.o
|
||||
$aes_obj = aes-x86_64.o aesni-x86_64.o
|
||||
$bf_obj =
|
||||
$md5_obj = md5-x86_64.o
|
||||
$sha1_obj = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
|
||||
@ -5250,7 +5312,7 @@ $bn_ops = BN_LLONG MD2_CHAR RC4_INDEX DES_PTR DES_RISC1 DES_UNROLL
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
@ -5281,7 +5343,7 @@ $bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
|
||||
$cpuid_obj = x86cpuid.o
|
||||
$bn_obj = bn-586.o co-586.o x86-mont.o
|
||||
$des_obj = des-586.o crypt586.o
|
||||
$aes_obj = aes-586.o
|
||||
$aes_obj = aes-586.o aesni-x86.o
|
||||
$bf_obj = bf-586.o
|
||||
$md5_obj = md5-586.o
|
||||
$sha1_obj = sha1-586.o sha256-586.o sha512-586.o
|
||||
|
@ -50,9 +50,13 @@ aes-ia64.s: asm/aes-ia64.S
|
||||
|
||||
aes-586.s: asm/aes-586.pl ../perlasm/x86asm.pl
|
||||
$(PERL) asm/aes-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
|
||||
aesni-x86.s: asm/aesni-x86.pl ../perlasm/x86asm.pl
|
||||
$(PERL) asm/aesni-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
|
||||
|
||||
aes-x86_64.s: asm/aes-x86_64.pl
|
||||
$(PERL) asm/aes-x86_64.pl $(PERLASM_SCHEME) > $@
|
||||
aesni-x86_64.s: asm/aesni-x86_64.pl
|
||||
$(PERL) asm/aesni-x86_64.pl $(PERLASM_SCHEME) > $@
|
||||
|
||||
aes-sparcv9.s: asm/aes-sparcv9.pl
|
||||
$(PERL) asm/aes-sparcv9.pl $(CFLAGS) > $@
|
||||
|
2187
crypto/aes/asm/aesni-x86.pl
Normal file
2187
crypto/aes/asm/aesni-x86.pl
Normal file
File diff suppressed because it is too large
Load Diff
3062
crypto/aes/asm/aesni-x86_64.pl
Normal file
3062
crypto/aes/asm/aesni-x86_64.pl
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
||||
* Copyright (c) 2001-2011 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
|
||||
@ -60,46 +60,304 @@
|
||||
|
||||
#ifndef OPENSSL_FIPS
|
||||
|
||||
static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
const unsigned char *iv, int enc);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
AES_KEY ks;
|
||||
} EVP_AES_KEY;
|
||||
|
||||
#define data(ctx) EVP_C_DATA(EVP_AES_KEY,ctx)
|
||||
#define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4))
|
||||
|
||||
IMPLEMENT_BLOCK_CIPHER(aes_128, ks, AES, EVP_AES_KEY,
|
||||
NID_aes_128, 16, 16, 16, 128,
|
||||
0, aes_init_key, NULL,
|
||||
EVP_CIPHER_set_asn1_iv,
|
||||
EVP_CIPHER_get_asn1_iv,
|
||||
NULL)
|
||||
IMPLEMENT_BLOCK_CIPHER(aes_192, ks, AES, EVP_AES_KEY,
|
||||
NID_aes_192, 16, 24, 16, 128,
|
||||
0, aes_init_key, NULL,
|
||||
EVP_CIPHER_set_asn1_iv,
|
||||
EVP_CIPHER_get_asn1_iv,
|
||||
NULL)
|
||||
IMPLEMENT_BLOCK_CIPHER(aes_256, ks, AES, EVP_AES_KEY,
|
||||
NID_aes_256, 16, 32, 16, 128,
|
||||
0, aes_init_key, NULL,
|
||||
EVP_CIPHER_set_asn1_iv,
|
||||
EVP_CIPHER_get_asn1_iv,
|
||||
NULL)
|
||||
#if defined(AES_ASM) && !defined(I386_ONLY) && ( \
|
||||
((defined(__i386) || defined(__i386__) || \
|
||||
defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
|
||||
defined(__x86_64) || defined(__x86_64__) || \
|
||||
defined(_M_AMD64) || defined(_M_X64) || \
|
||||
defined(__INTEL__) )
|
||||
/*
|
||||
* AES-NI section
|
||||
*/
|
||||
extern unsigned int OPENSSL_ia32cap_P[2];
|
||||
#define AESNI_CAPABLE (1<<(57-32))
|
||||
|
||||
#define IMPLEMENT_AES_CFBR(ksize,cbits) IMPLEMENT_CFBR(aes,AES,EVP_AES_KEY,ks,ksize,cbits,16)
|
||||
int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
|
||||
AES_KEY *key);
|
||||
int aesni_set_decrypt_key(const unsigned char *userKey, int bits,
|
||||
AES_KEY *key);
|
||||
|
||||
IMPLEMENT_AES_CFBR(128,1)
|
||||
IMPLEMENT_AES_CFBR(192,1)
|
||||
IMPLEMENT_AES_CFBR(256,1)
|
||||
void aesni_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const AES_KEY *key);
|
||||
void aesni_decrypt(const unsigned char *in, unsigned char *out,
|
||||
const AES_KEY *key);
|
||||
|
||||
IMPLEMENT_AES_CFBR(128,8)
|
||||
IMPLEMENT_AES_CFBR(192,8)
|
||||
IMPLEMENT_AES_CFBR(256,8)
|
||||
void aesni_ecb_encrypt(const unsigned char *in,
|
||||
unsigned char *out,
|
||||
size_t length,
|
||||
const AES_KEY *key,
|
||||
int enc);
|
||||
void aesni_cbc_encrypt(const unsigned char *in,
|
||||
unsigned char *out,
|
||||
size_t length,
|
||||
const AES_KEY *key,
|
||||
unsigned char *ivec, int enc);
|
||||
|
||||
static int aes_counter (EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
void aesni_ctr32_encrypt_blocks(const unsigned char *in,
|
||||
unsigned char *out,
|
||||
size_t blocks,
|
||||
const void *key,
|
||||
const unsigned char *ivec);
|
||||
|
||||
static int aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
const unsigned char *iv, int enc)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_ECB_MODE
|
||||
|| (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CBC_MODE)
|
||||
&& !enc)
|
||||
ret = aesni_set_decrypt_key(key, ctx->key_len*8, ctx->cipher_data);
|
||||
else
|
||||
ret = aesni_set_encrypt_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;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aesni_cbc_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
aesni_cbc_encrypt(in,out,len,ctx->cipher_data,ctx->iv,ctx->encrypt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
size_t bl = ctx->cipher->block_size;
|
||||
|
||||
if (len<bl) return 1;
|
||||
|
||||
aesni_ecb_encrypt(in,out,len,ctx->cipher_data,ctx->encrypt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aesni_ofb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
CRYPTO_ofb128_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,
|
||||
(block128_f)aesni_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aesni_cfb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
CRYPTO_cfb128_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)aesni_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
CRYPTO_cfb128_8_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)aesni_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
if (ctx->flags&EVP_CIPH_FLAG_LENGTH_BITS) {
|
||||
CRYPTO_cfb128_1_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)aesni_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (len>=MAXBITCHUNK) {
|
||||
CRYPTO_cfb128_1_encrypt(in,out,MAXBITCHUNK*8,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)aesni_encrypt);
|
||||
len-=MAXBITCHUNK;
|
||||
}
|
||||
if (len)
|
||||
CRYPTO_cfb128_1_encrypt(in,out,len*8,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)aesni_encrypt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
unsigned int num;
|
||||
num = ctx->num;
|
||||
|
||||
CRYPTO_ctr128_encrypt_ctr32(in,out,len,
|
||||
ctx->cipher_data,ctx->iv,ctx->buf,&num,
|
||||
(ctr128_f)aesni_ctr32_encrypt_blocks);
|
||||
|
||||
ctx->num = (size_t)num;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
|
||||
static const EVP_CIPHER aesni_##keylen##_##mode = { \
|
||||
nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
|
||||
flags|EVP_CIPH_##MODE##_MODE, \
|
||||
aesni_init_key, \
|
||||
aesni_##mode##_cipher, \
|
||||
NULL, \
|
||||
sizeof(EVP_AES_KEY), \
|
||||
NULL,NULL,NULL,NULL }; \
|
||||
static const EVP_CIPHER aes_##keylen##_##mode = { \
|
||||
nid##_##keylen##_##nmode,blocksize, \
|
||||
keylen/8,ivlen, \
|
||||
flags|EVP_CIPH_##MODE##_MODE, \
|
||||
aes_init_key, \
|
||||
aes_##mode##_cipher, \
|
||||
NULL, \
|
||||
sizeof(EVP_AES_KEY), \
|
||||
NULL,NULL,NULL,NULL }; \
|
||||
const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
|
||||
{ return (OPENSSL_ia32cap_P[1]&AESNI_CAPABLE)? \
|
||||
&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
|
||||
|
||||
#else
|
||||
|
||||
#define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
|
||||
static const EVP_CIPHER aes_##keylen##_##mode = { \
|
||||
nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
|
||||
flags|EVP_CIPH_##MODE##_MODE, \
|
||||
aes_init_key, \
|
||||
aes_##mode##_cipher, \
|
||||
NULL, \
|
||||
sizeof(EVP_AES_KEY), \
|
||||
NULL,NULL,NULL,NULL }; \
|
||||
const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
|
||||
{ return &aes_##keylen##_##mode; }
|
||||
#endif
|
||||
|
||||
#define BLOCK_CIPHER_generic_pack(nid,keylen,flags) \
|
||||
BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
|
||||
BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
|
||||
BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
|
||||
BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
|
||||
BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags) \
|
||||
BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags) \
|
||||
BLOCK_CIPHER_generic(nid,keylen,1,16,ctr,ctr,CTR,flags)
|
||||
|
||||
static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
const unsigned char *iv, int enc)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_ECB_MODE
|
||||
|| (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CBC_MODE)
|
||||
&& !enc)
|
||||
ret = AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
|
||||
else
|
||||
ret = AES_set_encrypt_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;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
AES_cbc_encrypt(in,out,len,ctx->cipher_data,ctx->iv,ctx->encrypt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
size_t bl = ctx->cipher->block_size;
|
||||
size_t i;
|
||||
|
||||
if (len<bl) return 1;
|
||||
|
||||
if (ctx->encrypt) {
|
||||
for (i=0,len-=bl;i<=len;i+=bl)
|
||||
AES_encrypt(in+i,out+i,ctx->cipher_data);
|
||||
} else {
|
||||
for (i=0,len-=bl;i<=len;i+=bl)
|
||||
AES_decrypt(in+i,out+i,ctx->cipher_data);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
CRYPTO_ofb128_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,
|
||||
(block128_f)AES_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aes_cfb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
CRYPTO_cfb128_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)AES_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
CRYPTO_cfb128_8_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)AES_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
|
||||
const unsigned char *in,size_t len)
|
||||
{
|
||||
if (ctx->flags&EVP_CIPH_FLAG_LENGTH_BITS) {
|
||||
CRYPTO_cfb128_1_encrypt(in,out,len,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)AES_encrypt);
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (len>=MAXBITCHUNK) {
|
||||
CRYPTO_cfb128_1_encrypt(in,out,MAXBITCHUNK*8,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)AES_encrypt);
|
||||
len-=MAXBITCHUNK;
|
||||
}
|
||||
if (len)
|
||||
CRYPTO_cfb128_1_encrypt(in,out,len*8,ctx->cipher_data,
|
||||
ctx->iv,&ctx->num,ctx->encrypt,
|
||||
(block128_f)AES_encrypt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int aes_ctr_cipher (EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
unsigned int num;
|
||||
@ -121,78 +379,9 @@ static int aes_counter (EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const EVP_CIPHER aes_128_ctr_cipher=
|
||||
{
|
||||
NID_aes_128_ctr,1,16,16,
|
||||
EVP_CIPH_CTR_MODE,
|
||||
aes_init_key,
|
||||
aes_counter,
|
||||
NULL,
|
||||
sizeof(EVP_AES_KEY),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
const EVP_CIPHER *EVP_aes_128_ctr (void)
|
||||
{ return &aes_128_ctr_cipher; }
|
||||
|
||||
static const EVP_CIPHER aes_192_ctr_cipher=
|
||||
{
|
||||
NID_aes_192_ctr,1,24,16,
|
||||
EVP_CIPH_CTR_MODE,
|
||||
aes_init_key,
|
||||
aes_counter,
|
||||
NULL,
|
||||
sizeof(EVP_AES_KEY),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
const EVP_CIPHER *EVP_aes_192_ctr (void)
|
||||
{ return &aes_192_ctr_cipher; }
|
||||
|
||||
static const EVP_CIPHER aes_256_ctr_cipher=
|
||||
{
|
||||
NID_aes_256_ctr,1,32,16,
|
||||
EVP_CIPH_CTR_MODE,
|
||||
aes_init_key,
|
||||
aes_counter,
|
||||
NULL,
|
||||
sizeof(EVP_AES_KEY),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
const EVP_CIPHER *EVP_aes_256_ctr (void)
|
||||
{ return &aes_256_ctr_cipher; }
|
||||
|
||||
static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
const unsigned char *iv, int enc)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_ECB_MODE
|
||||
|| (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CBC_MODE)
|
||||
&& !enc)
|
||||
ret=AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
|
||||
else
|
||||
ret=AES_set_encrypt_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;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
BLOCK_CIPHER_generic_pack(NID_aes,128,0)
|
||||
BLOCK_CIPHER_generic_pack(NID_aes,192,0)
|
||||
BLOCK_CIPHER_generic_pack(NID_aes,256,0)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -62,10 +62,10 @@ typedef unsigned int u32;
|
||||
typedef unsigned char u8;
|
||||
|
||||
#define STRICT_ALIGNMENT
|
||||
#if defined(__i386) || defined(__i386__) || \
|
||||
defined(__x86_64) || defined(__x86_64__) || \
|
||||
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
|
||||
defined(__s390__) || defined(__s390x__)
|
||||
#if defined(__i386) || defined(__i386__) || \
|
||||
defined(__x86_64) || defined(__x86_64__) || \
|
||||
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
|
||||
defined(__s390__) || defined(__s390x__)
|
||||
# undef STRICT_ALIGNMENT
|
||||
#endif
|
||||
|
||||
@ -182,3 +182,84 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
|
||||
*num=n;
|
||||
}
|
||||
|
||||
#define GETU32(p) ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3])
|
||||
#define PUTU32(p,v) ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v))
|
||||
|
||||
/* increment upper 96 bits of 128-bit counter by 1 */
|
||||
static void ctr96_inc(unsigned char *counter) {
|
||||
u32 n=12;
|
||||
u8 c;
|
||||
|
||||
do {
|
||||
--n;
|
||||
c = counter[n];
|
||||
++c;
|
||||
counter[n] = c;
|
||||
if (c) return;
|
||||
} while (n);
|
||||
}
|
||||
|
||||
void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
|
||||
size_t len, const void *key,
|
||||
unsigned char ivec[16], unsigned char ecount_buf[16],
|
||||
unsigned int *num, ctr128_f func)
|
||||
{
|
||||
unsigned int n,ctr32;
|
||||
|
||||
assert(in && out && key && ecount_buf && num);
|
||||
assert(*num < 16);
|
||||
|
||||
n = *num;
|
||||
|
||||
while (n && len) {
|
||||
*(out++) = *(in++) ^ ecount_buf[n];
|
||||
--len;
|
||||
n = (n+1) % 16;
|
||||
}
|
||||
|
||||
ctr32 = GETU32(ivec+12);
|
||||
while (len>=16) {
|
||||
size_t blocks = len/16;
|
||||
/*
|
||||
* 1<<28 is just a not-so-small yet not-so-large number...
|
||||
* Below condition is practically never met, but it has to
|
||||
* be checked for code correctness.
|
||||
*/
|
||||
if (sizeof(size_t)>sizeof(unsigned int) && blocks>(1U<<28))
|
||||
blocks = (1U<<28);
|
||||
/*
|
||||
* As (*func) operates on 32-bit counter, caller
|
||||
* has to handle overflow. 'if' below detects the
|
||||
* overflow, which is then handled by limiting the
|
||||
* amount of blocks to the exact overflow point...
|
||||
*/
|
||||
ctr32 += (u32)blocks;
|
||||
if (ctr32 < blocks) {
|
||||
blocks -= ctr32;
|
||||
ctr32 = 0;
|
||||
}
|
||||
(*func)(in,out,blocks,key,ivec);
|
||||
/* (*ctr) does not update ivec, caller does: */
|
||||
PUTU32(ivec+12,ctr32);
|
||||
/* ... overflow was detected, propogate carry. */
|
||||
if (ctr32 == 0) ctr96_inc(ivec);
|
||||
blocks *= 16;
|
||||
len -= blocks;
|
||||
out += blocks;
|
||||
in += blocks;
|
||||
}
|
||||
if (len) {
|
||||
memset(ecount_buf,0,16);
|
||||
(*func)(ecount_buf,ecount_buf,1,key,ivec);
|
||||
++ctr32;
|
||||
PUTU32(ivec+12,ctr32);
|
||||
if (ctr32 == 0) ctr96_inc(ivec);
|
||||
while (len--) {
|
||||
out[n] = in[n] ^ ecount_buf[n];
|
||||
++n;
|
||||
}
|
||||
}
|
||||
|
||||
*num=n;
|
||||
}
|
||||
|
@ -15,6 +15,10 @@ typedef void (*cbc128_f)(const unsigned char *in, unsigned char *out,
|
||||
size_t len, const void *key,
|
||||
unsigned char ivec[16], int enc);
|
||||
|
||||
typedef void (*ctr128_f)(const unsigned char *in, unsigned char *out,
|
||||
size_t blocks, const void *key,
|
||||
const unsigned char ivec[16]);
|
||||
|
||||
void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
size_t len, const void *key,
|
||||
unsigned char ivec[16], block128_f block);
|
||||
@ -27,6 +31,11 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
unsigned char ivec[16], unsigned char ecount_buf[16],
|
||||
unsigned int *num, block128_f block);
|
||||
|
||||
void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
|
||||
size_t len, const void *key,
|
||||
unsigned char ivec[16], unsigned char ecount_buf[16],
|
||||
unsigned int *num, ctr128_f ctr);
|
||||
|
||||
void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
size_t len, const void *key,
|
||||
unsigned char ivec[16], int *num,
|
||||
|
Loading…
x
Reference in New Issue
Block a user