Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81146 views
1
// Copyright 2015 Joyent, Inc.
2
3
var assert = require('assert-plus');
4
var crypto = require('crypto');
5
6
7
8
///--- Exported API
9
10
module.exports = {
11
/**
12
* Verify RSA/DSA signature against public key. You are expected to pass in
13
* an object that was returned from `parse()`.
14
*
15
* @param {Object} parsedSignature the object you got from `parse`.
16
* @param {String} pubkey RSA/DSA private key PEM.
17
* @return {Boolean} true if valid, false otherwise.
18
* @throws {TypeError} if you pass in bad arguments.
19
*/
20
verifySignature: function verifySignature(parsedSignature, pubkey) {
21
assert.object(parsedSignature, 'parsedSignature');
22
assert.string(pubkey, 'pubkey');
23
24
var alg = parsedSignature.algorithm.match(/^(RSA|DSA)-(\w+)/);
25
if (!alg || alg.length !== 3)
26
throw new TypeError('parsedSignature: unsupported algorithm ' +
27
parsedSignature.algorithm);
28
29
var verify = crypto.createVerify(alg[0]);
30
verify.update(parsedSignature.signingString);
31
return verify.verify(pubkey, parsedSignature.params.signature, 'base64');
32
},
33
34
/**
35
* Verify HMAC against shared secret. You are expected to pass in an object
36
* that was returned from `parse()`.
37
*
38
* @param {Object} parsedSignature the object you got from `parse`.
39
* @param {String} secret HMAC shared secret.
40
* @return {Boolean} true if valid, false otherwise.
41
* @throws {TypeError} if you pass in bad arguments.
42
*/
43
verifyHMAC: function verifyHMAC(parsedSignature, secret) {
44
assert.object(parsedSignature, 'parsedHMAC');
45
assert.string(secret, 'secret');
46
47
var alg = parsedSignature.algorithm.match(/^HMAC-(\w+)/);
48
if (!alg || alg.length !== 2)
49
throw new TypeError('parsedSignature: unsupported algorithm ' +
50
parsedSignature.algorithm);
51
52
var hmac = crypto.createHmac(alg[1].toUpperCase(), secret);
53
hmac.update(parsedSignature.signingString);
54
return (hmac.digest('base64') === parsedSignature.params.signature);
55
}
56
};
57
58