Example #1
0
// sign this token, adds signature to the claims body
lob_t jwt_sign(lob_t token, e3x_self_t self)
{
  lob_t claims = jwt_claims(token);
  if(!token || !claims) return LOG("bad args");

  // generate the temporary encoded data
  char *encoded = jwt_encode(token);
  if(!encoded) return LOG("bad token");
  char *dot = strchr(encoded,'.');
  dot = strchr(dot+1,'.');

  // e3x returns token w/ signature as the body
  if(!e3x_self_sign(self, token, (uint8_t*)encoded, dot-encoded)) return LOG("signing failed");
  free(encoded);
  
  // move sig to claims
  lob_body(claims,token->body,token->body_len);
  lob_body(token,NULL,0);

  return token;
}
Example #2
0
// sign this token, adds signature to the claims body
lob_t jwt_sign(lob_t token, e3x_self_t self)
{
  size_t hlen, clen;
  char *encoded;
  lob_t payload = lob_linked(token);
  if(!token || !payload) return LOG("bad args");

  // allocates space in the payload body for the encoded data to be signed
  clen = base64_encode_length(payload->head_len);
  hlen = base64_encode_length(token->head_len);
  encoded = (char*)lob_body(payload,NULL,hlen+1+clen);
  
  hlen = base64_encoder(token->head,token->head_len,encoded);
  encoded[hlen] = '.';
  clen = base64_encoder(payload->head,payload->head_len,encoded+hlen+1);

  // e3x returns packet w/ signature
  if(!e3x_self_sign(self, token, payload->body, hlen+1+clen)) return LOG("signing failed");
  
  // copy sig to payload
  lob_body(payload,token->body,token->body_len);
  return token;
}