UNPKG

green-jwt

Version:

Node implementation of JSON Web Token (JWT) with support for signatures (JWS), encryption (JWE) and web keys (JWK).

83 lines (70 loc) 2.25 kB
// Generated by CoffeeScript 1.6.3 (function() { var JwtRequest, crypto, ju, jwa, qstring; crypto = require("crypto"); qstring = require("querystring"); jwa = require("./jwa"); ju = require("./utils"); module.exports.spec_version = "draft-jones-json-web-token-10"; module.exports.decode = function(token) { var claim, header, headerSeg, payloadSeg, segments, signatureSeg; segments = token.split('.'); if (segments.length !== 3) { throw new Error('Not enough or too many segments'); } headerSeg = segments[0]; payloadSeg = segments[1]; signatureSeg = segments[2]; header = JSON.parse(ju.base64urlDecode(headerSeg)); claim = JSON.parse(ju.base64urlDecode(payloadSeg)); return new JwtRequest(header, claim, segments); }; module.exports.encode = function(claim, key, algorithm, header_ext) { var header, jwa_provider, jwa_signer, segments, val; if (algorithm == null) { algorithm = "HS256"; } if (header_ext == null) { header_ext = {}; } jwa_provider = jwa.provider(algorithm); if (!jwa_provider) { throw new Error("Algorithm " + algorithm + " is not yet supported."); } jwa_signer = jwa_provider(key); header = { typ: 'JWT', alg: algorithm }; for (key in header_ext) { val = header_ext[key]; header[key] = val; } segments = []; segments.push(ju.base64urlEncode(JSON.stringify(header))); segments.push(ju.base64urlEncode(JSON.stringify(claim))); jwa_signer.update(segments.join(".")); segments.push(jwa_signer.sign()); return segments.join('.'); }; JwtRequest = (function() { function JwtRequest(header, claim, segments) { this.header = header; this.claim = claim; this.segments = segments; } JwtRequest.prototype.verify = function(key) { var _alg, _ref, _verifier; _alg = (_ref = this.header) != null ? _ref.alg : void 0; if (!_alg) { _alg = "none"; } _verifier = jwa.verifier(_alg); if (!_verifier) { throw new Error("Unable to find a verifier for algorithm " + _alg); } return _verifier.verify(this, key); }; return JwtRequest; })(); }).call(this);