UNPKG

api-console-assets

Version:

This repo only exists to publish api console components to npm

313 lines 201 kB
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> .KEYW {color: #933;} .COMM {color: #bbb; font-style: italic;} .NUMB {color: #393;} .STRN {color: #393;} .REGX {color: #339;} .line {border-right: 1px dotted #666; color: #666; font-style: normal;} </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/* jws-3.3.10 (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license <span class='line'> 2</span> */</span><span class="WHIT"> <span class='line'> 3</span> </span><span class="COMM">/* <span class='line'> 4</span> * jws.js - JSON Web Signature(JWS) and JSON Web Token(JWT) Class <span class='line'> 5</span> * <span class='line'> 6</span> * Copyright (c) 2010-2017 Kenji Urushima (kenji.urushima@gmail.com) <span class='line'> 7</span> * <span class='line'> 8</span> * This software is licensed under the terms of the MIT License. <span class='line'> 9</span> * https://kjur.github.io/jsrsasign/license/ <span class='line'> 10</span> * <span class='line'> 11</span> * The above copyright and license notice shall be <span class='line'> 12</span> * included in all copies or substantial portions of the Software. <span class='line'> 13</span> */</span><span class="WHIT"> <span class='line'> 14</span> <span class='line'> 15</span> </span><span class="COMM">/** <span class='line'> 16</span> * @fileOverview <span class='line'> 17</span> * @name jws-3.3.js <span class='line'> 18</span> * @author Kenji Urushima kenji.urushima@gmail.com <span class='line'> 19</span> * @version jsrsasign 8.0.3 jws 3.3.10 (2017-Jul-11) <span class='line'> 20</span> * @since jsjws 1.0, jsrsasign 4.8.0 <span class='line'> 21</span> * @license &lt;a href="https://kjur.github.io/jsrsasign/license/">MIT License&lt;/a> <span class='line'> 22</span> */</span><span class="WHIT"> <span class='line'> 23</span> <span class='line'> 24</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">KJUR</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">KJUR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">KJUR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'> 25</span> <span class='line'> 26</span> </span><span class="COMM">/** <span class='line'> 27</span> * kjur's JSON Web Signature/Token(JWS/JWT) library name space <span class='line'> 28</span> * &lt;p> <span class='line'> 29</span> * This namespace privides following JWS/JWS related classes. <span class='line'> 30</span> * &lt;ul> <span class='line'> 31</span> * &lt;li>{@link KJUR.jws.JWS} - JSON Web Signature/Token(JWS/JWT) class&lt;/li> <span class='line'> 32</span> * &lt;li>{@link KJUR.jws.JWSJS} - JWS JSON Serialization(JWSJS) class&lt;/li> <span class='line'> 33</span> * &lt;li>{@link KJUR.jws.IntDate} - UNIX origin time utility class&lt;/li> <span class='line'> 34</span> * &lt;/ul> <span class='line'> 35</span> * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2. <span class='line'> 36</span> * &lt;/p> <span class='line'> 37</span> * @name KJUR.jws <span class='line'> 38</span> * @namespace <span class='line'> 39</span> */</span><span class="WHIT"> <span class='line'> 40</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">KJUR.jws</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">KJUR.jws</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">KJUR.jws</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'> 41</span> <span class='line'> 42</span> </span><span class="COMM">/** <span class='line'> 43</span> * JSON Web Signature(JWS) class.&lt;br/> <span class='line'> 44</span> * @name KJUR.jws.JWS <span class='line'> 45</span> * @class JSON Web Signature(JWS) class <span class='line'> 46</span> * @see &lt;a href="https://kjur.github.io/jsjws/">'jwjws'(JWS JavaScript Library) home page https://kjur.github.io/jsjws/&lt;/a> <span class='line'> 47</span> * @see &lt;a href="https://kjur.github.io/jsrsasigns/">'jwrsasign'(RSA Sign JavaScript Library) home page https://kjur.github.io/jsrsasign/&lt;/a> <span class='line'> 48</span> * @see &lt;a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-14">IETF I-D JSON Web Algorithms (JWA)&lt;/a> <span class='line'> 49</span> * @since jsjws 1.0 <span class='line'> 50</span> * @description <span class='line'> 51</span> * This class provides JSON Web Signature(JWS)/JSON Web Token(JWT) signing and validation. <span class='line'> 52</span> * <span class='line'> 53</span> * &lt;h4>METHOD SUMMARY&lt;/h4> <span class='line'> 54</span> * Here is major methods of {@link KJUR.jws.JWS} class. <span class='line'> 55</span> * &lt;ul> <span class='line'> 56</span> * &lt;li>&lt;b>SIGN&lt;/b>&lt;br/> <span class='line'> 57</span> * &lt;li>{@link KJUR.jws.JWS.sign} - sign JWS&lt;/li> <span class='line'> 58</span> * &lt;/li> <span class='line'> 59</span> * &lt;li>&lt;b>VERIFY&lt;/b>&lt;br/> <span class='line'> 60</span> * &lt;li>{@link KJUR.jws.JWS.verify} - verify JWS signature&lt;/li> <span class='line'> 61</span> * &lt;li>{@link KJUR.jws.JWS.verifyJWT} - verify properties of JWT token at specified time&lt;/li> <span class='line'> 62</span> * &lt;/li> <span class='line'> 63</span> * &lt;li>&lt;b>UTILITY&lt;/b>&lt;br/> <span class='line'> 64</span> * &lt;li>{@link KJUR.jws.JWS.getJWKthumbprint} - get RFC 7638 JWK thumbprint&lt;/li> <span class='line'> 65</span> * &lt;li>{@link KJUR.jws.JWS.isSafeJSONString} - check whether safe JSON string or not&lt;/li> <span class='line'> 66</span> * &lt;li>{@link KJUR.jws.JWS.readSafeJSONString} - read safe JSON string only&lt;/li> <span class='line'> 67</span> * &lt;/li> <span class='line'> 68</span> * &lt;/ul> <span class='line'> 69</span> * <span class='line'> 70</span> * &lt;h4>SUPPORTED SIGNATURE ALGORITHMS&lt;/h4> <span class='line'> 71</span> * Here is supported algorithm names for {@link KJUR.jws.JWS.sign} and <span class='line'> 72</span> * {@link KJUR.jws.JWS.verify} methods. <span class='line'> 73</span> * &lt;table> <span class='line'> 74</span> * &lt;tr>&lt;th>alg value&lt;/th>&lt;th>spec requirement&lt;/th>&lt;th>jsjws support&lt;/th>&lt;/tr> <span class='line'> 75</span> * &lt;tr>&lt;td>HS256&lt;/td>&lt;td>REQUIRED&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 76</span> * &lt;tr>&lt;td>HS384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 77</span> * &lt;tr>&lt;td>HS512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 78</span> * &lt;tr>&lt;td>RS256&lt;/td>&lt;td>RECOMMENDED&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 79</span> * &lt;tr>&lt;td>RS384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 80</span> * &lt;tr>&lt;td>RS512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 81</span> * &lt;tr>&lt;td>ES256&lt;/td>&lt;td>RECOMMENDED+&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 82</span> * &lt;tr>&lt;td>ES384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 83</span> * &lt;tr>&lt;td>ES512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>-&lt;/td>&lt;/tr> <span class='line'> 84</span> * &lt;tr>&lt;td>PS256&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 85</span> * &lt;tr>&lt;td>PS384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 86</span> * &lt;tr>&lt;td>PS512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'> 87</span> * &lt;tr>&lt;td>none&lt;/td>&lt;td>REQUIRED&lt;/td>&lt;td>SUPPORTED(signature generation only)&lt;/td>&lt;/tr> <span class='line'> 88</span> * &lt;/table> <span class='line'> 89</span> * &lt;dl> <span class='line'> 90</span> * &lt;dt>&lt;b>NOTE1&lt;/b> <span class='line'> 91</span> * &lt;dd>HS384 is supported since jsjws 3.0.2 with jsrsasign 4.1.4. <span class='line'> 92</span> * &lt;dt>&lt;b>NOTE2&lt;/b> <span class='line'> 93</span> * &lt;dd>Some deprecated methods have been removed since jws 3.3 of jsrsasign 4.10.0. <span class='line'> 94</span> * Removed methods are following: <span class='line'> 95</span> * &lt;ul> <span class='line'> 96</span> * &lt;li>JWS.verifyJWSByNE&lt;/li> <span class='line'> 97</span> * &lt;li>JWS.verifyJWSByKey&lt;/li> <span class='line'> 98</span> * &lt;li>JWS.generateJWSByNED&lt;/li> <span class='line'> 99</span> * &lt;li>JWS.generateJWSByKey&lt;/li> <span class='line'>100</span> * &lt;li>JWS.generateJWSByP1PrvKey&lt;/li> <span class='line'>101</span> * &lt;/ul> <span class='line'>102</span> * &lt;/dl> <span class='line'>103</span> * &lt;b>EXAMPLE&lt;/b>&lt;br/> <span class='line'>104</span> * @example <span class='line'>105</span> * // JWS signing <span class='line'>106</span> * sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {"utf8": "password"}); <span class='line'>107</span> * // JWS validation <span class='line'>108</span> * isValid = KJUR.jws.JWS.verify('eyJjdHkiOiJKV1QiLCJhbGc...', {"utf8": "password"}); <span class='line'>109</span> * // JWT validation <span class='line'>110</span> * isValid = KJUR.jws.JWS.verifyJWT('eyJh...', {"utf8": "password"}, { <span class='line'>111</span> * alg: ['HS256', 'HS384'], <span class='line'>112</span> * iss: ['http://foo.com'] <span class='line'>113</span> * }); <span class='line'>114</span> */</span><span class="WHIT"> <span class='line'>115</span> </span><span class="NAME">KJUR.jws.JWS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>116</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_KJUR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">KJUR</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">_KJUR_jws_JWS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR.jws.JWS</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">_isSafeJSONString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_jws_JWS.isSafeJSONString</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>119</span> <span class='line'>120</span> </span><span class="WHIT"> </span><span class="COMM">// === utility =============================================================</span><span class="WHIT"> <span class='line'>121</span> <span class='line'>122</span> </span><span class="WHIT"> </span><span class="COMM">/** <span class='line'>123</span> * parse JWS string and set public property 'parsedJWS' dictionary.&lt;br/> <span class='line'>124</span> * @name parseJWS <span class='line'>125</span> * @memberOf KJUR.jws.JWS <span class='line'>126</span> * @function <span class='line'>127</span> * @param {String} sJWS JWS signature string to be parsed. <span class='line'>128</span> * @throws if sJWS is not comma separated string such like "Header.Payload.Signature". <span class='line'>129</span> * @throws if JWS Header is a malformed JSON string. <span class='line'>130</span> * @since jws 1.1 <span class='line'>131</span> */</span><span class="WHIT"> <span class='line'>132</span> </span><span class="WHIT"> </span><span class="NAME">this.parseJWS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sJWS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sigValNotNeeded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>133</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.parsedJWS</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> <span class='line'>134</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sigValNotNeeded</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parsedJWS.sigvalH</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>136</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>137</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">matchResult</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sJWS.match</span><span class="PUNC">(</span><span class="REGX">/^([^.]+)\.([^.]+)\.([^.]+)$/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>138</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">matchResult</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>139</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"JWS signature is not a form of 'Head.Payload.SigValue'."</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>140</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>141</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b6Head</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matchResult</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b6Payload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matchResult</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>143</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b6SigVal</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matchResult</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sSI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b6Head</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b6Payload</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>145</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>146</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.headB64U</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b6Head</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>147</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.payloadB64U</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b6Payload</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>148</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.sigvalB64U</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b6SigVal</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>149</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.si</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sSI</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>150</span> <span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">sigValNotNeeded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>152</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hSigVal</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b64utohex</span><span class="PUNC">(</span><span class="NAME">b6SigVal</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>153</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">biSigVal</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseBigInt</span><span class="PUNC">(</span><span class="NAME">hSigVal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>154</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.sigvalH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hSigVal</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.sigvalBI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">biSigVal</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>157</span> <span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sHead</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b64utoutf8</span><span class="PUNC">(</span><span class="NAME">b6Head</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>159</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sPayload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b64utoutf8</span><span class="PUNC">(</span><span class="NAME">b6Payload</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.headS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sHead</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>161</span> </span><span class="WHIT"> </span><span class="NAME">this.parsedJWS.payloadS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sPayload</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>162</span> <span class='line'>163</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="WHIT"> </span><span class="NAME">_isSafeJSONString</span><span class="PUNC">(</span><span class="NAME">sHead</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parsedJWS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'headP'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> <span class='line'>164</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"malformed JSON string for JWS Head: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sHead</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>165</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>166</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>167</span> <span class='line'>168</span> </span><span class="COMM">// === major static method ========================================================</span><span class="WHIT"> <span class='line'>169</span> <span class='line'>170</span> </span><span class="COMM">/** <span class='line'>171</span> * generate JWS signature by specified key&lt;br/> <span class='line'>172</span> * @name sign <span class='line'>173</span> * @memberOf KJUR.jws.JWS <span class='line'>174</span> * @function <span class='line'>175</span> * @static <span class='line'>176</span> * @param {String} alg JWS algorithm name to sign and force set to sHead or null <span class='line'>177</span> * @param {String} spHead string or object of JWS Header <span class='line'>178</span> * @param {String} spPayload string or object of JWS Payload <span class='line'>179</span> * @param {String} key string of private key or mac key object to sign <span class='line'>180</span> * @param {String} pass (OPTION)passcode to use encrypted asymmetric private key <span class='line'>181</span> * @return {String} JWS signature string <span class='line'>182</span> * @since jws 3.0.0 <span class='line'>183</span> * @see &lt;a href="https://kjur.github.io/jsrsasign/api/symbols/KJUR.crypto.Signature.html">jsrsasign KJUR.crypto.Signature method&lt;/a> <span class='line'>184</span> * @see &lt;a href="https://kjur.github.io/jsrsasign/api/symbols/KJUR.crypto.Mac.html">jsrsasign KJUR.crypto.Mac method&lt;/a> <span class='line'>185</span> * @description <span class='line'>186</span> * This method supports following algorithms. <span class='line'>187</span> * &lt;table> <span class='line'>188</span> * &lt;tr>&lt;th>alg value&lt;/th>&lt;th>spec requirement&lt;/th>&lt;th>jsjws support&lt;/th>&lt;/tr> <span class='line'>189</span> * &lt;tr>&lt;td>HS256&lt;/td>&lt;td>REQUIRED&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>190</span> * &lt;tr>&lt;td>HS384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>191</span> * &lt;tr>&lt;td>HS512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>192</span> * &lt;tr>&lt;td>RS256&lt;/td>&lt;td>RECOMMENDED&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>193</span> * &lt;tr>&lt;td>RS384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>194</span> * &lt;tr>&lt;td>RS512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>195</span> * &lt;tr>&lt;td>ES256&lt;/td>&lt;td>RECOMMENDED+&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>196</span> * &lt;tr>&lt;td>ES384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>197</span> * &lt;tr>&lt;td>ES512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>-&lt;/td>&lt;/tr> <span class='line'>198</span> * &lt;tr>&lt;td>PS256&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>199</span> * &lt;tr>&lt;td>PS384&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>200</span> * &lt;tr>&lt;td>PS512&lt;/td>&lt;td>OPTIONAL&lt;/td>&lt;td>SUPPORTED&lt;/td>&lt;/tr> <span class='line'>201</span> * &lt;tr>&lt;td>none&lt;/td>&lt;td>REQUIRED&lt;/td>&lt;td>SUPPORTED(signature generation only)&lt;/td>&lt;/tr> <span class='line'>202</span> * &lt;/table> <span class='line'>203</span> * &lt;dl> <span class='line'>204</span> * &lt;dt>NOTE1: <span class='line'>205</span> * &lt;dd>salt length of RSAPSS signature is the same as the hash algorithm length <span class='line'>206</span> * because of &lt;a href="http://www.ietf.org/mail-archive/web/jose/current/msg02901.html">IETF JOSE ML discussion&lt;/a>. <span class='line'>207</span> * &lt;dt>NOTE2: <span class='line'>208</span> * &lt;dd>To support HS384, patched version of CryptoJS is used. <span class='line'>209</span> * &lt;a href="https://code.google.com/p/crypto-js/issues/detail?id=84">See here for detail&lt;/a>. <span class='line'>210</span> * &lt;dt>NOTE3: <span class='line'>211</span> * From jsrsasign 4.10.0 jws 3.3.0, Way to provide password <span class='line'>212</span> * for HS* algorithm is changed. The 'key' attribute value is <span class='line'>213</span> * passed to {@link KJUR.crypto.Mac.setPassword} so please see <span class='line'>214</span> * {@link KJUR.crypto.Mac.setPassword} for detail. <span class='line'>215</span> * As for backword compatibility, if key is a string, has even length and <span class='line'>216</span> * 0..9, A-F or a-f characters, key string is treated as a hexadecimal <span class='line'>217</span> * otherwise it is treated as a raw string. <span class='line'>218</span> * &lt;dd> <span class='line'>219</span> * &lt;/dl> <span class='line'>220</span> * &lt;b>EXAMPLE&lt;/b>&lt;br/> <span class='line'>221</span> * @example <span class='line'>222</span> * // sign HS256 signature with password "aaa" implicitly handled as string <span class='line'>223</span> * sJWS = KJUR.jws.JWS.sign(null, {alg: "HS256", cty: "JWT"}, {age: 21}, "aaa"); <span class='line'>224</span> * // sign HS256 signature with password "6161" implicitly handled as hex <span class='line'>225</span> * sJWS = KJUR.jws.JWS.sign(null, {alg: "HS256", cty: "JWT"}, {age: 21}, "6161"); <span class='line'>226</span> * // sign HS256 signature with base64 password <span class='line'>227</span> * sJWS = KJUR.jws.JWS.sign(null, {alg: "HS256"}, {age: 21}, {b64: "Mi/8..a="}); <span class='line'>228</span> * // sign RS256 signature with PKCS#8 PEM RSA private key <span class='line'>229</span> * sJWS = KJUR.jws.JWS.sign(null, {alg: "RS256"}, {age: 21}, "-----BEGIN PRIVATE KEY..."); <span class='line'>230</span> * // sign RS256 signature with PKCS#8 PEM ECC private key with passcode <span class='line'>231</span> * sJWS = KJUR.jws.JWS.sign(null, {alg: "ES256"}, {age: 21}, <span class='line'>232</span> * "-----BEGIN PRIVATE KEY...", "keypass"); <span class='line'>233</span> * // header and payload can be passed by both string and object <span class='line'>234</span> * sJWS = KJUR.jws.JWS.sign(null, '{alg:"HS256",cty:"JWT"}', '{age:21}', "aaa"); <span class='line'>235</span> */</span><span class="WHIT"> <span class='line'>236</span> </span><span class="NAME">KJUR.jws.JWS.sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spPayload</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pass</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>237</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_KJUR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">KJUR</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>238</span> </span><span class="WHIT"> </span><span class="NAME">_KJUR_jws</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR.jws</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>239</span> </span><span class="WHIT"> </span><span class="NAME">_KJUR_jws_JWS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_jws.JWS</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">_readSafeJSONString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_jws_JWS.readSafeJSONString</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>241</span> </span><span class="WHIT"> </span><span class="NAME">_isSafeJSONString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_jws_JWS.isSafeJSONString</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">_KJUR_crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR.crypto</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">_ECDSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_crypto.ECDSA</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">_Mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_crypto.Mac</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>245</span> </span><span class="WHIT"> </span><span class="NAME">_Signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_crypto.Signature</span><span class="PUNC">,</span><span class="WHIT"> <span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">_JSON</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JSON</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>247</span> <span class='line'>248</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sHeader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pHeader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sPayload</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>249</span> <span class='line'>250</span> </span><span class="WHIT"> </span><span class="COMM">// 1. check signatureInput(Header, Payload) is string or object</span><span class="WHIT"> <span class='line'>251</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="WHIT"> <span class='line'>252</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"spHeader must be JSON string or object: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>253</span> <span class='line'>254</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>255</span> </span><span class="WHIT"> </span><span class="NAME">pHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>256</span> </span><span class="WHIT"> </span><span class="NAME">sHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_JSON.stringify</span><span class="PUNC">(</span><span class="NAME">pHeader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>257</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>258</span> <span class='line'>259</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>260</span> </span><span class="WHIT"> </span><span class="NAME">sHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spHeader</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="WHIT"> </span><span class="NAME">_isSafeJSONString</span><span class="PUNC">(</span><span class="NAME">sHeader</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> <span class='line'>262</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"JWS Head is not safe JSON string: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sHeader</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>263</span> </span><span class="WHIT"> </span><span class="NAME">pHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_readSafeJSONString</span><span class="PUNC">(</span><span class="NAME">sHeader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>264</span> <span class='line'>265</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>266</span> <span class='line'>267</span> </span><span class="WHIT"> </span><span class="NAME">sPayload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spPayload</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>268</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">spPayload</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">sPayload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_JSON.stringify</span><span class="PUNC">(</span><span class="NAME">spPayload</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>269</span> <span class='line'>270</span> </span><span class="WHIT"> </span><span class="COMM">// 2. use alg if defined in sHeader</span><span class="WHIT"> <span class='line'>271</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> <span class='line'>272</span> </span><span class="WHIT"> </span><span class="NAME">pHeader</span><span class="PUNC">[</span><span class="STRN">'alg'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>273</span> </span><span class="WHIT"> </span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pHeader</span><span class="PUNC">[</span><span class="STRN">'alg'</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>274</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>275</span> <span class='line'>276</span> </span><span class="WHIT"> </span><span class="COMM">// 3. update sHeader to add alg if alg undefined</span><span class="WHIT"> <span class='line'>277</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">''</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> <span class='line'>278</span> </span><span class="WHIT"> </span><span class="NAME">pHeader</span><span class="PUNC">[</span><span class="STRN">'alg'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>279</span> </span><span class="WHIT"> </span><span class="NAME">pHeader</span><span class="PUNC">[</span><span class="STRN">'alg'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>280</span> </span><span class="WHIT"> </span><span class="NAME">sHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_JSON.stringify</span><span class="PUNC">(</span><span class="NAME">pHeader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>281</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>282</span> <span class='line'>283</span> </span><span class="WHIT"> </span><span class="COMM">// 4. check explicit algorithm doesn't match with JWS header.</span><span class="WHIT"> <span class='line'>284</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">pHeader.alg</span><span class="PUNC">)</span><span class="WHIT"> <span class='line'>285</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"alg and sHeader.alg doesn't match: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"!="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pHeader.alg</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>286</span> <span class='line'>287</span> </span><span class="WHIT"> </span><span class="COMM">// 5. set signature algorithm like SHA1withRSA</span><span class="WHIT"> <span class='line'>288</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sigAlg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>289</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_KJUR_jws_JWS.jwsalg2sigalg</span><span class="PUNC">[</span><span class="NAME">alg</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>290</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"unsupported alg name: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>291</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>292</span> </span><span class="WHIT"> </span><span class="NAME">sigAlg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_KJUR_jws_JWS.jwsalg2sigalg</span><span class="PUNC">[</span><span class="NAME">alg</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>293</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>294</span> </span><span class="WHIT"> <span class='line'>295</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">uHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">utf8tob64u</span><span class="PUNC">(</span><span class="NAME">sHeader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>296</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">uPayload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">utf8tob64u</span><span class="PUNC">(</span><span class="NAME">sPayload</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>297</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">uSignatureInput</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uHeader</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">uPayload</span><span class="WHIT"> <span class='line'>298</span> </span><span class="WHIT"> </span><span class="COMM">// 6. sign</span><span class="WHIT"> <span class='line'>299</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hSig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>300</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sigAlg.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"Hmac"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>301</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> <span class='line'>302</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"mac key shall be specified for HS* alg"</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>303</span> </span><span class="WHIT"> </span><span class="COMM">//alert("sigAlg=" + sigAlg);</span><span class="WHIT"> <span class='line'>304</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">_Mac</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'alg'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">sigAlg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'prov'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'cryptojs'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'pass'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">mac.updateString</span><span class="PUNC">(</span><span class="NAME">uSignatureInput</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>306</span> </span><span class="WHIT"> </span><span class="NAME">hSig</sp