I guess I've tracked the problem down to the fact that the Racket hash is not a digest.
I don't really know what that means. If I do: echo -n "foo" | openssl dgst -sha1 -hmac "privatekey" I get what I'm looking for, a 40 character hex hash: 6d1198d3c8770f2409c6b73ed11af9d2076e4588 I'm not sure how to get Racket to do this as well. Does anyone know? On Sun, May 13, 2012 at 9:32 PM, Veer Singh <veer.c...@gmail.com> wrote: > In racket you are applying function "base64-encode" and in python you are > not. > > Sorry if I didn't get your question. > > Veer. > > On Mon, May 14, 2012 at 9:38 AM, Shawn Smith <shawn.p.sm...@gmail.com> > wrote: > > Having issues with mailing list. Trying again: > > > > I've gotten a bit of help in #racket on freenode so far, but I'm still > > facing a problem with this. > > > > In Racket, I expect that this will get me a SHA1 hash (as bytes) of a > > string, using a key: > > > > (require web-server/stuffers/hmac-sha1 > > net/base64) > > > > (define (str-to-hash private-key str) > > (base64-encode (HMAC-SHA1 (string->bytes/utf-8 private-key) > > (string->bytes/utf-8 > str)))) > > > > And let's convert the bytes to a string of hex: > > > > (apply string-append (map (lambda (x) (number->string x 16)) (bytes->list > > (str-to-hash "foo" "bar")))) > > > > This gives me: > > > > "527254735747455846553273314a316d546c316a2f63694f2b31453dda" > > > > In Python, doing what I assume to be the same thing: > > > > import hmac > > from hashlib import sha1 > > > > hmac.new('foo', 'bar', sha1).hexdigest() > > > > Returns something completely different: > > > > '46b4ec586117154dacd49d664e5d63fdc88efb51' > > > > Does anyone have any idea what's going on here? > > > > On Sun, May 13, 2012 at 9:01 PM, Shawn Smith <shawn.p.sm...@gmail.com> > > wrote: > >> > >> I've gotten a bit of help in #racket on freenode so far, but I'm still > >> facing a problem with this. > >> > >> In Racket, I expect that this will get me a SHA1 hash (as bytes) of a > >> string, using a key: > >> > >> (require web-server/stuffers/hmac-sha1 > >> net/base64) > >> > >> (define (str-to-hash private-key str) > >> (base64-encode (HMAC-SHA1 (string->bytes/utf-8 private-key) > >> (string->bytes/utf-8 > >> str)))) > >> > >> And let's convert the bytes to a string of hex: > >> > >> (apply string-append (map (lambda (x) (number->string x 16)) > (bytes->list > >> (str-to-hash "foo" "bar")))) > >> > >> This gives me: > >> > >> "527254735747455846553273314a316d546c316a2f63694f2b31453dda" > >> > >> In Python, doing what I assume to be the same thing: > >> > >> import hmac > >> from hashlib import sha1 > >> > >> hmac.new('foo', 'bar', sha1).hexdigest() > >> > >> Returns something completely different: > >> > >> '46b4ec586117154dacd49d664e5d63fdc88efb51' > >> > >> Does anyone have any idea what's going on here? > >> > >> Shawn > >> > >> On Sun, May 13, 2012 at 7:18 PM, Shawn Smith <shawn.p.sm...@gmail.com> > >> wrote: > >>> > >>> Hi, > >>> > >>> I'm trying to generate a SHA1 hash using a private key and a given > >>> string, like so: > >>> > >>> (define a-hash (HMAC-SHA1 (string->bytes/locale "foo") > >>> (string->bytes/locale "bar"))) > >>> > >>> This returns bytes, but when I try to turn those bytes into a string > >>> with: > >>> > >>> (bytes->string/locale a-hash) > >>> > >>> I get: > >>> > >>> bytes->string/locale: string is not a well-formed UTF-8 encoding: > >>> #"F\264\354Xa\27\25M\254\324\235fN]c\375\310\216\373Q" > >>> > >>> As I have no clue how to diagnose this, I'd appreciate any suggestions > or > >>> help. > >>> > >>> Thanks, > >>> Shawn > >> > >> > > > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > >
____________________ Racket Users list: http://lists.racket-lang.org/users