<div dir="ltr"><div>This answers everything you need to know about how to get a secret key, one click away from the page about signatures that you linked to:<br></div><div><a href="http://docs.aws.amazon.com/AWSECommerceService/latest/DG/AWSCredentials.html">http://docs.aws.amazon.com/AWSECommerceService/latest/DG/AWSCredentials.html</a></div><div><br></div><div>Erlang type specs are described here:</div><div><a href="http://erlang.org/doc/reference_manual/typespec.html">http://erlang.org/doc/reference_manual/typespec.html</a><br></div><div><br></div><div>When you see `sometype() = foo | bar | baz` then you know that when you see `sometype()` then you know that the only valid values are those three atoms, `foo`, `bar`, or `baz`.</div><div><br></div><div>The two iodata parameters to hmac/3 are named Key and Data. Key is the secret key, and Data is the string to sign (what else could it be?).</div><div><br></div><div>The other hmac functions you found are just the lower-level bits that you could use to implement your own version of hmac/3, the most common use case would be to stream data into it rather than to provide all of Data up-front. hmac/3 is the right choice because the documentation says it does exactly what you're trying to do: "Computes a HMAC".</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 9, 2015 at 1:03 PM,  <span dir="ltr"><<a href="mailto:lloyd@writersglen.com" target="_blank">lloyd@writersglen.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Bob,<br>
<br>
This helps.<br>
<br>
I still find the crypo docs confusing, however. With help from the list I see that I need hmac/3, but when I first looked at crypto I saw six functions referencing hmac which led to the question, which one do I need? When I looked at hmac/3 the first two parameters were quite mysterious. I see that Type is hash_algorithms(), go to top of page to find hash_algorithms() and see SHA256 but it's not clear to me--- is that what I plug into the function? Then I see that Key is iodata(). OK, I know what iodata() is but it could be anything between square brackets... So, is the SecretKey something I just make up out of thin air?<br>
<br>
I hope you can see the difficulty and frustration that confronts one encountering these functions for the first time. I did look for tutorials and examples, but found nothing that cleared away the fog.<br>
<br>
Tell you what, if you're willing to take the time to mentor me, I'll write up a tutorial that may help the next noobie down the line.<br>
<br>
Thanks again,<br>
<br>
Lloyd<br>
<br>
<br>
<br>
hmac(Type, Key, Data)<br>
<span class="im HOEnZb">-----Original Message-----<br>
From: "Bob Ippolito" <<a href="mailto:bob@redivi.com">bob@redivi.com</a>><br>
Sent: Thursday, April 9, 2015 3:33pm<br>
To: "Lloyd Prentice" <<a href="mailto:lloyd@writersglen.com">lloyd@writersglen.com</a>><br>
</span><div class="HOEnZb"><div class="h5">Cc: "ayodele abejide" <<a href="mailto:abejideayodele@gmail.com">abejideayodele@gmail.com</a>>, "Erlang Questions" <<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>><br>
Subject: Re: [erlang-questions] Amazon API -- Lookup by ISBN<br>
<br>
They give you examples in the documentation, rather than worrying about<br>
what that RFC means you can just try crypto:hmac/3 and see if it works<br>
(hint: it does).<br>
<br>
1> base64:encode(crypto:hmac(sha256, <<"1234567890">>, <<"GET\<br>
<a href="http://nwebservices.amazon.com" target="_blank">nwebservices.amazon.com</a><br>
\n/onca/xml\nAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01">>)).<br>
<<"j7bZM0LXZ9eXeZruTqWm2DIvDYVUU3wxPPpp+iXxzQc=">><br>
<br>
This matches their example:<br>
j7bZM0LXZ9eXeZruTqWm2DIvDYVUU3wxPPpp+iXxzQc=<br>
<br>
-bob<br>
<br>
On Thu, Apr 9, 2015 at 12:22 PM, <<a href="mailto:lloyd@writersglen.com">lloyd@writersglen.com</a>> wrote:<br>
<br>
> Hi Ayo,<br>
><br>
> Looks cool. I'll give it spin. Thanks.<br>
><br>
> Meanwhile, taking Darach Ennis suggestion to use the Library of Commerce<br>
> db, I came up with this:<br>
><br>
> <a href="https://gist.github.com/anonymous/dd9846ef1cb2826f59da" target="_blank">https://gist.github.com/anonymous/dd9846ef1cb2826f59da</a><br>
><br>
> Bob Ippolito, I did put effort into trying to build it-- put half a day<br>
> into it and got 98% of the way there before I got stuck. Why stuck? I<br>
> simply could not understand the rather cryptic crypto documentation<br>
> sufficiently to "Calculate an RFC 2104-compliant HMAC with the SHA256 hash<br>
> algorithm". This could speak to my mental shortcomings, lack of experience,<br>
> or heavens, could it be that the documentation could use elaboration and<br>
> better examples? I appreciate your encouragement to work it out and I try.<br>
> But code is just that, code, unless you have the keys to the kingdom.<br>
> Nevertheless, I appreciate your response.<br>
><br>
> Best to all,<br>
><br>
> Lloyd<br>
><br>
> -----Original Message-----<br>
> From: "ayodele abejide" <<a href="mailto:abejideayodele@gmail.com">abejideayodele@gmail.com</a>><br>
> Sent: Thursday, April 9, 2015 2:20pm<br>
> To: "Bob Ippolito" <<a href="mailto:bob@redivi.com">bob@redivi.com</a>><br>
> Cc: "Lloyd Prentice" <<a href="mailto:lloyd@writersglen.com">lloyd@writersglen.com</a>>, "Erlang Questions" <<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>><br>
> Subject: Re: [erlang-questions] Amazon API -- Lookup by ISBN<br>
><br>
> I played around with implementing this:<br>
><br>
> <a href="https://gist.github.com/bjhaid/5d3c58aca0dbee0d96fd" target="_blank">https://gist.github.com/bjhaid/5d3c58aca0dbee0d96fd</a><br>
><br>
> PS: It's not tested outside of erl, and was a lunch time hacking.<br>
><br>
> BR,<br>
><br>
> Ayo<br>
><br>
><br>
> On Thu, Apr 9, 2015 at 12:44 PM, Bob Ippolito <<a href="mailto:bob@redivi.com">bob@redivi.com</a>> wrote:<br>
><br>
> > I'm sure they're just trying to keep tabs on who uses the API so that<br>
> they<br>
> > can implement rate limiting and such to prevent third parties from<br>
> scraping<br>
> > the entire database or adversely affecting performance for everyone else.<br>
> > This actually looks like one of the simpler APIs to implement, since it's<br>
> > just in the query string, and the signature is using standard algorithms.<br>
> > I'm sure you could get it if you put some effort into just building it<br>
> > rather than trying to find an implementation that someone else has<br>
> already<br>
> > built.<br>
> ><br>
> > On Thu, Apr 9, 2015 at 9:55 AM, <<a href="mailto:lloyd@writersglen.com">lloyd@writersglen.com</a>> wrote:<br>
> ><br>
> >> Thanks all.<br>
> >><br>
> >> Darach--- looks like the Library of Congress API fits the bill.<br>
> >><br>
> >> Garrett--- for sake of self-enlightenment I'll take a look at Python<br>
> >> implementations.<br>
> >><br>
> >> I can understand that Amazon needs to enforce security on their api, but<br>
> >> one would think that the inventor of one-click ordering could come up<br>
> with<br>
> >> a simpler api request implementation. Maybe they're just trying to keep<br>
> >> pesky users like me out of the goodies. Wizards only apply.<br>
> >><br>
> >> Best wishes,<br>
> >><br>
> >> Lloyd<br>
> >><br>
> >><br>
> >><br>
> >> -----Original Message-----<br>
> >> From: "Darach Ennis" <<a href="mailto:darach@gmail.com">darach@gmail.com</a>><br>
> >> Sent: Wednesday, April 8, 2015 8:07pm<br>
> >> To: "Lloyd Prentice" <<a href="mailto:lloyd@writersglen.com">lloyd@writersglen.com</a>><br>
> >> Cc: "Erlang Questions" <<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>><br>
> >> Subject: Re: [erlang-questions] Amazon API -- Lookup by ISBN<br>
> >><br>
> >> If you don't need the rank information you can get the metadata through<br>
> >> composing a URL<br>
> >> against the library of congress database:<br>
> >><br>
> >><br>
> >><br>
> <a href="http://lx2.loc.gov:210/lcdb?version=1.1&operation=searchRetrieve&query=bath.isbn=0448421658&maximumRecords=1&recordSchema=mods" target="_blank">http://lx2.loc.gov:210/lcdb?version=1.1&operation=searchRetrieve&query=bath.isbn=0448421658&maximumRecords=1&recordSchema=mods</a><br>
> >><br>
> >> This will deliver an XML document. You can get similar information from<br>
> >> Google's API:<br>
> >><br>
> >> <a href="http://www.google.com/books/feeds/volumes/?q=ISBN%3C0448421658%3E" target="_blank">http://www.google.com/books/feeds/volumes/?q=ISBN%3C0448421658%3E</a><br>
> >><br>
> >> Both are simple HTTP GET requests so unless you absolutely need data<br>
> >> unique<br>
> >> to Amazon's DB perhaps that would suffice.<br>
> >><br>
> >> Cheers,<br>
> >><br>
> >> Darach.<br>
> >><br>
> >> On Wed, Apr 8, 2015 at 9:47 PM, <<a href="mailto:lloyd@writersglen.com">lloyd@writersglen.com</a>> wrote:<br>
> >><br>
> >> > Hello,<br>
> >> ><br>
> >> > I'm striving to look up books in Amazon's db by ISBN. At first blush<br>
> it<br>
> >> > looks easy enough:<br>
> >> ><br>
> >> ><br>
> >> ><br>
> >><br>
> <a href="http://docs.aws.amazon.com/AWSECommerceService/latest/DG/EX_LookupbyISBN.html" target="_blank">http://docs.aws.amazon.com/AWSECommerceService/latest/DG/EX_LookupbyISBN.html</a><br>
> >> ><br>
> >> > But the last item, Signature, baffles me. Procedure here:<br>
> >> ><br>
> >> ><br>
> >> ><br>
> >><br>
> <a href="http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html" target="_blank">http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html</a><br>
> >> ><br>
> >> > I'm fine with this until I hit step 4:<br>
> >> ><br>
> >> > -- Sort parameter/value pairs by byte value --- I can see how to do<br>
> this<br>
> >> > manually, but don't know how put Erlang to the task<br>
> >> ><br>
> >> > And I'm really stumped when I hit step 8:<br>
> >> ><br>
> >> > -- Calculate an RFC 2104-compliant HMAC with the SHA256 hash algorithm<br>
> >> ><br>
> >> > Any help? Better yet, does anyone have actual code to make such<br>
> requests<br>
> >> > they're willing to share?<br>
> >> ><br>
> >> > NOTE: Dave Thomas solved this problem way back in 2007. But looks like<br>
> >> > Amazon has changed their request format:<br>
> >> ><br>
> >> > <a href="http://pragdave.me/blog/2007/04/15/a-first-erlang-program/" target="_blank">http://pragdave.me/blog/2007/04/15/a-first-erlang-program/</a><br>
> >> ><br>
> >> > Many thanks,<br>
> >> ><br>
> >> > LRP<br>
> >> ><br>
> >> ><br>
> >> ><br>
> >> ><br>
> >> ><br>
> >> ><br>
> >> ><br>
> >> ><br>
> >> > _______________________________________________<br>
> >> > erlang-questions mailing list<br>
> >> > <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> >> > <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
> >> ><br>
> >><br>
> >><br>
> >> _______________________________________________<br>
> >> erlang-questions mailing list<br>
> >> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> >> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
> >><br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > erlang-questions mailing list<br>
> > <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> > <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
> ><br>
> ><br>
><br>
><br>
><br>
<br>
<br>
</div></div></blockquote></div><br></div>