Allow for option to skip hardware support.

This commit is contained in:
Andy Polyakov 2007-07-23 20:38:57 +00:00
parent 20f7563f3d
commit a61710b868

View File

@ -31,6 +31,8 @@
# Implement AES_set_[en|de]crypt_key. Key schedule setup is avoided # Implement AES_set_[en|de]crypt_key. Key schedule setup is avoided
# for 128-bit keys, if hardware support is detected. # for 128-bit keys, if hardware support is detected.
$softonly=0; # allow hardware support
$t1="%r0"; $t1="%r0";
$t2="%r1"; $t2="%r1";
$t3="%r2"; $inp="%r2"; $t3="%r2"; $inp="%r2";
@ -171,6 +173,8 @@ $code.=<<___;
.type AES_encrypt,\@function .type AES_encrypt,\@function
AES_encrypt: AES_encrypt:
stg $ra,112($sp) stg $ra,112($sp)
___
$code.=<<___ if (!$softonly);
lghi %r0,10 lghi %r0,10
c %r0,240($key) c %r0,240($key)
jne .Lesoft jne .Lesoft
@ -199,10 +203,11 @@ AES_encrypt:
bras $ra,.Lekey_internal # postponed key schedule setup bras $ra,.Lekey_internal # postponed key schedule setup
lmg $inp,$key,16($sp) lmg $inp,$key,16($sp)
.Lesoft: .Lesoft:
___
$code.=<<___;
stmg %r3,%r13,24($sp) stmg %r3,%r13,24($sp)
bras $tbl,1f larl $tbl,AES_Te
1: aghi $tbl,AES_Te-.
llgf $s0,0($inp) llgf $s0,0($inp)
llgf $s1,4($inp) llgf $s1,4($inp)
@ -493,6 +498,8 @@ $code.=<<___;
.type AES_decrypt,\@function .type AES_decrypt,\@function
AES_decrypt: AES_decrypt:
stg $ra,112($sp) stg $ra,112($sp)
___
$code.=<<___ if (!$softonly);
lghi %r0,10 lghi %r0,10
c %r0,240($key) c %r0,240($key)
jne .Ldsoft jne .Ldsoft
@ -522,10 +529,11 @@ AES_decrypt:
bras $ra,.Ldkey_internal # postponed key schedule setup bras $ra,.Ldkey_internal # postponed key schedule setup
lmg $inp,$key,16($sp) lmg $inp,$key,16($sp)
.Ldsoft: .Ldsoft:
___
$code.=<<___;
stmg %r3,%r13,24($sp) stmg %r3,%r13,24($sp)
bras $tbl,1f larl $tbl,AES_Td
1: aghi $tbl,AES_Td-.
llgf $s0,0($inp) llgf $s0,0($inp)
llgf $s1,4($inp) llgf $s1,4($inp)
@ -731,6 +739,8 @@ AES_set_encrypt_key:
.align 4 .align 4
.Lproceed128: .Lproceed128:
___
$code.=<<___ if (!$softonly);
lghi %r0,0 # query capability vector lghi %r0,0 # query capability vector
la %r1,16($sp) la %r1,16($sp)
.long 0xb92e0042 # km %r4,%r2 .long 0xb92e0042 # km %r4,%r2
@ -745,13 +755,13 @@ AES_set_encrypt_key:
st $t1,240($key) st $t1,240($key)
lghi %r2,0 lghi %r2,0
br %r14 br %r14
___
$code.=<<___;
.align 16 .align 16
.Lekey_internal: .Lekey_internal:
stmg %r6,%r13,48($sp) # all non-volatile regs stmg %r6,%r13,48($sp) # all non-volatile regs
bras $tbl,1f larl $tbl,AES_Te+2048
1: aghi $tbl,AES_Te+2048-.
llgf $s0,0($inp) llgf $s0,0($inp)
llgf $s1,4($inp) llgf $s1,4($inp)
@ -914,7 +924,7 @@ AES_set_encrypt_key:
la $i1,0($i1,$tbl) la $i1,0($i1,$tbl)
la $i2,0($i2,$tbl) la $i2,0($i2,$tbl)
la $i3,0($i3,$tbl) la $i3,0($i3,$tbl)
icm $t2,1,0($t2) # Te4[rk[11]>>0] llgc $t2,0($t2) # Te4[rk[11]>>0]
icm $t2,2,0($i1) # Te4[rk[11]>>8]<<8 icm $t2,2,0($i1) # Te4[rk[11]>>8]<<8
icm $t2,4,0($i2) # Te4[rk[11]>>16]<<16 icm $t2,4,0($i2) # Te4[rk[11]>>16]<<16
icm $t2,8,0($i3) # Te4[rk[11]>>24]<<24 icm $t2,8,0($i3) # Te4[rk[11]>>24]<<24
@ -949,7 +959,8 @@ AES_set_decrypt_key:
lg $ra,112($sp) lg $ra,112($sp)
ltgr %r2,%r2 ltgr %r2,%r2
bnzr $ra bnzr $ra
___
$code.=<<___ if (!$softonly);
lghi $t1,10 lghi $t1,10
c $t1,240($key) c $t1,240($key)
jne .Lgo jne .Lgo
@ -969,6 +980,8 @@ AES_set_decrypt_key:
bras $ra,.Lekey_internal bras $ra,.Lekey_internal
lg $key,32($sp) lg $key,32($sp)
lg $ra,40($sp) lg $ra,40($sp)
___
$code.=<<___;
.Lgo: llgf $rounds,240($key) .Lgo: llgf $rounds,240($key)
la $i1,0($key) la $i1,0($key)