1#!/usr/local/bin/perl 2 3$L="edi"; 4$R="esi"; 5 6sub DES_encrypt3 7 { 8 local($name,$enc)=@_; 9 10 &function_begin_B($name,""); 11 &push("ebx"); 12 &mov("ebx",&wparam(0)); 13 14 &push("ebp"); 15 &push("esi"); 16 17 &push("edi"); 18 19 &comment(""); 20 &comment("Load the data words"); 21 &mov($L,&DWP(0,"ebx","",0)); 22 &mov($R,&DWP(4,"ebx","",0)); 23 &stack_push(3); 24 25 &comment(""); 26 &comment("IP"); 27 &IP_new($L,$R,"edx",0); 28 29 # put them back 30 31 if ($enc) 32 { 33 &mov(&DWP(4,"ebx","",0),$R); 34 &mov("eax",&wparam(1)); 35 &mov(&DWP(0,"ebx","",0),"edx"); 36 &mov("edi",&wparam(2)); 37 &mov("esi",&wparam(3)); 38 } 39 else 40 { 41 &mov(&DWP(4,"ebx","",0),$R); 42 &mov("esi",&wparam(1)); 43 &mov(&DWP(0,"ebx","",0),"edx"); 44 &mov("edi",&wparam(2)); 45 &mov("eax",&wparam(3)); 46 } 47 &mov(&swtmp(2), (DWC(($enc)?"1":"0"))); 48 &mov(&swtmp(1), "eax"); 49 &mov(&swtmp(0), "ebx"); 50 &call("DES_encrypt2"); 51 &mov(&swtmp(2), (DWC(($enc)?"0":"1"))); 52 &mov(&swtmp(1), "edi"); 53 &mov(&swtmp(0), "ebx"); 54 &call("DES_encrypt2"); 55 &mov(&swtmp(2), (DWC(($enc)?"1":"0"))); 56 &mov(&swtmp(1), "esi"); 57 &mov(&swtmp(0), "ebx"); 58 &call("DES_encrypt2"); 59 60 &stack_pop(3); 61 &mov($L,&DWP(0,"ebx","",0)); 62 &mov($R,&DWP(4,"ebx","",0)); 63 64 &comment(""); 65 &comment("FP"); 66 &FP_new($L,$R,"eax",0); 67 68 &mov(&DWP(0,"ebx","",0),"eax"); 69 &mov(&DWP(4,"ebx","",0),$R); 70 71 &pop("edi"); 72 &pop("esi"); 73 &pop("ebp"); 74 &pop("ebx"); 75 &ret(); 76 &function_end_B($name); 77 } 78 79 80