<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Silvio,<br>
<br>
Just one extra point - the snippet I sent is example code. It is not
intended to be RFC compliant.<br>
<br>
Regards<br>
<br>
Tony Whyman<br>
MWA<br>
<br>
<div class="moz-cite-prefix">On 23/03/13 15:24, silvioprog wrote:<br>
</div>
<blockquote
cite="mid:CAKq_V2KMTu0xZ6DWrM8JjoQZdbneexStF=7z7QL0pT_Ksz0Fgw@mail.gmail.com"
type="cite">
<div dir="ltr">2013/3/23 Tony Whyman <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:tony.whyman@mccallumwhyman.com" target="_blank">tony.whyman@mccallumwhyman.com</a>></span><br>
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF"> Silvio,<br>
<br>
I had the same requirement for an HMAC and used the DCP
library:<br>
<br>
<a moz-do-not-send="true"
href="http://wiki.freepascal.org/DCPcrypt"
target="_blank">http://wiki.freepascal.org/DCPcrypt</a><br>
<br>
I then used the following code snippet to generate the
HMAC<br>
<br>
Regards<br>
<br>
Tony Whyman<br>
MWA<br>
<br>
unit hmac;<br>
<br>
{$mode objfpc}{$H+}<br>
<br>
interface<br>
<br>
uses<br>
Classes, SysUtils;<br>
<br>
procedure MakeHMAC(text: string; var seed: LongInt; var
hash: string);<br>
function ValidateHMAC(text: string; seed: LongInt; hmac:
string): boolean;<br>
<br>
implementation<br>
<br>
uses DCPsha1;<br>
<br>
function GenerateHash(seed: longint; data:
string):string;<br>
var b1, b2, b3, b4: byte;<br>
q: integer;<br>
sha1: TDCP_sha1;<br>
buffer: PChar;<br>
memsize: integer;<br>
len: integer;<br>
begin<br>
len := Length(data);<br>
b1 := seed mod 256;<br>
q := seed div 256;<br>
b2 := q mod 256;<br>
q := q div 256;<br>
b3 := q mod 256;<br>
b4 := q div 256;<br>
<br>
sha1 := TDCP_sha1.Create(nil);<br>
try<br>
sha1.Init;<br>
memsize := len + 4;<br>
buffer := SysGetMem(memsize);<br>
try<br>
Move(b1,buffer^,1);<br>
Move(b2,(buffer+1)^,1);<br>
Move(b3,(buffer+2)^,1);<br>
Move(b4,(buffer+3)^,1);<br>
Move(data[1],(buffer+4)^,len);<br>
SHA1.Update(buffer^,len+4);<br>
setlength(Result,20);<br>
SHA1.Final(Result[1]);<br>
finally<br>
SysFreeMem(buffer);<br>
end;<br>
finally<br>
sha1.free;<br>
end;<br>
end;<br>
<br>
procedure MakeHMAC(text: string; var seed: LongInt;<br>
var hash: string);<br>
begin<br>
Randomize;<br>
seed := Round(Random(MaxLongInt));<br>
hash := GenerateHash(seed,text);<br>
hash := GenerateHash(seed,hash);<br>
end;<br>
<br>
function ValidateHMAC(text: string; seed: LongInt; hmac:
string): boolean;<br>
var hash1, hash2: string;<br>
begin<br>
hash1 := GenerateHash(seed,text);<br>
hash2 := GenerateHash(seed,hash1);<br>
Result := CompareMem(@(hmac[1]),@(hash2[1]),20)<br>
end;<br>
<br>
end.</div>
</blockquote>
<div><br>
</div>
<div style="">Very nice. I will analyze this routine and see
if I can remove the dependence of DCP library. Thank you!</div>
<div><br>
</div>
<div>-- </div>
</div>
Silvio Clécio<br>
My public projects - <a moz-do-not-send="true"
href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
fpc-pascal maillist - <a class="moz-txt-link-abbreviated" href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freepascal.org/mailman/listinfo/fpc-pascal">http://lists.freepascal.org/mailman/listinfo/fpc-pascal</a></pre>
</blockquote>
<br>
</body>
</html>