| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 | .TH "jose_jws" 3 "Tue May 30 2017" "José" \" -*- nroff -*-.ad l.nh.SH NAMEjose_jws \- JSON Web Signature (RFC 7515)  .SH SYNOPSIS.br.PP.SS "Functions".in +1c.ti -1c.RI "json_t * \fBjose_jws_hdr\fP (const json_t *sig)".br.RI "Merges the JOSE headers of a JWS signature object\&. ".ti -1c.RI "bool \fBjose_jws_sig\fP (jose_cfg_t *cfg, json_t *jws, json_t *sig, const json_t *jwk)".br.RI "Creates one or more signatures in a JWS object\&. ".ti -1c.RI "\fBjose_io_t\fP * \fBjose_jws_sig_io\fP (jose_cfg_t *cfg, json_t *jws, json_t *sig, const json_t *jwk)".br.RI "Creates one or more signatures in a JWS object using streaming\&. ".ti -1c.RI "bool \fBjose_jws_ver\fP (jose_cfg_t *cfg, const json_t *jws, const json_t *sig, const json_t *jwk, bool all)".br.RI "Verifies signatures of one or more JWKs in a JWS object\&. ".ti -1c.RI "\fBjose_io_t\fP * \fBjose_jws_ver_io\fP (jose_cfg_t *cfg, const json_t *jws, const json_t *sig, const json_t *jwk, bool all)".br.RI "Verifies signatures of one or more JWKs in a JWS object using streaming\&. ".in -1c.SH "Detailed Description".PP JSON Web Signature (RFC 7515) JSON Web Token (RFC 7519).PPA 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)\&..PPFor example, to create a simple signature of a string using a JWK (error handling omitted): .PP.nfjson_t *sig(const char *str, const json_t *jwk) {    json_auto_t *jws = json_pack("{s:o}", "payload",                                 jose_b64_enc(str, strlen(str)));    jose_jws_sig(NULL, jws, NULL, jwk);    return json_incref(jws);}.fi.PP.PPLikewise, to verify this signature (again, error handling omitted): .PP.nfchar *ver(const json_t *jws, const json_t *jwk) {    char *str = NULL;    size_t len = 0;    if (!jose_jws_ver(NULL, jws, NULL, jwk))        return NULL;    len = jose_b64_dec(json_object_get(jws, "payload"), NULL, 0);    str = calloc(1, len + 1);    jose_b64_dec(json_object_get(jws, "payload"), str, len);    return str;}.fi.PP.PP\fBSee also:\fP.RS 4https://tools.ietf.org/html/rfc7515.RE.PPA 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)\&..PP\fBSee also:\fP.RS 4https://tools.ietf.org/html/rfc7515 .RE.PP.SH "Function Documentation".PP .SS "json_t* jose_jws_hdr (const json_t * sig)".PPMerges the JOSE headers of a JWS signature object\&. .PP\fBParameters:\fP.RS 4\fIsig\fP A JWS signature object\&. .RE.PP\fBReturns:\fP.RS 4The newly allocated JOSE header\&. .RE.PP.SS "bool jose_jws_sig (jose_cfg_t * cfg, json_t * jws, json_t * sig, const json_t * jwk)".PPCreates one or more signatures in a JWS object\&. The JWS object (\fCjws\fP) must contain the 'payload' property\&..PPAll signatures created will be appended to the JWS specified by \fCjws\fP\&. If the resulting JWS (\fCjws\fP) 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\&..PPIf \fCjwk\fP contains a JWK, a single signature is created\&. In this case, \fCjws\fP 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 (\fCjwk\fP) where possible\&..PPIf \fCjwk\fP contains an array of JWKs or a JWKSet, multiple signatures are created\&. In this case, the \fCsig\fP parameter must contain one of the following values:.PP.IP "1." 4A JWS signature object template that will be used for all signatures\&. In this case, a copy will be made for each signature and \fCsig\fP will not be modified in any way\&..IP "2." 4An array of JWS signature object templates\&. Each template will be used with its corresponding JWK from \fCjwk\fP\&. If the arrays in \fCsig\fP and \fCjwk\fP are a different size, an error will occur\&..IP "3." 4NULL\&. This has the same effect as passing NULL for each separate key\&..PP.PP\fBParameters:\fP.RS 4\fIcfg\fP The configuration context (optional)\&. .br\fIjws\fP The JWS object\&. .br\fIsig\fP The JWS signature object template(s) or NULL\&. .br\fIjwk\fP The JWK(s) or JWKSet used for creating signatures\&. .RE.PP\fBReturns:\fP.RS 4On success, true\&. Otherwise, false\&. .RE.PP.SS "\fBjose_io_t\fP* jose_jws_sig_io (jose_cfg_t * cfg, json_t * jws, json_t * sig, const json_t * jwk)".PPCreates one or more signatures in a JWS object using streaming\&. This function behaves substantially like \fBjose_jws_sig()\fP except:.PPThe payload is not specified in the JWS (\fCjws\fP)\&. 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 \fBjose_b64_enc_io()\fP (depending on your situation)\&..PPLikewise, the payload is not stored in the JWS object (\fCjws\fP)\&. 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\&..PP\fBParameters:\fP.RS 4\fIcfg\fP The configuration context (optional)\&. .br\fIjws\fP The JWS object\&. .br\fIsig\fP The JWS signature object template(s) or NULL\&. .br\fIjwk\fP The JWK(s) or JWKSet used for creating signatures\&. .RE.PP\fBReturns:\fP.RS 4The new IO object or NULL on error\&. .RE.PP.SS "bool jose_jws_ver (jose_cfg_t * cfg, const json_t * jws, const json_t * sig, const json_t * jwk, bool all)".PPVerifies signatures of one or more JWKs in a JWS object\&. The JWS object (\fCjws\fP) must contain the 'payload' property\&..PPIf a single JWK (\fCjwk\fP) is specified, the \fCall\fP parameter is ignored\&. In this case, if you would like to verify a particular JWS signature object, you may specify it using the \fCsig\fP parameter\&. Otherwise, you may simply pass NULL to verify any of the JWS signature objects in the JWS object\&..PPIf \fCjwk\fP contains an array of JWKs or a JWKSet, the \fCall\fP parameter determines whether a valid signature is required for every JWK in order to successfully validate the JWS\&. For example, if you set \fCall\fP 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 \fCsig\fP parameter must contain one of the following values:.PP.IP "1." 4A single JWS signature object to validate against all/any of the provided JWKs\&..IP "2." 4An array of JWS signature objects\&. In this case, each JWS signature object will be mapped to its corresponding JWK from \fCjwk\fP\&. If the arrays in \fCsig\fP and \fCjwk\fP are a different size, an error will occur\&..IP "3." 4NULL\&. This has the same effect as passing NULL for each separate key\&..PP.PP\fBParameters:\fP.RS 4\fIcfg\fP The configuration context (optional)\&. .br\fIjws\fP The JWS object\&. .br\fIsig\fP The JWS signature object(s) to verify or NULL\&. .br\fIjwk\fP The JWK(s) or JWKSet used for verifying signatures\&. .br\fIall\fP Whether or not to require validation of all JWKs\&. .RE.PP\fBReturns:\fP.RS 4On success, true\&. Otherwise, false\&. .RE.PP.SS "\fBjose_io_t\fP* jose_jws_ver_io (jose_cfg_t * cfg, const json_t * jws, const json_t * sig, const json_t * jwk, bool all)".PPVerifies signatures of one or more JWKs in a JWS object using streaming\&. This function behaves substantially like \fBjose_jws_ver()\fP except:.PPThe payload is not specified in the JWS (\fCjws\fP)\&. 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 \fBjose_b64_enc_io()\fP (depending on your situation)\&..PPFinal signature verification is delayed until \fBjose_io_t::done()\fP returns\&..PP\fBParameters:\fP.RS 4\fIcfg\fP The configuration context (optional)\&. .br\fIjws\fP The JWS object\&. .br\fIsig\fP The JWS signature object(s) to verify or NULL\&. .br\fIjwk\fP The JWK(s) or JWKSet used for verifying signatures\&. .br\fIall\fP Whether or not to require validation of all JWKs\&. .RE.PP\fBReturns:\fP.RS 4The new IO object or NULL on error\&. .RE.PP.SH "Author".PP Generated automatically by Doxygen for José from the source code\&.
 |