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