Update: Found out I can do this:<div><br></div><div><a href="https://github.com/plt/racket/wiki/Artifacts">https://github.com/plt/racket/wiki/Artifacts</a></div><div><br></div><div><pre style="margin-top:15px;margin-bottom:15px;padding-top:6px;padding-right:10px;padding-bottom:6px;padding-left:10px;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-style:initial;border-color:initial;font:inherit;font-family:&#39;Bitstream Vera Sans Mono&#39;,Courier,monospace;line-height:19px;background-color:rgb(248,248,248);border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(204,204,204);border-right-color:rgb(204,204,204);border-bottom-color:rgb(204,204,204);border-left-color:rgb(204,204,204);overflow-x:auto;overflow-y:auto;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:rgb(51,51,51)">
<code style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-style:initial;font:inherit;font-family:&#39;Bitstream Vera Sans Mono&#39;,Courier,monospace;line-height:normal;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;background-color:transparent;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-color:initial;background-image:initial;border-width:initial">(parameterize ([current-input-port (open-input-string &quot;We are Spinal Tap!&quot;)])
  (with-output-to-string (λ _ (system* (build-path &quot;c:&quot; &quot;openssl-win32&quot; &quot;bin&quot; &quot;openssl.exe&quot;)
                                      &quot;dgst&quot; 
                                      &quot;-sha1&quot;
                                      &quot;-hex&quot;
                                      &quot;-hmac&quot;
                                      #&quot;mysecretkey&quot;))))</code></pre><br><div class="gmail_quote">On Mon, May 14, 2012 at 1:12 AM, Shawn Smith <span dir="ltr">&lt;<a href="mailto:shawn.p.smith@gmail.com" target="_blank">shawn.p.smith@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"><div class="im"><span>I guess I&#39;ve tracked the problem down to the fact that the Racket hash is not a digest.</span><div>
<br></div><div>I don&#39;t really know what that means.</div><div><br></div><div>If I do:</div>
<div><br></div><div>echo -n &quot;foo&quot; | openssl dgst -sha1 -hmac &quot;privatekey&quot;</div><div><br></div><div>I get what I&#39;m looking for, a 40 character hex hash: </div><div><br>
</div><div>6d1198d3c8770f2409c6b73ed11af9d2076e4588</div><div><br></div><div>I&#39;m not sure how to get Racket to do this as well.  Does anyone know?</div><br></div><div class="gmail_quote"><div class="im">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>

</div><div><div class="h5"><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><br>
On Mon, May 14, 2012 at 9:38 AM, Shawn Smith &lt;<a href="mailto:shawn.p.smith@gmail.com" target="_blank">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" target="_blank">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" target="_blank">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></div></div><br>
</blockquote></div><br></div>