Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64 Add b...



details:   https://anonhg.NetBSD.org/src/rev/7de18f7e769c
branches:  trunk
changeset: 818528:7de18f7e769c
user:      joerg <joerg%NetBSD.org@localhost>
date:      Mon Oct 17 00:24:13 2016 +0000

description:
Add basic glue for AArch64, including not-yet-used assembler files.

diffstat:

 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/Makefile       |    14 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/aes.inc        |     4 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/aesv8-armx.S   |   754 ++++++
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/bf.inc         |     5 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/bn.inc         |     2 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/crypto.inc     |     2 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/des.inc        |     5 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/ghashv8-armx.S |   230 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/modes.inc      |     4 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/rc4.inc        |     3 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/sha.inc        |     7 +
 crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/sha1-armv8.S   |  1211 ++++++++++
 12 files changed, 2241 insertions(+), 0 deletions(-)

diffs (truncated from 2289 to 300 lines):

diff -r 94713a345964 -r 7de18f7e769c crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/Makefile   Mon Oct 17 00:24:13 2016 +0000
@@ -0,0 +1,14 @@
+#      $NetBSD: Makefile,v 1.1 2016/10/17 00:24:13 joerg Exp $
+
+.include "bsd.own.mk"
+
+CRYPTODIST=${NETBSDSRCDIR}/crypto
+.include "${NETBSDSRCDIR}/crypto/Makefile.openssl"
+
+regen:
+       for i in ${OPENSSLSRC}/crypto/aes/asm/aesv8-armx.pl \
+                ${OPENSSLSRC}/crypto/modes/asm/ghashv8-armx.pl \
+                ${OPENSSLSRC}/crypto/sha/asm/sha1-armv8.pl; do \
+               j=$$(basename $$i .pl).S; \
+               perl $$i > $$j; \
+       done
diff -r 94713a345964 -r 7de18f7e769c crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/aes.inc
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/aes.inc    Mon Oct 17 00:24:13 2016 +0000
@@ -0,0 +1,4 @@
+.PATH.S: ${.PARSEDIR}
+#AES_SRCS = aesv8-armx.S
+#AESCPPFLAGS = -DAES_ASM
+.include "../../aes.inc"
diff -r 94713a345964 -r 7de18f7e769c crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/aesv8-armx.S
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/aesv8-armx.S       Mon Oct 17 00:24:13 2016 +0000
@@ -0,0 +1,754 @@
+#include "arm_arch.h"
+
+#if __ARM_MAX_ARCH__>=7
+.text
+.arch  armv7-a
+.fpu   neon
+.code  32
+.align 5
+rcon:
+.long  0x01,0x01,0x01,0x01
+.long  0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d     @ rotate-n-splat
+.long  0x1b,0x1b,0x1b,0x1b
+
+.globl aes_v8_set_encrypt_key
+.type  aes_v8_set_encrypt_key,%function
+.align 5
+aes_v8_set_encrypt_key:
+.Lenc_key:
+       mov     r3,#-1
+       cmp     r0,#0
+       beq     .Lenc_key_abort
+       cmp     r2,#0
+       beq     .Lenc_key_abort
+       mov     r3,#-2
+       cmp     r1,#128
+       blt     .Lenc_key_abort
+       cmp     r1,#256
+       bgt     .Lenc_key_abort
+       tst     r1,#0x3f
+       bne     .Lenc_key_abort
+
+       adr     r3,rcon
+       cmp     r1,#192
+
+       veor    q0,q0,q0
+       vld1.8  {q3},[r0]!
+       mov     r1,#8           @ reuse r1
+       vld1.32 {q1,q2},[r3]!
+
+       blt     .Loop128
+       beq     .L192
+       b       .L256
+
+.align 4
+.Loop128:
+       vtbl.8  d20,{q3},d4
+       vtbl.8  d21,{q3},d5
+       vext.8  q9,q0,q3,#12
+       vst1.32 {q3},[r2]!
+       .byte   0x00,0x43,0xf0,0xf3     @ aese q10,q0
+       subs    r1,r1,#1
+
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+        veor   q10,q10,q1
+       veor    q3,q3,q9
+       vshl.u8 q1,q1,#1
+       veor    q3,q3,q10
+       bne     .Loop128
+
+       vld1.32 {q1},[r3]
+
+       vtbl.8  d20,{q3},d4
+       vtbl.8  d21,{q3},d5
+       vext.8  q9,q0,q3,#12
+       vst1.32 {q3},[r2]!
+       .byte   0x00,0x43,0xf0,0xf3     @ aese q10,q0
+
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+        veor   q10,q10,q1
+       veor    q3,q3,q9
+       vshl.u8 q1,q1,#1
+       veor    q3,q3,q10
+
+       vtbl.8  d20,{q3},d4
+       vtbl.8  d21,{q3},d5
+       vext.8  q9,q0,q3,#12
+       vst1.32 {q3},[r2]!
+       .byte   0x00,0x43,0xf0,0xf3     @ aese q10,q0
+
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+        veor   q10,q10,q1
+       veor    q3,q3,q9
+       veor    q3,q3,q10
+       vst1.32 {q3},[r2]
+       add     r2,r2,#0x50
+
+       mov     r12,#10
+       b       .Ldone
+
+.align 4
+.L192:
+       vld1.8  {d16},[r0]!
+       vmov.i8 q10,#8                  @ borrow q10
+       vst1.32 {q3},[r2]!
+       vsub.i8 q2,q2,q10       @ adjust the mask
+
+.Loop192:
+       vtbl.8  d20,{q8},d4
+       vtbl.8  d21,{q8},d5
+       vext.8  q9,q0,q3,#12
+       vst1.32 {d16},[r2]!
+       .byte   0x00,0x43,0xf0,0xf3     @ aese q10,q0
+       subs    r1,r1,#1
+
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+       veor    q3,q3,q9
+
+       vdup.32 q9,d7[1]
+       veor    q9,q9,q8
+        veor   q10,q10,q1
+       vext.8  q8,q0,q8,#12
+       vshl.u8 q1,q1,#1
+       veor    q8,q8,q9
+       veor    q3,q3,q10
+       veor    q8,q8,q10
+       vst1.32 {q3},[r2]!
+       bne     .Loop192
+
+       mov     r12,#12
+       add     r2,r2,#0x20
+       b       .Ldone
+
+.align 4
+.L256:
+       vld1.8  {q8},[r0]
+       mov     r1,#7
+       mov     r12,#14
+       vst1.32 {q3},[r2]!
+
+.Loop256:
+       vtbl.8  d20,{q8},d4
+       vtbl.8  d21,{q8},d5
+       vext.8  q9,q0,q3,#12
+       vst1.32 {q8},[r2]!
+       .byte   0x00,0x43,0xf0,0xf3     @ aese q10,q0
+       subs    r1,r1,#1
+
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+       veor    q3,q3,q9
+       vext.8  q9,q0,q9,#12
+        veor   q10,q10,q1
+       veor    q3,q3,q9
+       vshl.u8 q1,q1,#1
+       veor    q3,q3,q10
+       vst1.32 {q3},[r2]!
+       beq     .Ldone
+
+       vdup.32 q10,d7[1]
+       vext.8  q9,q0,q8,#12
+       .byte   0x00,0x43,0xf0,0xf3     @ aese q10,q0
+
+       veor    q8,q8,q9
+       vext.8  q9,q0,q9,#12
+       veor    q8,q8,q9
+       vext.8  q9,q0,q9,#12
+       veor    q8,q8,q9
+
+       veor    q8,q8,q10
+       b       .Loop256
+
+.Ldone:
+       str     r12,[r2]
+       mov     r3,#0
+
+.Lenc_key_abort:
+       mov     r0,r3                   @ return value
+       
+       bx      lr
+.size  aes_v8_set_encrypt_key,.-aes_v8_set_encrypt_key
+
+.globl aes_v8_set_decrypt_key
+.type  aes_v8_set_decrypt_key,%function
+.align 5
+aes_v8_set_decrypt_key:
+       stmdb   sp!,{r4,lr}
+       bl      .Lenc_key
+
+       cmp     r0,#0
+       bne     .Ldec_key_abort
+
+       sub     r2,r2,#240              @ restore original r2
+       mov     r4,#-16
+       add     r0,r2,r12,lsl#4 @ end of key schedule
+
+       vld1.32 {q0},[r2]
+       vld1.32 {q1},[r0]
+       vst1.32 {q0},[r0],r4
+       vst1.32 {q1},[r2]!
+
+.Loop_imc:
+       vld1.32 {q0},[r2]
+       vld1.32 {q1},[r0]
+       .byte   0xc0,0x03,0xb0,0xf3     @ aesimc q0,q0
+       .byte   0xc2,0x23,0xb0,0xf3     @ aesimc q1,q1
+       vst1.32 {q0},[r0],r4
+       vst1.32 {q1},[r2]!
+       cmp     r0,r2
+       bhi     .Loop_imc
+
+       vld1.32 {q0},[r2]
+       .byte   0xc0,0x03,0xb0,0xf3     @ aesimc q0,q0
+       vst1.32 {q0},[r0]
+
+       eor     r0,r0,r0                @ return value
+.Ldec_key_abort:
+       ldmia   sp!,{r4,pc}
+.size  aes_v8_set_decrypt_key,.-aes_v8_set_decrypt_key
+.globl aes_v8_encrypt
+.type  aes_v8_encrypt,%function
+.align 5
+aes_v8_encrypt:
+       ldr     r3,[r2,#240]
+       vld1.32 {q0},[r2]!
+       vld1.8  {q2},[r0]
+       sub     r3,r3,#2
+       vld1.32 {q1},[r2]!
+
+.Loop_enc:
+       .byte   0x00,0x43,0xb0,0xf3     @ aese q2,q0
+       .byte   0x84,0x43,0xb0,0xf3     @ aesmc q2,q2
+       vld1.32 {q0},[r2]!
+       subs    r3,r3,#2
+       .byte   0x02,0x43,0xb0,0xf3     @ aese q2,q1
+       .byte   0x84,0x43,0xb0,0xf3     @ aesmc q2,q2
+       vld1.32 {q1},[r2]!
+       bgt     .Loop_enc
+
+       .byte   0x00,0x43,0xb0,0xf3     @ aese q2,q0
+       .byte   0x84,0x43,0xb0,0xf3     @ aesmc q2,q2
+       vld1.32 {q0},[r2]
+       .byte   0x02,0x43,0xb0,0xf3     @ aese q2,q1
+       veor    q2,q2,q0
+
+       vst1.8  {q2},[r1]
+       bx      lr
+.size  aes_v8_encrypt,.-aes_v8_encrypt
+.globl aes_v8_decrypt
+.type  aes_v8_decrypt,%function
+.align 5
+aes_v8_decrypt:
+       ldr     r3,[r2,#240]
+       vld1.32 {q0},[r2]!
+       vld1.8  {q2},[r0]
+       sub     r3,r3,#2
+       vld1.32 {q1},[r2]!
+
+.Loop_dec:
+       .byte   0x40,0x43,0xb0,0xf3     @ aesd q2,q0
+       .byte   0xc4,0x43,0xb0,0xf3     @ aesimc q2,q2
+       vld1.32 {q0},[r2]!
+       subs    r3,r3,#2
+       .byte   0x42,0x43,0xb0,0xf3     @ aesd q2,q1
+       .byte   0xc4,0x43,0xb0,0xf3     @ aesimc q2,q2
+       vld1.32 {q1},[r2]!
+       bgt     .Loop_dec
+
+       .byte   0x40,0x43,0xb0,0xf3     @ aesd q2,q0



Home | Main Index | Thread Index | Old Index