Skip to content

Commit 119e544

Browse files
committed
Add SHA1
1 parent eadb97b commit 119e544

File tree

6 files changed

+102
-17
lines changed

6 files changed

+102
-17
lines changed

RSAOpenSSL.dcu

2.07 KB
Binary file not shown.

RSAOpenSSL.pas

Lines changed: 85 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
interface
1111

12-
uses Forms, Dialogs, Classes, Controls, StdCtrls, libeay32;
12+
uses SysUtils, Dialogs, Classes, Controls, StdCtrls, libeay32;
1313

1414
type
1515
TRSAData = packed record
@@ -35,6 +35,7 @@ TRSAOpenSSL = class
3535
function LoadPrivateKeyFromString(KeyFile: string): pEVP_PKEY;
3636

3737

38+
3839
public
3940
{ Public declarations }
4041
constructor Create(aPathToPublickKey, aPathToPrivateKey: string); overload;
@@ -43,6 +44,9 @@ TRSAOpenSSL = class
4344
procedure PrivateDecrypt(var aRSAData: TRSAData);
4445
procedure PrivateEncrypt(var aRSAData: TRSAData);
4546
procedure PublicDecrypt(var aRSAData: TRSAData);
47+
function SHA1_base64(AData: string): string;
48+
function SHA1_Sign_PK(AData: string): string;
49+
function SHA1(AData: string): string;
4650
protected
4751

4852
end;
@@ -164,19 +168,19 @@ function TRSAOpenSSL.LoadPrivateKeyFromString(KeyFile: string) :pEVP_PKEY;
164168
begin
165169
keystring :=
166170
'-----BEGIN RSA PRIVATE KEY-----' + #10 +
167-
'MIICXgIBAAKBgQCfydli2u2kJfb2WetkOekjzQIg7bIuU7AzAlBUPuA72UYXWnQ/' + #10 +
168-
'XcdSzEEMWSBLP7FO1vyVXR4Eb0/WqthF0ZViOK5bCN9CnR/1GMMiSqmIdByv/gUe' + #10 +
169-
'Z/UjGrKmxeQOoa2Yt0MJC64cNXgnKmYC7ui3A12LlvNdBBEF3WpcDbv+PQIDAQAB' + #10 +
170-
'AoGBAJnxukKHchSHjxthHmv9byRSyw42c0g20LcUL5g6y4Zdmi29s+moy/R1XOYs' + #10 +
171-
'p/RXdNfkQI0WnWjgZScIij0Z4rSs39uh7eQ5qxK+NH3QIWeR2ZNIno9jAXPn2bkQ' + #10 +
172-
'odS8FPzbZM9wHhpRvKW4FNPXqTc3ZkTcxi4zOwOdlECf9G+BAkEAzsJHgW1Isyac' + #10 +
173-
'I61MDu2qjMUwOdOBYS8GwEBfi/vbn/duwZIBXG/BZ7Pn+cBwImfksEXwx0MTkgF3' + #10 +
174-
'gyaChUSu+QJBAMXX3d94TwcF7lG9zkzc+AR/Onl4Z5UAb1GmUV57oYIFVgW1RIOk' + #10 +
175-
'vqynXWrTjTOg9C9j+VEpBG67LcnkwU16JmUCQH7pukKz9kAhnw43PcycDmhCUgvs' + #10 +
176-
'zCn/V8GCwiOHAZT7qLyhBrzazHj/cZFYknxMEZAyHk3x2n1w8Q9MACoVsuECQQDF' + #10 +
177-
'U7cyara31IyM7vlS5JpjMdrKyPLXRKXDFFXYHQtLubLA4rlBbBHZ9txP7kzJj+G9' + #10 +
178-
'WsOS1YxcPUlAM28xrYGZAkEArVKJHX4dF8UUtfvyv78muXJZNXTwmaaFy02xjtR5' + #10 +
179-
'uXWT1QjVN2a6jv6AW7ukXiSoE/spgfvdoriMk2JSs88nUw==' + #10 +
171+
'MIICXgIBAAKBgQCfydli2u2kJfb2WetkOekjzQIg7bIuU7AzAlBUPuA72UYXWnQ/' + #10 +
172+
'XcdSzEEMWSBLP7FO1vyVXR4Eb0/WqthF0ZViOK5bCN9CnR/1GMMiSqmIdByv/gUe' + #10 +
173+
'Z/UjGrKmxeQOoa2Yt0MJC64cNXgnKmYC7ui3A12LlvNdBBEF3WpcDbv+PQIDAQAB' + #10 +
174+
'AoGBAJnxukKHchSHjxthHmv9byRSyw42c0g20LcUL5g6y4Zdmi29s+moy/R1XOYs' + #10 +
175+
'p/RXdNfkQI0WnWjgZScIij0Z4rSs39uh7eQ5qxK+NH3QIWeR2ZNIno9jAXPn2bkQ' + #10 +
176+
'odS8FPzbZM9wHhpRvKW4FNPXqTc3ZkTcxi4zOwOdlECf9G+BAkEAzsJHgW1Isyac' + #10 +
177+
'I61MDu2qjMUwOdOBYS8GwEBfi/vbn/duwZIBXG/BZ7Pn+cBwImfksEXwx0MTkgF3' + #10 +
178+
'gyaChUSu+QJBAMXX3d94TwcF7lG9zkzc+AR/Onl4Z5UAb1GmUV57oYIFVgW1RIOk' + #10 +
179+
'vqynXWrTjTOg9C9j+VEpBG67LcnkwU16JmUCQH7pukKz9kAhnw43PcycDmhCUgvs' + #10 +
180+
'zCn/V8GCwiOHAZT7qLyhBrzazHj/cZFYknxMEZAyHk3x2n1w8Q9MACoVsuECQQDF' + #10 +
181+
'U7cyara31IyM7vlS5JpjMdrKyPLXRKXDFFXYHQtLubLA4rlBbBHZ9txP7kzJj+G9' + #10 +
182+
'WsOS1YxcPUlAM28xrYGZAkEArVKJHX4dF8UUtfvyv78muXJZNXTwmaaFy02xjtR5' + #10 +
183+
'uXWT1QjVN2a6jv6AW7ukXiSoE/spgfvdoriMk2JSs88nUw==' + #10 +
180184
'-----END RSA PRIVATE KEY-----' ;
181185
k := nil;
182186

@@ -454,6 +458,72 @@ procedure TRSAOpenSSL.PublicDecrypt(var aRSAData: TRSAData);
454458
RSA_free(rsa);
455459
end;
456460

461+
462+
function TRSAOpenSSL.SHA1_base64(AData: string): string;
463+
var
464+
b64Length: integer;
465+
mdLength: cardinal;
466+
mdValue: array [0..EVP_MAX_MD_SIZE] of byte;
467+
mdctx: EVP_MD_CTX;
468+
memout, b64: pBIO;
469+
inbuf, outbuf: array [0..1023] of char;
470+
begin
471+
StrPCopy(inbuf, AData);
472+
EVP_DigestInit(@mdctx, EVP_sha1());
473+
EVP_DigestUpdate(@mdctx, @inbuf, StrLen(inbuf));
474+
EVP_DigestFinal(@mdctx, @mdValue, mdLength);
475+
476+
b64 := BIO_new(BIO_f_base64);
477+
memout := BIO_new(BIO_s_mem);
478+
b64 := BIO_push(b64, memout);
479+
BIO_write(b64, @mdValue, mdLength);
480+
BIO_flush(b64);
481+
b64Length := BIO_read(memout, @outbuf, 1024);
482+
outbuf[b64Length-1] := #0;
483+
result := StrPas(@outbuf);
484+
end;
485+
486+
function TRSAOpenSSL.SHA1(AData: string): string;
487+
var
488+
Len: cardinal;
489+
mdctx: EVP_MD_CTX;
490+
inbuf, outbuf: array [0..1023] of char;
491+
key: pEVP_PKEY;
492+
begin
493+
StrPCopy(inbuf, AData);
494+
LoadSSL;
495+
496+
EVP_DigestInit(@mdctx, EVP_sha1());
497+
EVP_DigestUpdate(@mdctx, @inbuf, StrLen(inbuf));
498+
EVP_DigestFinal(@mdctx, @outbuf, Len);
499+
500+
FreeSSL;
501+
BinToHex(outbuf, inbuf,Len);
502+
inbuf[2*Len]:=#0;
503+
result := StrPas(inbuf);
504+
end;
505+
506+
function TRSAOpenSSL.SHA1_Sign_PK(AData: string): string;
507+
var
508+
Len: cardinal;
509+
mdctx: EVP_MD_CTX;
510+
inbuf, outbuf: array [0..1023] of char;
511+
key: pEVP_PKEY;
512+
begin
513+
StrPCopy(inbuf, AData);
514+
LoadSSL;
515+
516+
key := LoadPrivateKeyFromString('');
517+
EVP_SignInit(@mdctx, EVP_sha1());
518+
EVP_SignUpdate(@mdctx, @inbuf, StrLen(inbuf));
519+
EVP_SignFinal(@mdctx, @outbuf, Len, key);
520+
521+
FreeSSL;
522+
BinToHex(outbuf, inbuf,Len);
523+
inbuf[2*Len]:=#0;
524+
result := StrPas(inbuf);
525+
end;
526+
457527
procedure TRSAOpenSSL.LoadSSL;
458528
begin
459529
OpenSSL_add_all_algorithms;
@@ -469,4 +539,5 @@ procedure TRSAOpenSSL.FreeSSL;
469539
ERR_free_strings;
470540
end;
471541

542+
472543
end.

RSAUtil.exe

1 KB
Binary file not shown.

Unit1.dcu

382 Bytes
Binary file not shown.

Unit1.dfm

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
object Form1: TForm1
2-
Left = 131
3-
Top = 186
2+
Left = 196
3+
Top = 192
44
Width = 628
55
Height = 468
66
Caption = 'RSA Sample'
@@ -60,6 +60,15 @@ object Form1: TForm1
6060
TabOrder = 3
6161
OnClick = Button4Click
6262
end
63+
object Button5: TButton
64+
Left = 8
65+
Top = 192
66+
Width = 121
67+
Height = 25
68+
Caption = 'SHA1'
69+
TabOrder = 4
70+
OnClick = Button5Click
71+
end
6372
end
6473
object Panel2: TPanel
6574
Left = 0

Unit1.pas

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ TForm1 = class(TForm)
2222
Button2: TButton;
2323
Button3: TButton;
2424
Button4: TButton;
25+
Button5: TButton;
2526
procedure FormCreate(Sender: TObject);
2627
procedure Button1Click(Sender: TObject);
2728
procedure Button2Click(Sender: TObject);
2829
procedure Button3Click(Sender: TObject);
2930
procedure Button4Click(Sender: TObject);
31+
procedure Button5Click(Sender: TObject);
3032
private
3133
{ Private declarations }
3234
fRSAOpenSSL : TRSAOpenSSL;
@@ -97,8 +99,11 @@ procedure TForm1.Button4Click(Sender: TObject);
9799
if aRSAData.ErrorResult = 0 then
98100
memo3.Lines.Text := aRSAData.DecryptedData;
99101
memo4.Lines.Add(aRSAData.ErrorMessage);
102+
end;
100103

104+
procedure TForm1.Button5Click(Sender: TObject);
105+
begin
106+
Memo3.Text := fRSAOpenSSL.SHA1(Memo1.Text);
101107
end;
102108

103109
end.
104-

0 commit comments

Comments
 (0)