Loading Configure +10 −9 Original line number Diff line number Diff line Loading @@ -1083,6 +1083,11 @@ if ($no_asm) $sha1_obj=$md5_obj=$rmd160_obj=""; } if (!$no_shared) { $cast_obj=""; # CAST assembler is not PIC } if ($threads) { $cflags=$thread_cflags; Loading @@ -1098,20 +1103,16 @@ if ($zlib) # You will find shlib_mark1 and shlib_mark2 explained in Makefile.org my $shared_mark = ""; if ($shared_target ne "") if ($shared_target eq "") { if ($shared_cflag ne "") { $cflags = "$shared_cflag $cflags"; $no_shared = 1; } if (!$no_shared) { #$shared_mark = "\$(SHARED_LIBS)"; } } else if ($shared_cflag ne "") { $no_shared = 1; $cflags = "$shared_cflag $cflags"; } } if ($sys_id ne "") Loading crypto/des/Makefile.ssl +12 −4 Original line number Diff line number Diff line Loading @@ -67,19 +67,27 @@ des: des.o cbc3_enc.o lib # elf asm/dx86-elf.o: asm/dx86unix.cpp $(CPP) -DELF -x c asm/dx86unix.cpp | as -o asm/dx86-elf.o $(CPP) -DELF \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ -x c asm/dx86unix.cpp | as -o asm/dx86-elf.o asm/yx86-elf.o: asm/yx86unix.cpp $(CPP) -DELF -x c asm/yx86unix.cpp | as -o asm/yx86-elf.o $(CPP) -DELF \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ -x c asm/yx86unix.cpp | as -o asm/yx86-elf.o # solaris asm/dx86-sol.o: asm/dx86unix.cpp $(CC) -E -DSOL asm/dx86unix.cpp | sed 's/^#.*//' > asm/dx86-sol.s $(CC) -E -DSOL \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ asm/dx86unix.cpp | sed 's/^#.*//' > asm/dx86-sol.s as -o asm/dx86-sol.o asm/dx86-sol.s rm -f asm/dx86-sol.s asm/yx86-sol.o: asm/yx86unix.cpp $(CC) -E -DSOL asm/yx86unix.cpp | sed 's/^#.*//' > asm/yx86-sol.s $(CC) -E -DSOL \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ asm/yx86unix.cpp | sed 's/^#.*//' > asm/yx86-sol.s as -o asm/yx86-sol.o asm/yx86-sol.s rm -f asm/yx86-sol.s Loading crypto/des/asm/crypt586.pl +24 −21 Original line number Diff line number Diff line Loading @@ -26,11 +26,17 @@ sub fcrypt_body &comment(""); &comment("Load the 2 words"); $ks="ebp"; $trans="ebp"; &xor( $L, $L); &xor( $R, $R); &mov($ks,&wparam(1)); # PIC-ification:-) if ($cpp) { &picmeup("edx","DES_SPtrans"); } else { &lea("edx",&DWP("DES_SPtrans")); } &push("edx"); # becomes &swtmp(1) # &mov($trans,&wparam(1)); # reloaded with DES_SPtrans in D_ENCRYPT &push(&DWC(25)); # add a variable Loading @@ -39,11 +45,11 @@ sub fcrypt_body { &comment(""); &comment("Round $i"); &D_ENCRYPT($i,$L,$R,$i*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i,$L,$R,$i*2,$trans,"eax","ebx","ecx","edx"); &comment(""); &comment("Round ".sprintf("%d",$i+1)); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$trans,"eax","ebx","ecx","edx"); } &mov("ebx", &swtmp(0)); &mov("eax", $L); Loading @@ -61,14 +67,14 @@ sub fcrypt_body &mov(&DWP(0,"edx","",0),"eax"); &mov(&DWP(4,"edx","",0),$L); &pop("ecx"); # remove variable &add("esp",8); # remove variables &function_end($name); } sub D_ENCRYPT { local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_; local($r,$L,$R,$S,$trans,$u,$tmp1,$tmp2,$t)=@_; &mov( $u, &wparam(2)); # 2 &mov( $t, $R); Loading @@ -85,9 +91,9 @@ sub D_ENCRYPT &shl( $tmp2, 16); # 1 &xor( $u, $tmp1); # 2 &xor( $t, $tmp2); # 2 &mov( $tmp1, &DWP(&n2a($S*4),$ks,"",0)); # 2 &mov( $tmp1, &DWP(&n2a($S*4),$trans,"",0)); # 2 &xor( $u, $tmp1); &mov( $tmp2, &DWP(&n2a(($S+1)*4),$ks,"",0)); # 2 &mov( $tmp2, &DWP(&n2a(($S+1)*4),$trans,"",0)); # 2 &xor( $u, $R); &xor( $t, $R); &xor( $t, $tmp2); Loading @@ -99,31 +105,28 @@ sub D_ENCRYPT &movb( &LB($tmp1), &LB($u) ); &movb( &LB($tmp2), &HB($u) ); &rotr( $t, 4 ); &mov( $ks, &DWP(" $desSP",$tmp1,"",0)); &mov( $trans, &swtmp(1)); &xor( $L, &DWP(" ",$trans,$tmp1,0)); &movb( &LB($tmp1), &LB($t) ); &xor( $L, $ks); &mov( $ks, &DWP("0x200+$desSP",$tmp2,"",0)); &xor( $L, $ks); &xor( $L, &DWP("0x200",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &shr( $u, 16); &mov( $ks, &DWP("0x100+$desSP",$tmp1,"",0)); &xor( $L, $ks); &xor( $L, &DWP("0x100",$trans,$tmp1,0)); &movb( &LB($tmp1), &HB($u) ); &shr( $t, 16); &mov( $ks, &DWP("0x300+$desSP",$tmp2,"",0)); &xor( $L, $ks); &mov( $ks, &wparam(1)); &xor( $L, &DWP("0x300",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &and( $u, "0xff" ); &and( $t, "0xff" ); &mov( $tmp1, &DWP("0x600+$desSP",$tmp1,"",0)); &mov( $tmp1, &DWP("0x600",$trans,$tmp1,0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x700+$desSP",$tmp2,"",0)); &mov( $tmp1, &DWP("0x700",$trans,$tmp2,0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x400+$desSP",$u,"",0)); &mov( $tmp1, &DWP("0x400",$trans,$u,0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x500+$desSP",$t,"",0)); &mov( $tmp1, &DWP("0x500",$trans,$t,0)); &xor( $L, $tmp1); &mov( $trans, &wparam(1)); } sub n2a Loading crypto/des/asm/des-586.pl +23 −26 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ sub DES_encrypt &comment(""); &comment("Load the 2 words"); $ks="ebp"; $trans="ebp"; if ($do_ip) { Loading Loading @@ -72,7 +72,11 @@ sub DES_encrypt &rotl($L,3); } &mov( $ks, &wparam(1) ); # PIC-ification:-) if ($cpp) { &picmeup($trans,"DES_SPtrans"); } else { &lea($trans,&DWP("DES_SPtrans")); } &mov( "ecx", &wparam(1) ); &cmp("ebx","0"); &je(&label("start_decrypt")); Loading @@ -80,11 +84,11 @@ sub DES_encrypt { &comment(""); &comment("Round $i"); &D_ENCRYPT($i,$L,$R,$i*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i,$L,$R,$i*2,$trans,"eax","ebx","ecx","edx"); &comment(""); &comment("Round ".sprintf("%d",$i+1)); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$trans,"eax","ebx","ecx","edx"); } &jmp(&label("end")); Loading @@ -94,10 +98,10 @@ sub DES_encrypt { &comment(""); &comment("Round $i"); &D_ENCRYPT(15-$i,$L,$R,$i*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT(15-$i,$L,$R,$i*2,$trans,"eax","ebx","ecx","edx"); &comment(""); &comment("Round ".sprintf("%d",$i-1)); &D_ENCRYPT(15-$i+1,$R,$L,($i-1)*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT(15-$i+1,$R,$L,($i-1)*2,$trans,"eax","ebx","ecx","edx"); } &set_label("end"); Loading Loading @@ -134,43 +138,36 @@ sub DES_encrypt sub D_ENCRYPT { local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_; local($r,$L,$R,$S,$trans,$u,$tmp1,$tmp2,$t)=@_; &mov( $u, &DWP(&n2a($S*4),$ks,"",0)); &mov( $u, &DWP(&n2a($S*4),$tmp2,"",0)); &xor( $tmp1, $tmp1); &mov( $t, &DWP(&n2a(($S+1)*4),$ks,"",0)); &mov( $t, &DWP(&n2a(($S+1)*4),$tmp2,"",0)); &xor( $u, $R); &xor( $tmp2, $tmp2); &xor( $t, $R); &and( $u, "0xfcfcfcfc" ); &and( $t, "0xcfcfcfcf" ); &movb( &LB($tmp1), &LB($u) ); &movb( &LB($tmp2), &HB($u) ); &rotr( $t, 4 ); &mov( $ks, &DWP(" $desSP",$tmp1,"",0)); &xor( $L, &DWP(" ",$trans,$tmp1,0)); &movb( &LB($tmp1), &LB($t) ); &xor( $L, $ks); &mov( $ks, &DWP("0x200+$desSP",$tmp2,"",0)); &xor( $L, $ks); ###### &xor( $L, &DWP("0x200",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &shr( $u, 16); &mov( $ks, &DWP("0x100+$desSP",$tmp1,"",0)); &xor( $L, $ks); ###### &xor( $L, &DWP("0x100",$trans,$tmp1,0)); &movb( &LB($tmp1), &HB($u) ); &shr( $t, 16); &mov( $ks, &DWP("0x300+$desSP",$tmp2,"",0)); &xor( $L, $ks); &mov( $ks, &wparam(1) ); &xor( $L, &DWP("0x300",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &and( $u, "0xff" ); &and( $t, "0xff" ); &mov( $tmp1, &DWP("0x600+$desSP",$tmp1,"",0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x700+$desSP",$tmp2,"",0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x400+$desSP",$u,"",0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x500+$desSP",$t,"",0)); &xor( $L, $tmp1); &xor( $L, &DWP("0x600",$trans,$tmp1,0)); &xor( $L, &DWP("0x700",$trans,$tmp2,0)); &mov( $tmp2, &wparam(1) ); &xor( $L, &DWP("0x400",$trans,$u,0)); &xor( $L, &DWP("0x500",$trans,$t,0)); } sub n2a Loading crypto/perlasm/cbc.pl +24 −17 Original line number Diff line number Diff line Loading @@ -146,9 +146,15 @@ sub cbc &mov($count, &wparam(2)); # length &and($count, 7); &jz(&label("finish")); &call(&label("PIC_point")); &set_label("PIC_point"); &blindpop("edx"); &lea("ecx",&DWP(&label("cbc_enc_jmp_table")."-".&label("PIC_point"),"edx")); &mov($count,&DWP(0,"ecx",$count,4)) &add($count,"edx"); &xor("ecx","ecx"); &xor("edx","edx"); &mov($count,&DWP(&label("cbc_enc_jmp_table"),"",$count,4)); #&mov($count,&DWP(&label("cbc_enc_jmp_table"),"",$count,4)); &jmp_ptr($count); &set_label("ej7"); Loading Loading @@ -318,22 +324,23 @@ sub cbc &set_label("cbc_enc_jmp_table",1); &data_word("0"); &data_word(&label("ej1")); &data_word(&label("ej2")); &data_word(&label("ej3")); &data_word(&label("ej4")); &data_word(&label("ej5")); &data_word(&label("ej6")); &data_word(&label("ej7")); &set_label("cbc_dec_jmp_table",1); &data_word("0"); &data_word(&label("dj1")); &data_word(&label("dj2")); &data_word(&label("dj3")); &data_word(&label("dj4")); &data_word(&label("dj5")); &data_word(&label("dj6")); &data_word(&label("dj7")); &data_word(&label("ej1")."-".&label("PIC_point")); &data_word(&label("ej2")."-".&label("PIC_point")); &data_word(&label("ej3")."-".&label("PIC_point")); &data_word(&label("ej4")."-".&label("PIC_point")); &data_word(&label("ej5")."-".&label("PIC_point")); &data_word(&label("ej6")."-".&label("PIC_point")); &data_word(&label("ej7")."-".&label("PIC_point")); # not used #&set_label("cbc_dec_jmp_table",1); #&data_word("0"); #&data_word(&label("dj1")."-".&label("PIC_point")); #&data_word(&label("dj2")."-".&label("PIC_point")); #&data_word(&label("dj3")."-".&label("PIC_point")); #&data_word(&label("dj4")."-".&label("PIC_point")); #&data_word(&label("dj5")."-".&label("PIC_point")); #&data_word(&label("dj6")."-".&label("PIC_point")); #&data_word(&label("dj7")."-".&label("PIC_point")); &function_end_B($name); Loading Loading
Configure +10 −9 Original line number Diff line number Diff line Loading @@ -1083,6 +1083,11 @@ if ($no_asm) $sha1_obj=$md5_obj=$rmd160_obj=""; } if (!$no_shared) { $cast_obj=""; # CAST assembler is not PIC } if ($threads) { $cflags=$thread_cflags; Loading @@ -1098,20 +1103,16 @@ if ($zlib) # You will find shlib_mark1 and shlib_mark2 explained in Makefile.org my $shared_mark = ""; if ($shared_target ne "") if ($shared_target eq "") { if ($shared_cflag ne "") { $cflags = "$shared_cflag $cflags"; $no_shared = 1; } if (!$no_shared) { #$shared_mark = "\$(SHARED_LIBS)"; } } else if ($shared_cflag ne "") { $no_shared = 1; $cflags = "$shared_cflag $cflags"; } } if ($sys_id ne "") Loading
crypto/des/Makefile.ssl +12 −4 Original line number Diff line number Diff line Loading @@ -67,19 +67,27 @@ des: des.o cbc3_enc.o lib # elf asm/dx86-elf.o: asm/dx86unix.cpp $(CPP) -DELF -x c asm/dx86unix.cpp | as -o asm/dx86-elf.o $(CPP) -DELF \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ -x c asm/dx86unix.cpp | as -o asm/dx86-elf.o asm/yx86-elf.o: asm/yx86unix.cpp $(CPP) -DELF -x c asm/yx86unix.cpp | as -o asm/yx86-elf.o $(CPP) -DELF \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ -x c asm/yx86unix.cpp | as -o asm/yx86-elf.o # solaris asm/dx86-sol.o: asm/dx86unix.cpp $(CC) -E -DSOL asm/dx86unix.cpp | sed 's/^#.*//' > asm/dx86-sol.s $(CC) -E -DSOL \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ asm/dx86unix.cpp | sed 's/^#.*//' > asm/dx86-sol.s as -o asm/dx86-sol.o asm/dx86-sol.s rm -f asm/dx86-sol.s asm/yx86-sol.o: asm/yx86unix.cpp $(CC) -E -DSOL asm/yx86unix.cpp | sed 's/^#.*//' > asm/yx86-sol.s $(CC) -E -DSOL \ `(echo $(CFLAGS) | egrep -ie '-[fK]PIC') > /dev/null 2>&1 && echo -DPIC`\ asm/yx86unix.cpp | sed 's/^#.*//' > asm/yx86-sol.s as -o asm/yx86-sol.o asm/yx86-sol.s rm -f asm/yx86-sol.s Loading
crypto/des/asm/crypt586.pl +24 −21 Original line number Diff line number Diff line Loading @@ -26,11 +26,17 @@ sub fcrypt_body &comment(""); &comment("Load the 2 words"); $ks="ebp"; $trans="ebp"; &xor( $L, $L); &xor( $R, $R); &mov($ks,&wparam(1)); # PIC-ification:-) if ($cpp) { &picmeup("edx","DES_SPtrans"); } else { &lea("edx",&DWP("DES_SPtrans")); } &push("edx"); # becomes &swtmp(1) # &mov($trans,&wparam(1)); # reloaded with DES_SPtrans in D_ENCRYPT &push(&DWC(25)); # add a variable Loading @@ -39,11 +45,11 @@ sub fcrypt_body { &comment(""); &comment("Round $i"); &D_ENCRYPT($i,$L,$R,$i*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i,$L,$R,$i*2,$trans,"eax","ebx","ecx","edx"); &comment(""); &comment("Round ".sprintf("%d",$i+1)); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$trans,"eax","ebx","ecx","edx"); } &mov("ebx", &swtmp(0)); &mov("eax", $L); Loading @@ -61,14 +67,14 @@ sub fcrypt_body &mov(&DWP(0,"edx","",0),"eax"); &mov(&DWP(4,"edx","",0),$L); &pop("ecx"); # remove variable &add("esp",8); # remove variables &function_end($name); } sub D_ENCRYPT { local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_; local($r,$L,$R,$S,$trans,$u,$tmp1,$tmp2,$t)=@_; &mov( $u, &wparam(2)); # 2 &mov( $t, $R); Loading @@ -85,9 +91,9 @@ sub D_ENCRYPT &shl( $tmp2, 16); # 1 &xor( $u, $tmp1); # 2 &xor( $t, $tmp2); # 2 &mov( $tmp1, &DWP(&n2a($S*4),$ks,"",0)); # 2 &mov( $tmp1, &DWP(&n2a($S*4),$trans,"",0)); # 2 &xor( $u, $tmp1); &mov( $tmp2, &DWP(&n2a(($S+1)*4),$ks,"",0)); # 2 &mov( $tmp2, &DWP(&n2a(($S+1)*4),$trans,"",0)); # 2 &xor( $u, $R); &xor( $t, $R); &xor( $t, $tmp2); Loading @@ -99,31 +105,28 @@ sub D_ENCRYPT &movb( &LB($tmp1), &LB($u) ); &movb( &LB($tmp2), &HB($u) ); &rotr( $t, 4 ); &mov( $ks, &DWP(" $desSP",$tmp1,"",0)); &mov( $trans, &swtmp(1)); &xor( $L, &DWP(" ",$trans,$tmp1,0)); &movb( &LB($tmp1), &LB($t) ); &xor( $L, $ks); &mov( $ks, &DWP("0x200+$desSP",$tmp2,"",0)); &xor( $L, $ks); &xor( $L, &DWP("0x200",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &shr( $u, 16); &mov( $ks, &DWP("0x100+$desSP",$tmp1,"",0)); &xor( $L, $ks); &xor( $L, &DWP("0x100",$trans,$tmp1,0)); &movb( &LB($tmp1), &HB($u) ); &shr( $t, 16); &mov( $ks, &DWP("0x300+$desSP",$tmp2,"",0)); &xor( $L, $ks); &mov( $ks, &wparam(1)); &xor( $L, &DWP("0x300",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &and( $u, "0xff" ); &and( $t, "0xff" ); &mov( $tmp1, &DWP("0x600+$desSP",$tmp1,"",0)); &mov( $tmp1, &DWP("0x600",$trans,$tmp1,0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x700+$desSP",$tmp2,"",0)); &mov( $tmp1, &DWP("0x700",$trans,$tmp2,0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x400+$desSP",$u,"",0)); &mov( $tmp1, &DWP("0x400",$trans,$u,0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x500+$desSP",$t,"",0)); &mov( $tmp1, &DWP("0x500",$trans,$t,0)); &xor( $L, $tmp1); &mov( $trans, &wparam(1)); } sub n2a Loading
crypto/des/asm/des-586.pl +23 −26 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ sub DES_encrypt &comment(""); &comment("Load the 2 words"); $ks="ebp"; $trans="ebp"; if ($do_ip) { Loading Loading @@ -72,7 +72,11 @@ sub DES_encrypt &rotl($L,3); } &mov( $ks, &wparam(1) ); # PIC-ification:-) if ($cpp) { &picmeup($trans,"DES_SPtrans"); } else { &lea($trans,&DWP("DES_SPtrans")); } &mov( "ecx", &wparam(1) ); &cmp("ebx","0"); &je(&label("start_decrypt")); Loading @@ -80,11 +84,11 @@ sub DES_encrypt { &comment(""); &comment("Round $i"); &D_ENCRYPT($i,$L,$R,$i*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i,$L,$R,$i*2,$trans,"eax","ebx","ecx","edx"); &comment(""); &comment("Round ".sprintf("%d",$i+1)); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT($i+1,$R,$L,($i+1)*2,$trans,"eax","ebx","ecx","edx"); } &jmp(&label("end")); Loading @@ -94,10 +98,10 @@ sub DES_encrypt { &comment(""); &comment("Round $i"); &D_ENCRYPT(15-$i,$L,$R,$i*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT(15-$i,$L,$R,$i*2,$trans,"eax","ebx","ecx","edx"); &comment(""); &comment("Round ".sprintf("%d",$i-1)); &D_ENCRYPT(15-$i+1,$R,$L,($i-1)*2,$ks,"DES_SPtrans","eax","ebx","ecx","edx"); &D_ENCRYPT(15-$i+1,$R,$L,($i-1)*2,$trans,"eax","ebx","ecx","edx"); } &set_label("end"); Loading Loading @@ -134,43 +138,36 @@ sub DES_encrypt sub D_ENCRYPT { local($r,$L,$R,$S,$ks,$desSP,$u,$tmp1,$tmp2,$t)=@_; local($r,$L,$R,$S,$trans,$u,$tmp1,$tmp2,$t)=@_; &mov( $u, &DWP(&n2a($S*4),$ks,"",0)); &mov( $u, &DWP(&n2a($S*4),$tmp2,"",0)); &xor( $tmp1, $tmp1); &mov( $t, &DWP(&n2a(($S+1)*4),$ks,"",0)); &mov( $t, &DWP(&n2a(($S+1)*4),$tmp2,"",0)); &xor( $u, $R); &xor( $tmp2, $tmp2); &xor( $t, $R); &and( $u, "0xfcfcfcfc" ); &and( $t, "0xcfcfcfcf" ); &movb( &LB($tmp1), &LB($u) ); &movb( &LB($tmp2), &HB($u) ); &rotr( $t, 4 ); &mov( $ks, &DWP(" $desSP",$tmp1,"",0)); &xor( $L, &DWP(" ",$trans,$tmp1,0)); &movb( &LB($tmp1), &LB($t) ); &xor( $L, $ks); &mov( $ks, &DWP("0x200+$desSP",$tmp2,"",0)); &xor( $L, $ks); ###### &xor( $L, &DWP("0x200",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &shr( $u, 16); &mov( $ks, &DWP("0x100+$desSP",$tmp1,"",0)); &xor( $L, $ks); ###### &xor( $L, &DWP("0x100",$trans,$tmp1,0)); &movb( &LB($tmp1), &HB($u) ); &shr( $t, 16); &mov( $ks, &DWP("0x300+$desSP",$tmp2,"",0)); &xor( $L, $ks); &mov( $ks, &wparam(1) ); &xor( $L, &DWP("0x300",$trans,$tmp2,0)); &movb( &LB($tmp2), &HB($t) ); &and( $u, "0xff" ); &and( $t, "0xff" ); &mov( $tmp1, &DWP("0x600+$desSP",$tmp1,"",0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x700+$desSP",$tmp2,"",0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x400+$desSP",$u,"",0)); &xor( $L, $tmp1); &mov( $tmp1, &DWP("0x500+$desSP",$t,"",0)); &xor( $L, $tmp1); &xor( $L, &DWP("0x600",$trans,$tmp1,0)); &xor( $L, &DWP("0x700",$trans,$tmp2,0)); &mov( $tmp2, &wparam(1) ); &xor( $L, &DWP("0x400",$trans,$u,0)); &xor( $L, &DWP("0x500",$trans,$t,0)); } sub n2a Loading
crypto/perlasm/cbc.pl +24 −17 Original line number Diff line number Diff line Loading @@ -146,9 +146,15 @@ sub cbc &mov($count, &wparam(2)); # length &and($count, 7); &jz(&label("finish")); &call(&label("PIC_point")); &set_label("PIC_point"); &blindpop("edx"); &lea("ecx",&DWP(&label("cbc_enc_jmp_table")."-".&label("PIC_point"),"edx")); &mov($count,&DWP(0,"ecx",$count,4)) &add($count,"edx"); &xor("ecx","ecx"); &xor("edx","edx"); &mov($count,&DWP(&label("cbc_enc_jmp_table"),"",$count,4)); #&mov($count,&DWP(&label("cbc_enc_jmp_table"),"",$count,4)); &jmp_ptr($count); &set_label("ej7"); Loading Loading @@ -318,22 +324,23 @@ sub cbc &set_label("cbc_enc_jmp_table",1); &data_word("0"); &data_word(&label("ej1")); &data_word(&label("ej2")); &data_word(&label("ej3")); &data_word(&label("ej4")); &data_word(&label("ej5")); &data_word(&label("ej6")); &data_word(&label("ej7")); &set_label("cbc_dec_jmp_table",1); &data_word("0"); &data_word(&label("dj1")); &data_word(&label("dj2")); &data_word(&label("dj3")); &data_word(&label("dj4")); &data_word(&label("dj5")); &data_word(&label("dj6")); &data_word(&label("dj7")); &data_word(&label("ej1")."-".&label("PIC_point")); &data_word(&label("ej2")."-".&label("PIC_point")); &data_word(&label("ej3")."-".&label("PIC_point")); &data_word(&label("ej4")."-".&label("PIC_point")); &data_word(&label("ej5")."-".&label("PIC_point")); &data_word(&label("ej6")."-".&label("PIC_point")); &data_word(&label("ej7")."-".&label("PIC_point")); # not used #&set_label("cbc_dec_jmp_table",1); #&data_word("0"); #&data_word(&label("dj1")."-".&label("PIC_point")); #&data_word(&label("dj2")."-".&label("PIC_point")); #&data_word(&label("dj3")."-".&label("PIC_point")); #&data_word(&label("dj4")."-".&label("PIC_point")); #&data_word(&label("dj5")."-".&label("PIC_point")); #&data_word(&label("dj6")."-".&label("PIC_point")); #&data_word(&label("dj7")."-".&label("PIC_point")); &function_end_B($name); Loading