提交 af1d6387 编写于 作者: P Patrick Steuer 提交者: Andy Polyakov

s390x assembly pack: remove capability double-checking.

An instruction's QUERY function is executed at initialization, iff the required
MSA level is installed. Therefore, it is sufficient to check the bits returned
by the QUERY functions. The MSA level does not have to be checked at every
function call.
crypto/aes/asm/aes-s390x.pl: The AES key schedule must be computed if the
required KM or KMC function codes are not available. Formally, the availability
of a KMC function code does not imply the availability of the corresponding KM
function code.
Signed-off-by: NPatrick Steuer <patrick.steuer@de.ibm.com>
Reviewed-by: NAndy Polyakov <appro@openssl.org>
Reviewed-by: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4501)
上级 4c5100ce
...@@ -813,7 +813,7 @@ _s390x_AES_set_encrypt_key: ...@@ -813,7 +813,7 @@ _s390x_AES_set_encrypt_key:
.Lproceed: .Lproceed:
___ ___
$code.=<<___ if (!$softonly); $code.=<<___ if (!$softonly);
# convert bits to km code, [128,192,256]->[18,19,20] # convert bits to km(c) code, [128,192,256]->[18,19,20]
lhi %r5,-128 lhi %r5,-128
lhi %r0,18 lhi %r0,18
ar %r5,$bits ar %r5,$bits
...@@ -821,13 +821,10 @@ $code.=<<___ if (!$softonly); ...@@ -821,13 +821,10 @@ $code.=<<___ if (!$softonly);
ar %r5,%r0 ar %r5,%r0
larl %r1,OPENSSL_s390xcap_P larl %r1,OPENSSL_s390xcap_P
lg %r0,0(%r1)
tmhl %r0,0x4000 # check for message-security assist
jz .Lekey_internal
llihh %r0,0x8000 llihh %r0,0x8000
srlg %r0,%r0,0(%r5) srlg %r0,%r0,0(%r5)
ng %r0,48(%r1) # check kmc capability vector ng %r0,32(%r1) # check availability of both km...
ng %r0,48(%r1) # ...and kmc support for given key length
jz .Lekey_internal jz .Lekey_internal
lmg %r0,%r1,0($inp) # just copy 128 bits... lmg %r0,%r1,0($inp) # just copy 128 bits...
...@@ -842,7 +839,7 @@ $code.=<<___ if (!$softonly); ...@@ -842,7 +839,7 @@ $code.=<<___ if (!$softonly);
stg %r1,24($key) stg %r1,24($key)
1: st $bits,236($key) # save bits [for debugging purposes] 1: st $bits,236($key) # save bits [for debugging purposes]
lgr $t0,%r5 lgr $t0,%r5
st %r5,240($key) # save km code st %r5,240($key) # save km(c) code
lghi %r2,0 lghi %r2,0
br %r14 br %r14
___ ___
...@@ -1440,11 +1437,6 @@ $code.=<<___ if (!$softonly); ...@@ -1440,11 +1437,6 @@ $code.=<<___ if (!$softonly);
.Lctr32_hw_switch: .Lctr32_hw_switch:
___ ___
$code.=<<___ if (!$softonly && 0);# kmctr code was measured to be ~12% slower $code.=<<___ if (!$softonly && 0);# kmctr code was measured to be ~12% slower
larl $s0,OPENSSL_s390xcap_P
lg $s0,8($s0)
tmhh $s0,0x0004 # check for message_security-assist-4
jz .Lctr32_km_loop
llgfr $s0,%r0 llgfr $s0,%r0
lgr $s1,%r1 lgr $s1,%r1
larl %r1,OPENSSL_s390xcap_P larl %r1,OPENSSL_s390xcap_P
......
...@@ -88,9 +88,6 @@ gcm_gmult_4bit: ...@@ -88,9 +88,6 @@ gcm_gmult_4bit:
___ ___
$code.=<<___ if(!$softonly && 0); # hardware is slow for single block... $code.=<<___ if(!$softonly && 0); # hardware is slow for single block...
larl %r1,OPENSSL_s390xcap_P larl %r1,OPENSSL_s390xcap_P
lg %r0,0(%r1)
tmhl %r0,0x4000 # check for message-security-assist
jz .Lsoft_gmult
lghi %r0,0 lghi %r0,0
lg %r1,24(%r1) # load second word of kimd capabilities vector lg %r1,24(%r1) # load second word of kimd capabilities vector
tmhh %r1,0x4000 # check for function 65 tmhh %r1,0x4000 # check for function 65
...@@ -126,14 +123,8 @@ gcm_ghash_4bit: ...@@ -126,14 +123,8 @@ gcm_ghash_4bit:
___ ___
$code.=<<___ if(!$softonly); $code.=<<___ if(!$softonly);
larl %r1,OPENSSL_s390xcap_P larl %r1,OPENSSL_s390xcap_P
lg %r0,0(%r1) lg %r0,24(%r1) # load second word of kimd capabilities vector
tmhl %r0,0x4000 # check for message-security-assist tmhh %r0,0x4000 # check for function 65
jz .Lsoft_ghash
lghi %r0,0
la %r1,16($sp)
.long 0xb93e0004 # kimd %r0,%r4
lg %r1,24($sp)
tmhh %r1,0x4000 # check for function 65
jz .Lsoft_ghash jz .Lsoft_ghash
lghi %r0,65 # function 65 lghi %r0,65 # function 65
la %r1,0($Xi) # H lies right after Xi in gcm128_context la %r1,0($Xi) # H lies right after Xi in gcm128_context
......
...@@ -172,9 +172,6 @@ sha1_block_data_order: ...@@ -172,9 +172,6 @@ sha1_block_data_order:
___ ___
$code.=<<___ if ($kimdfunc); $code.=<<___ if ($kimdfunc);
larl %r1,OPENSSL_s390xcap_P larl %r1,OPENSSL_s390xcap_P
lg %r0,0(%r1)
tmhl %r0,0x4000 # check for message-security assist
jz .Lsoftware
lg %r0,16(%r1) # check kimd capabilities lg %r0,16(%r1) # check kimd capabilities
tmhh %r0,`0x8000>>$kimdfunc` tmhh %r0,`0x8000>>$kimdfunc`
jz .Lsoftware jz .Lsoftware
......
...@@ -244,9 +244,6 @@ $Func: ...@@ -244,9 +244,6 @@ $Func:
___ ___
$code.=<<___ if ($kimdfunc); $code.=<<___ if ($kimdfunc);
larl %r1,OPENSSL_s390xcap_P larl %r1,OPENSSL_s390xcap_P
lg %r0,0(%r1)
tmhl %r0,0x4000 # check for message-security assist
jz .Lsoftware
lg %r0,16(%r1) # check kimd capabilities lg %r0,16(%r1) # check kimd capabilities
tmhh %r0,`0x8000>>$kimdfunc` tmhh %r0,`0x8000>>$kimdfunc`
jz .Lsoftware jz .Lsoftware
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册