Скачиваний:
18
Добавлен:
01.05.2014
Размер:
4.07 Кб
Скачать
unit GOST3410;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ConvUtils,
FGInt, ECGFp, ECDSA, StdCtrls;


type
TForm1 = class(TForm)
FC_d: TEdit;
GroupBox1: TGroupBox;
Label1: TLabel;
FC_R: TEdit;
Label2: TLabel;
FC_M: TMemo;
FC_S: TEdit;
B_Create: TButton;
GB_C: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
FC_QX: TEdit;
Button2: TButton;
GB_C_Q: TGroupBox;
FC_QY: TEdit;
Label10: TLabel;
GroupBox2: TGroupBox;
Label9: TLabel;
GB_T: TGroupBox;
Label7: TLabel;
Label8: TLabel;
FT_R: TEdit;
FT_S: TEdit;
FT_M: TMemo;
B_Test: TButton;
FT_Result: TEdit;
GB_T_Q: TGroupBox;
Label6: TLabel;
Label11: TLabel;
FT_QX: TEdit;
FT_QY: TEdit;
Label12: TLabel;
Setup: TButton;
procedure Button2Click(Sender: TObject);
procedure onstart(Sender: TObject);
procedure B_CreateClick(Sender: TObject);
procedure B_TestClick(Sender: TObject);
procedure SetupClick(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
a, b, p, k, h, x, n, temp, one : TFGInt;
r, s, T : String;
g, y : TECPoint;
ok : boolean;

implementation

{$R *.dfm}


procedure TForm1.onstart(Sender: TObject);
begin
FC_M.Text:='A black hole is a place where God divided by zero.';
FT_M.Text:='';

FC_M.Enabled:= False;
FC_d.Enabled:= False;
B_Create.Enabled:= False;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
FT_M.text:=FC_M.text;
FT_R.text:=FC_R.text;
FT_S.text:=FC_S.text;
FT_QX.text:=FC_QX.text;
FT_QY.text:=FC_QY.text;
end;

procedure TForm1.B_CreateClick(Sender: TObject);
begin

//T := 'A black hole is a place where God divided by zero';
T := FC_M.Text;
//writeln('Signing the following string: ', T);
ECDSASign(T, p, a, x, n, k, g, r, s);
FC_R.Text:=r;
FC_S.Text:=s;
FC_QX.Text:=floattostr(y.XCoordinate.number[1]);
FC_QY.Text:=floattostr(y.YCoordinate.number[1]);

end;

procedure TForm1.B_TestClick(Sender: TObject);
begin
//writeln('Verifying signature...');

T := FT_M.Text;
r:=FT_R.Text;
s:=FT_S.Text;
y.XCoordinate.number[1]:=strtoint(FT_QX.Text);
y.YCoordinate.number[1]:=strtoint(FT_QY.Text);

ECDSAVerify(T, r, s, p, a, n, g, y, ok);
If ok Then FT_Result.Text:='Подпись верна!'
Else FT_Result.Text:='Подпись ошибочна!';

{FGIntDestroy(p);
FGIntDestroy(a);
FGIntDestroy(n);
FGIntDestroy(k);
FGIntDestroy(h);
FGIntDestroy(x);
ECPointDestroy(g);
ECPointDestroy(y); }
//readln;
end;

procedure TForm1.SetupClick(Sender: TObject);
begin
// setting up parameters
//writeln('setting up EC parameters ...');
//Base256StringToFGInt('222222aatzzzznnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn', p);
Base256StringToFGInt('222222aatzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz', p);
// A black hole is a place where God divided by zero.
ok := true;
While ok Do
Begin
FindPrimeGoodCurveAndPoint(p, a, b, h, n, 60, g);
IsECSuperSingular(p, a, b, ok);
If ok Then
Begin
FGIntDestroy(a);
FGIntDestroy(b);
FGIntDestroy(h);
FGIntDestroy(n);
ECPointDestroy(g);
End;
End;
Base256StringToFGInt(FC_d.Text, x);
ECPointKMultiple(g, p, a, x, y);
Base10StringToFGInt('12345', k);
Base2StringToFGInt('1', one);
FGIntGCD(k, n, temp);
While Not (FGIntCompareAbs(one, temp) = Eq) Do
Begin
FGIntDestroy(temp);
FGIntAddBis(k, one);
FGIntGCD(k, n, temp);
End;
FGIntDestroy(temp);
FGIntDestroy(one);

// with all these precautions everything is set up for signing/verifying

FC_M.Enabled:= True;
FC_d.Enabled:= True;
B_Create.Enabled:= True;
end;

End.
Соседние файлы в папке Delphi source
  • #
    01.05.2014901 б17FGIntPrimeGeneration.dcu
  • #
    01.05.20141.93 Кб17FGIntPrimeGeneration.pas
  • #
    01.05.20148.72 Кб17GOST3410.dcu
  • #
    01.05.201451 б17GOST3410.ddp
  • #
    01.05.20147.35 Кб17GOST3410.dfm
  • #
    01.05.20144.07 Кб18GOST3410.pas
  • #
    01.05.2014434 б17GOST3410_Proj.cfg
  • #
    01.05.20141.97 Кб17GOST3410_Proj.dof
  • #
    01.05.2014329 б17GOST3410_Proj.dpr
  • #
    01.05.2014876 б17GOST3410_Proj.res