Hi Mindaugas,

Now it's better, but in order to make them give the right results with
SHA384 and SHA512, 64 has to be changed to 128. I'm
lost how to do this in a generic way.

Brgds,
Viktor

On Mon, Jan 19, 2009 at 10:03 PM, Mindaugas Kavaliauskas <dbto...@dbtopas.lt
> wrote:

> Hi,
>
>
>  For some reason I still cannot make pass your generic .prg HMAC function
>> on the validation tests. Probably some stupid mistakes on my part.
>>
>
> No, on my one. I forgot one Hex->Bin conversion. It should be:
>
> FUNC HB_HMAC(fHash, cMessage, cKey)
>  IF LEN(cKey) > 64;   cKey := HB_HexToStr(EVAL(fHash, cKey))
>  ENDIF
>  cKey := PADR(cKey, 64, CHR(0))
> RETURN EVAL(fHash, HB_STRXOR(cKey, 0x5C) + ;
>                   HB_HexToStr(EVAL(fHash, HB_STRXOR(cKey, 0x36) +
> cMessage)))
>
> Now
>  ? HB_HMAC(@HB_MD5(), "<1896.697170...@postoffice.reston.mci.net>",
> "tanstaaftanstaaf")
> prints "b913a602c7eda7a495b4e6e7334d3890" (this test data is used in
> http://www.isi.edu/in-notes/rfc2195.txt).
>
>
> Regards,
> Mindaugas
>
>
> P.S. sometimes one more optional parameter would be really usefull
> HB_{MD5|SHA1|...}( cMessage [, lBinary ] ), to avoid two unnecessary
> Bin->Hex->Bin conversion in function like HB_HMAC:
>
> FUNC HB_HMAC(fHash, cMessage, cKey, lBinary)
>  IF LEN(cKey) > 64;   cKey := EVAL(fHash, cKey, .T.)
>  ENDIF
>  cKey := PADR(cKey, 64, CHR(0))
> RETURN EVAL(fHash, HB_STRXOR(cKey, 0x5C) + ;
>                   EVAL(fHash, HB_STRXOR(cKey, 0x36) + cMessage, .T.),
> lBinary)
>
> In many cases (ex., communication protocol implementation) we need binary
> digest result, and hex format is used for human readable representation
> only.
>
> _______________________________________________
> Harbour mailing list
> Harbour@harbour-project.org
> http://lists.harbour-project.org/mailman/listinfo/harbour
>
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to