Skip to content

Commit d2a3f56

Browse files
[Fix] sign/verify generic SHA algorithms with RSA keys
1 parent 224dffe commit d2a3f56

2 files changed

Lines changed: 31 additions & 8 deletions

File tree

browser/algorithms.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,24 @@
5050
"id": ""
5151
},
5252
"sha256": {
53-
"sign": "ecdsa",
53+
"sign": "ecdsa/rsa",
5454
"hash": "sha256",
55-
"id": ""
55+
"id": "3031300d060960864801650304020105000420"
5656
},
5757
"sha224": {
58-
"sign": "ecdsa",
58+
"sign": "ecdsa/rsa",
5959
"hash": "sha224",
60-
"id": ""
60+
"id": "302d300d06096086480165030402040500041c"
6161
},
6262
"sha384": {
63-
"sign": "ecdsa",
63+
"sign": "ecdsa/rsa",
6464
"hash": "sha384",
65-
"id": ""
65+
"id": "3041300d060960864801650304020205000430"
6666
},
6767
"sha512": {
68-
"sign": "ecdsa",
68+
"sign": "ecdsa/rsa",
6969
"hash": "sha512",
70-
"id": ""
70+
"id": "3051300d060960864801650304020305000440"
7171
},
7272
"DSA-SHA": {
7373
"sign": "dsa",

test/index.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,29 @@ test('valid RSA fixtures', function (t) {
7272
});
7373
});
7474

75+
test('generic SHA algorithms sign RSA keys like node', function (t) {
76+
var f = fixtures.valid.rsa[0];
77+
var message = Buffer.from(f.message);
78+
var priv = Buffer.from(f['private'], 'base64');
79+
var pub = Buffer.from(f['public'], 'base64');
80+
81+
['sha224', 'sha256', 'sha384', 'sha512'].forEach(function (scheme) {
82+
t.test('algorithm: ' + scheme, { skip: !(nCrypto.getHashes().indexOf(scheme) >= 0) }, function (st) {
83+
var bSig = bCrypto.createSign(scheme).update(message).sign(priv);
84+
var nSig = nCrypto.createSign(scheme).update(message).sign(priv);
85+
86+
st.equals(bSig.length, nSig.length, 'correct length');
87+
st.equals(bSig.toString('hex'), nSig.toString('hex'), 'equal sigs');
88+
st.ok(nCrypto.createVerify(scheme).update(message).verify(pub, bSig), 'node validates browser sig');
89+
st.ok(bCrypto.createVerify(scheme).update(message).verify(pub, nSig), 'browser validates node sig');
90+
91+
st.end();
92+
});
93+
});
94+
95+
t.end();
96+
});
97+
7598
// node has padding support since 8.0
7699
// TODO: figure out why node v8.0 - v8.6 is broken
77100
(semver.satisfies(process.versions.node, '>= 8.6') ? test : test.skip)('padding option', function (t) {

0 commit comments

Comments
 (0)