// 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; }
// 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; }