X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fdes%2Fasm%2Fdes_enc.m4;h=4a0d15620c00d94d8e96b8597e43e8778a0eeb75;hp=d1a947eb6792d4c6f9e997af607a165f42e01258;hb=48e5119a6b83fd5781174d3b524cb8d1dc411649;hpb=70532b7d6bd00154a71f76ebc2f32e59279a3626 diff --git a/crypto/des/asm/des_enc.m4 b/crypto/des/asm/des_enc.m4 index d1a947eb67..4a0d15620c 100644 --- a/crypto/des/asm/des_enc.m4 +++ b/crypto/des/asm/des_enc.m4 @@ -1,26 +1,9 @@ -! des_enc.m4 -! des_enc.S (generated from des_enc.m4) +! Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. ! -! UltraSPARC assembler version of the LibDES/SSLeay/OpenSSL des_enc.c file. -! -! Version 1.0. 32-bit version. -! -! June 8, 2000. -! -! Version 2.0. 32/64-bit, PIC-ification, blended CPU adaptation -! by Andy Polyakov. -! -! January 1, 2003. -! -! Assembler version: Copyright Svend Olaf Mikkelsen. -! -! Original C code: Copyright Eric A. Young. -! -! This code can be freely used by LibDES/SSLeay/OpenSSL users. -! -! The LibDES/SSLeay/OpenSSL copyright notices must be respected. -! -! This version can be redistributed. +! Licensed under the OpenSSL license (the "License"). You may not use +! this file except in compliance with the License. You can obtain a copy +! in the file LICENSE in the source distribution or at +! https://www.openssl.org/source/license.html ! ! To expand the m4 macros: m4 -B 8192 des_enc.m4 > des_enc.S ! @@ -46,6 +29,8 @@ .ident "des_enc.m4 2.1" .file "des_enc-sparc.S" +#include + #if defined(__SUNPRO_C) && defined(__sparcv9) # define ABI64 /* They've said -xarch=v9 at command line */ #elif defined(__GNUC__) && defined(__arch64__) @@ -61,9 +46,6 @@ # define STPTR stx # define ARG0 128 # define ARGSZ 8 -# ifndef OPENSSL_SYSNAME_ULTRASPARC -# define OPENSSL_SYSNAME_ULTRASPARC -# endif #else # define FRAME -96 # define BIAS 0 @@ -130,7 +112,7 @@ changequote({,}) ! ! Loads key first round from address in parameter 5 to out0, out1. ! -! After the the original LibDES initial permutation, the resulting left +! After the original LibDES initial permutation, the resulting left ! is in the variable initially used for right and vice versa. The macro ! implements the possibility to keep the halfs in the original registers. ! @@ -266,7 +248,7 @@ define(ip_macro, { ! other half (use). ! ! In this version we do two rounds in a loop repeated 7 times -! and two rounds seperately. +! and two rounds separately. ! ! One half has the bits for the sboxes in the following positions: ! @@ -316,16 +298,16 @@ $4: ld [global1+local1], local1 xor $2, out1, out1 ! 8642 xor $2, out0, out0 ! 7531 - fmovs %f0, %f0 ! fxor used for alignment + ! fmovs %f0, %f0 ! fxor used for alignment srl out1, 4, local0 ! rotate 4 right and out0, local5, local3 ! 3 - fmovs %f0, %f0 + ! fmovs %f0, %f0 ld [$5+$3*8], local7 ! key 7531 next round srl local3, 8, local3 ! 3 and local0, 252, local2 ! 2 - fmovs %f0, %f0 + ! fmovs %f0, %f0 ld [global3+local3],local3 ! 3 sll out1, 28, out1 ! rotate @@ -423,11 +405,7 @@ $4: xor $2, local1, $2 ! 1 finished xor $2, local2, $2 ! 3 finished -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bne,pt %icc, $4 -#else bne $4 -#endif and local4, 252, local1 ! sbox 1 next round ! two rounds more: @@ -550,8 +528,8 @@ $4: ! parameter 3 1 for optional store to [in0] ! parameter 4 1 for load input/output address to local5/7 ! -! The final permutation logic switches the halfes, meaning that -! left and right ends up the the registers originally used. +! The final permutation logic switches the halves, meaning that +! left and right ends up the registers originally used. define(fp_macro, { @@ -753,7 +731,7 @@ define(fp_ip_macro, { sll $4, 3, local2 xor local4, temp2, $2 - ! reload since used as temporar: + ! reload since used as temporary: ld [out2+280], out4 ! loop counter @@ -775,7 +753,7 @@ define(fp_ip_macro, { ! parameter 1 address ! parameter 2 destination left ! parameter 3 destination right -! parameter 4 temporar +! parameter 4 temporary ! parameter 5 label define(load_little_endian, { @@ -785,18 +763,6 @@ define(load_little_endian, { ! first in memory to rightmost in register -#ifdef OPENSSL_SYSNAME_ULTRASPARC - andcc $1, 3, global0 - bne,pn %icc, $5 - nop - - lda [$1] 0x88, $2 - add $1, 4, $4 - - ba,pt %icc, $5a - lda [$4] 0x88, $3 -#endif - $5: ldub [$1+3], $2 @@ -836,7 +802,7 @@ $5a: ! parameter 1 address ! parameter 2 destination left ! parameter 3 destination right -! parameter 4 temporar +! parameter 4 temporary ! parameter 4 label ! ! adds 8 to address @@ -848,19 +814,6 @@ define(load_little_endian_inc, { ! first in memory to rightmost in register -#ifdef OPENSSL_SYSNAME_ULTRASPARC - andcc $1, 3, global0 - bne,pn %icc, $5 - nop - - lda [$1] 0x88, $2 - add $1, 4, $1 - - lda [$1] 0x88, $3 - ba,pt %icc, $5a - add $1, 4, $1 -#endif - $5: ldub [$1+3], $2 @@ -974,7 +927,7 @@ $7.jmp.table: ! parameter 1 address ! parameter 2 source left ! parameter 3 source right -! parameter 4 temporar +! parameter 4 temporary define(store_little_endian, { @@ -983,18 +936,6 @@ define(store_little_endian, { ! rightmost in register to first in memory -#ifdef OPENSSL_SYSNAME_ULTRASPARC - andcc $1, 3, global0 - bne,pn %icc, $5 - nop - - sta $2, [$1] 0x88 - add $1, 4, $4 - - ba,pt %icc, $5a - sta $3, [$4] 0x88 -#endif - $5: and $2, 255, $4 stub $4, [$1+0] @@ -1180,17 +1121,16 @@ DES_encrypt1: save %sp, FRAME, %sp - call .PIC.me.up - mov .PIC.me.up-(.-4),out0 + sethi %hi(.PIC.DES_SPtrans-1f),global1 + or global1,%lo(.PIC.DES_SPtrans-1f),global1 +1: call .+8 + add %o7,global1,global1 + sub global1,.PIC.DES_SPtrans-.des_and,out2 ld [in0], in5 ! left cmp in2, 0 ! enc -#ifdef OPENSSL_SYSNAME_ULTRASPARC - be,pn %icc, .encrypt.dec ! enc/dec -#else be .encrypt.dec -#endif ld [in0+4], out5 ! right ! parameter 6 1/2 for include encryption/decryption @@ -1238,8 +1178,11 @@ DES_encrypt2: save %sp, FRAME, %sp - call .PIC.me.up - mov .PIC.me.up-(.-4),out0 + sethi %hi(.PIC.DES_SPtrans-1f),global1 + or global1,%lo(.PIC.DES_SPtrans-1f),global1 +1: call .+8 + add %o7,global1,global1 + sub global1,.PIC.DES_SPtrans-.des_and,out2 ! Set sbox address 1 to 6 and rotate halfs 3 left ! Errors caught by destest? Yes. Still? *NO* @@ -1275,11 +1218,7 @@ DES_encrypt2: ! we use our own stackframe -#ifdef OPENSSL_SYSNAME_ULTRASPARC - be,pn %icc, .encrypt2.dec ! decryption -#else be .encrypt2.dec -#endif STPTR in0, [%sp+BIAS+ARG0+0*ARGSZ] ld [in3], out0 ! key 7531 first round @@ -1353,8 +1292,11 @@ DES_encrypt3: save %sp, FRAME, %sp - call .PIC.me.up - mov .PIC.me.up-(.-4),out0 + sethi %hi(.PIC.DES_SPtrans-1f),global1 + or global1,%lo(.PIC.DES_SPtrans-1f),global1 +1: call .+8 + add %o7,global1,global1 + sub global1,.PIC.DES_SPtrans-.des_and,out2 ld [in0], in5 ! left add in2, 120, in4 ! ks2 @@ -1395,8 +1337,11 @@ DES_decrypt3: save %sp, FRAME, %sp - call .PIC.me.up - mov .PIC.me.up-(.-4),out0 + sethi %hi(.PIC.DES_SPtrans-1f),global1 + or global1,%lo(.PIC.DES_SPtrans-1f),global1 +1: call .+8 + add %o7,global1,global1 + sub global1,.PIC.DES_SPtrans-.des_and,out2 ld [in0], in5 ! left add in3, 120, in4 ! ks3 @@ -1425,19 +1370,6 @@ DES_decrypt3: .DES_decrypt3.end: .size DES_decrypt3,.DES_decrypt3.end-DES_decrypt3 -! input: out0 offset between .PIC.me.up and caller -! output: out0 pointer to .PIC.me.up -! out2 pointer to .des_and -! global1 pointer to DES_SPtrans - .align 32 -.PIC.me.up: - add out0,%o7,out0 ! pointer to .PIC.me.up - sethi %hi(.des_and-.PIC.me.up),out2 - or out2,%lo(.des_and-.PIC.me.up),out2 - add out0,out2,out2 - retl - add out2,.PIC.DES_SPtrans-.des_and,global1 - ! void DES_ncbc_encrypt(input, output, length, schedule, ivec, enc) ! ***************************************************************** @@ -1454,16 +1386,15 @@ DES_ncbc_encrypt: define({OUTPUT}, { [%sp+BIAS+ARG0+1*ARGSZ] }) define({IVEC}, { [%sp+BIAS+ARG0+4*ARGSZ] }) - call .PIC.me.up - mov .PIC.me.up-(.-4),out0 + sethi %hi(.PIC.DES_SPtrans-1f),global1 + or global1,%lo(.PIC.DES_SPtrans-1f),global1 +1: call .+8 + add %o7,global1,global1 + sub global1,.PIC.DES_SPtrans-.des_and,out2 cmp in5, 0 ! enc -#ifdef OPENSSL_SYSNAME_ULTRASPARC - be,pn %icc, .ncbc.dec -#else be .ncbc.dec -#endif STPTR in4, IVEC ! addr left right temp label @@ -1471,11 +1402,7 @@ DES_ncbc_encrypt: addcc in2, -8, in2 ! bytes missing when first block done -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bl,pn %icc, .ncbc.enc.seven.or.less -#else bl .ncbc.enc.seven.or.less -#endif mov in3, in4 ! schedule .ncbc.enc.next.block: @@ -1499,11 +1426,7 @@ DES_ncbc_encrypt: rounds_macro(in5, out5, 1, .ncbc.enc.1, in3, in4) ! include encryption ks in3 -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bl,pn %icc, .ncbc.enc.next.block_fp -#else bl .ncbc.enc.next.block_fp -#endif add in0, 8, in0 ! input address ! If 8 or more bytes are to be encrypted after this block, @@ -1534,7 +1457,7 @@ DES_ncbc_encrypt: xor global4, local1, out5 ! iv xor next block ba .ncbc.enc.next.block_2 - add in1, 8, in1 ! output adress + add in1, 8, in1 ! output address .ncbc.enc.next.block_fp: @@ -1544,22 +1467,14 @@ DES_ncbc_encrypt: addcc in2, -8, in2 ! bytes missing when next block done -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bpos,pt %icc, .ncbc.enc.next.block ! also jumps if 0 -#else bpos .ncbc.enc.next.block -#endif add in1, 8, in1 .ncbc.enc.seven.or.less: cmp in2, -8 -#ifdef OPENSSL_SYSNAME_ULTRASPARC - ble,pt %icc, .ncbc.enc.finish -#else ble .ncbc.enc.finish -#endif nop add in2, 8, local1 ! bytes to load @@ -1586,11 +1501,7 @@ DES_ncbc_encrypt: add in3, 120, in3 LDPTR IVEC, local7 ! ivec -#ifdef OPENSSL_SYSNAME_ULTRASPARC - ble,pn %icc, .ncbc.dec.finish -#else ble .ncbc.dec.finish -#endif mov in3, in4 ! schedule STPTR in1, OUTPUT @@ -1606,7 +1517,7 @@ DES_ncbc_encrypt: ! parameter 7 1 for mov in1 to in3 ! parameter 8 1 for mov in3 to in4 - ip_macro(in5, out5, out5, in5, in4, 2, 0, 1) ! include decryprion ks in4 + ip_macro(in5, out5, out5, in5, in4, 2, 0, 1) ! include decryption ks in4 fp_macro(out5, in5, 0, 1) ! 1 for input and output address to local5/7 @@ -1614,11 +1525,7 @@ DES_ncbc_encrypt: ! in2 is compared to 8 in the rounds xor out5, in0, out4 ! iv xor -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bl,pn %icc, .ncbc.dec.seven.or.less -#else bl .ncbc.dec.seven.or.less -#endif xor in5, in1, global4 ! iv xor ! Load ivec next block now, since input and output address might be the same. @@ -1631,11 +1538,7 @@ DES_ncbc_encrypt: add local7, 8, local7 addcc in2, -8, in2 -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bg,pt %icc, .ncbc.dec.next.block -#else bg .ncbc.dec.next.block -#endif STPTR local7, OUTPUT @@ -1660,7 +1563,7 @@ DES_ncbc_encrypt: .size DES_ncbc_encrypt, .DES_ncbc_encrypt.end-DES_ncbc_encrypt -! void DES_ede3_cbc_encrypt(input, output, lenght, ks1, ks2, ks3, ivec, enc) +! void DES_ede3_cbc_encrypt(input, output, length, ks1, ks2, ks3, ivec, enc) ! ************************************************************************** @@ -1676,18 +1579,17 @@ DES_ede3_cbc_encrypt: define({KS2}, { [%sp+BIAS+ARG0+4*ARGSZ] }) define({KS3}, { [%sp+BIAS+ARG0+5*ARGSZ] }) - call .PIC.me.up - mov .PIC.me.up-(.-4),out0 + sethi %hi(.PIC.DES_SPtrans-1f),global1 + or global1,%lo(.PIC.DES_SPtrans-1f),global1 +1: call .+8 + add %o7,global1,global1 + sub global1,.PIC.DES_SPtrans-.des_and,out2 LDPTR [%fp+BIAS+ARG0+7*ARGSZ], local3 ! enc LDPTR [%fp+BIAS+ARG0+6*ARGSZ], local4 ! ivec cmp local3, 0 ! enc -#ifdef OPENSSL_SYSNAME_ULTRASPARC - be,pn %icc, .ede3.dec -#else be .ede3.dec -#endif STPTR in4, KS2 STPTR in5, KS3 @@ -1696,11 +1598,7 @@ DES_ede3_cbc_encrypt: addcc in2, -8, in2 ! bytes missing after next block -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bl,pn %icc, .ede3.enc.seven.or.less -#else bl .ede3.enc.seven.or.less -#endif STPTR in3, KS1 .ede3.enc.next.block: @@ -1730,11 +1628,7 @@ DES_ede3_cbc_encrypt: call .des_enc ! ks3 in3 compares in2 to 8 nop -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bl,pn %icc, .ede3.enc.next.block_fp -#else bl .ede3.enc.next.block_fp -#endif add in0, 8, in0 ! If 8 or more bytes are to be encrypted after this block, @@ -1776,22 +1670,14 @@ DES_ede3_cbc_encrypt: addcc in2, -8, in2 ! bytes missing when next block done -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bpos,pt %icc, .ede3.enc.next.block -#else bpos .ede3.enc.next.block -#endif add in1, 8, in1 .ede3.enc.seven.or.less: cmp in2, -8 -#ifdef OPENSSL_SYSNAME_ULTRASPARC - ble,pt %icc, .ede3.enc.finish -#else ble .ede3.enc.finish -#endif nop add in2, 8, local1 ! bytes to load @@ -1819,11 +1705,7 @@ DES_ede3_cbc_encrypt: STPTR in3, KS1 cmp in2, 0 -#ifdef OPENSSL_SYSNAME_ULTRASPARC - ble %icc, .ede3.dec.finish -#else ble .ede3.dec.finish -#endif STPTR in5, KS3 LDPTR [%fp+BIAS+ARG0+6*ARGSZ], local7 ! iv @@ -1852,11 +1734,7 @@ DES_ede3_cbc_encrypt: ! in2 is compared to 8 in the rounds xor out5, in0, out4 -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bl,pn %icc, .ede3.dec.seven.or.less -#else bl .ede3.dec.seven.or.less -#endif xor in5, in1, global4 load_little_endian_inc(local5, in0, in1, local3, .LLE10) ! iv next block @@ -1867,11 +1745,7 @@ DES_ede3_cbc_encrypt: addcc in2, -8, in2 add local7, 8, local7 -#ifdef OPENSSL_SYSNAME_ULTRASPARC - bg,pt %icc, .ede3.dec.next.block -#else bg .ede3.dec.next.block -#endif STPTR local7, OUTPUT .ede3.dec.store.iv: @@ -1937,7 +1811,7 @@ DES_ede3_cbc_encrypt: .byte 240, 240, 240, 240, 244, 244, 244, 244 .byte 248, 248, 248, 248, 252, 252, 252, 252 - ! 5 numbers for initil/final permutation + ! 5 numbers for initial/final permutation .word 0x0f0f0f0f ! offset 256 .word 0x0000ffff ! 260