48,16,56,24);
procedure K2Coding64bits(A: word64; var R: word64; B: byte);
begin
convert(A,FShTable,R);
asm
push esi
mov esi,DWORD[R]
mov cl,[b]
ror dword[esi],cl
add esi,4
pop esi
end;
procedure K2DeCoding64bits(A: word64; var R: word64; B: Byte);
rol DWORD[A],cl
rol DWORD[A+4],cl
convert(A,LShTable,R);
function Coding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
var
i,j,l:integer;
a,r: ^word64;
k: word64;
b: byte;
b:=0;
for i:=0 to 7 do
k.v8[i]:=BYTE(Param.Key[i]);
convert(K,LshTable,K);
for i:=0 to 7 do b:=b xor K.v8[i];
l:=Size div 8;
for i:=1 to Param.WayCount do
for j:=0 to l-1 do
a:=Pointer(LongWord(Buf)+j*8);
r:=a;
K2Coding64bits(A^,R^,B);
result:=0;
function DeCoding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
a,r:^word64;
K2DeCoding64bits(A^,R^,B);
end.
unit K3;
interface
uses CodingTools;
function Coding_K3(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
function DeCoding_K3(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
implementation
uses SysUtils;
const
FShTable: TConvertTable64 =
(57,49,41,33,25,17, 9, 1,59,51,
43,35,27,19,11, 3,61,53,45,37,
29,21,13, 5,63,55,47,39,31,23,
15, 7,56,48,40,32,24,16, 8, 0,
58,50,42,34,26,18,10, 2,60,52,
44,36,28,20,12, 4,62,54,46,38,
30,22,14, 6);
LShTable: TConvertTable64 =
(39, 7,47,15,55,23,63,31,38,6,
46,14,54,22,62,30,37, 5,45,13,
53,21,61,29,36, 4,44,12,52,20,
60,28,35, 3,43,11,51,19,59,27,
34, 2,42,10,50,18,58,26,33, 1,
41, 9,49,17,57,25,32, 0,40, 8,
procedure K3Coding64bits(A: word64; var R: word64; B: byte);
procedure K3DeCoding64bits(A: word64; var R: word64; B: Byte);
i,j:integer;
k.v32[0]:=0;
k.v32[1]:=0;
for i:=0 to StrLen(Param.Key)-1 do
for j:=0 to Size-8 do
a:=Pointer(LongWord(Buf)+j);
K3Coding64bits(A^,R^,B);
for j:=Size-8 downto 0 do
K3DeCoding64bits(A^,R^,B);
unit OptionsUnit;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Spin, ExtCtrls;
type
TOptionsForm = class(TForm)
UsedMethodsBox: TListBox;
MethodsBox: TListBox;
Label1: TLabel;
Label2: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
KeyEdit: TEdit;
Label3: TLabel;
DirectionGroup: TRadioGroup;
WayCountEdit: TSpinEdit;
Label4: TLabel;
DescMemo: TMemo;
procedure BitBtn5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure UsedMethodsBoxClick(Sender: TObject);
procedure DirectionGroupExit(Sender: TObject);
procedure KeyEditExit(Sender: TObject);
procedure WayCountEditExit(Sender: TObject);
procedure EnableKeys(B: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
OptionsForm: TOptionsForm;
{$R *.DFM}
uses CodingUnit, TestUnit;
procedure TOptionsForm.EnableKeys;
DirectionGroup.Enabled:=B;
KeyEdit.Enabled:=B;
WayCountEdit.Enabled:=B;
procedure TOptionsForm.BitBtn5Click(Sender: TObject);
Close;
MainForm.GenerateKey;
procedure TOptionsForm.FormCreate(Sender: TObject);
var i: integer;
for i:=1 to QolMethods do
MethodsBox.Items.Add(Methods[i].MethodName);
Used[i]:=false;
UsedMethodsBox.Clear;
EnableKeys(False);
DescMemo.Clear;
procedure TOptionsForm.BitBtn4Click(Sender: TObject);
i: integer;
for i:=1 to QolMethods do Used[i]:=false;
procedure TOptionsForm.BitBtn3Click(Sender: TObject);
If UsedMethodsBox.ItemIndex=-1 then exit;
Used[MethodIndex(UsedMethodsBox.Items.Strings[UsedMethodsBox.ItemIndex])]:=false;
UsedMethodsBox.Items.Delete(UsedMethodsBox.ItemIndex);
If UsedMethodsBox.Items.Count=0 then EnableKeys(False);
procedure TOptionsForm.BitBtn2Click(Sender: TObject);
If MethodsBox.ItemIndex=-1 then exit;
if UsedMethodsBox.Items.IndexOf(Methods[MethodsBox.ItemIndex+1].MethodName)=-1 then
UsedMethodsBox.Items.Add(Methods[MethodsBox.ItemIndex+1].MethodName);
Used[MethodsBox.ItemIndex+1]:=true;
EnableKeys(True);
UsedMethodsBox.ItemIndex:=UsedMethodsBox.Items.Count-1;
UsedMethodsBox.OnClick(Self);
Страницы: 1, 2, 3, 4, 5