Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TOTAL COMMANDER PUBLIC-KEY CRYPTOSYSTEM
- // by DimitarSerg
- // (2013)
- function IsBit(Value, Pos: Integer): Boolean;
- asm
- mov ECX,EAX
- xor EAX,EAX
- and EDX,31
- bt ECX,EDX
- adc EAX,0
- end;
- function count_bin_digits(a:integer):byte;
- begin
- Result:=0;
- repeat
- Inc(Result);
- a := a div 2; //Remove the next least significant bit in the record number.
- until a = 0;
- end;
- function rsa_encrypt(cyphertext:string;e:Dword):string;
- var n1,c1,r,r1,r2,c2,n_2fg:TFGInt;
- c,n,n_2:string;
- i:byte;
- begin
- n:='AAD4474DC8387E81BB095D810F4F4F21D5D7CCC756E3D6E5DEE48AC000C25AA0EFAD0AD3A5AC46F15B50249597461BBB87CDC3F1BA37C17A9A207A3603E38E718F9927A5EB38005D8B72EAFDC63931C3D93C1FAD457A17CA85BEB40F3FA9152770DAC12E8E3B912D';
- n_2:='2';
- ConvertHexStringToBase256String(n_2,n_2); // Convert N-2 to Base256
- Base256StringToFGInt(n_2,n_2fg); // Convert N-2 to FGInt
- ConvertHexStringToBase256String(N,N); // Convert N to Base256
- Base256StringToFGInt(N,n1); // Convert N to FGInt
- ConvertHexStringToBase256String(cyphertext,c);// Convert CT to Base256
- Base256StringToFGInt(c,c1); // Convert CT to FGInt
- r1:=c1;
- for i:=count_bin_digits(e)-1 downto 1 do
- begin
- if IsBit(e,i) then
- begin
- FGIntMul(c1,c1,r); //MUL
- FGIntSub(r,n_2fg,c2); //ADD
- end;
- FGIntMul(c1,c2,r); //MUL
- FGIntSub(r,r1,r2); //ADD
- FGIntMod(r2,n1,c2); //MOD
- FGIntMul(c1,c1,r); //MUL
- FGIntSub(r,n_2fg,r2); //ADD
- FGIntMod(r2,n1,c1); //MOD
- end;
- //-----------------------------------------------
- FGIntToBase256String(c2,result);
- ConvertBase256StringToHexString(result,result);
- // Destroy FGInt (important!)
- FGIntDestroy(c2);
- FGIntDestroy(r);
- FGIntDestroy(r1);
- FGIntDestroy(r2);
- FGIntDestroy(n_2fg);
- FGIntDestroy(c1);
- FGIntDestroy(n1);
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement