elmimeviewer_optionspgpmime.pas
来自「著名的SecureBlackBox控件完整源码」· PAS 代码 · 共 232 行
PAS
232 行
unit ElMimeViewer_OptionsPGPMime;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ElMimeViewer_DataCommon, comctrls, ExtCtrls, StdCtrls, Buttons, ImgList,
SBPGPKeys, SBPGPConstants, SBPGPUtils;
type
TFrame = TElMimePlugFrameOptions;
TfraOptionsPGPMime = class(TFrame)
pRight: TPanel;
pClient: TPanel;
pKeyInfo: TPanel;
tvKeys: TTreeView;
HeaderKeys: THeaderControl;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
btnAddKey: TBitBtn;
btnRemoveKey: TBitBtn;
btnSaveKey: TBitBtn;
Bevel: TBevel;
btnClear: TBitBtn;
ImageList: TImageList;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
procedure tvKeysChange(Sender: TObject; Node: TTreeNode);
procedure btnAddKeyClick(Sender: TObject);
procedure btnRemoveKeyClick(Sender: TObject);
procedure btnSaveKeyClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
private
procedure RepaintKeyring;
public
constructor Create(AOwner: TComponent; RootNode: TTreeNode; Nodes: TTreeNodesA); override;
destructor Destroy; override;
function GetCaption: string; override;
end;
var
Keyring : TElPGPKeyring;
implementation
{$R *.DFM}
constructor TfraOptionsPGPMime.Create(AOwner: TComponent; RootNode: TTreeNode;
Nodes: TTreeNodesA);
begin
inherited;
fNode := TTreeNodeInfoOptions.Create(Nodes, tiOptions);
fNode.ImageIndex := 58;
fNode.SelectedIndex := 58;
fNode.PlugFrame := Self;
Nodes.AddNode(fNode, RootNode, 'PGP/MIME', nil, naAddChild);
Keyring := TElPGPKeyring.Create(nil);
// loading default keyring
Keyring.Load('EldoS MIMEBlackbox Demo.asc', '');
RepaintKeyring;
end;
destructor TfraOptionsPGPMime.Destroy;
begin
if fNode <> nil then
begin
fNode.PlugFrame := nil;
end;
Keyring.Free;
inherited;
end;
function TfraOptionsPGPMime.GetCaption: string;
begin
Result := 'PGP/MIME Options';
end;
procedure TfraOptionsPGPMime.RepaintKeyring;
var
I, J, K: integer;
S: string;
Node, SubNode, SigNode: TTreeNode;
begin
tvKeys.Items.BeginUpdate;
try
tvKeys.Items.Clear;
for I := 0 to Keyring.PublicCount - 1 do
begin
if Keyring.PublicKeys[I].UserIDCount > 0 then
S := Keyring.PublicKeys[I].UserIDs[0].Name
else
S := '<unnamed key>';
Node := tvKeys.Items.AddChild(nil, S);
Node.Data := Keyring.PublicKeys[I];
if Keyring.PublicKeys[I].PublicKeyAlgorithm in [SB_PGP_ALGORITHM_PK_DSA,
SB_PGP_ALGORITHM_PK_ELGAMAL] then
Node.ImageIndex := 0
else
Node.ImageIndex := 1;
Node.SelectedIndex := Node.ImageIndex;
for J := 0 to Keyring.PublicKeys[I].UserIDCount - 1 do
begin
SubNode := tvKeys.Items.AddChild(Node, Keyring.PublicKeys[I].UserIDs[J].Name);
SubNode.Data := Keyring.PublicKeys[I].UserIDs[J];
SubNode.ImageIndex := 2;
SubNode.SelectedIndex := 2;
for K := 0 to Keyring.PublicKeys[I].UserIDs[J].SignatureCount - 1 do
begin
SigNode := tvKeys.Items.AddChild(SubNode, 'signature');
SigNode.Data := Keyring.PublicKeys[I].UserIDs[J].Signatures[K];
SigNode.ImageIndex := 3;
SigNode.SelectedIndex := 3;
end;
end;
for J := 0 to Keyring.PublicKeys[I].SubkeyCount - 1 do
begin
SubNode := tvKeys.Items.AddChild(Node, 'Subkey');
SubNode.Data := Keyring.PublicKeys[I].Subkeys[J];
SubNode.ImageIndex := Node.ImageIndex;
SubNode.SelectedIndex := Node.ImageIndex;
for K := 0 to Keyring.PublicKeys[I].Subkeys[J].SignatureCount - 1 do
begin
SigNode := tvKeys.Items.AddChild(SubNode, 'signature');
SigNode.Data := Keyring.PublicKeys[I].Subkeys[J].Signatures[K];
SigNode.ImageIndex := 3;
SigNode.SelectedIndex := 3;
end;
end;
end;
finally
tvKeys.Items.EndUpdate;
end;
end;
procedure TfraOptionsPGPMime.tvKeysChange(Sender: TObject;
Node: TTreeNode);
begin
if Assigned(Node) and Assigned(Node.Data) then
begin
if (TObject(Node.Data) is TElPGPPublicKey) or
(TObject(Node.Data) is TElPGPPublicSubkey) then
begin
Label1.Caption := 'Key ID: ' + KeyID2Str(TElPGPCustomPublicKey(Node.Data).KeyID, false);
Label2.Caption := 'Key FP: ' + KeyFP2Str(TElPGPCustomPublicKey(Node.Data).KeyFP);
Label3.Caption := 'Algorithm: ' + PKAlg2Str(TElPGPCustomPublicKey(Node.Data).PublicKeyAlgorithm) +
' (' + IntToStr(TElPGPCustomPublicKey(Node.Data).BitsInKey) + ' bits)';
end
else if TObject(Node.Data) is TElPGPSignature then
begin
Label1.Caption := 'Signing Key ID: ' + KeyID2Str(TElPGPSignature(Node.Data).SignerKeyID, false);
Label2.Caption := '';
Label3.Caption := '';
end
else
begin
Label1.Caption := '';
Label2.Caption := '';
Label3.Caption := '';
end;
end
else
begin
Label1.Caption := '';
Label2.Caption := '';
Label3.Caption := '';
end;
end;
procedure TfraOptionsPGPMime.btnAddKeyClick(Sender: TObject);
var
TempKeyring : TElPGPKeyring;
begin
if OpenDialog.Execute then
begin
TempKeyring := TElPGPKeyring.Create(nil);
try
TempKeyring.Load(OpenDialog.Filename, '', true);
TempKeyring.ExportTo(Keyring);
finally
TempKeyring.Free;
end;
RepaintKeyring;
end;
end;
procedure TfraOptionsPGPMime.btnRemoveKeyClick(Sender: TObject);
begin
if MessageDlg('Are you sure you wish to remove this key from keyring?', mtConfirmation,
[mbYes, mbNo], 0) <> mrYes then Exit;
if Assigned(tvKeys.Selected) and Assigned(tvKeys.Selected.Data) and
(TObject(tvKeys.Selected.Data) is TElPGPPublicKey) then
begin
if Assigned(TElPGPPublicKey(tvKeys.Selected.Data).SecretKey) then
Keyring.RemoveSecretkey(TElPGPPublicKey(tvKeys.Selected.Data).SecretKey)
else
Keyring.RemovePublickey(TElPGPPublicKey(tvKeys.Selected.Data));
RepaintKeyring;
end;
end;
procedure TfraOptionsPGPMime.btnSaveKeyClick(Sender: TObject);
begin
if Assigned(tvKeys.Selected) and Assigned(tvKeys.Selected.Data) and
(TObject(tvKeys.Selected.Data) is TElPGPPublicKey) then
begin
if not SaveDialog.Execute then Exit;
if Assigned(TElPGPPublicKey(tvKeys.Selected.Data).SecretKey) then
TElPGPPublicKey(tvKeys.Selected.Data).SecretKey.SaveToFile(SaveDialog.Filename)
else
TElPGPPublicKey(tvKeys.Selected.Data).SaveToFile(SaveDialog.Filename);
MessageDlg('Key successfully saved', mtInformation, [mbOk], 0);
end;
end;
procedure TfraOptionsPGPMime.btnClearClick(Sender: TObject);
begin
Keyring.Clear;
RepaintKeyring;
end;
initialization
TfraOptionsPGPMime.RegisterClass(TfraOptionsPGPMime);
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?