signform.pas

来自「著名的SecureBlackBox控件完整源码」· PAS 代码 · 共 308 行

PAS
308
字号
unit SignForm;

interface

uses
  {$ifdef DELPHI_NET}
  System.ComponentModel,
  {$endif}
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls,
  ReferencesForm, SelWinCertForm, XAdESForm,
  SBXMLDefs, SBXMLSec, SBUtils;

type
  TfrmSign = class(TForm)
    gbGeneralEnc: TGroupBox;
    lbSignatureType: TLabel;
    cmbSignatureType: TComboBox;
    lbSignatureMethod: TLabel;
    rgSignatureMethodType: TRadioGroup;
    cmbSignatureMethod: TComboBox;
    lbHMACMethod: TLabel;
    cmbHMACMethod: TComboBox;
    gbKeyInfo: TGroupBox;
    lbKeyName: TLabel;
    sbKeyFile: TSpeedButton;
    lbPassphrase: TLabel;
    lbKeyFile: TLabel;
    edKeyName: TEdit;
    edKeyFile: TEdit;
    edPassphrase: TEdit;
    btnOK: TButton;
    btnCancel: TButton;
    lbCanonMethod: TLabel;
    cmbCanonMethod: TComboBox;
    dlgOpen: TOpenDialog;
    btnReferences: TButton;
    lbWinCertSerail: TLabel;
    sbSelectWinCert: TSpeedButton;
    edCertSerial: TEdit;
    cbIncludeKey: TCheckBox;
    btnXAdES: TButton;
    procedure sbSelectWinCertClick(Sender: TObject);
    procedure btnReferencesClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure rgSignatureMethodTypeClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure sbKeyFileClick(Sender: TObject);
    procedure btnXAdESClick(Sender: TObject);
  private
    function GetKeyFile: string;
    function GetKeyName: string;
    function GetPassphrase: string;
    procedure SetKeyFile(const Value: string);
    procedure SetKeyName(const Value: string);
    procedure SetPassphrase(const Value: string);
    function GetCanonicalizationMethod: TElXMLCanonicalizationMethod;
    function GetHMACMethod: TElXMLMACMethod;
    function GetSigMethod: TElXMLSignatureMethod;
    function GetSignatureMethodType: TElXMLSigMethodType;
    function GetSignatureType: TElXMLSignatureType;
    procedure SetCanonicalizationMethod(
      const Value: TElXMLCanonicalizationMethod);
    procedure SetHMACMethod(const Value: TElXMLMACMethod);
    procedure SetSigMethod(const Value: TElXMLSignatureMethod);
    procedure SetSignatureMethodType(const Value: TElXMLSigMethodType);
    procedure SetSignatureType(const Value: TElXMLSignatureType);
    function GetIncludeKey: Boolean;
  public
    procedure UpdateOpt;

    property CanonicalizationMethod: TElXMLCanonicalizationMethod read GetCanonicalizationMethod write SetCanonicalizationMethod;

    property SignatureType: TElXMLSignatureType read GetSignatureType write SetSignatureType;
    property SignatureMethodType: TElXMLSigMethodType read GetSignatureMethodType write SetSignatureMethodType;
    property HMACMethod: TElXMLMACMethod read GetHMACMethod write SetHMACMethod;
    property SigMethod: TElXMLSignatureMethod read GetSigMethod write SetSigMethod;

    property IncludeKey: Boolean read GetIncludeKey;
    property KeyName: string read GetKeyName write SetKeyName;
    property KeyFile: string read GetKeyFile write SetKeyFile;
    property Passphrase: string read GetPassphrase write SetPassphrase;
  end;

var
  frmSign: TfrmSign;

implementation

{$R *.dfm}

{ TfrmSign }

procedure TfrmSign.btnReferencesClick(Sender: TObject);
begin
  frmReferences.ShowModal;
end;

procedure TfrmSign.FormCreate(Sender: TObject);
begin
  CanonicalizationMethod := xcmCanon;
  SignatureType := xstEnveloped;
  SignatureMethodType := xmtSig;
  HMACMethod := xmmHMAC_SHA1;
  SigMethod := xsmRSA_SHA1;
end;

procedure TfrmSign.FormShow(Sender: TObject);
begin
  UpdateOpt;
end;

function TfrmSign.GetCanonicalizationMethod: TElXMLCanonicalizationMethod;
begin
  case cmbCanonMethod.ItemIndex of
    0: Result := xcmCanon;
    1: Result := xcmCanonComment;
    2: Result := xcmMinCanon;
  else
    Result := xcmCanon;
  end;
end;

function TfrmSign.GetHMACMethod: TElXMLMACMethod;
begin
  case cmbHMACMethod.ItemIndex of
    0: Result := xmmHMAC_MD5;
    1: Result := xmmHMAC_SHA1;
    2: Result := xmmHMAC_SHA224;
    3: Result := xmmHMAC_SHA256;
    4: Result := xmmHMAC_SHA384;
    5: Result := xmmHMAC_SHA512;
    6: Result := xmmHMAC_RIPEMD160;
  else
    Result := xmmHMAC_SHA1;
  end;
end;

function TfrmSign.GetKeyFile: string;
begin
  Result := edKeyFile.Text;
end;

function TfrmSign.GetKeyName: string;
begin
  Result := edKeyName.Text;
end;

function TfrmSign.GetPassphrase: string;
begin
  Result := edPassphrase.Text;
end;

function TfrmSign.GetSigMethod: TElXMLSignatureMethod;
begin
  case cmbSignatureMethod.ItemIndex of
    0: Result := xsmDSS;
    1: Result := xsmRSA_SHA1;
    2: Result := xsmRSA_MD5;
    3: Result := xsmRSA_SHA256;
    4: Result := xsmRSA_SHA384;
    5: Result := xsmRSA_SHA512;
    6: Result := xsmRSA_RIPEMD160;
  else
    Result := xsmRSA_SHA1;
  end;
end;

function TfrmSign.GetSignatureMethodType: TElXMLSigMethodType;
begin
  if rgSignatureMethodType.ItemIndex = 0 then
    Result := xmtMAC
  else
    Result := xmtSig;
end;

function TfrmSign.GetSignatureType: TElXMLSignatureType;
begin
  case cmbSignatureType.ItemIndex of
    1: Result := xstEnveloping;
    2: Result := xstDetached;
  else
    Result := xstEnveloped
  end;
end;

procedure TfrmSign.rgSignatureMethodTypeClick(Sender: TObject);
begin
  UpdateOpt;
end;

procedure TfrmSign.sbKeyFileClick(Sender: TObject);
begin
  dlgOpen.FileName := edKeyFile.Text;
  if dlgOpen.Execute then
    edKeyFile.Text := dlgOpen.FileName;
end;

procedure TfrmSign.SetCanonicalizationMethod(
  const Value: TElXMLCanonicalizationMethod);
begin
  case Value of
    xcmCanon: cmbCanonMethod.ItemIndex := 0;
    xcmCanonComment: cmbCanonMethod.ItemIndex := 1;
    xcmMinCanon: cmbCanonMethod.ItemIndex := 2;
  else
    cmbCanonMethod.ItemIndex := 0;
  end;
end;

procedure TfrmSign.SetHMACMethod(const Value: TElXMLMACMethod);
begin
  case Value of
    xmmHMAC_MD5: cmbHMACMethod.ItemIndex := 0;
    xmmHMAC_SHA1: cmbHMACMethod.ItemIndex := 1;
    xmmHMAC_SHA224: cmbHMACMethod.ItemIndex := 2;
    xmmHMAC_SHA256: cmbHMACMethod.ItemIndex := 3;
    xmmHMAC_SHA384: cmbHMACMethod.ItemIndex := 4;
    xmmHMAC_SHA512: cmbHMACMethod.ItemIndex := 5;
    xmmHMAC_RIPEMD160: cmbHMACMethod.ItemIndex := 6;
  end;
end;

procedure TfrmSign.SetKeyFile(const Value: string);
begin
  edKeyFile.Text := Value;
end;

procedure TfrmSign.SetKeyName(const Value: string);
begin
  edKeyName.Text := Value;
end;

procedure TfrmSign.SetPassphrase(const Value: string);
begin
  edPassphrase.Text := Value;
end;

procedure TfrmSign.SetSigMethod(const Value: TElXMLSignatureMethod);
begin
  case Value of
    xsmDSS: cmbSignatureMethod.ItemIndex := 0;
    xsmRSA_SHA1: cmbSignatureMethod.ItemIndex := 1;
    xsmRSA_MD5: cmbSignatureMethod.ItemIndex := 2;
    xsmRSA_SHA256: cmbSignatureMethod.ItemIndex := 3;
    xsmRSA_SHA384: cmbSignatureMethod.ItemIndex := 4;
    xsmRSA_SHA512: cmbSignatureMethod.ItemIndex := 5;
    xsmRSA_RIPEMD160: cmbSignatureMethod.ItemIndex := 6;
  end;
end;

procedure TfrmSign.SetSignatureMethodType(const Value: TElXMLSigMethodType);
begin
  if Value = xmtMAC then
    rgSignatureMethodType.ItemIndex := 0
  else
    rgSignatureMethodType.ItemIndex := 1;
end;

procedure TfrmSign.SetSignatureType(const Value: TElXMLSignatureType);
begin
  case Value of
    xstDetached: cmbSignatureType.ItemIndex := 2;
    xstEnveloping: cmbSignatureType.ItemIndex := 1;
    xstEnveloped: cmbSignatureType.ItemIndex := 0;
  end;
end;

procedure TfrmSign.sbSelectWinCertClick(Sender: TObject);
var
  s: string;
begin
  if (frmSelWinCert.ShowModal = mrOK) and
     Assigned(frmSelWinCert.Certificate) then
  begin
    {$ifndef DELPHI_NET}
    s := frmSelWinCert.Certificate.SerialNumber;
    edCertSerial.Text := BinaryToString(@s[1], Length(s));
    {$else}
    edCertSerial.Text := BinaryToString(frmSelWinCert.Certificate.SerialNumber);
    {$endif}
  end
  else
    edCertSerial.Text := '';
end;

procedure TfrmSign.UpdateOpt;
begin
  cmbHMACMethod.Enabled := (rgSignatureMethodType.ItemIndex = 0);
  lbHMACMethod.Enabled := cmbHMACMethod.Enabled;
  cmbSignatureMethod.Enabled := (rgSignatureMethodType.ItemIndex = 1);
  lbSignatureMethod.Enabled := cmbSignatureMethod.Enabled;
  edPassphrase.Enabled := cmbSignatureMethod.Enabled;
  lbPassphrase.Enabled := edPassphrase.Enabled;
end;

function TfrmSign.GetIncludeKey: Boolean;
begin
  Result := cbIncludeKey.Checked;
end;

procedure TfrmSign.btnXAdESClick(Sender: TObject);
begin
  frmXAdES.ShowModal;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?