📄 aes-ppc.pl
字号:
xor $t0,$t0,$acc04 xor $t1,$t1,$acc05 xor $t2,$t2,$acc06 xor $t3,$t3,$acc07 xor $t0,$t0,$acc08 xor $t1,$t1,$acc09 xor $t2,$t2,$acc10 xor $t3,$t3,$acc11 xor $s0,$t0,$acc12 xor $s1,$t1,$acc13 xor $s2,$t2,$acc14 xor $s3,$t3,$acc15 addi $key,$key,16 bdnz- Ldec_loop addi $Tbl2,$Tbl0,2048 nop lwz $acc08,`2048+0`($Tbl0) ! prefetch Td4 lwz $acc09,`2048+32`($Tbl0) lwz $acc10,`2048+64`($Tbl0) lwz $acc11,`2048+96`($Tbl0) lwz $acc08,`2048+128`($Tbl0) lwz $acc09,`2048+160`($Tbl0) lwz $acc10,`2048+192`($Tbl0) lwz $acc11,`2048+224`($Tbl0) rlwinm $acc00,$s0,`32-24`,24,31 rlwinm $acc01,$s1,`32-24`,24,31 lwz $t0,0($key) lwz $t1,4($key) rlwinm $acc02,$s2,`32-24`,24,31 rlwinm $acc03,$s3,`32-24`,24,31 lwz $t2,8($key) lwz $t3,12($key) rlwinm $acc04,$s3,`32-16`,24,31 rlwinm $acc05,$s0,`32-16`,24,31 lbzx $acc00,$Tbl2,$acc00 lbzx $acc01,$Tbl2,$acc01 rlwinm $acc06,$s1,`32-16`,24,31 rlwinm $acc07,$s2,`32-16`,24,31 lbzx $acc02,$Tbl2,$acc02 lbzx $acc03,$Tbl2,$acc03 rlwinm $acc08,$s2,`32-8`,24,31 rlwinm $acc09,$s3,`32-8`,24,31 lbzx $acc04,$Tbl2,$acc04 lbzx $acc05,$Tbl2,$acc05 rlwinm $acc10,$s0,`32-8`,24,31 rlwinm $acc11,$s1,`32-8`,24,31 lbzx $acc06,$Tbl2,$acc06 lbzx $acc07,$Tbl2,$acc07 rlwinm $acc12,$s1,`0`,24,31 rlwinm $acc13,$s2,`0`,24,31 lbzx $acc08,$Tbl2,$acc08 lbzx $acc09,$Tbl2,$acc09 rlwinm $acc14,$s3,`0`,24,31 rlwinm $acc15,$s0,`0`,24,31 lbzx $acc10,$Tbl2,$acc10 lbzx $acc11,$Tbl2,$acc11 rlwinm $s0,$acc00,24,0,7 rlwinm $s1,$acc01,24,0,7 lbzx $acc12,$Tbl2,$acc12 lbzx $acc13,$Tbl2,$acc13 rlwinm $s2,$acc02,24,0,7 rlwinm $s3,$acc03,24,0,7 lbzx $acc14,$Tbl2,$acc14 lbzx $acc15,$Tbl2,$acc15 rlwimi $s0,$acc04,16,8,15 rlwimi $s1,$acc05,16,8,15 rlwimi $s2,$acc06,16,8,15 rlwimi $s3,$acc07,16,8,15 rlwimi $s0,$acc08,8,16,23 rlwimi $s1,$acc09,8,16,23 rlwimi $s2,$acc10,8,16,23 rlwimi $s3,$acc11,8,16,23 or $s0,$s0,$acc12 or $s1,$s1,$acc13 or $s2,$s2,$acc14 or $s3,$s3,$acc15 xor $s0,$s0,$t0 xor $s1,$s1,$t1 xor $s2,$s2,$t2 xor $s3,$s3,$t3 blr.align 4Lppc_AES_decrypt_compact: lwz $acc00,240($key) lwz $t0,0($key) lwz $t1,4($key) lwz $t2,8($key) lwz $t3,12($key) addi $Tbl1,$Tbl0,2048 lis $mask80,0x8080 lis $mask1b,0x1b1b addi $key,$key,16 ori $mask80,$mask80,0x8080 ori $mask1b,$mask1b,0x1b1b___$code.=<<___ if ($SIZE_T==8); insrdi $mask80,$mask80,32,0 insrdi $mask1b,$mask1b,32,0___$code.=<<___; mtctr $acc00.align 4Ldec_compact_loop: xor $s0,$s0,$t0 xor $s1,$s1,$t1 xor $s2,$s2,$t2 xor $s3,$s3,$t3 rlwinm $acc00,$s0,`32-24`,24,31 rlwinm $acc01,$s1,`32-24`,24,31 rlwinm $acc02,$s2,`32-24`,24,31 rlwinm $acc03,$s3,`32-24`,24,31 lbzx $acc00,$Tbl1,$acc00 lbzx $acc01,$Tbl1,$acc01 rlwinm $acc04,$s3,`32-16`,24,31 rlwinm $acc05,$s0,`32-16`,24,31 lbzx $acc02,$Tbl1,$acc02 lbzx $acc03,$Tbl1,$acc03 rlwinm $acc06,$s1,`32-16`,24,31 rlwinm $acc07,$s2,`32-16`,24,31 lbzx $acc04,$Tbl1,$acc04 lbzx $acc05,$Tbl1,$acc05 rlwinm $acc08,$s2,`32-8`,24,31 rlwinm $acc09,$s3,`32-8`,24,31 lbzx $acc06,$Tbl1,$acc06 lbzx $acc07,$Tbl1,$acc07 rlwinm $acc10,$s0,`32-8`,24,31 rlwinm $acc11,$s1,`32-8`,24,31 lbzx $acc08,$Tbl1,$acc08 lbzx $acc09,$Tbl1,$acc09 rlwinm $acc12,$s1,`0`,24,31 rlwinm $acc13,$s2,`0`,24,31 lbzx $acc10,$Tbl1,$acc10 lbzx $acc11,$Tbl1,$acc11 rlwinm $acc14,$s3,`0`,24,31 rlwinm $acc15,$s0,`0`,24,31 lbzx $acc12,$Tbl1,$acc12 lbzx $acc13,$Tbl1,$acc13 rlwinm $s0,$acc00,24,0,7 rlwinm $s1,$acc01,24,0,7 lbzx $acc14,$Tbl1,$acc14 lbzx $acc15,$Tbl1,$acc15 rlwinm $s2,$acc02,24,0,7 rlwinm $s3,$acc03,24,0,7 rlwimi $s0,$acc04,16,8,15 rlwimi $s1,$acc05,16,8,15 rlwimi $s2,$acc06,16,8,15 rlwimi $s3,$acc07,16,8,15 rlwimi $s0,$acc08,8,16,23 rlwimi $s1,$acc09,8,16,23 rlwimi $s2,$acc10,8,16,23 rlwimi $s3,$acc11,8,16,23 lwz $t0,0($key) lwz $t1,4($key) or $s0,$s0,$acc12 or $s1,$s1,$acc13 lwz $t2,8($key) lwz $t3,12($key) or $s2,$s2,$acc14 or $s3,$s3,$acc15 addi $key,$key,16 bdz Ldec_compact_done___$code.=<<___ if ($SIZE_T==8); # vectorized permutation improves decrypt performance by 10% insrdi $s0,$s1,32,0 insrdi $s2,$s3,32,0 and $acc00,$s0,$mask80 # r1=r0&0x80808080 and $acc02,$s2,$mask80 srdi $acc04,$acc00,7 # r1>>7 srdi $acc06,$acc02,7 andc $acc08,$s0,$mask80 # r0&0x7f7f7f7f andc $acc10,$s2,$mask80 sub $acc00,$acc00,$acc04 # r1-(r1>>7) sub $acc02,$acc02,$acc06 add $acc08,$acc08,$acc08 # (r0&0x7f7f7f7f)<<1 add $acc10,$acc10,$acc10 and $acc00,$acc00,$mask1b # (r1-(r1>>7))&0x1b1b1b1b and $acc02,$acc02,$mask1b xor $acc00,$acc00,$acc08 # r2 xor $acc02,$acc02,$acc10 and $acc04,$acc00,$mask80 # r1=r2&0x80808080 and $acc06,$acc02,$mask80 srdi $acc08,$acc04,7 # r1>>7 srdi $acc10,$acc06,7 andc $acc12,$acc00,$mask80 # r2&0x7f7f7f7f andc $acc14,$acc02,$mask80 sub $acc04,$acc04,$acc08 # r1-(r1>>7) sub $acc06,$acc06,$acc10 add $acc12,$acc12,$acc12 # (r2&0x7f7f7f7f)<<1 add $acc14,$acc14,$acc14 and $acc04,$acc04,$mask1b # (r1-(r1>>7))&0x1b1b1b1b and $acc06,$acc06,$mask1b xor $acc04,$acc04,$acc12 # r4 xor $acc06,$acc06,$acc14 and $acc08,$acc04,$mask80 # r1=r4&0x80808080 and $acc10,$acc06,$mask80 srdi $acc12,$acc08,7 # r1>>7 srdi $acc14,$acc10,7 sub $acc08,$acc08,$acc12 # r1-(r1>>7) sub $acc10,$acc10,$acc14 andc $acc12,$acc04,$mask80 # r4&0x7f7f7f7f andc $acc14,$acc06,$mask80 add $acc12,$acc12,$acc12 # (r4&0x7f7f7f7f)<<1 add $acc14,$acc14,$acc14 and $acc08,$acc08,$mask1b # (r1-(r1>>7))&0x1b1b1b1b and $acc10,$acc10,$mask1b xor $acc08,$acc08,$acc12 # r8 xor $acc10,$acc10,$acc14 xor $acc00,$acc00,$s0 # r2^r0 xor $acc02,$acc02,$s2 xor $acc04,$acc04,$s0 # r4^r0 xor $acc06,$acc06,$s2 extrdi $acc01,$acc00,32,0 extrdi $acc03,$acc02,32,0 extrdi $acc05,$acc04,32,0 extrdi $acc07,$acc06,32,0 extrdi $acc09,$acc08,32,0 extrdi $acc11,$acc10,32,0___$code.=<<___ if ($SIZE_T==4); and $acc00,$s0,$mask80 # r1=r0&0x80808080 and $acc01,$s1,$mask80 and $acc02,$s2,$mask80 and $acc03,$s3,$mask80 srwi $acc04,$acc00,7 # r1>>7 srwi $acc05,$acc01,7 srwi $acc06,$acc02,7 srwi $acc07,$acc03,7 andc $acc08,$s0,$mask80 # r0&0x7f7f7f7f andc $acc09,$s1,$mask80 andc $acc10,$s2,$mask80 andc $acc11,$s3,$mask80 sub $acc00,$acc00,$acc04 # r1-(r1>>7) sub $acc01,$acc01,$acc05 sub $acc02,$acc02,$acc06 sub $acc03,$acc03,$acc07 add $acc08,$acc08,$acc08 # (r0&0x7f7f7f7f)<<1 add $acc09,$acc09,$acc09 add $acc10,$acc10,$acc10 add $acc11,$acc11,$acc11 and $acc00,$acc00,$mask1b # (r1-(r1>>7))&0x1b1b1b1b and $acc01,$acc01,$mask1b and $acc02,$acc02,$mask1b and $acc03,$acc03,$mask1b xor $acc00,$acc00,$acc08 # r2 xor $acc01,$acc01,$acc09 xor $acc02,$acc02,$acc10 xor $acc03,$acc03,$acc11 and $acc04,$acc00,$mask80 # r1=r2&0x80808080 and $acc05,$acc01,$mask80 and $acc06,$acc02,$mask80 and $acc07,$acc03,$mask80 srwi $acc08,$acc04,7 # r1>>7 srwi $acc09,$acc05,7 srwi $acc10,$acc06,7 srwi $acc11,$acc07,7 andc $acc12,$acc00,$mask80 # r2&0x7f7f7f7f andc $acc13,$acc01,$mask80 andc $acc14,$acc02,$mask80 andc $acc15,$acc03,$mask80 sub $acc04,$acc04,$acc08 # r1-(r1>>7) sub $acc05,$acc05,$acc09 sub $acc06,$acc06,$acc10 sub $acc07,$acc07,$acc11 add $acc12,$acc12,$acc12 # (r2&0x7f7f7f7f)<<1 add $acc13,$acc13,$acc13 add $acc14,$acc14,$acc14 add $acc15,$acc15,$acc15 and $acc04,$acc04,$mask1b # (r1-(r1>>7))&0x1b1b1b1b and $acc05,$acc05,$mask1b and $acc06,$acc06,$mask1b and $acc07,$acc07,$mask1b xor $acc04,$acc04,$acc12 # r4 xor $acc05,$acc05,$acc13 xor $acc06,$acc06,$acc14 xor $acc07,$acc07,$acc15 and $acc08,$acc04,$mask80 # r1=r4&0x80808080 and $acc09,$acc05,$mask80 and $acc10,$acc06,$mask80 and $acc11,$acc07,$mask80 srwi $acc12,$acc08,7 # r1>>7 srwi $acc13,$acc09,7 srwi $acc14,$acc10,7 srwi $acc15,$acc11,7 sub $acc08,$acc08,$acc12 # r1-(r1>>7) sub $acc09,$acc09,$acc13 sub $acc10,$acc10,$acc14 sub $acc11,$acc11,$acc15 andc $acc12,$acc04,$mask80 # r4&0x7f7f7f7f andc $acc13,$acc05,$mask80 andc $acc14,$acc06,$mask80 andc $acc15,$acc07,$mask80 add $acc12,$acc12,$acc12 # (r4&0x7f7f7f7f)<<1 add $acc13,$acc13,$acc13 add $acc14,$acc14,$acc14 add $acc15,$acc15,$acc15 and $acc08,$acc08,$mask1b # (r1-(r1>>7))&0x1b1b1b1b and $acc09,$acc09,$mask1b and $acc10,$acc10,$mask1b and $acc11,$acc11,$mask1b xor $acc08,$acc08,$acc12 # r8 xor $acc09,$acc09,$acc13 xor $acc10,$acc10,$acc14 xor $acc11,$acc11,$acc15 xor $acc00,$acc00,$s0 # r2^r0 xor $acc01,$acc01,$s1 xor $acc02,$acc02,$s2 xor $acc03,$acc03,$s3 xor $acc04,$acc04,$s0 # r4^r0 xor $acc05,$acc05,$s1 xor $acc06,$acc06,$s2 xor $acc07,$acc07,$s3___$code.=<<___; rotrwi $s0,$s0,8 # = ROTATE(r0,8) rotrwi $s1,$s1,8 rotrwi $s2,$s2,8 rotrwi $s3,$s3,8 xor $s0,$s0,$acc00 # ^= r2^r0 xor $s1,$s1,$acc01 xor $s2,$s2,$acc02 xor $s3,$s3,$acc03 xor $acc00,$acc00,$acc08 xor $acc01,$acc01,$acc09 xor $acc02,$acc02,$acc10 xor $acc03,$acc03,$acc11 xor $s0,$s0,$acc04 # ^= r4^r0 xor $s1,$s1,$acc05 xor $s2,$s2,$acc06 xor $s3,$s3,$acc07 rotrwi $acc00,$acc00,24 rotrwi $acc01,$acc01,24 rotrwi $acc02,$acc02,24 rotrwi $acc03,$acc03,24 xor $acc04,$acc04,$acc08 xor $acc05,$acc05,$acc09 xor $acc06,$acc06,$acc10 xor $acc07,$acc07,$acc11 xor $s0,$s0,$acc08 # ^= r8 [^((r4^r0)^(r2^r0)=r4^r2)] xor $s1,$s1,$acc09 xor $s2,$s2,$acc10 xor $s3,$s3,$acc11 rotrwi $acc04,$acc04,16 rotrwi $acc05,$acc05,16 rotrwi $acc06,$acc06,16 rotrwi $acc07,$acc07,16 xor $s0,$s0,$acc00 # ^= ROTATE(r8^r2^r0,24) xor $s1,$s1,$acc01 xor $s2,$s2,$acc02 xor $s3,$s3,$acc03 rotrwi $acc08,$acc08,8 rotrwi $acc09,$acc09,8 rotrwi $acc10,$acc10,8 rotrwi $acc11,$acc11,8 xor $s0,$s0,$acc04 # ^= ROTATE(r8^r4^r0,16) xor $s1,$s1,$acc05 xor $s2,$s2,$acc06 xor $s3,$s3,$acc07 xor $s0,$s0,$acc08 # ^= ROTATE(r8,8) xor $s1,$s1,$acc09 xor $s2,$s2,$acc10 xor $s3,$s3,$acc11 b Ldec_compact_loop.align 4Ldec_compact_done: xor $s0,$s0,$t0 xor $s1,$s1,$t1 xor $s2,$s2,$t2 xor $s3,$s3,$t3 blr.long 0.asciz "AES for PPC, CRYPTOGAMS by <appro\@openssl.org>".align 7___$code =~ s/\`([^\`]*)\`/eval $1/gem;print $code;close STDOUT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -