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 + -
显示快捷键?