diff options
author | Chris Dearman <chris@mips.com> | 2012-08-01 16:59:41 -0700 |
---|---|---|
committer | Duane Sand <duanes@mips.com> | 2012-08-15 10:31:19 -0700 |
commit | 2178392bec7b69d0f469bce29f653c9fbd09b614 (patch) | |
tree | 045e26757a2326c56326890e543ed0d87fb2b1f6 | |
parent | 2a9ba31461c7a3bd16f382baa2033d0141d08a8d (diff) | |
download | replicant_openssl-2178392bec7b69d0f469bce29f653c9fbd09b614.zip replicant_openssl-2178392bec7b69d0f469bce29f653c9fbd09b614.tar.gz replicant_openssl-2178392bec7b69d0f469bce29f653c9fbd09b614.tar.bz2 |
[MIPS] Append private_ to AES_set_encrypt_key and AES_set_decrypt_key for MIPS.
Update import script to generate o32 .s files for MIPS.
Release 1.0.1 of openssl renamed the C and assembler routines for
AES_set_encrypt_key() and AES_set_decrypt_key(), but forgot to do this in the
Mips assembler version. The following mips_private.patch fixes that
problem in the upstream source, until such time as it is fixed upstream.
The upstream version of openssl builds for a "n32" Mips abi used on SGI
workstations. Android's import_openssl.sh script is now modified to
build for the "o32" abi used throughout Mips Android. That change is
permanent, and will not be upstreamed.
Signed-off-by: Raghu Gandham <raghu@mips.com>
Change-Id: Iec5ce7f11a74a3674e96057f2ce97d8ba9238464
-rw-r--r-- | crypto/aes/asm/aes-mips.pl | 20 | ||||
-rw-r--r-- | crypto/aes/asm/aes-mips.s | 28 | ||||
-rw-r--r-- | crypto/bn/asm/mips-mont.s | 2 | ||||
-rw-r--r-- | crypto/sha/asm/sha256-mips.s | 3 | ||||
-rwxr-xr-x | import_openssl.sh | 13 | ||||
-rw-r--r-- | openssl.config | 5 | ||||
-rw-r--r-- | patches/README | 7 | ||||
-rw-r--r-- | patches/mips_private.patch | 64 |
8 files changed, 109 insertions, 33 deletions
diff --git a/crypto/aes/asm/aes-mips.pl b/crypto/aes/asm/aes-mips.pl index 2ce6def..e523954 100644 --- a/crypto/aes/asm/aes-mips.pl +++ b/crypto/aes/asm/aes-mips.pl @@ -1036,9 +1036,9 @@ _mips_AES_set_encrypt_key: nop .end _mips_AES_set_encrypt_key -.globl AES_set_encrypt_key -.ent AES_set_encrypt_key -AES_set_encrypt_key: +.globl private_AES_set_encrypt_key +.ent private_AES_set_encrypt_key +private_AES_set_encrypt_key: .frame $sp,$FRAMESIZE,$ra .mask $SAVED_REGS_MASK,-$SZREG .set noreorder @@ -1060,7 +1060,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue ___ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification .cplocal $Tbl - .cpsetup $pf,$zero,AES_set_encrypt_key + .cpsetup $pf,$zero,private_AES_set_encrypt_key ___ $code.=<<___; .set reorder @@ -1083,7 +1083,7 @@ ___ $code.=<<___; jr $ra $PTR_ADD $sp,$FRAMESIZE -.end AES_set_encrypt_key +.end private_AES_set_encrypt_key ___ my ($head,$tail)=($inp,$bits); @@ -1091,9 +1091,9 @@ my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$tpe)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3); my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2); $code.=<<___; .align 5 -.globl AES_set_decrypt_key -.ent AES_set_decrypt_key -AES_set_decrypt_key: +.globl private_AES_set_decrypt_key +.ent private_AES_set_decrypt_key +private_AES_set_decrypt_key: .frame $sp,$FRAMESIZE,$ra .mask $SAVED_REGS_MASK,-$SZREG .set noreorder @@ -1115,7 +1115,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue ___ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification .cplocal $Tbl - .cpsetup $pf,$zero,AES_set_decrypt_key + .cpsetup $pf,$zero,private_AES_set_decrypt_key ___ $code.=<<___; .set reorder @@ -1226,7 +1226,7 @@ ___ $code.=<<___; jr $ra $PTR_ADD $sp,$FRAMESIZE -.end AES_set_decrypt_key +.end private_AES_set_decrypt_key ___ }}} diff --git a/crypto/aes/asm/aes-mips.s b/crypto/aes/asm/aes-mips.s index 0c1d85a..f5750bf 100644 --- a/crypto/aes/asm/aes-mips.s +++ b/crypto/aes/asm/aes-mips.s @@ -259,6 +259,7 @@ AES_encrypt: .frame $29,64,$31 .mask 3237937152,-4 .set noreorder + .cpload $25 sub $29,64 sw $31,64-1*4($29) sw $30,64-2*4($29) @@ -270,8 +271,6 @@ AES_encrypt: sw $18,64-8*4($29) sw $17,64-9*4($29) sw $16,64-10*4($29) - .cplocal $7 - .cpsetup $25,$0,AES_encrypt .set reorder la $7,AES_Te # PIC-ified 'load address' @@ -567,6 +566,7 @@ AES_decrypt: .frame $29,64,$31 .mask 3237937152,-4 .set noreorder + .cpload $25 sub $29,64 sw $31,64-1*4($29) sw $30,64-2*4($29) @@ -578,8 +578,6 @@ AES_decrypt: sw $18,64-8*4($29) sw $17,64-9*4($29) sw $16,64-10*4($29) - .cplocal $7 - .cpsetup $25,$0,AES_decrypt .set reorder la $7,AES_Td # PIC-ified 'load address' @@ -870,17 +868,16 @@ _mips_AES_set_encrypt_key: nop .end _mips_AES_set_encrypt_key -.globl AES_set_encrypt_key -.ent AES_set_encrypt_key -AES_set_encrypt_key: +.globl private_AES_set_encrypt_key +.ent private_AES_set_encrypt_key +private_AES_set_encrypt_key: .frame $29,32,$31 .mask 3221225472,-4 .set noreorder + .cpload $25 sub $29,32 sw $31,32-1*4($29) sw $30,32-2*4($29) - .cplocal $7 - .cpsetup $25,$0,AES_set_encrypt_key .set reorder la $7,AES_Te # PIC-ified 'load address' @@ -892,19 +889,18 @@ AES_set_encrypt_key: lw $30,32-2*4($29) jr $31 add $29,32 -.end AES_set_encrypt_key +.end private_AES_set_encrypt_key .align 5 -.globl AES_set_decrypt_key -.ent AES_set_decrypt_key -AES_set_decrypt_key: +.globl private_AES_set_decrypt_key +.ent private_AES_set_decrypt_key +private_AES_set_decrypt_key: .frame $29,32,$31 .mask 3221225472,-4 .set noreorder + .cpload $25 sub $29,32 sw $31,32-1*4($29) sw $30,32-2*4($29) - .cplocal $7 - .cpsetup $25,$0,AES_set_decrypt_key .set reorder la $7,AES_Te # PIC-ified 'load address' @@ -1004,7 +1000,7 @@ AES_set_decrypt_key: lw $30,32-2*4($29) jr $31 add $29,32 -.end AES_set_decrypt_key +.end private_AES_set_decrypt_key .rdata .align 6 AES_Te: diff --git a/crypto/bn/asm/mips-mont.s b/crypto/bn/asm/mips-mont.s index 867de6f..32ecee5 100644 --- a/crypto/bn/asm/mips-mont.s +++ b/crypto/bn/asm/mips-mont.s @@ -7,6 +7,8 @@ .globl bn_mul_mont .ent bn_mul_mont bn_mul_mont: + lw $8,16($29) + lw $9,20($29) slt $1,$9,4 bnez $1,1f li $2,0 diff --git a/crypto/sha/asm/sha256-mips.s b/crypto/sha/asm/sha256-mips.s index 83876d9..5fc697f 100644 --- a/crypto/sha/asm/sha256-mips.s +++ b/crypto/sha/asm/sha256-mips.s @@ -15,6 +15,7 @@ sha256_block_data_order: .frame $29,128,$31 .mask 3237937152,-4 .set noreorder + .cpload $25 sub $29,128 sw $31,128-1*4($29) sw $30,128-2*4($29) @@ -27,8 +28,6 @@ sha256_block_data_order: sw $17,128-9*4($29) sw $16,128-10*4($29) sll $23,$6,6 - .cplocal $6 - .cpsetup $25,$0,sha256_block_data_order .set reorder la $6,K256 # PIC-ified 'load address' diff --git a/import_openssl.sh b/import_openssl.sh index 59952e1..e4e46c7 100755 --- a/import_openssl.sh +++ b/import_openssl.sh @@ -139,11 +139,14 @@ function import() { perl crypto/sha/asm/sha512-armv4.pl > crypto/sha/asm/sha512-armv4.s # Generate mips asm - perl crypto/aes/asm/aes-mips.pl > crypto/aes/asm/aes-mips.s - perl crypto/bn/asm/mips.pl > crypto/bn/asm/bn-mips.s - perl crypto/bn/asm/mips-mont.pl > crypto/bn/asm/mips-mont.s - perl crypto/sha/asm/sha1-mips.pl > crypto/sha/asm/sha1-mips.s - perl crypto/sha/asm/sha512-mips.pl > crypto/sha/asm/sha256-mips.s + # The perl scripts expect to run the target compiler as $CC to determine + # the endianess of the target. Setting CC to true is a hack that forces the scripts + # to generate little endian output + CC=true perl crypto/aes/asm/aes-mips.pl o32 > crypto/aes/asm/aes-mips.s + CC=true perl crypto/bn/asm/mips.pl o32 > crypto/bn/asm/bn-mips.s + CC=true perl crypto/bn/asm/mips-mont.pl o32 > crypto/bn/asm/mips-mont.s + CC=true perl crypto/sha/asm/sha1-mips.pl o32 > crypto/sha/asm/sha1-mips.s + CC=true perl crypto/sha/asm/sha512-mips.pl o32 > crypto/sha/asm/sha256-mips.s # Setup android.testssl directory mkdir android.testssl diff --git a/openssl.config b/openssl.config index 7109f03..bf7489a 100644 --- a/openssl.config +++ b/openssl.config @@ -203,6 +203,7 @@ small_records.patch \ handshake_cutthrough.patch \ jsse.patch \ sha1_armv4_large.patch \ +mips_private.patch \ " OPENSSL_PATCHES_progs_SOURCES="\ @@ -248,3 +249,7 @@ ssl/ssl_locl.h ssl/ssl_rsa.c \ ssl/ssl_sess.c \ " + +OPENSSL_PATCHES_mips_private_SOURCES="\ +crypto/aes/asm/aes-mips.pl \ +" diff --git a/patches/README b/patches/README index 7fd8093..d9f1b30 100644 --- a/patches/README +++ b/patches/README @@ -29,3 +29,10 @@ Support for JSSE implementation based on OpenSSL. sha1_armv4_large.patch This patch eliminates memory stores to addresses below SP. + + +mips_private.patch: + +Fix duplicate defines of labels AES_set_encrypt_key and AES_set_decrypt_key +by prefixing Mips version with private_ . +Revise import script to generate o32-abi .s files for Mips. diff --git a/patches/mips_private.patch b/patches/mips_private.patch new file mode 100644 index 0000000..97c076a --- /dev/null +++ b/patches/mips_private.patch @@ -0,0 +1,64 @@ +--- openssl-1.0.1c.orig/crypto/aes/asm/aes-mips.pl 2011-11-14 20:55:23.000000000 +0000 ++++ openssl-1.0.1c/crypto/aes/asm/aes-mips.pl 2012-08-14 22:13:55.250604273 +0000 +@@ -1036,9 +1036,9 @@ _mips_AES_set_encrypt_key: + nop + .end _mips_AES_set_encrypt_key + +-.globl AES_set_encrypt_key +-.ent AES_set_encrypt_key +-AES_set_encrypt_key: ++.globl private_AES_set_encrypt_key ++.ent private_AES_set_encrypt_key ++private_AES_set_encrypt_key: + .frame $sp,$FRAMESIZE,$ra + .mask $SAVED_REGS_MASK,-$SZREG + .set noreorder +@@ -1060,7 +1060,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); # + ___ + $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification + .cplocal $Tbl +- .cpsetup $pf,$zero,AES_set_encrypt_key ++ .cpsetup $pf,$zero,private_AES_set_encrypt_key + ___ + $code.=<<___; + .set reorder +@@ -1083,7 +1083,7 @@ ___ + $code.=<<___; + jr $ra + $PTR_ADD $sp,$FRAMESIZE +-.end AES_set_encrypt_key ++.end private_AES_set_encrypt_key + ___ + + my ($head,$tail)=($inp,$bits); +@@ -1091,9 +1091,9 @@ my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$ + my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2); + $code.=<<___; + .align 5 +-.globl AES_set_decrypt_key +-.ent AES_set_decrypt_key +-AES_set_decrypt_key: ++.globl private_AES_set_decrypt_key ++.ent private_AES_set_decrypt_key ++private_AES_set_decrypt_key: + .frame $sp,$FRAMESIZE,$ra + .mask $SAVED_REGS_MASK,-$SZREG + .set noreorder +@@ -1115,7 +1115,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); # + ___ + $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification + .cplocal $Tbl +- .cpsetup $pf,$zero,AES_set_decrypt_key ++ .cpsetup $pf,$zero,private_AES_set_decrypt_key + ___ + $code.=<<___; + .set reorder +@@ -1226,7 +1226,7 @@ ___ + $code.=<<___; + jr $ra + $PTR_ADD $sp,$FRAMESIZE +-.end AES_set_decrypt_key ++.end private_AES_set_decrypt_key + ___ + }}} + |