提交 052ecf91 编写于 作者: A Andy Polyakov

aesp8-ppc.pl: rigid input verification in key setup.

上级 7b8c8c4d
...@@ -89,8 +89,22 @@ Lconsts: ...@@ -89,8 +89,22 @@ Lconsts:
.${prefix}_set_encrypt_key: .${prefix}_set_encrypt_key:
Lset_encrypt_key: Lset_encrypt_key:
mflr r11 mflr r11
lis r0,0xfff0
$PUSH r11,$LRSAVE($sp) $PUSH r11,$LRSAVE($sp)
li $ptr,-1
${UCMP}i $inp,0
beq- Lenc_key_abort # if ($inp==0) return -1;
${UCMP}i $out,0
beq- Lenc_key_abort # if ($out==0) return -1;
li $ptr,-2
cmpwi $bits,128
blt- Lenc_key_abort
cmpwi $bits,256
bgt- Lenc_key_abort
andi. r0,$bits,0x3f
bne- Lenc_key_abort
lis r0,0xfff0
mfspr $vrsave,256 mfspr $vrsave,256
mtspr 256,r0 mtspr 256,r0
...@@ -321,10 +335,12 @@ Ldone: ...@@ -321,10 +335,12 @@ Ldone:
lvx $in1,0,$inp # redundant in aligned case lvx $in1,0,$inp # redundant in aligned case
vsel $in1,$outhead,$in1,$outmask vsel $in1,$outhead,$in1,$outmask
stvx $in1,0,$inp stvx $in1,0,$inp
xor r3,r3,r3 # return value li $ptr,0
mtspr 256,$vrsave mtspr 256,$vrsave
stw $rounds,0($out) stw $rounds,0($out)
Lenc_key_abort:
mr r3,$ptr
blr blr
.long 0 .long 0
.byte 0,12,0x14,1,0,0,3,0 .byte 0,12,0x14,1,0,0,3,0
...@@ -340,6 +356,9 @@ Ldone: ...@@ -340,6 +356,9 @@ Ldone:
bl Lset_encrypt_key bl Lset_encrypt_key
mtlr r10 mtlr r10
cmpwi r3,0
bne- Ldec_key_abort
slwi $cnt,$rounds,4 slwi $cnt,$rounds,4
subi $inp,$out,240 # first round key subi $inp,$out,240 # first round key
srwi $rounds,$rounds,1 srwi $rounds,$rounds,1
...@@ -368,6 +387,7 @@ Ldeckey: ...@@ -368,6 +387,7 @@ Ldeckey:
bdnz Ldeckey bdnz Ldeckey
xor r3,r3,r3 # return value xor r3,r3,r3 # return value
Ldec_key_abort:
addi $sp,$sp,$FRAME addi $sp,$sp,$FRAME
blr blr
.long 0 .long 0
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册