http://www.antennenneworal.com/index.php/research-papers-writing-service Research papers writing service http://www.gldining.com/scholarship-essay-for-college-students Scholarship essay for college students http://www.antennenneworal.com/index.php/pay-someone-to-do-my-university-work Pay someone to do my university work http://www.antennenneworal.com/index.php/first-sentence-of-an-essay First sentence of an essay http://www.churchconvention.de/cc/?p=i-will-do-my-homework I will do my homework http://wpsymposium.com/thesis-format-sample Thesis format sample http://www.empowerme.tv/bipolar-disorder-research-paper Bipolar disorder research paper http://www.empowerme.tv/small-essay Small essay http://www.antennenneworal.com/index.php/essay-vato Essay vato http://www.churchconvention.de/cc/?p=how-to-do-a-assignment How to do a assignment http://www.churchconvention.de/cc/?p=on-writing-the-college-application-essay-pdf On writing the college application essay pdf http://www.antennenneworal.com/index.php/i-need-an-argumentative-essay-on-gun-controls I need an argumentative essay on gun controls http://www.gldining.com/can-you-write-an-essay-in-one-day Can you write an essay in one day http://www.churchconvention.de/cc/?p=cheap-dissertation-writing-services-uk Cheap dissertation writing services uk http://www.churchconvention.de/cc/?p=homeworkhelper.org Homeworkhelper.org http://www.empowerme.tv/space-race-essay Space race essay http://www.gldining.com/explanatory-essays Explanatory essays http://www.antennenneworal.com/index.php/legit-essay-writing-company-for-students Legit essay writing company for students http://www.antennenneworal.com/index.php/expository-essay-on-decision-making Expository essay on decision making http://www.antennenneworal.com/index.php/pay-someone-to-do-my-essay Pay someone to do my essay http://www.gldining.com/immigration-argumentative-essay Immigration argumentative essay
Procedure HashSHA1(Var Digest: TSHA1Digest; Const Buf; BufSize: Longint); Function SHA1String(Const Str: String): TSHA1Digest; Function SHA1Buffer(Const Buf; BufSize: Cardinal): TSHA1Digest; Function SHA1Stream(Stream: TStream): TSHA1Digest; Function SHA1File(Const FileName: String): TSHA1Digest;
Function SHA1Print(Digest: TSHA1Digest): String; Function SHA1Match(D1, D2: TSHA1Digest): Boolean; {MD5**********} Type TMD5Digest = Array[0..15] Of Byte; { 128 bits - MD5 } TMD5Context = Array[0..87] Of Byte; { MD5 }
TMD5ContextEx = Packed Record Count: Array[0..1] Of DWord; {number of bits handled mod 2^64} State: Array[0..3] Of DWord; {scratch buffer} Buf: Array[0..63] Of Byte; {input buffer} End;
Procedure HashMD5(Var Digest: TMD5Digest; Const Buf; BufSize: Longint); Function MD5String(Const Str: String): TMD5Digest; Function MD5Buffer(Const Buf; BufSize: Cardinal): TMD5Digest; Function MD5Stream(Stream: TStream): TMD5Digest; Function MD5File(Const FileName: String): TMD5Digest;
Function MD5Print(Digest: TMD5Digest): String; Function MD5Match(D1, D2: TMD5Digest): Boolean;
Function BufferToHex(Const Buf; BufSize: Cardinal): String; Function HexToBuffer(Const Hex: String; Var Buf; BufSize: Cardinal): Boolean; Function CompareBuffers(Const Buf1, Buf2; BufSize: Cardinal): Boolean; Implementation
{Public} Function RolX(I, C: DWord): DWord; Register; Asm mov ecx, edx {get count to cl} rol eax, cl {rotate eax by cl} End;
Function BufferToHex(Const Buf; BufSize: Cardinal): String; Const Digits: Array[0..15] Of Char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'); Var I: Longint; Begin Result := ''; For I := 0 To BufSize - 1 Do Result := Result + Digits[(TByteArray(Buf)[I] Shr 4) And $0F] + Digits[TByteArray(Buf)[I] And $0F]; // Result := Result + IntToHex(TByteArray(Buf)[I], 2); End;
Function HexToBuffer(Const Hex: String; Var Buf; BufSize: Cardinal): Boolean; Var I, C: Integer; Str: String; Count: Integer; Begin Result := False; Str := ''; For I := 1 To Length(Hex) Do If UpCase(Hex[I]) In ['0'..'9', 'A'..'F'] Then Str := Str + Hex[I];
For I := 0 To Count - 1 Do Begin Val('$' + Copy(Str, (I Shl 1) + 1, 2), TByteArray(Buf)[I], C); {!!.01} If (C <> 0) Then Exit; End;
Result := True; End;
Function CompareBuffers(Const Buf1, Buf2; BufSize: Cardinal): Boolean; Var I: Integer; Begin Result := False; For I := 0 To Pred(BufSize) Do Begin Result := TByteArray(Buf1)[I] = TByteArray(Buf2)[I]; If Not Result Then Break; End; End;
Function SHA1SwapByteOrder(n: DWord): DWord; Begin n := (n Shr 24) Or ((n Shr 8) And LBMASK_LO) Or ((n Shl 8) And LBMASK_HI) Or (n Shl 24); Result := n; End;
I: Longint; Begin With Context Do Begin sdIndex := 0; Move(sdBuf, W, SizeOf(W));
For I := 0 To 15 Do W[I] := SHA1SwapByteOrder(W[I]);
For I := 16 To 79 Do W[I] := RolX(W[I - 3] Xor W[I - 8] Xor W[I - 14] Xor W[I - 16], 1);
A := sdHash[0]; B := sdHash[1]; C := sdHash[2]; D := sdHash[3]; E := sdHash[4];
For I := 0 To 19 Do Begin X := RolX(A, 5) + (D Xor (B And (C Xor D))) + E + W[I] + SHA1_K1; E := D; D := C; C := RolX(B, 30); B := A; A := X; End;
For I := 20 To 39 Do Begin X := RolX(A, 5) + (B Xor C Xor D) + E + W[I] + SHA1_K2; E := D; D := C; C := RolX(B, 30); B := A; A := X; End;
For I := 40 To 59 Do Begin X := RolX(A, 5) + ((B And C) Or (D And (B Or C))) + E + W[I] + SHA1_K3; E := D; D := C; C := RolX(B, 30); B := A; A := X; End;
For I := 60 To 79 Do Begin X := RolX(A, 5) + (B Xor C Xor D) + E + W[I] + SHA1_K4; E := D; D := C; C := RolX(B, 30); B := A; A := X; End;
Procedure SHA1Update(Var Context: TSHA1Context; Const Buf; BufSize: Longint); Var PBuf: ^Byte; Begin With Context Do Begin SHA1UpdateLen(Context, BufSize); PBuf := @Buf; While BufSize > 0 Do Begin If (SizeOf(sdBuf) - sdIndex) <= DWord(BufSize) Then Begin Move(PBuf^, sdBuf[sdIndex], SizeOf(sdBuf) - sdIndex); Dec(BufSize, SizeOf(sdBuf) - sdIndex); Inc(PBuf, SizeOf(sdBuf) - sdIndex); SHA1Hash(Context); End Else Begin Move(PBuf^, sdBuf[sdIndex], BufSize); Inc(sdIndex, BufSize); BufSize := 0; End; End; End; End;
Procedure SHA1Final(Var Context: TSHA1Context; Var Digest: TSHA1Digest); Begin With Context Do Begin sdBuf[sdIndex] := $80;
Procedure HashSHA1(Var Digest: TSHA1Digest; Const Buf; BufSize: Longint); Var Context: TSHA1Context; Begin SHA1Init(Context); SHA1Update(Context, Buf, BufSize); SHA1Final(Context, Digest); End;
Function SHA1String(Const Str: String): TSHA1Digest; Begin HashSHA1(Result, Str[1], Length(Str)); End;
Function SHA1Buffer(Const Buf; BufSize: Cardinal): TSHA1Digest; Begin HashSHA1(Result, Buf, BufSize); End;
Function SHA1Stream(Stream: TStream): TSHA1Digest; Var Context: TSHA1Context; BufSize: Integer; FBuf: Array[0..4096 - 1] Of Byte; Begin Stream.Position := 0; SHA1Init(Context); BufSize := Stream.Read(FBuf, SizeOf(FBuf)); While (BufSize > 0) Do Begin SHA1Update(Context, FBuf, BufSize); BufSize := Stream.Read(FBuf, SizeOf(FBuf)); End; SHA1Final(Context, Result); End;
Function SHA1File(Const FileName: String): TSHA1Digest; Var FS: TFileStream; Begin FS := TFileStream.Create(FileName, fmOpenRead Or fmShareDenyNone); Try Result := SHA1Stream(FS); Finally FS.Free; End; End;
Function SHA1Print(Digest: TSHA1Digest): String; Begin Result := BufferToHex(Digest, SizeOf(Digest)); End;
Function SHA1Match(D1, D2: TSHA1Digest): Boolean; Begin Result := CompareBuffers(D1, D2, SizeOf(D1)); End;
Procedure MD5Update(Var Context: TMD5Context; Const Buf; BufSize: Longint); Var MD5: TMD5ContextEx; InBuf: Array[0..15] Of DWord; BufOfs: Longint; MDI: Word; I: Word; II: Word; Begin Move(Context, MD5, SizeOf(MD5));
MDI := (MD5.Count[0] Shr 3) And $3F;
If ((MD5.Count[0] + (DWord(BufSize) Shl 3)) < MD5.Count[0]) Then Inc(MD5.Count[1]); Inc(MD5.Count[0], BufSize Shl 3); Inc(MD5.Count[1], BufSize Shr 29);
BufOfs := 0; While (BufSize > 0) Do Begin Dec(BufSize); MD5.Buf[MDI] := TByteArray(Buf)[BufOfs]; {!!.01} Inc(MDI); Inc(BufOfs); If (MDI = $40) Then Begin II := 0; For I := 0 To 15 Do Begin InBuf[I] := Longint(MD5.Buf[II + 3]) Shl 24 Or Longint(MD5.Buf[II + 2]) Shl 16 Or Longint(MD5.Buf[II + 1]) Shl 8 Or Longint(MD5.Buf[II]); Inc(II, 4); End; MD5Transform(MD5.State, InBuf); MD5Transform(TMD5ContextEx(Context).State, InBuf); MDI := 0; End; End; Move(MD5, Context, SizeOf(Context)); {!!.01} End;
If (MDI < 56) Then PadLen := 56 - MDI Else PadLen := 120 - MDI; MD5Update(Context, Padding, PadLen);
Move(Context, MD5, SizeOf(MD5));
II := 0; For I := 0 To 13 Do Begin InBuf[I] := (Longint(MD5.Buf[II + 3]) Shl 24) Or (Longint(MD5.Buf[II + 2]) Shl 16) Or (Longint(MD5.Buf[II + 1]) Shl 8) Or Longint(MD5.Buf[II]); Inc(II, 4); End; MD5Transform(MD5.State, InBuf); II := 0; For I := 0 To 3 Do Begin Digest[II] := Byte(MD5.State[I] And $FF); Digest[II + 1] := Byte((MD5.State[I] Shr 8) And $FF); Digest[II + 2] := Byte((MD5.State[I] Shr 16) And $FF); Digest[II + 3] := Byte((MD5.State[I] Shr 24) And $FF); Inc(II, 4); End; Move(MD5, Context, SizeOf(Context)); End;
Function MD5String(Const Str: String): TMD5Digest; Begin HashMD5(Result, Str[1], Length(Str)); End;
Function MD5Buffer(Const Buf; BufSize: Cardinal): TMD5Digest; Begin HashMD5(Result, Buf, BufSize); End;
Function MD5Stream(Stream: TStream): TMD5Digest; Var Context: TMD5Context; BufSize: Integer; FBuf: Array[0..4096 - 1] Of Byte; Begin MD5Init(Context); BufSize := Stream.Read(FBuf, SizeOf(FBuf)); While (BufSize > 0) Do Begin MD5Update(Context, FBuf, BufSize); BufSize := Stream.Read(FBuf, SizeOf(FBuf)); End; MD5Final(Context, Result); End;
Function MD5File(Const FileName: String): TMD5Digest; Var FS: TFileStream; Begin FS := TFileStream.Create(FileName, fmOpenRead Or fmShareDenyNone); Try Result := MD5Stream(FS); Finally FS.Free; End; End;
Function MD5Print(Digest: TMD5Digest): String; Begin Result := BufferToHex(Digest, SizeOf(Digest)); End;
Function MD5Match(D1, D2: TMD5Digest): Boolean; Begin Result := CompareBuffers(D1, D2, SizeOf(D1)); End; End.