3
3
Object . defineProperty ( exports , "__esModule" , {
4
4
value : true
5
5
} ) ;
6
- exports [ "default" ] = exports . jwtEncode = exports . parsePayloadToJSON = exports . parseHeaderToJSON = exports . createHeaderBase64URL = exports . createPayloadBase64URL = exports . createHeaderPayload = exports . rs256PEMVerify = exports . rs256JWKVerify = exports . rs256PEMSign = exports . rs256JWKSign = exports . hs256Sign = exports . jwtDecode = void 0 ;
6
+ exports [ "default" ] = exports . jwtEncode = exports . parseToJSON = exports . base64URLEncode = exports . createHeaderPayload = exports . hs256Verify = exports . rs256PEMVerify = exports . rs256JWKVerify = exports . rs256PEMSign = exports . rs256JWKSign = exports . hs256Sign = exports . jwtDecode = void 0 ;
7
7
8
8
var _crypto = _interopRequireDefault ( require ( "crypto" ) ) ;
9
9
@@ -270,7 +270,8 @@ var rs256JWKVerify = function rs256JWKVerify(jwt, publicKey) {
270
270
*
271
271
* @export
272
272
* @param {* } jwt The JSON web token.
273
- * @param {* } publicKey The public key used to verify. Must be in PEM format
273
+ * @param {* } publicKey The public key used to verify. Must be a PEM formatted
274
+ * string.
274
275
* for this method
275
276
* @returns True if verified, false otherwise.
276
277
*/
@@ -302,16 +303,59 @@ var rs256PEMVerify = function rs256PEMVerify(jwt, publicKey) {
302
303
return isVerified ;
303
304
} ;
304
305
/**
305
- * VCreates the combined header payload portion of the JWT.
306
+ * Verifies a jwt signed with HS256 (HMAC with SHA256) with a passphrase.
307
+ *
308
+ * @export
309
+ * @param {string } jwt The JSON web token.
310
+ * @param {string } passphrase The secret or passphrase used to sign the jwt.
311
+ * @param {string } passphraseEncoding The encoding of the passphrase or secret.
312
+ *
313
+ * @returns True if verified, false otherwise.
314
+ */
315
+
316
+
317
+ exports . rs256PEMVerify = rs256PEMVerify ;
318
+
319
+ var hs256Verify = function hs256Verify ( jwt , passphrase , passphraseEncoding ) {
320
+ var jwtComponents = jwt . split ( "." ) ;
321
+ var headerPayload = jwtComponents [ 0 ] + "." + jwtComponents [ 1 ] ;
322
+ var signature = jwtComponents [ 2 ] ;
323
+
324
+ var secret = _crypto [ "default" ] . createSecretKey ( passphrase , "base64url" ) ;
325
+
326
+ if ( passphraseEncoding && Buffer . isEncoding ( passphraseEncoding ) ) {
327
+ secret = _crypto [ "default" ] . createSecretKey ( passphrase , passphraseEncoding ) ;
328
+ } else {
329
+ secret = _crypto [ "default" ] . createSecretKey ( passphrase , "base64url" ) ;
330
+ }
331
+
332
+ var hmac = _crypto [ "default" ] . createHmac ( "sha256" , secret ) ;
333
+
334
+ hmac . update ( headerPayload , "ascii" ) ;
335
+ var hmacked = hmac . digest ( ) ;
336
+ var base64URLHmacked = Buffer . from ( hmacked ) . toString ( "base64url" ) ; // Check for equality between the signature in the jwt and what we just created.
337
+
338
+ var isVerified = base64URLHmacked === signature ; // Could also use this:
339
+ // const verify = crypto.createVerify("SHA256");
340
+ // verify.update(headerPayload, "ascii");
341
+ // verify.end();
342
+ // verify.verify(keyObject, signature, "base64")
343
+
344
+ return isVerified ;
345
+ } ;
346
+ /**
347
+ * Creates the combined header payload portion of the JWT. Can accept JSON
348
+ * objects or string literals.
306
349
*
307
350
* @export
308
351
* @param {* } header The decoded header.
309
352
* @param {* } payload The decoded payload.
310
- * @returns The combined the header payload portion of the JWT.
353
+ * @returns The combined the header payload portion of the JWT. It is equal to
354
+ * base64url(header) + "." + base64url(payload).
311
355
*/
312
356
313
357
314
- exports . rs256PEMVerify = rs256PEMVerify ;
358
+ exports . hs256Verify = hs256Verify ;
315
359
316
360
var createHeaderPayload = function createHeaderPayload ( header , payload ) {
317
361
if ( Buffer . isEncoding ( "base64url" ) ) {
@@ -321,16 +365,16 @@ var createHeaderPayload = function createHeaderPayload(header, payload) {
321
365
if ( typeof header === "string" ) {
322
366
headerBase64URL = Buffer . from ( header , "ascii" ) . toString ( "base64url" ) ;
323
367
} else {
324
- var jsonHeader = parseHeaderToJSON ( header ) ;
325
- headerBase64URL = createHeaderBase64URL ( jsonHeader ) ;
326
- } // use string literals
327
-
368
+ var jsonHeader = parseToJSON ( header ) ;
369
+ headerBase64URL = base64URLEncode ( jsonHeader ) ;
370
+ }
328
371
329
372
if ( typeof payload === "string" ) {
373
+ // use string literals
330
374
payloadBase64URL = Buffer . from ( payload , "ascii" ) . toString ( "base64url" ) ;
331
375
} else {
332
- var jsonPayload = parsePayloadToJSON ( payload ) ;
333
- payloadBase64URL = createPayloadBase64URL ( jsonPayload ) ;
376
+ var jsonPayload = parseToJSON ( payload ) ;
377
+ payloadBase64URL = base64URLEncode ( jsonPayload ) ;
334
378
}
335
379
336
380
var headerPayload = "" . concat ( headerBase64URL , "." ) . concat ( payloadBase64URL ) ;
@@ -340,21 +384,21 @@ var createHeaderPayload = function createHeaderPayload(header, payload) {
340
384
throw new Error ( "Error: Base64URL encoding isn't available." ) ;
341
385
} ;
342
386
/**
343
- * Creates the base64URL encoding of the header. Header must be in JSON format.
344
- * Uses JSON stringify to convert jsonHeader input.
387
+ * Encodes the JSON object input in base64url format. Must be in JSON format.
388
+ * Uses JSON stringify to convert jsonObject input.
345
389
*
346
390
* @export
347
- * @param {* } jsonHeader The header in JSON fromat.
348
- * @returns The base64URL encoding of the header .
391
+ * @param {* } jsonObject The header or payload (or anything) in JSON object fromat.
392
+ * @returns The base64URL encoding of the input .
349
393
*/
350
394
351
395
352
396
exports . createHeaderPayload = createHeaderPayload ;
353
397
354
- var createPayloadBase64URL = function createPayloadBase64URL ( jsonPayload ) {
398
+ var base64URLEncode = function base64URLEncode ( jsonObject ) {
355
399
if ( Buffer . isEncoding ( "base64url" ) ) {
356
400
// not a string. convert to string
357
- var stringifyHeader = JSON . stringify ( jsonPayload ) ; // headerBase64URL = base64url.encode(stringifyHeader);
401
+ var stringifyHeader = JSON . stringify ( jsonObject ) ; // headerBase64URL = base64url.encode(stringifyHeader);
358
402
359
403
var payloadBase64URL = Buffer . from ( stringifyHeader , "ascii" ) . toString ( "base64url" ) ;
360
404
return payloadBase64URL ;
@@ -363,76 +407,30 @@ var createPayloadBase64URL = function createPayloadBase64URL(jsonPayload) {
363
407
throw new Error ( "Error: Base64URL encoding isn't available" ) ;
364
408
} ;
365
409
/**
366
- * Creates the base64URL encoding of the header. Header must be in JSON format.
367
- * Uses JSON stringify to convert jsonHeader input.
410
+ * Converts input into a JSON object.
368
411
*
369
412
* @export
370
- * @param {* } jsonHeader The header in JSON fromat.
371
- * @returns The base64URL encoding of the header.
413
+ * @param {* } input The input to be parsed as JSON. Will try to take string or
414
+ * JSON object.
415
+ * @returns The input as a JSON object.
372
416
*/
373
417
374
418
375
- exports . createPayloadBase64URL = createPayloadBase64URL ;
376
-
377
- var createHeaderBase64URL = function createHeaderBase64URL ( jsonHeader ) {
378
- if ( Buffer . isEncoding ( "base64url" ) ) {
379
- var stringifyHeader = JSON . stringify ( jsonHeader ) ;
380
- var headerBase64URL = Buffer . from ( stringifyHeader ) . toString ( "base64url" ) ;
381
- return headerBase64URL ;
382
- }
383
-
384
- throw new Error ( "Error: Base64URL encoding isn't available" ) ;
385
- } ;
386
- /**
387
- * Converts jwt header into a JSON object.
388
- *
389
- * @export
390
- * @param {* } header The jwt header. Will try to take string or JSON object.
391
- * @returns The header in JSON object format.
392
- */
419
+ exports . base64URLEncode = base64URLEncode ;
393
420
394
-
395
- exports . createHeaderBase64URL = createHeaderBase64URL ;
396
-
397
- var parseHeaderToJSON = function parseHeaderToJSON ( header ) {
398
- var jsonHeader = header ;
421
+ var parseToJSON = function parseToJSON ( input ) {
422
+ var json = input ;
399
423
400
424
if ( Buffer . isEncoding ( "base64url" ) ) {
401
- if ( header instanceof Object ) {
402
- // not a string. convert to string
403
- jsonHeader = header ;
404
- } else {
405
- jsonHeader = JSON . parse ( header ) ;
406
- }
407
-
408
- return jsonHeader ;
409
- }
410
-
411
- throw new Error ( "Error: Base64URL encoding isn't available" ) ;
412
- } ;
413
- /**
414
- * Converts decoded jwt payload into a JSON object.
415
- *
416
- * @export
417
- * @param {* } payload The decoded jwt payload. Will try to take string or JSON object.
418
- * @returns The decoded payload in JSON object format.
419
- */
420
-
421
-
422
- exports . parseHeaderToJSON = parseHeaderToJSON ;
423
-
424
- var parsePayloadToJSON = function parsePayloadToJSON ( payload ) {
425
- var jsonPayload = payload ;
426
-
427
- if ( Buffer . isEncoding ( "base64url" ) ) {
428
- if ( payload instanceof Object ) {
429
- // not a string. convert to string
430
- jsonPayload = payload ;
425
+ if ( input instanceof Object ) {
426
+ // already appears to be a JSON object.
427
+ json = input ;
431
428
} else {
432
- jsonPayload = JSON . parse ( payload ) ;
429
+ // received a string. convert to json object.
430
+ json = JSON . parse ( input ) ;
433
431
}
434
432
435
- return jsonPayload ;
433
+ return json ;
436
434
}
437
435
438
436
throw new Error ( "Error: Base64URL encoding isn't available" ) ;
@@ -452,7 +450,7 @@ var parsePayloadToJSON = function parsePayloadToJSON(payload) {
452
450
*/
453
451
454
452
455
- exports . parsePayloadToJSON = parsePayloadToJSON ;
453
+ exports . parseToJSON = parseToJSON ;
456
454
457
455
var jwtEncode = function jwtEncode ( header , payload , key , options ) {
458
456
var headerBase64URL ;
0 commit comments