The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file was generated by Devel::Cover Version 0.93
Devel::Cover is copyright 2001-2012, Paul Johnson (paul@pjcj.net)
Devel::Cover is free. It is licensed under the same terms as Perl itself.
The latest version of Devel::Cover should be available from my homepage:
http://www.pjcj.net
-->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <title>File Coverage: blib/lib/Net/Amazon/SignatureVersion4.pm</title>
</head>
<body>
<h1>File Coverage</h1>
<table>
<tr><td class="h" align="right">File:</td><td align="left">blib/lib/Net/Amazon/SignatureVersion4.pm</td></tr>
<tr><td class="h" align="right">Coverage:</td><td align="left" class="c2">96.0%</td></tr>
</table>
<div><br/></div>
<table>
<tr><th>line</th><th>stmt</th><th>bran</th><th>cond</th><th>sub</th><th>pod</th><th>time</th><th>code</th></tr>
<tr><td class="h">1</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L1">4</a></div></td><td></td><td><div>236580</div><div>5</div><div>104</div></td><td class="s">use strict;</td></tr>
<tr><td class="h">2</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L2">4</a></div></td><td></td><td><div>13</div><div>4</div><div>190</div></td><td class="s">use warnings;</td></tr>
<tr><td class="h">3</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">package Net::Amazon::SignatureVersion4;</td></tr>
<tr><td class="h">4</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">{</td></tr>
<tr><td class="h">5</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;$Net::Amazon::SignatureVersion4::VERSION = &#39;0.003&#39;;</td></tr>
<tr><td class="h">6</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">7</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L7">4</a></div></td><td></td><td><div>1992</div><div>6551235</div><div>95</div></td><td class="s">use MooseX::App qw(Config);</td></tr>
<tr><td class="h">8</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L8">4</a></div></td><td></td><td><div>6500498</div><div>10095</div><div>372</div></td><td class="s">use Digest::SHA qw(sha256_hex hmac_sha256_hex hmac_sha256 hmac_sha256_base64);</td></tr>
<tr><td class="h">9</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L9">4</a></div></td><td></td><td><div>1272</div><div>12811</div><div>97</div></td><td class="s">use POSIX qw(strftime);</td></tr>
<tr><td class="h">10</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L10">4</a></div></td><td></td><td><div>5033</div><div>34733</div><div>153</div></td><td class="s">use URI::Encode;</td></tr>
<tr><td class="h">11</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L11">4</a></div></td><td></td><td><div>966</div><div>9471</div><div>259</div></td><td class="s">use HTTP::Date;</td></tr>
<tr><td class="h">12</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L12">4</a></div></td><td></td><td><div>92</div><div>15</div><div>1857</div></td><td class="s">use 5.010;</td></tr>
<tr><td class="h">13</td><td colspan="7"></td></tr><tr><td class="h">14</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># ABSTRACT: Signs requests using Amazon&#39;s Signature Version 4.</td></tr>
<tr><td class="h">15</td><td colspan="7"></td></tr><tr><td class="h">16</td><td colspan="7"></td></tr><tr><td class="h">17</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;Access_Key_Id&#39; =&gt; (</td></tr>
<tr><td class="h">18</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is        =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">19</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa       =&gt; &#39;Str&#39;,</td></tr>
<tr><td class="h">20</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader    =&gt; &#39;get_Access_Key_ID&#39;,</td></tr>
<tr><td class="h">21</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;predicate =&gt; &#39;has_Access_Key_ID&#39;,</td></tr>
<tr><td class="h">22</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer    =&gt; &#39;set_Access_Key_ID&#39;,</td></tr>
<tr><td class="h">23</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">24</td><td colspan="7"></td></tr><tr><td class="h">25</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;Secret_Access_Key&#39; =&gt; (</td></tr>
<tr><td class="h">26</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is        =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">27</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa       =&gt; &#39;Str&#39;,</td></tr>
<tr><td class="h">28</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader    =&gt; &#39;get_Secret_Access_Key&#39;,</td></tr>
<tr><td class="h">29</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;predicate =&gt; &#39;has_Secret_Access_Key&#39;,</td></tr>
<tr><td class="h">30</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer    =&gt; &#39;set_Secret_Access_Key&#39;,</td></tr>
<tr><td class="h">31</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">32</td><td colspan="7"></td></tr><tr><td class="h">33</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;region&#39; =&gt; (</td></tr>
<tr><td class="h">34</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is      =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">35</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa     =&gt; &#39;Str&#39;,</td></tr>
<tr><td class="h">36</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer  =&gt; &#39;set_region&#39;,</td></tr>
<tr><td class="h">37</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader  =&gt; &#39;get_region&#39;,</td></tr>
<tr><td class="h">38</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; &#39;us-east-1&#39;,</td></tr>
<tr><td class="h">39</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">40</td><td colspan="7"></td></tr><tr><td class="h">41</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;request&#39; =&gt; (</td></tr>
<tr><td class="h">42</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is      =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">43</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa     =&gt; &#39;Object&#39;,</td></tr>
<tr><td class="h">44</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer  =&gt; &#39;set_request&#39;,</td></tr>
<tr><td class="h">45</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader  =&gt; &#39;get_request&#39;,</td></tr>
<tr><td class="h">46</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">47</td><td colspan="7"></td></tr><tr><td class="h">48</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;service&#39; =&gt; (</td></tr>
<tr><td class="h">49</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is      =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">50</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa     =&gt; &#39;Str&#39;,</td></tr>
<tr><td class="h">51</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer  =&gt; &#39;set_service&#39;,</td></tr>
<tr><td class="h">52</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader  =&gt; &#39;get_service&#39;,</td></tr>
<tr><td class="h">53</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">54</td><td colspan="7"></td></tr><tr><td class="h">55</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;time&#39; =&gt; (</td></tr>
<tr><td class="h">56</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is      =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">57</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa     =&gt; &#39;Str&#39;,</td></tr>
<tr><td class="h">58</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer  =&gt; &#39;set_time&#39;,</td></tr>
<tr><td class="h">59</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader  =&gt; &#39;get_time&#39;,</td></tr>
<tr><td class="h">60</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">61</td><td colspan="7"></td></tr><tr><td class="h">62</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;date_stamp&#39; =&gt; (</td></tr>
<tr><td class="h">63</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is      =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">64</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa     =&gt; &#39;Str&#39;,</td></tr>
<tr><td class="h">65</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer  =&gt; &#39;set_date_stamp&#39;,</td></tr>
<tr><td class="h">66</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader  =&gt; &#39;get_date_stamp&#39;,</td></tr>
<tr><td class="h">67</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">68</td><td colspan="7"></td></tr><tr><td class="h">69</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">option &#39;signed_headers&#39; =&gt; (</td></tr>
<tr><td class="h">70</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is      =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">71</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa     =&gt; &#39;Str&#39;,</td></tr>
<tr><td class="h">72</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;writer  =&gt; &#39;set_signed_headers&#39;,</td></tr>
<tr><td class="h">73</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;reader  =&gt; &#39;get_signed_headers&#39;,</td></tr>
<tr><td class="h">74</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">75</td><td colspan="7"></td></tr><tr><td class="h">76</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub get_authorized_request{</td></tr>
<tr><td class="h">77</td><td colspan="7"></td></tr><tr><td class="h">78</td><td><div class="c3">30</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L78">30</a></div></td><td></td><td><div>26118</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self=shift;</td></tr>
<tr><td class="h">79</td><td><div class="c3">30</div></td><td></td><td></td><td></td><td></td><td><div>2110</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $request=$self-&gt;get_request();</td></tr>
<tr><td class="h">80</td><td><div class="c3">30</div></td><td></td><td></td><td></td><td></td><td><div>71</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$request-&gt;header( Authorization =&gt; $self-&gt;get_authorization() );</td></tr>
<tr><td class="h">81</td><td><div class="c3">30</div></td><td></td><td></td><td></td><td></td><td><div>3662</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $request</td></tr>
<tr><td class="h">82</td><td colspan="7"></td></tr><tr><td class="h">83</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">84</td><td colspan="7"></td></tr><tr><td class="h">85</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub get_authorization{</td></tr>
<tr><td class="h">86</td><td><div class="c3">60</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L86">60</a></div></td><td></td><td><div>25380</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self=shift;</td></tr>
<tr><td class="h">87</td><td><div class="c3">60</div></td><td></td><td></td><td></td><td></td><td><div>141</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my %dk=$self-&gt;get_derived_signing_key();</td></tr>
<tr><td class="h">88</td><td><div class="c3">60</div></td><td></td><td></td><td></td><td></td><td><div>143</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $sts=$self-&gt;get_string_to_sign();</td></tr>
<tr><td class="h">89</td><td><div class="c3">60</div></td><td></td><td></td><td></td><td></td><td><div>185</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$sts=~tr/\r//d;</td></tr>
<tr><td class="h">90</td><td><div class="c3">60</div></td><td></td><td></td><td></td><td></td><td><div>1090</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $signature=hmac_sha256_hex($sts,$dk{&#39;kSigning&#39;});</td></tr>
<tr><td class="h">91</td><td><div class="c3">60</div></td><td></td><td></td><td></td><td></td><td><div>3557</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return &quot;AWS4-HMAC-SHA256 Credential=&quot;.$self-&gt;get_Access_Key_ID().&quot;/&quot;.$self-&gt;get_date_stamp().&quot;/&quot;.$self-&gt;get_region().&quot;/&quot;.$self-&gt;get_service().&quot;/aws4_request, SignedHeaders=&quot;.$self-&gt;get_signed_headers().&quot;, Signature=$signature&quot;;</td></tr>
<tr><td class="h">92</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">93</td><td colspan="7"></td></tr><tr><td class="h">94</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub get_derived_signing_key{</td></tr>
<tr><td class="h">95</td><td><div class="c3">61</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L95">61</a></div></td><td></td><td><div>116</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self=shift;</td></tr>
<tr><td class="h">96</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>109</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;get_canonical_request(); # This is a hack to get the date set before using it to derive the signing key.</td></tr>
<tr><td class="h">97</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>108</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my %rv=();</td></tr>
<tr><td class="h">98</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>3661</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv{&#39;kSecret&#39;}=&quot;AWS4&quot;.$self-&gt;get_Secret_Access_Key();</td></tr>
<tr><td class="h">99</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#say(&quot;kSecret: &quot;.unpack(&#39;H*&#39;,$rv{&#39;kSecret&#39;}));</td></tr>
<tr><td class="h">100</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>3429</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv{&#39;kDate&#39;}=hmac_sha256($self-&gt;get_date_stamp(),$rv{&#39;kSecret&#39;});</td></tr>
<tr><td class="h">101</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#say(&quot;kDate: &quot;.unpack(&#39;H*&#39;,$rv{&#39;kDate&#39;}));</td></tr>
<tr><td class="h">102</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>3358</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv{&#39;kRegion&#39;}=hmac_sha256($self-&gt;get_region(),$rv{&#39;kDate&#39;});</td></tr>
<tr><td class="h">103</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#say(&quot;kRegion: &quot;.unpack(&#39;H*&#39;,$rv{&#39;kRegion&#39;}));</td></tr>
<tr><td class="h">104</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>3362</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv{&#39;kService&#39;}=hmac_sha256($self-&gt;get_service(),$rv{&#39;kRegion&#39;});</td></tr>
<tr><td class="h">105</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#say(&quot;kService: &quot;.unpack(&#39;H*&#39;,$rv{&#39;kService&#39;}));</td></tr>
<tr><td class="h">106</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>560</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv{&#39;kSigning&#39;}=hmac_sha256(&quot;aws4_request&quot;,$rv{&#39;kService&#39;});</td></tr>
<tr><td class="h">107</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#say(&quot;kSigning: &quot;.unpack(&#39;H*&#39;,$rv{&#39;kSigning&#39;}));</td></tr>
<tr><td class="h">108</td><td><div class="c3">61</div></td><td></td><td></td><td></td><td></td><td><div>421</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return %rv;</td></tr>
<tr><td class="h">109</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">110</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub get_string_to_sign{</td></tr>
<tr><td class="h">111</td><td><div class="c3">90</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L111">90</a></div></td><td></td><td><div>24379</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self=shift;</td></tr>
<tr><td class="h">112</td><td colspan="7"></td></tr><tr><td class="h">113</td><td><div class="c3">90</div></td><td></td><td></td><td></td><td></td><td><div>173</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $creq=$self-&gt;get_canonical_request();</td></tr>
<tr><td class="h">114</td><td><div class="c3">90</div></td><td></td><td></td><td></td><td></td><td><div>180</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$creq=~tr/\r//d;</td></tr>
<tr><td class="h">115</td><td><div class="c3">90</div></td><td></td><td></td><td></td><td></td><td><div>4831</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $StringToSign=&quot;AWS4-HMAC-SHA256\r\n&quot;.</td></tr>
<tr><td class="h">116</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;get_time().&quot;\r\n&quot;.</td></tr>
<tr><td class="h">117</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;get_date_stamp().&quot;/&quot;.</td></tr>
<tr><td class="h">118</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;get_region().&quot;/&quot;.</td></tr>
<tr><td class="h">119</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;get_service().&quot;/aws4_request\r\n&quot;.</td></tr>
<tr><td class="h">120</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sha256_hex($creq);</td></tr>
<tr><td class="h">121</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">122</td><td colspan="7"></td></tr><tr><td class="h">123</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub get_canonical_request{</td></tr>
<tr><td class="h">124</td><td><div class="c3">181</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L124">181</a></div></td><td></td><td><div>1231</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self=shift;</td></tr>
<tr><td class="h">125</td><td><div class="c3">4</div><div class="c3">4</div><div class="c3">4</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L125">4</a></div></td><td></td><td><div>1763</div><div>16739</div><div>3283</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;use Data::Dumper;</td></tr>
<tr><td class="h">126</td><td colspan="7"></td></tr><tr><td class="h">127</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>216</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $method;</td></tr>
<tr><td class="h">128</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>262</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $full_uri=&quot;&quot;;</td></tr>
<tr><td class="h">129</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>175</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $version;</td></tr>
<tr><td class="h">130</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>198</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $canonical_query_string=&quot;&quot;;</td></tr>
<tr><td class="h">131</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>298</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my %headers=();</td></tr>
<tr><td class="h">132</td><td colspan="7"></td></tr><tr><td class="h">133</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>10872</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $name ( $self-&gt;get_request()-&gt;header_field_names() ){</td></tr>
<tr><td class="h">134</td><td><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>37988</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @value=$self-&gt;get_request()-&gt;header($name);</td></tr>
<tr><td class="h">135</td><td><div class="c3">406</div></td><td><div class="c0" title="-/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L135">50</a></div></td><td></td><td></td><td></td><td><div>34266</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next unless (defined $name &amp; defined $value[0]);</td></tr>
<tr><td class="h">136</td><td><div class="c3">406</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L136">100</a></div></td><td></td><td></td><td></td><td><div>761</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (lc($name) eq &#39;date&#39;){</td></tr>
<tr><td class="h">137</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>4905</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $time=str2time($value[0]);</td></tr>
<tr><td class="h">138</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>37554</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;set_date_stamp(strftime(&quot;%Y%m%d&quot;, gmtime($time)));</td></tr>
<tr><td class="h">139</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>15092</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;set_time(strftime(&quot;%Y%m%dT%H%M%SZ&quot;,gmtime($time)));</td></tr>
<tr><td class="h">140</td><td colspan="7"></td></tr><tr><td class="h">141</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">142</td><td><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>668</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach my $value (@value){</td></tr>
<tr><td class="h">143</td><td><div class="c3">436</div></td><td></td><td></td><td></td><td></td><td><div>1559</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local $/ = &quot; &quot;;</td></tr>
<tr><td class="h">144</td><td><div class="c3">436</div></td><td></td><td></td><td></td><td></td><td><div>464</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chomp($value);</td></tr>
<tr><td class="h">145</td><td><div class="c3">436</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L145">100</a></div></td><td></td><td></td><td></td><td><div>760</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (defined $headers{lc($name)}){</td></tr>
<tr><td class="h">146</td><td><div class="c3">30</div><div class="c3">30</div></td><td></td><td></td><td></td><td></td><td><div>16</div><div>99</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @{$headers{lc($name)}}, $value;</td></tr>
<tr><td class="h">147</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{</td></tr>
<tr><td class="h">148</td><td><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>2014</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$headers{lc($name)}=[$value ];</td></tr>
<tr><td class="h">149</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">150</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">151</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">152</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>10265</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$full_uri=$self-&gt;get_request()-&gt;uri();</td></tr>
<tr><td class="h">153</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>11012</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$full_uri =~ s@^(http|https)://.*?/@/@;</td></tr>
<tr><td class="h">154</td><td><div class="c3">181</div></td><td><div class="c0" title="-/-"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L154">0</a></div></td><td></td><td></td><td></td><td><div>10850</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ($full_uri=~m/(.*?)\?(.*)/){</td></tr>
<tr><td class="h">155</td><td><div class="c3">60</div></td><td></td><td></td><td></td><td></td><td><div>2541</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$full_uri=$1;</td></tr>
<tr><td class="h">156</td><td><div class="c3">60</div></td><td></td><td></td><td></td><td></td><td><div>106</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$canonical_query_string=$2;</td></tr>
<tr><td class="h">157</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">158</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>4230</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @canonical_query_list;</td></tr>
<tr><td class="h">159</td><td><div class="c3">181</div></td><td><div class="c0" title="T/-"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L159">50</a></div></td><td></td><td></td><td></td><td><div>337</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ( defined $canonical_query_string){</td></tr>
<tr><td class="h">160</td><td><div class="c3">181</div></td><td><div class="c0" title="-/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L160">50</a></div></td><td></td><td></td><td></td><td><div>451</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($canonical_query_string=~m/(.*?)\s.*/){</td></tr>
<tr><td class="h">161</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$canonical_query_string=$1</td></tr>
<tr><td class="h">162</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">163</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>474</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@canonical_query_list=split(/\&amp;/,$canonical_query_string);</td></tr>
<tr><td class="h">164</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">165</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>187</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$canonical_query_string=&quot;&quot;;</td></tr>
<tr><td class="h">166</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>395</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $param (sort @canonical_query_list){</td></tr>
<tr><td class="h">167</td><td><div class="c3">84</div></td><td></td><td></td><td></td><td></td><td><div>268</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(my $name, my $value)=split(/=/, $param);</td></tr>
<tr><td class="h">168</td><td><div class="c3">84</div></td><td><div class="c0" title="-/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L168">50</a></div></td><td></td><td></td><td></td><td><div>194</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$name=&quot;&quot; unless (defined $name);</td></tr>
<tr><td class="h">169</td><td><div class="c3">84</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L169">100</a></div></td><td></td><td></td><td></td><td><div>132</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$value=&quot;&quot; unless (defined $value);</td></tr>
<tr><td class="h">170</td><td><div class="c3">84</div></td><td></td><td></td><td></td><td></td><td><div>138</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$canonical_query_string=$canonical_query_string._encode($name).&quot;=&quot;._encode($value).&quot;&amp;&quot;;</td></tr>
<tr><td class="h">171</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">172</td><td><div class="c3">181</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L172">100</a></div></td><td></td><td></td><td></td><td><div>473</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$canonical_query_string=substr($canonical_query_string, 0, -1) unless ($canonical_query_string eq &quot;&quot;);</td></tr>
<tr><td class="h">173</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>2925</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$full_uri=~tr/\///s;</td></tr>
<tr><td class="h">174</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>4489</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $ends_in_slash=0;</td></tr>
<tr><td class="h">175</td><td><div class="c3">181</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L175">100</a></div></td><td></td><td></td><td></td><td><div>346</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ($full_uri=~m/\w\/$/){</td></tr>
<tr><td class="h">176</td><td><div class="c3">6</div></td><td></td><td></td><td></td><td></td><td><div>6</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ends_in_slash=1;</td></tr>
<tr><td class="h">177</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">178</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>503</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @uri_source=split /\//, $full_uri;</td></tr>
<tr><td class="h">179</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>164</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @uri_stack;</td></tr>
<tr><td class="h">180</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>265</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $path_component (@uri_source){</td></tr>
<tr><td class="h">181</td><td><div class="c3">135</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L181">100</a></div><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L181">100</a></div></td><td></td><td></td><td></td><td><div>232</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($path_component =~ m/^\.$/){</td></tr>
<tr><td class="h">182</td><td><div class="c3">12</div></td><td></td><td></td><td></td><td></td><td><div>123</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 0;</td></tr>
<tr><td class="h">183</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}elsif ($path_component =~ m/^..$/){</td></tr>
<tr><td class="h">184</td><td><div class="c3">18</div></td><td></td><td></td><td></td><td></td><td><div>18</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pop @uri_stack;</td></tr>
<tr><td class="h">185</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{</td></tr>
<tr><td class="h">186</td><td><div class="c3">105</div></td><td></td><td></td><td></td><td></td><td><div>130</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @uri_stack, $path_component;</td></tr>
<tr><td class="h">187</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">188</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">189</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>193</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$full_uri=&quot;/&quot;;</td></tr>
<tr><td class="h">190</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>225</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $path_component (@uri_stack){</td></tr>
<tr><td class="h">191</td><td><div class="c3">87</div></td><td></td><td></td><td></td><td></td><td><div>97</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$full_uri=$full_uri.&quot;$path_component/&quot;;</td></tr>
<tr><td class="h">192</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">193</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>174</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$full_uri=~tr/\///s;</td></tr>
<tr><td class="h">194</td><td><div class="c3">181</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L194">100</a></div></td><td></td><td></td><td></td><td><div>377</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;chop $full_uri unless ( $full_uri eq &quot;/&quot; );</td></tr>
<tr><td class="h">195</td><td><div class="c3">181</div></td><td><div class="c3" title="T/F"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--branch.html#L195">100</a></div></td><td></td><td></td><td></td><td><div>261</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ($ends_in_slash){</td></tr>
<tr><td class="h">196</td><td><div class="c3">6</div></td><td></td><td></td><td></td><td></td><td><div>6</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$full_uri=$full_uri.&quot;/&quot;;</td></tr>
<tr><td class="h">197</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">198</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>164</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $CanonicalHeaders=&quot;&quot;;</td></tr>
<tr><td class="h">199</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>153</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $SignedHeaders=&quot;&quot;;</td></tr>
<tr><td class="h">200</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>622</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $header ( sort keys %headers ){</td></tr>
<tr><td class="h">201</td><td><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>487</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$CanonicalHeaders=$CanonicalHeaders.lc($header).&#39;:&#39;;</td></tr>
<tr><td class="h">202</td><td><div class="c3">406</div><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>318</div><div>533</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach my $element(sort @{$headers{$header}}){</td></tr>
<tr><td class="h">203</td><td><div class="c3">436</div></td><td></td><td></td><td></td><td></td><td><div>628</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$CanonicalHeaders=$CanonicalHeaders.($element).&quot;,&quot;;</td></tr>
<tr><td class="h">204</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">205</td><td><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>473</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$CanonicalHeaders=substr($CanonicalHeaders, 0, -1);</td></tr>
<tr><td class="h">206</td><td><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>310</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$CanonicalHeaders=$CanonicalHeaders.&quot;\r\n&quot;;</td></tr>
<tr><td class="h">207</td><td><div class="c3">406</div></td><td></td><td></td><td></td><td></td><td><div>450</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$SignedHeaders=$SignedHeaders.lc($header).&quot;;&quot;;</td></tr>
<tr><td class="h">208</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">209</td><td colspan="7"></td></tr><tr><td class="h">210</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>247</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$SignedHeaders=substr($SignedHeaders, 0, -1);</td></tr>
<tr><td class="h">211</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>11168</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;set_signed_headers($SignedHeaders);</td></tr>
<tr><td class="h">212</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>9738</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $CanonicalRequest =</td></tr>
<tr><td class="h">213</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;get_request()-&gt;method() . &quot;\r\n&quot; .</td></tr>
<tr><td class="h">214</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$full_uri . &quot;\r\n&quot; .</td></tr>
<tr><td class="h">215</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$canonical_query_string . &quot;\r\n&quot; .</td></tr>
<tr><td class="h">216</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$CanonicalHeaders . &quot;\r\n&quot; .</td></tr>
<tr><td class="h">217</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$SignedHeaders . &quot;\r\n&quot; .</td></tr>
<tr><td class="h">218</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sha256_hex($self-&gt;get_request()-&gt;content());</td></tr>
<tr><td class="h">219</td><td><div class="c3">181</div></td><td></td><td></td><td></td><td></td><td><div>10946</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $CanonicalRequest;</td></tr>
<tr><td class="h">220</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">221</td><td colspan="7"></td></tr><tr><td class="h">222</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub _encode{</td></tr>
<tr><td class="h">223</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#This method is used to add some additional encodings that are not enforced by the URI::Encode module.  AWS expects these.</td></tr>
<tr><td class="h">224</td><td><div class="c3">168</div></td><td></td><td></td><td><div class="c3"><a href="blib-lib-Net-Amazon-SignatureVersion4-pm--subroutine.html#L224">168</a></div></td><td></td><td><div>5307</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $encoder = URI::Encode-&gt;new();</td></tr>
<tr><td class="h">225</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>146776</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $rv=shift;</td></tr>
<tr><td class="h">226</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">#    %20=%2F%2C%3F%3E%3C%60%22%3B%3A%5C%7C%5D%5B%7B%7D&amp;%40%23%24%25%5E=</td></tr>
<tr><td class="h">227</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">#    +  =/  ,  ?  %3E%3C%60%22;  :  %5C%7C]  [  %7B%7D&amp;@  #  $  %25%5E=</td></tr>
<tr><td class="h">228</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>4781</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=$encoder-&gt;encode($rv);</td></tr>
<tr><td class="h">229</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>19915</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\+/\%20/g;</td></tr>
<tr><td class="h">230</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>201</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\//\%2F/g;</td></tr>
<tr><td class="h">231</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>174</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\,/\%2C/g;</td></tr>
<tr><td class="h">232</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>147</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\?/\%3F/g;</td></tr>
<tr><td class="h">233</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>143</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\;/\%3B/g;</td></tr>
<tr><td class="h">234</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>135</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\:/\%3A/g;</td></tr>
<tr><td class="h">235</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>124</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\]/\%5D/g;</td></tr>
<tr><td class="h">236</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>131</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\[/\%5B/g;</td></tr>
<tr><td class="h">237</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>147</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\@/\%40/g;</td></tr>
<tr><td class="h">238</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>178</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\#/\%23/g;</td></tr>
<tr><td class="h">239</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>141</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$rv=~s/\$/\%24/g;</td></tr>
<tr><td class="h">240</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">#    $rv=~s///g;</td></tr>
<tr><td class="h">241</td><td><div class="c3">168</div></td><td></td><td></td><td></td><td></td><td><div>23809</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $rv;</td></tr>
<tr><td class="h">242</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">243</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">1;</td></tr>
<tr><td class="h">244</td><td colspan="7"></td></tr></table>
</body>
</html>