<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">So, I made many trivial mistakes figuring this out and reacquainting myself with botan.<div><br><div>If i post, maybe other programmers will find via google.   Cut out a few hours of dev time.</div><div>I believe, in the most current docs, you can specify HMAC(SHA-256) via the header.</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #7e4724">#include </span><botan/botan.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #7e4724">#include </span><iostream></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(81, 0, 255); "><span style="color: #008e00">// from <a href="http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html"><span style="color: #5100ff">http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html</span></a></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span style="color: #cd00a6">int</span> main (<span style="color: #cd00a6">int</span> argc, <span style="color: #cd00a6">char</span> *argv[])</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">   </span><span style="color: #8000af">std</span>::<span style="color: #8000af">string</span> stringToBeSigned =</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">            </span></span>"PUT\nc8fdb181845a4ca6b8fec737b3581d76\ntext/html\nThu, 17 Nov 2005 18:49:58 GMT\nx-amz-magic:abracadabra\nx-amz-meta-author:foo@bar.com\n/quotes/nelson"<span style="color: #000000">;</span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">          </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #8000af">std</span>::<span style="color: #8000af">string</span> awsSecretKey =</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span></span>"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"<span style="color: #000000">;</span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">         </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #8000af">std</span>::<span style="color: #8000af">string</span> resultingSignatureShouldBe =</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">          </span></span>"jZNOcbfWmD/A/f3hSvVzXZjM2HU="<span style="color: #000000">;</span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">             </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #8000af">std</span>::<span style="color: #8000af">string</span> algorithmToUse = <span style="color: #e10000">"HMAC(SHA-1)"</span>;</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">  </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #8000af">Botan</span>::<span style="color: #8000af">SymmetricKey</span> botanSymmetricKey = </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">           </span></span>Botan<span style="color: #000000">::</span>SymmetricKey<span style="color: #000000">(</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">                     </span><span style="color: #cd00a6">reinterpret_cast</span><<span style="color: #8000af">Botan</span>::<span style="color: #8000af">byte</span> <span style="color: #cd00a6">const</span> *>(awsSecretKey.<span style="color: #4b0086">data</span>()), awsSecretKey.<span style="color: #4b0086">size</span>()</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">         </span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span><span style="color: #8000af">Botan</span>::<span style="color: #8000af">Pipe</span> pipe(</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">               </span></span><span style="color: #cd00a6">new</span><span style="color: #000000"> </span>Botan<span style="color: #000000">::</span>Chain<span style="color: #000000">(</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">                    </span><span style="color: #cd00a6">new</span> <span style="color: #8000af">Botan</span>::<span style="color: #8000af">MAC_Filter</span>(algorithmToUse, botanSymmetricKey), </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                       </span></span><span style="color: #cd00a6">new</span><span style="color: #000000"> </span>Botan<span style="color: #000000">::</span>Base64_Encoder</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">              </span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre"> </span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span>pipe.<span style="color: #4b0086">process_msg</span>(stringToBeSigned);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">     </span><span style="color: #8000af">std</span>::<span style="color: #8000af">string</span> result = pipe.<span style="color: #4b0086">read_all_as_string</span>(<span style="color: #4e00e0">0</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">    </span><span style="color: #8000af">std</span>::<span style="color: #8000af">cout</span> << <span style="color: #e10000">"Correct result is: "</span> << resultingSignatureShouldBe << <span style="color: #8000af">std</span>::<span style="color: #4b0086">endl</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #8000af">std</span>::<span style="color: #8000af">cout</span> << <span style="color: #e10000">"Got result: "</span> << result << <span style="color: #8000af">std</span>::<span style="color: #4b0086">endl</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">     </span></span>return<span style="color: #000000"> </span><span style="color: #4e00e0">0</span><span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">}</div></div></div></body></html>