OSDN Git Service

インデックスデータベース完成記念バックアップ♪
[wordring-tm/wordring-tm.git] / third-party / openssl-1.0.2d / crypto / des / asm / desboth.pl
diff --git a/third-party/openssl-1.0.2d/crypto/des/asm/desboth.pl b/third-party/openssl-1.0.2d/crypto/des/asm/desboth.pl
new file mode 100644 (file)
index 0000000..eec0088
--- /dev/null
@@ -0,0 +1,79 @@
+#!/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);
+       }
+
+