99
1010interface
1111
12- uses Forms , Dialogs, Classes, Controls, StdCtrls, libeay32;
12+ uses SysUtils , Dialogs, Classes, Controls, StdCtrls, libeay32;
1313
1414type
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;
164168begin
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);
455459end ;
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+
457527procedure TRSAOpenSSL.LoadSSL ;
458528begin
459529 OpenSSL_add_all_algorithms;
@@ -469,4 +539,5 @@ procedure TRSAOpenSSL.FreeSSL;
469539 ERR_free_strings;
470540end ;
471541
542+
472543end .
0 commit comments