c2e4f17c1a
libdes (which is still used out there) or other des implementations, the OpenSSL DES functions are renamed to begin with DES_ instead of des_. Compatibility routines are provided and declared by including openssl/des_old.h. Those declarations are the same as were in des.h when the OpenSSL project started, which is exactly how libdes looked at that time, and hopefully still looks today. The compatibility functions will be removed in some future release, at the latest in version 1.0.
79 lines
1.3 KiB
Raku
79 lines
1.3 KiB
Raku
#!/usr/local/bin/perl
|
|
|
|
$L="edi";
|
|
$R="esi";
|
|
|
|
sub DES_encrypt3
|
|
{
|
|
local($name,$enc)=@_;
|
|
|
|
&function_begin_B($name,"");
|
|
&push("ebx");
|
|
&mov("ebx",&wparam(0));
|
|
|
|
&push("ebp");
|
|
&push("esi");
|
|
|
|
&push("edi");
|
|
|
|
&comment("");
|
|
&comment("Load the data words");
|
|
&mov($L,&DWP(0,"ebx","",0));
|
|
&mov($R,&DWP(4,"ebx","",0));
|
|
&stack_push(3);
|
|
|
|
&comment("");
|
|
&comment("IP");
|
|
&IP_new($L,$R,"edx",0);
|
|
|
|
# put them back
|
|
|
|
if ($enc)
|
|
{
|
|
&mov(&DWP(4,"ebx","",0),$R);
|
|
&mov("eax",&wparam(1));
|
|
&mov(&DWP(0,"ebx","",0),"edx");
|
|
&mov("edi",&wparam(2));
|
|
&mov("esi",&wparam(3));
|
|
}
|
|
else
|
|
{
|
|
&mov(&DWP(4,"ebx","",0),$R);
|
|
&mov("esi",&wparam(1));
|
|
&mov(&DWP(0,"ebx","",0),"edx");
|
|
&mov("edi",&wparam(2));
|
|
&mov("eax",&wparam(3));
|
|
}
|
|
&mov(&swtmp(2), (DWC(($enc)?"1":"0")));
|
|
&mov(&swtmp(1), "eax");
|
|
&mov(&swtmp(0), "ebx");
|
|
&call("DES_encrypt2");
|
|
&mov(&swtmp(2), (DWC(($enc)?"0":"1")));
|
|
&mov(&swtmp(1), "edi");
|
|
&mov(&swtmp(0), "ebx");
|
|
&call("DES_encrypt2");
|
|
&mov(&swtmp(2), (DWC(($enc)?"1":"0")));
|
|
&mov(&swtmp(1), "esi");
|
|
&mov(&swtmp(0), "ebx");
|
|
&call("DES_encrypt2");
|
|
|
|
&stack_pop(3);
|
|
&mov($L,&DWP(0,"ebx","",0));
|
|
&mov($R,&DWP(4,"ebx","",0));
|
|
|
|
&comment("");
|
|
&comment("FP");
|
|
&FP_new($L,$R,"eax",0);
|
|
|
|
&mov(&DWP(0,"ebx","",0),"eax");
|
|
&mov(&DWP(4,"ebx","",0),$R);
|
|
|
|
&pop("edi");
|
|
&pop("esi");
|
|
&pop("ebp");
|
|
&pop("ebx");
|
|
&ret();
|
|
&function_end_B($name);
|
|
}
|
|
|
|
|