From 8df6aabbc7e1114c8fb3917931078254eb52c222 Mon Sep 17 00:00:00 2001 From: Alex Layton Date: Thu, 26 Mar 2015 13:52:13 -0400 Subject: [PATCH] Fix verify for RSAPublicKey formated keys --- index.js | 4 +++- test/rsa-public-key.pem | 8 ++++++++ test/rsa-public-key.tests.js | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 test/rsa-public-key.pem create mode 100644 test/rsa-public-key.tests.js diff --git a/index.js b/index.js index c8b57d8..1c04474 100644 --- a/index.js +++ b/index.js @@ -111,7 +111,9 @@ module.exports.verify = function(jwtString, secretOrPublicKey, options, callback options.algorithms = ~secretOrPublicKey.toString().indexOf('BEGIN CERTIFICATE') || ~secretOrPublicKey.toString().indexOf('BEGIN PUBLIC KEY') ? [ 'RS256','RS384','RS512','ES256','ES384','ES512' ] : - [ 'HS256','HS384','HS512' ]; + ~secretOrPublicKey.toString().indexOf('BEGIN RSA PUBLIC KEY') ? + [ 'RS256','RS384','RS512' ] : + [ 'HS256','HS384','HS512' ]; } diff --git a/test/rsa-public-key.pem b/test/rsa-public-key.pem new file mode 100644 index 0000000..eb9a29b --- /dev/null +++ b/test/rsa-public-key.pem @@ -0,0 +1,8 @@ +-----BEGIN RSA PUBLIC KEY----- +MIIBCgKCAQEAvzoCEC2rpSpJQaWZbUmlsDNwp83Jr4fi6KmBWIwnj1MZ6CUQ7rBa +suLI8AcfX5/10scSfQNCsTLV2tMKQaHuvyrVfwY0dINk+nkqB74QcT2oCCH9XduJ +jDuwWA4xLqAKuF96FsIes52opEM50W7/W7DZCKXkC8fFPFj6QF5ZzApDw2Qsu3yM +Rmr7/W9uWeaTwfPx24YdY7Ah+fdLy3KN40vXv9c4xiSafVvnx9BwYL7H1Q8NiK9L +GEN6+JSWfgckQCs6UUBOXSZdreNN9zbQCwyzee7bOJqXUDAuLcFARzPw1EsZAyjV +tGCKIQ0/btqK+jFunT2NBC8RItanDZpptQIDAQAB +-----END RSA PUBLIC KEY----- diff --git a/test/rsa-public-key.tests.js b/test/rsa-public-key.tests.js new file mode 100644 index 0000000..e2044fc --- /dev/null +++ b/test/rsa-public-key.tests.js @@ -0,0 +1,15 @@ +var jwt = require('../'); + +describe('public key start with BEGIN RSA PUBLIC KEY', function () { + + it('should work', function (done) { + var fs = require('fs'); + var cert_pub = fs.readFileSync(__dirname + '/rsa-public-key.pem'); + var cert_priv = fs.readFileSync(__dirname + '/rsa-private.pem'); + + var token = jwt.sign({ foo: 'bar' }, cert_priv, { algorithm: 'RS256'}); + + jwt.verify(token, cert_pub, done); + }); + +});