📄 mainform.pas
字号:
SetLength(OutBuf, Sz);
Cursor := crHourGlass;
I := ElMessageEncryptor1.Encrypt(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
if I = 0 then
begin
SetLength(OutBuf, Sz);
AssignFile(F, Edit2.Text);
Rewrite(F, 1);
BlockWrite(F, OutBuf[0], Sz);
CloseFile(F);
Label8.Caption := 'The operation was completed successfully';
end
else
Label8.Caption := 'Error #' + IntToHex(I, 4) + ' occured while encrypting';
Cursor := crDefault;
PageControl1.ActivePageIndex := 5;
end;
end;
end;
procedure TForm1.Sign(Step : integer);
var
InBuf, OutBuf : array of byte;
F : file;
Sz : integer;
I : integer;
begin
Button3.Enabled := true;
Button4.Enabled := true;
case Step of
STEP_SELECT_SIGNATURE_TYPE:
begin
PageControl1.ActivePageIndex := 8;
end;
STEP_SELECT_CERTIFICATES :
begin
while ElMemoryCertStorage1.Count > 0 do
ElMemoryCertStorage1.Remove(0);
ListBox1.Clear;
LabelSelectCertificates.Caption := SSelectCertificatesForSigning;
PageControl1.ActivePageIndex := 1;
end;
STEP_SELECT_ALGORITHM :
begin
PageControl1.ActivePageIndex := 6;
RadioButton11.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
RadioButton12.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
RadioButton13.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
RadioButton14.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
RadioButton15.Enabled := ElMessageSigner1.SignatureType = mstPublicKey;
RadioButton18.Enabled := ElMessageSigner1.SignatureType = mstMAC;
if ElMessageSigner1.SignatureType = mstMAC then
RadioButton18.Checked := true
else
RadioButton11.Checked := true;
end;
STEP_SELECT_FILES :
begin
Edit1.Text := '';
Edit2.Text := '';
LabelSelectFiles.Caption := SSelectFilesForSigning;
PageControl1.ActivePageIndex := 3;
end;
STEP_CHECK_DATA :
begin
Memo1.Lines.Clear;
LabelInfo.Caption := SInfoSigning;
ButtonDoIt.Caption := 'Sign';
if ElMessageSigner1.SignatureType = mstPublicKey then
Memo1.Lines.Add('Signature type: PUBLIC-KEY')
else
Memo1.Lines.Add('Signature type: MAC');
ElMessageSigner1.RecipientCerts := ElMemoryCertStorage1;
Memo1.Lines.Add('File to sign: ' + Edit1.Text + #13#10);
Memo1.Lines.Add('File to write signed data: ' + Edit2.Text);
Memo1.Lines.Add('');
Memo1.Lines.Add('Certificates: ');
Memo1.Lines.Text := Memo1.Lines.Text + WriteCertificateInfo(ElMemoryCertStorage1);
Memo1.Lines.Add('Algorithm: ' + GetAlgorithmName(ElMessageSigner1.HashAlgorithm));
PageControl1.ActivePageIndex := 4;
Button4.Enabled := false;
end;
STEP_PROCESS :
begin
AssignFile(F, Edit1.Text);
Reset(F, 1);
SetLength(InBuf, FileSize(F));
BlockRead(F, InBuf[0], Length(InBuf));
CloseFile(F);
Sz := 0;
Button3.Enabled := false;
Button4.Enabled := false;
Button5.Caption := 'Finish';
Button5.Default := true;
ElMessageSigner1.Sign(@InBuf[0], Length(InBuf), nil, Sz);
SetLength(OutBuf, Sz);
Cursor := crHourGlass;
I := ElMessageSigner1.Sign(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
if I = 0 then
begin
SetLength(OutBuf, Sz);
AssignFile(F, Edit2.Text);
Rewrite(F, 1);
BlockWrite(F, OutBuf[0], Sz);
CloseFile(F);
Label8.Caption := 'The operation was completed successfully';
end
else
Label8.Caption := 'Error #' + IntToHex(I, 4) + ' occured while signing';
Cursor := crDefault;
PageControl1.ActivePageIndex := 5;
end;
end;
end;
procedure TForm1.Decrypt(Step : integer);
var
InBuf, OutBuf : array of byte;
F : file;
Sz : integer;
I : integer;
begin
Button3.Enabled := true;
Button4.Enabled := true;
case Step of
STEP_SELECT_CERTIFICATES :
begin
while ElMemoryCertStorage1.Count > 0 do
ElMemoryCertStorage1.Remove(0);
ListBox1.Clear;
LabelSelectCertificates.Caption := SSelectCertificatesForDecryption;
PageControl1.ActivePageIndex := 1;
end;
STEP_SELECT_FILES :
begin
Edit1.Text := '';
Edit2.Text := '';
LabelSelectFiles.Caption := SSelectFilesForDecryption;
PageControl1.ActivePageIndex := 3;
end;
STEP_CHECK_DATA :
begin
Memo1.Lines.Clear;
LabelInfo.Caption := SInfoDecryption;
ButtonDoIt.Caption := 'Decrypt';
Memo1.Lines.Add('File to decrypt: ' + Edit1.Text + #13#10);
Memo1.Lines.Add('File to write decrypted data: ' + Edit2.Text);
Memo1.Lines.Add('');
Memo1.Lines.Add('Certificates: ');
Memo1.Lines.Text := Memo1.Lines.Text + WriteCertificateInfo(ElMemoryCertStorage1);
PageControl1.ActivePageIndex := 4;
Button4.Enabled := false;
end;
STEP_PROCESS :
begin
AssignFile(F, Edit1.Text);
Reset(F, 1);
SetLength(InBuf, FileSize(F));
BlockRead(F, InBuf[0], Length(InBuf));
CloseFile(F);
Sz := 0;
Button3.Enabled := false;
Button4.Enabled := false;
Button5.Default := true;
ElMessageDecryptor1.Decrypt(@InBuf[0], Length(InBuf), nil, Sz);
SetLength(OutBuf, Sz);
Cursor := crHourGlass;
I := ElMessageDecryptor1.Decrypt(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
Button5.Caption := 'Finish';
Label20.Caption := 'Decryption results';
Memo4.Lines.Clear;
if I = 0 then
begin
Memo4.Lines.Add('Successfully decrypted');
Memo4.Lines.Add('Algorithm: ' + GetAlgorithmName(ElMessageDecryptor1.Algorithm));
SetLength(OutBuf, Sz);
AssignFile(F, Edit2.Text);
Rewrite(F, 1);
BlockWrite(F, OutBuf[0], Sz);
CloseFile(F);
end
else
Memo4.Lines.Add('Decryption failed with error #' + IntToHex(I, 4));
Cursor := crDefault;
PageControl1.ActivePageIndex := 7;
end;
end;
end;
procedure TForm1.Verify(Step : integer);
var
InBuf, OutBuf : array of byte;
F : file;
Sz : integer;
I : integer;
begin
Button3.Enabled := true;
Button4.Enabled := true;
case Step of
STEP_SELECT_CERTIFICATES :
begin
while ElMemoryCertStorage1.Count > 0 do
ElMemoryCertStorage1.Remove(0);
ListBox1.Clear;
LabelSelectCertificates.Caption := SSelectCertificatesForVerifying;
PageControl1.ActivePageIndex := 1;
end;
STEP_SELECT_FILES :
begin
Edit1.Text := '';
Edit2.Text := '';
LabelSelectFiles.Caption := SSelectFilesForVerifying;
PageControl1.ActivePageIndex := 3;
end;
STEP_CHECK_DATA :
begin
Memo1.Lines.Clear;
LabelInfo.Caption := SInfoVerifying;
ButtonDoIt.Caption := 'Verify';
Memo1.Lines.Add('File to verify: ' + Edit1.Text + #13#10);
Memo1.Lines.Add('File to write verified data: ' + Edit2.Text);
Memo1.Lines.Add('');
Memo1.Lines.Add('Certificates: ');
Memo1.Lines.Text := Memo1.Lines.Text + WriteCertificateInfo(ElMemoryCertStorage1);
PageControl1.ActivePageIndex := 4;
Button4.Enabled := false;
end;
STEP_PROCESS :
begin
AssignFile(F, Edit1.Text);
Reset(F, 1);
SetLength(InBuf, FileSize(F));
BlockRead(F, InBuf[0], Length(InBuf));
CloseFile(F);
Sz := 0;
Button3.Enabled := false;
Button4.Enabled := false;
Button5.Caption := 'Finish';
Button5.Default := true;
ElMessageVerifier1.Verify(@InBuf[0], Length(InBuf), nil, Sz);
SetLength(OutBuf, Sz);
Cursor := crHourGlass;
I := ElMessageVerifier1.Verify(@InBuf[0], Length(InBuf), @OutBuf[0], Sz);
Label20.Caption := 'Verifying results';
Memo4.Lines.Clear;
if I = 0 then
begin
Memo4.Lines.Add('Successfully verified!');
Memo4.Lines.Add('');
if ElMessageVerifier1.SignatureType = mstPublicKey then
begin
Memo4.Lines.Add('Signature type: PUBLIC KEY');
Memo4.Lines.Add('');
end
else
begin
Memo4.Lines.Add('Signature type: MAC');
Memo4.Lines.Add('');
Memo4.Lines.Add('MAC algorithm: ' + GetAlgorithmName(ElMessageVerifier1.MacAlgorithm));
end;
Memo4.Lines.Add('Hash Algorithm: ' + GetAlgorithmName(ElMessageVerifier1.HashAlgorithm));
Memo4.Lines.Add('');
Memo4.Lines.Add('Certificates contained in message:');
Memo4.Lines.Add(WriteCertificateInfo(ElMessageVerifier1.Certificates));
SetLength(OutBuf, Sz);
AssignFile(F, Edit2.Text);
Rewrite(F, 1);
BlockWrite(F, OutBuf[0], Sz);
CloseFile(F);
end
else
Memo4.Lines.Add('Verification failed with error #' + IntToHex(I, 4));
Cursor := crDefault;
PageControl1.ActivePageIndex := 7;
end;
end;
end;
procedure TForm1.RefreshCertificateListbox;
var
I : integer;
begin
ListBox1.Clear;
for I := 0 to ElMemoryCertStorage1.Count - 1 do
ListBox1.Items.Add(ElMemoryCertStorage1.Certificates[I].SubjectName.CommonName);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ListBox1.ItemIndex >= 0 then
begin
ElMemoryCertStorage1.Remove(ListBox1.ItemIndex);
RefreshCertificateListbox;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
OpenDialog1.Title := 'Select input file';
OpenDialog1.Filter := 'All files (*.*)|*.*';
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.Filename;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
SaveDialog1.Title := 'Select output file';
SaveDialog1.Filter := 'All files (*.*)|*.*';
if SaveDialog1.Execute then
Edit2.Text := SaveDialog1.Filename;
end;
function TForm1.WriteCertificateInfo(Storage : TElCustomCertStorage) : string;
var
I : integer;
Cert : TElX509Certificate;
Sz : word;
begin
for I := 0 to Storage.Count - 1 do
begin
Cert := Storage.Certificates[I];
Result := Result + 'Certificate #' + IntToStr(I + 1) + ':'#13#10;
Result := Result + 'Issuer: C=' + Cert.IssuerName.Country + ', L=' +
Cert.IssuerName.Locality + ', O=' + Cert.IssuerName.Organization + ', CN=' +
Cert.IssuerName.CommonName + #13#10;
Result := Result + 'Subject: C=' + Cert.SubjectName.Country + ', L=' +
Cert.SubjectName.Locality + ', O=' + Cert.SubjectName.Organization + ', CN=' +
Cert.SubjectName.CommonName + #13#10;
Sz := 0;
Cert.SaveKeyToBuffer(nil, Sz);
if Sz > 0 then
Result := Result + 'Private key available'#13#10#13#10
else
Result := Result + 'Private key is not available'#13#10#13#10;
end;
end;
function TForm1.GetAlgorithmName(AlgId : integer) : string;
begin
case AlgId of
SB_ALGORITHM_CNT_3DES : Result := 'Triple DES';
SB_ALGORITHM_CNT_RC4 : Result := 'RC4';
SB_ALGORITHM_CNT_RC2 : Result := 'RC2';
SB_ALGORITHM_CNT_AES128 : Result := 'AES128';
SB_ALGORITHM_CNT_AES256 : Result := 'AES256';
SB_ALGORITHM_DGST_MD5 : Result := 'MD5';
SB_ALGORITHM_DGST_SHA1 : Result := 'SHA1';
SB_ALGORITHM_DGST_SHA256 : Result := 'SHA256';
SB_ALGORITHM_DGST_SHA384 : Result := 'SHA384';
SB_ALGORITHM_DGST_SHA512 : Result := 'SHA512';
SB_ALGORITHM_MAC_HMACSHA1 : Result := 'HMAC-SHA1';
else
Result := 'Unknown';
end;
end;
procedure TForm1.ButtonDoItClick(Sender: TObject);
begin
if Operation = OPERATION_ENCRYPTION then
Encrypt(STEP_PROCESS)
else if Operation = OPERATION_SIGNING then
Sign(STEP_PROCESS)
else if Operation = OPERATION_DECRYPTION then
Decrypt(STEP_PROCESS)
else if Operation = OPERATION_VERIFYING then
Verify(STEP_PROCESS);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if PageControl1.ActivePageIndex = 1 then
begin
if Operation = OPERATION_SIGNING then
PageControl1.ActivePageIndex := 8
else
begin
PageControl1.ActivePageIndex := 0;
Button3.Enabled := false;
end;
end
else if PageControl1.ActivePageIndex = 8 then
begin
PageControl1.ActivePageIndex := 0;
Button3.Enabled := false;
end
else if (PageControl1.ActivePageIndex = 2) or (PageControl1.ActivePageIndex = 6) then
PageControl1.ActivePageIndex := 1
else if PageControl1.ActivePageIndex = 3 then
begin
if Operation = OPERATION_ENCRYPTION then
PageControl1.ActivePageIndex := 2
else if (Operation = OPERATION_DECRYPTION) or (Operation = OPERATION_VERIFYING) then
PageControl1.ActivePageIndex := 1
else if (Operation = OPERATION_SIGNING) then
PageControl1.ActivePageIndex := 6;
end
else if PageControl1.ActivePageIndex = 4 then
begin
PageControl1.ActivePageIndex := 3;
Button4.Enabled := true;
end
end;
initialization
SetLicenseKey('ADDCD14AD06709806817E0B3D7BFD0A2222D536FE156466C5D5FE65DB5DEAE76' +
'FFDEBC07E915A5751C12C01C783958872A38E4A5EDA140E7247E0F2E56442A3C' +
'F3E9347AD8FDE52083A0DFC86BC00ECB0FD0CF1B51159A2BCB84F6EA6349EF47' +
'5C15A59AFCC55F7C3AAD26C279628B5D91B1DC94BD2385354A70CCA3B76101D9' +
'F41C84A639FC3CCE4BA8F0CC4A66DCD150114A3F58C1AD46B7B94643741BC20A' +
'8DCA83AB921480951B423CAA19EF1863A47CA2C3422E7E5634BED98939A5AE43' +
'DE1E4BAD79E66D8A5C973B3455656C8C9B6FF024FADD6CDA02D0F506D98493C8' +
'BD1ED7B237DB75FA31F2C82654490CDDDEE24E19939137B9E1DB05508733B22F');
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -