react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / http-signature / lib / verify.js
81146 views// Copyright 2015 Joyent, Inc.12var assert = require('assert-plus');3var crypto = require('crypto');4567///--- Exported API89module.exports = {10/**11* Verify RSA/DSA signature against public key. You are expected to pass in12* an object that was returned from `parse()`.13*14* @param {Object} parsedSignature the object you got from `parse`.15* @param {String} pubkey RSA/DSA private key PEM.16* @return {Boolean} true if valid, false otherwise.17* @throws {TypeError} if you pass in bad arguments.18*/19verifySignature: function verifySignature(parsedSignature, pubkey) {20assert.object(parsedSignature, 'parsedSignature');21assert.string(pubkey, 'pubkey');2223var alg = parsedSignature.algorithm.match(/^(RSA|DSA)-(\w+)/);24if (!alg || alg.length !== 3)25throw new TypeError('parsedSignature: unsupported algorithm ' +26parsedSignature.algorithm);2728var verify = crypto.createVerify(alg[0]);29verify.update(parsedSignature.signingString);30return verify.verify(pubkey, parsedSignature.params.signature, 'base64');31},3233/**34* Verify HMAC against shared secret. You are expected to pass in an object35* that was returned from `parse()`.36*37* @param {Object} parsedSignature the object you got from `parse`.38* @param {String} secret HMAC shared secret.39* @return {Boolean} true if valid, false otherwise.40* @throws {TypeError} if you pass in bad arguments.41*/42verifyHMAC: function verifyHMAC(parsedSignature, secret) {43assert.object(parsedSignature, 'parsedHMAC');44assert.string(secret, 'secret');4546var alg = parsedSignature.algorithm.match(/^HMAC-(\w+)/);47if (!alg || alg.length !== 2)48throw new TypeError('parsedSignature: unsupported algorithm ' +49parsedSignature.algorithm);5051var hmac = crypto.createHmac(alg[1].toUpperCase(), secret);52hmac.update(parsedSignature.signingString);53return (hmac.digest('base64') === parsedSignature.params.signature);54}55};565758