group__jose__jws.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  6. <meta name="generator" content="Doxygen 1.8.13"/>
  7. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  8. <title>José: JWS</title>
  9. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  10. <script type="text/javascript" src="jquery.js"></script>
  11. <script type="text/javascript" src="dynsections.js"></script>
  12. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  13. <script type="text/javascript" src="search/searchdata.js"></script>
  14. <script type="text/javascript" src="search/search.js"></script>
  15. <link href="doxygen.css" rel="stylesheet" type="text/css" />
  16. </head>
  17. <body>
  18. <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
  19. <div id="titlearea">
  20. <table cellspacing="0" cellpadding="0">
  21. <tbody>
  22. <tr style="height: 56px;">
  23. <td id="projectalign" style="padding-left: 0.5em;">
  24. <div id="projectname">José
  25. </div>
  26. </td>
  27. </tr>
  28. </tbody>
  29. </table>
  30. </div>
  31. <!-- end header part -->
  32. <!-- Generated by Doxygen 1.8.13 -->
  33. <script type="text/javascript">
  34. var searchBox = new SearchBox("searchBox", "search",false,'Search');
  35. </script>
  36. <script type="text/javascript" src="menudata.js"></script>
  37. <script type="text/javascript" src="menu.js"></script>
  38. <script type="text/javascript">
  39. $(function() {
  40. initMenu('',true,false,'search.php','Search');
  41. $(document).ready(function() { init_search(); });
  42. });
  43. </script>
  44. <div id="main-nav"></div>
  45. </div><!-- top -->
  46. <!-- window showing the filter options -->
  47. <div id="MSearchSelectWindow"
  48. onmouseover="return searchBox.OnSearchSelectShow()"
  49. onmouseout="return searchBox.OnSearchSelectHide()"
  50. onkeydown="return searchBox.OnSearchSelectKey(event)">
  51. </div>
  52. <!-- iframe showing the search results (closed by default) -->
  53. <div id="MSearchResultsWindow">
  54. <iframe src="javascript:void(0)" frameborder="0"
  55. name="MSearchResults" id="MSearchResults">
  56. </iframe>
  57. </div>
  58. <div class="header">
  59. <div class="summary">
  60. <a href="#func-members">Functions</a> </div>
  61. <div class="headertitle">
  62. <div class="title">JWS</div> </div>
  63. </div><!--header-->
  64. <div class="contents">
  65. <p>JSON Web Signature (RFC 7515)
  66. <a href="#details">More...</a></p>
  67. <table class="memberdecls">
  68. <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
  69. Functions</h2></td></tr>
  70. <tr class="memitem:ga25b7bfa0fc1293dbe349d2870479f80a"><td class="memItemLeft" align="right" valign="top">json_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga25b7bfa0fc1293dbe349d2870479f80a">jose_jws_hdr</a> (const json_t *sig)</td></tr>
  71. <tr class="memdesc:ga25b7bfa0fc1293dbe349d2870479f80a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Merges the JOSE headers of a JWS signature object. <a href="#ga25b7bfa0fc1293dbe349d2870479f80a">More...</a><br /></td></tr>
  72. <tr class="separator:ga25b7bfa0fc1293dbe349d2870479f80a"><td class="memSeparator" colspan="2">&#160;</td></tr>
  73. <tr class="memitem:ga562d39b9b1d0ba321f9246e4d4c3b350"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga562d39b9b1d0ba321f9246e4d4c3b350">jose_jws_sig</a> (jose_cfg_t *cfg, json_t *jws, json_t *sig, const json_t *jwk)</td></tr>
  74. <tr class="memdesc:ga562d39b9b1d0ba321f9246e4d4c3b350"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates one or more signatures in a JWS object. <a href="#ga562d39b9b1d0ba321f9246e4d4c3b350">More...</a><br /></td></tr>
  75. <tr class="separator:ga562d39b9b1d0ba321f9246e4d4c3b350"><td class="memSeparator" colspan="2">&#160;</td></tr>
  76. <tr class="memitem:ga73152ceaf852dd2d897154fb250a7860"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga73152ceaf852dd2d897154fb250a7860">jose_jws_sig_io</a> (jose_cfg_t *cfg, json_t *jws, json_t *sig, const json_t *jwk)</td></tr>
  77. <tr class="memdesc:ga73152ceaf852dd2d897154fb250a7860"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates one or more signatures in a JWS object using streaming. <a href="#ga73152ceaf852dd2d897154fb250a7860">More...</a><br /></td></tr>
  78. <tr class="separator:ga73152ceaf852dd2d897154fb250a7860"><td class="memSeparator" colspan="2">&#160;</td></tr>
  79. <tr class="memitem:ga89a18c4b4d7cd0f9d42224ef5698abe7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga89a18c4b4d7cd0f9d42224ef5698abe7">jose_jws_ver</a> (jose_cfg_t *cfg, const json_t *jws, const json_t *sig, const json_t *jwk, bool all)</td></tr>
  80. <tr class="memdesc:ga89a18c4b4d7cd0f9d42224ef5698abe7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies signatures of one or more JWKs in a JWS object. <a href="#ga89a18c4b4d7cd0f9d42224ef5698abe7">More...</a><br /></td></tr>
  81. <tr class="separator:ga89a18c4b4d7cd0f9d42224ef5698abe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
  82. <tr class="memitem:ga35a5d3c37101fc127933f3c856b46cc8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga35a5d3c37101fc127933f3c856b46cc8">jose_jws_ver_io</a> (jose_cfg_t *cfg, const json_t *jws, const json_t *sig, const json_t *jwk, bool all)</td></tr>
  83. <tr class="memdesc:ga35a5d3c37101fc127933f3c856b46cc8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies signatures of one or more JWKs in a JWS object using streaming. <a href="#ga35a5d3c37101fc127933f3c856b46cc8">More...</a><br /></td></tr>
  84. <tr class="separator:ga35a5d3c37101fc127933f3c856b46cc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
  85. </table>
  86. <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
  87. <p>JSON Web Signature (RFC 7515) </p>
  88. <p>JSON Web Token (RFC 7519)</p>
  89. <p>A JSON Web Signature (JWS) is a standard data format for expresing cryptographic signatures in JSON. The signatures are produced using a JSON Web Key (JWK).</p>
  90. <p>For example, to create a simple signature of a string using a JWK (error handling omitted): </p><pre class="fragment">json_t *sig(const char *str, const json_t *jwk) {
  91. json_auto_t *jws = json_pack("{s:o}", "payload",
  92. jose_b64_enc(str, strlen(str)));
  93. jose_jws_sig(NULL, jws, NULL, jwk);
  94. return json_incref(jws);
  95. }
  96. </pre><p>Likewise, to verify this signature (again, error handling omitted): </p><pre class="fragment">char *ver(const json_t *jwe, const json_t *jwk) {
  97. char *str = NULL;
  98. size_t len = 0;
  99. if (!jose_jws_ver(NULL, jws, NULL, jwk))
  100. return NULL;
  101. len = jose_b64_dec(json_object_get(jwe, "payload"), NULL, 0);
  102. str = calloc(1, len + 1);
  103. jose_b64_dec(json_object_get(jwe, "payload"), str, len);
  104. return str;
  105. }
  106. </pre><dl class="section see"><dt>See also</dt><dd><a href="https://tools.ietf.org/html/rfc7515">https://tools.ietf.org/html/rfc7515</a></dd></dl>
  107. <p>A JSON Web Token (JWT) is a standard data format for expresing claims transferred between to parties in JSON. The JWT is wrapped in any number of Signatures (JWS) or Encryptions (JWE).</p>
  108. <dl class="section see"><dt>See also</dt><dd><a href="https://tools.ietf.org/html/rfc7515">https://tools.ietf.org/html/rfc7515</a> </dd></dl>
  109. <h2 class="groupheader">Function Documentation</h2>
  110. <a id="ga25b7bfa0fc1293dbe349d2870479f80a"></a>
  111. <h2 class="memtitle"><span class="permalink"><a href="#ga25b7bfa0fc1293dbe349d2870479f80a">&#9670;&nbsp;</a></span>jose_jws_hdr()</h2>
  112. <div class="memitem">
  113. <div class="memproto">
  114. <table class="memname">
  115. <tr>
  116. <td class="memname">json_t* jose_jws_hdr </td>
  117. <td>(</td>
  118. <td class="paramtype">const json_t *&#160;</td>
  119. <td class="paramname"><em>sig</em></td><td>)</td>
  120. <td></td>
  121. </tr>
  122. </table>
  123. </div><div class="memdoc">
  124. <p>Merges the JOSE headers of a JWS signature object. </p>
  125. <dl class="params"><dt>Parameters</dt><dd>
  126. <table class="params">
  127. <tr><td class="paramname">sig</td><td>A JWS signature object. </td></tr>
  128. </table>
  129. </dd>
  130. </dl>
  131. <dl class="section return"><dt>Returns</dt><dd>The newly allocated JOSE header. </dd></dl>
  132. </div>
  133. </div>
  134. <a id="ga562d39b9b1d0ba321f9246e4d4c3b350"></a>
  135. <h2 class="memtitle"><span class="permalink"><a href="#ga562d39b9b1d0ba321f9246e4d4c3b350">&#9670;&nbsp;</a></span>jose_jws_sig()</h2>
  136. <div class="memitem">
  137. <div class="memproto">
  138. <table class="memname">
  139. <tr>
  140. <td class="memname">bool jose_jws_sig </td>
  141. <td>(</td>
  142. <td class="paramtype">jose_cfg_t *&#160;</td>
  143. <td class="paramname"><em>cfg</em>, </td>
  144. </tr>
  145. <tr>
  146. <td class="paramkey"></td>
  147. <td></td>
  148. <td class="paramtype">json_t *&#160;</td>
  149. <td class="paramname"><em>jws</em>, </td>
  150. </tr>
  151. <tr>
  152. <td class="paramkey"></td>
  153. <td></td>
  154. <td class="paramtype">json_t *&#160;</td>
  155. <td class="paramname"><em>sig</em>, </td>
  156. </tr>
  157. <tr>
  158. <td class="paramkey"></td>
  159. <td></td>
  160. <td class="paramtype">const json_t *&#160;</td>
  161. <td class="paramname"><em>jwk</em>&#160;</td>
  162. </tr>
  163. <tr>
  164. <td></td>
  165. <td>)</td>
  166. <td></td><td></td>
  167. </tr>
  168. </table>
  169. </div><div class="memdoc">
  170. <p>Creates one or more signatures in a JWS object. </p>
  171. <p>The JWS object (<code>jws</code>) must contain the "payload" property.</p>
  172. <p>All signatures created will be appended to the JWS specified by <code>jws</code>. If the resulting JWS (<code>jws</code>) would contain only a single signature, the JWS will be represented in Flattened JWS JSON Serialization Syntax. Otherwise, it will be represented in General JWS JSON Serialization Syntax.</p>
  173. <p>If <code>jwk</code> contains a JWK, a single signature is created. In this case, <code>jws</code> must contain either a JWS signature object template or NULL. You may specify algorithms or other signature behaviors simply by specifying them in the JOSE headers of the JWS signature object template as defined by RFC 7515. If a required property is missing, sensible defaults will be used and inserted into the JOSE headers; inferring them from the JWK (<code>jwk</code>) where possible.</p>
  174. <p>If <code>jwk</code> contains an array of JWKs or a JWKSet, multiple signatures are created. In this case, the <code>sig</code> parameter must contain one of the following values:</p>
  175. <ol type="1">
  176. <li>A JWS signature object template that will be used for all signatures. In this case, a copy will be made for each signature and <code>sig</code> will not be modified in any way.</li>
  177. <li>An array of JWS signature object templates. Each template will be used with its corresponding JWK from <code>jwk</code>. If the arrays in <code>sig</code> and <code>jwk</code> are a different size, an error will occur.</li>
  178. <li>NULL. This has the same effect as passing NULL for each separate key.</li>
  179. </ol>
  180. <dl class="params"><dt>Parameters</dt><dd>
  181. <table class="params">
  182. <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
  183. <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
  184. <tr><td class="paramname">sig</td><td>The JWS signature object template(s) or NULL. </td></tr>
  185. <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for creating signatures. </td></tr>
  186. </table>
  187. </dd>
  188. </dl>
  189. <dl class="section return"><dt>Returns</dt><dd>On success, true. Otherwise, false. </dd></dl>
  190. </div>
  191. </div>
  192. <a id="ga73152ceaf852dd2d897154fb250a7860"></a>
  193. <h2 class="memtitle"><span class="permalink"><a href="#ga73152ceaf852dd2d897154fb250a7860">&#9670;&nbsp;</a></span>jose_jws_sig_io()</h2>
  194. <div class="memitem">
  195. <div class="memproto">
  196. <table class="memname">
  197. <tr>
  198. <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_jws_sig_io </td>
  199. <td>(</td>
  200. <td class="paramtype">jose_cfg_t *&#160;</td>
  201. <td class="paramname"><em>cfg</em>, </td>
  202. </tr>
  203. <tr>
  204. <td class="paramkey"></td>
  205. <td></td>
  206. <td class="paramtype">json_t *&#160;</td>
  207. <td class="paramname"><em>jws</em>, </td>
  208. </tr>
  209. <tr>
  210. <td class="paramkey"></td>
  211. <td></td>
  212. <td class="paramtype">json_t *&#160;</td>
  213. <td class="paramname"><em>sig</em>, </td>
  214. </tr>
  215. <tr>
  216. <td class="paramkey"></td>
  217. <td></td>
  218. <td class="paramtype">const json_t *&#160;</td>
  219. <td class="paramname"><em>jwk</em>&#160;</td>
  220. </tr>
  221. <tr>
  222. <td></td>
  223. <td>)</td>
  224. <td></td><td></td>
  225. </tr>
  226. </table>
  227. </div><div class="memdoc">
  228. <p>Creates one or more signatures in a JWS object using streaming. </p>
  229. <p>This function behaves substantially like <a class="el" href="group__jose__jws.html#ga562d39b9b1d0ba321f9246e4d4c3b350" title="Creates one or more signatures in a JWS object. ">jose_jws_sig()</a> except:</p>
  230. <p>The payload is not specified in the JWS (<code>jws</code>). Rather, the payload is provided using the returned IO object. The input to the returned IO object will not be internally Base64 encoded. So you may need to prepend the IO chain with the result of <a class="el" href="group__jose__b64.html#gad72c180de43c9da3456bdb0d166092ff" title="Creates a new IO object which performs URL-safe Base64 encoding. ">jose_b64_enc_io()</a> (depending on your situation).</p>
  231. <p>Likewise, the payload is not stored in the JWS object (<code>jws</code>). This allows for detached payloads and decreases memory use for signatures over large payloads. If you would like to attach the payload, it is your responsibility to do so manually.</p>
  232. <dl class="params"><dt>Parameters</dt><dd>
  233. <table class="params">
  234. <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
  235. <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
  236. <tr><td class="paramname">sig</td><td>The JWS signature object template(s) or NULL. </td></tr>
  237. <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for creating signatures. </td></tr>
  238. </table>
  239. </dd>
  240. </dl>
  241. <dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
  242. </div>
  243. </div>
  244. <a id="ga89a18c4b4d7cd0f9d42224ef5698abe7"></a>
  245. <h2 class="memtitle"><span class="permalink"><a href="#ga89a18c4b4d7cd0f9d42224ef5698abe7">&#9670;&nbsp;</a></span>jose_jws_ver()</h2>
  246. <div class="memitem">
  247. <div class="memproto">
  248. <table class="memname">
  249. <tr>
  250. <td class="memname">bool jose_jws_ver </td>
  251. <td>(</td>
  252. <td class="paramtype">jose_cfg_t *&#160;</td>
  253. <td class="paramname"><em>cfg</em>, </td>
  254. </tr>
  255. <tr>
  256. <td class="paramkey"></td>
  257. <td></td>
  258. <td class="paramtype">const json_t *&#160;</td>
  259. <td class="paramname"><em>jws</em>, </td>
  260. </tr>
  261. <tr>
  262. <td class="paramkey"></td>
  263. <td></td>
  264. <td class="paramtype">const json_t *&#160;</td>
  265. <td class="paramname"><em>sig</em>, </td>
  266. </tr>
  267. <tr>
  268. <td class="paramkey"></td>
  269. <td></td>
  270. <td class="paramtype">const json_t *&#160;</td>
  271. <td class="paramname"><em>jwk</em>, </td>
  272. </tr>
  273. <tr>
  274. <td class="paramkey"></td>
  275. <td></td>
  276. <td class="paramtype">bool&#160;</td>
  277. <td class="paramname"><em>all</em>&#160;</td>
  278. </tr>
  279. <tr>
  280. <td></td>
  281. <td>)</td>
  282. <td></td><td></td>
  283. </tr>
  284. </table>
  285. </div><div class="memdoc">
  286. <p>Verifies signatures of one or more JWKs in a JWS object. </p>
  287. <p>The JWS object (<code>jws</code>) must contain the "payload" property.</p>
  288. <p>If a single JWK (<code>jwk</code>) is specified, the <code>all</code> parameter is ignored. In this case, if you would like to verify a particular JWS signature object, you may specify it using the <code>sig</code> parameter. Otherwise, you may simply pass NULL to verify any of the JWS signature objects in the JWS object.</p>
  289. <p>If <code>jwk</code> contains an array of JWKs or a JWKSet, the <code>all</code> parameter determines whether a valid signature is required for every JWK in order to successfully validate the JWS. For example, if you set <code>all</code> to false this function will succeed if a valid signature is found for any of the provided JWKs. When using this multiple JWK signature mode, the <code>sig</code> parameter must contain one of the following values:</p>
  290. <ol type="1">
  291. <li>A single JWS signature object to validate against all/any of the provided JWKs.</li>
  292. <li>An array of JWS signature objects. In this case, each JWS signature object will be mapped to its corresponding JWK from <code>jwk</code>. If the arrays in <code>sig</code> and <code>jwk</code> are a different size, an error will occur.</li>
  293. <li>NULL. This has the same effect as passing NULL for each separate key.</li>
  294. </ol>
  295. <dl class="params"><dt>Parameters</dt><dd>
  296. <table class="params">
  297. <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
  298. <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
  299. <tr><td class="paramname">sig</td><td>The JWS signature object(s) to verify or NULL. </td></tr>
  300. <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for verifying signatures. </td></tr>
  301. <tr><td class="paramname">all</td><td>Whether or not to require validation of all JWKs. </td></tr>
  302. </table>
  303. </dd>
  304. </dl>
  305. <dl class="section return"><dt>Returns</dt><dd>On success, true. Otherwise, false. </dd></dl>
  306. </div>
  307. </div>
  308. <a id="ga35a5d3c37101fc127933f3c856b46cc8"></a>
  309. <h2 class="memtitle"><span class="permalink"><a href="#ga35a5d3c37101fc127933f3c856b46cc8">&#9670;&nbsp;</a></span>jose_jws_ver_io()</h2>
  310. <div class="memitem">
  311. <div class="memproto">
  312. <table class="memname">
  313. <tr>
  314. <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_jws_ver_io </td>
  315. <td>(</td>
  316. <td class="paramtype">jose_cfg_t *&#160;</td>
  317. <td class="paramname"><em>cfg</em>, </td>
  318. </tr>
  319. <tr>
  320. <td class="paramkey"></td>
  321. <td></td>
  322. <td class="paramtype">const json_t *&#160;</td>
  323. <td class="paramname"><em>jws</em>, </td>
  324. </tr>
  325. <tr>
  326. <td class="paramkey"></td>
  327. <td></td>
  328. <td class="paramtype">const json_t *&#160;</td>
  329. <td class="paramname"><em>sig</em>, </td>
  330. </tr>
  331. <tr>
  332. <td class="paramkey"></td>
  333. <td></td>
  334. <td class="paramtype">const json_t *&#160;</td>
  335. <td class="paramname"><em>jwk</em>, </td>
  336. </tr>
  337. <tr>
  338. <td class="paramkey"></td>
  339. <td></td>
  340. <td class="paramtype">bool&#160;</td>
  341. <td class="paramname"><em>all</em>&#160;</td>
  342. </tr>
  343. <tr>
  344. <td></td>
  345. <td>)</td>
  346. <td></td><td></td>
  347. </tr>
  348. </table>
  349. </div><div class="memdoc">
  350. <p>Verifies signatures of one or more JWKs in a JWS object using streaming. </p>
  351. <p>This function behaves substantially like <a class="el" href="group__jose__jws.html#ga89a18c4b4d7cd0f9d42224ef5698abe7" title="Verifies signatures of one or more JWKs in a JWS object. ">jose_jws_ver()</a> except:</p>
  352. <p>The payload is not specified in the JWS (<code>jws</code>). Rather, the payload is provided using the returned IO object. The input to the returned IO object will not be internally Base64 encoded. So you may need to prepend the IO chain with the result of <a class="el" href="group__jose__b64.html#gad72c180de43c9da3456bdb0d166092ff" title="Creates a new IO object which performs URL-safe Base64 encoding. ">jose_b64_enc_io()</a> (depending on your situation).</p>
  353. <p>Final signature verification is delayed until <a class="el" href="structjose__io__t.html#a76d1eac0d05d3604c16686b08bd80aa0">jose_io_t::done()</a> returns.</p>
  354. <dl class="params"><dt>Parameters</dt><dd>
  355. <table class="params">
  356. <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
  357. <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
  358. <tr><td class="paramname">sig</td><td>The JWS signature object(s) to verify or NULL. </td></tr>
  359. <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for verifying signatures. </td></tr>
  360. <tr><td class="paramname">all</td><td>Whether or not to require validation of all JWKs. </td></tr>
  361. </table>
  362. </dd>
  363. </dl>
  364. <dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
  365. </div>
  366. </div>
  367. </div><!-- contents -->
  368. <!-- start footer part -->
  369. <hr class="footer"/><address class="footer"><small>
  370. Generated by &#160;<a href="http://www.doxygen.org/index.html">
  371. <img class="footer" src="doxygen.png" alt="doxygen"/>
  372. </a> 1.8.13
  373. </small></address>
  374. </body>
  375. </html>