| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- unit SHA1;
- {
- SHA1.pas: System.Hash.pas wrapper in the style of the old version of this file:
- SHA1.pas: SHA-1 hash implementation, based on RFC 3174 and MD5.pas
- Author: Jordan Russell, 2010-02-24
- License for SHA1.pas: Public domain, no copyright claimed
- }
- interface
- uses
- System.Hash;
- type
- TSHA1Context = record
- hash: THashSHA1;
- end;
- TSHA1Digest = array[0..19] of Byte;
- procedure SHA1Init(var ctx: TSHA1Context);
- procedure SHA1Update(var ctx: TSHA1Context; const buffer; len: Cardinal);
- function SHA1Final(var ctx: TSHA1Context): TSHA1Digest;
- function SHA1Buf(const Buffer; Len: Cardinal): TSHA1Digest;
- function SHA1DigestsEqual(const A, B: TSHA1Digest): Boolean;
- function SHA1DigestToString(const D: TSHA1Digest): String;
- implementation
- procedure SHA1Init(var ctx: TSHA1Context);
- begin
- ctx.hash := THashSHA1.Create;
- end;
- procedure SHA1Update(var ctx: TSHA1Context; const buffer; len: Cardinal);
- begin
- ctx.hash.Update(buffer, len);
- end;
- function SHA1Final(var ctx: TSHA1Context): TSHA1Digest;
- begin
- var HashAsBytes := ctx.hash.HashAsBytes;
- Move(HashAsBytes[0], Result[0], SizeOf(Result));
- end;
- { New functions by JR: }
- function SHA1Buf(const Buffer; Len: Cardinal): TSHA1Digest;
- var
- Context: TSHA1Context;
- begin
- SHA1Init(Context);
- SHA1Update(Context, Buffer, Len);
- Result := SHA1Final(Context);
- end;
- function SHA1DigestsEqual(const A, B: TSHA1Digest): Boolean;
- var
- I: Integer;
- begin
- for I := Low(TSHA1Digest) to High(TSHA1Digest) do
- if A[I] <> B[I] then begin
- Result := False;
- Exit;
- end;
- Result := True;
- end;
- function SHA1DigestToString(const D: TSHA1Digest): String;
- const
- Digits: array[0..15] of Char = '0123456789abcdef';
- var
- Buf: array[0..39] of Char;
- P: PChar;
- I: Integer;
- begin
- P := @Buf[0];
- for I := 0 to 19 do begin
- P^ := Digits[D[I] shr 4];
- Inc(P);
- P^ := Digits[D[I] and 15];
- Inc(P);
- end;
- SetString(Result, Buf, 40);
- end;
- end.
|