Skip to content

Commit c9e867c

Browse files
authored
Merge pull request #58 from rzcoder/pss-fix
pss fixes
2 parents a5578a2 + 24e89d1 commit c9e867c

File tree

5 files changed

+33
-18
lines changed

5 files changed

+33
-18
lines changed

.travis.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ node_js:
33
- '0.10'
44
- '0.12'
55
- 'stable'
6-
- 'iojs-v1.3'
7-
- 'iojs'
86

97
sudo: false
108

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ Questions, comments, bug reports, and pull requests are all welcome.
237237

238238
## Changelog
239239

240+
### 0.3.3
241+
* Fixed PSS encode/verify methods with max salt length.
242+
240243
### 0.3.2
241244
* Fixed environment detection in web worker.
242245

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-rsa",
3-
"version": "0.3.2",
3+
"version": "0.3.3",
44
"description": "Node.js RSA library",
55
"main": "src/NodeRSA.js",
66
"scripts": {

src/schemes/pss.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ module.exports.makeScheme = function (key, options) {
101101
maskedDB[i] = DB[i] ^ dbMask[i];
102102
}
103103

104-
var bits = emBits - 8 * (emLen - 1);
105-
var mask = 255 << 8 - bits >> 8 - bits;
106-
maskedDB[0] &= ((maskedDB[0] ^ mask) & maskedDB[0]);
104+
var bits = 8 * emLen - emBits;
105+
var mask = 255 ^ (255 >> 8 - bits << 8 - bits);
106+
maskedDB[0] = maskedDB[0] & mask;
107107

108108
var EM = new Buffer(maskedDB.length + H.length + 1);
109109
maskedDB.copy(EM, 0);
@@ -153,15 +153,20 @@ module.exports.makeScheme = function (key, options) {
153153
DB[i] ^= dbMask[i];
154154
}
155155

156-
mask = 0;
157-
for (i = 0, bits = emBits - 8 * (emLen - 1); i < bits; i++) {
156+
/* mask = 0;
157+
var bits = emBits - 8 * (emLen - 1);
158+
for (i = 0; i < bits; i++) {
158159
mask |= 1 << i;
159160
}
160-
DB[0] &= mask;
161+
DB[0] &= mask;*/
162+
163+
var bits = 8 * emLen - emBits;
164+
var mask = 255 ^ (255 >> 8 - bits << 8 - bits);
165+
DB[0] = DB[0] & mask;
161166

162167
// Filter out padding
163-
while (DB[i++] === 0 && i < DB.length);
164-
if (DB[i - 1] != 1) {
168+
for (i = 0; DB[i] === 0 && i < DB.length; i++);
169+
if (DB[i] != 1) {
165170
return false;
166171
}
167172

test/tests.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var fs = require('fs');
22
var assert = require('chai').assert;
33
var _ = require('lodash');
44
var NodeRSA = require('../src/NodeRSA');
5+
var OAEP = require('../src/schemes/oaep');
56

67
describe('NodeRSA', function () {
78
var keySizes = [
@@ -10,7 +11,8 @@ describe('NodeRSA', function () {
1011
{b: 512, e: 257},
1112
{b: 512, e: 65537},
1213
{b: 768}, // 'e' should be 65537
13-
{b: 1024} // 'e' should be 65537
14+
{b: 1024}, // 'e' should be 65537
15+
{b: 2048} // 'e' should be 65537
1416
];
1517

1618
var environments = ['browser', 'node'];
@@ -151,6 +153,7 @@ describe('NodeRSA', function () {
151153
for (var size in keySizes) {
152154
(function (size) {
153155
it('should make key pair ' + size.b + '-bit length and public exponent is ' + (size.e ? size.e : size.e + ' and should be 65537'), function () {
156+
this.timeout(15000);
154157
generatedKeys.push(new NodeRSA({b: size.b, e: size.e}, {encryptionScheme: 'pkcs1'}));
155158
assert.instanceOf(generatedKeys[generatedKeys.length - 1].keyPair, Object);
156159
assert.equal(generatedKeys[generatedKeys.length - 1].isEmpty(), false);
@@ -669,9 +672,6 @@ describe('NodeRSA', function () {
669672
});
670673

671674
it('should verify ' + i, function () {
672-
if (!key.verify(suit.data, signed[i])) {
673-
key.verify(suit.data, signed[i]);
674-
}
675675
assert(key.verify(suit.data, signed[i]));
676676
});
677677
})(i);
@@ -685,11 +685,20 @@ describe('NodeRSA', function () {
685685
environment: env
686686
});
687687
var signed = key.sign('data');
688-
if (!key.verify('data', signed)) {
689-
key.verify('data', signed);
690-
}
691688
assert(key.verify('data', signed));
692689
});
690+
691+
if (scheme === 'pss') {
692+
it('signing with custom algorithm (' + alg + ') with max salt length', function () {
693+
var a = alg.toLowerCase();
694+
var key = new NodeRSA(generatedKeys[generatedKeys.length - 1].exportKey(), {
695+
signingScheme: { scheme: scheme, hash: a, saltLength: OAEP.digestLength[a] },
696+
environment: env
697+
});
698+
var signed = key.sign('data');
699+
assert(key.verify('data', signed));
700+
});
701+
}
693702
})(signHashAlgorithms[env][alg]);
694703
}
695704
});

0 commit comments

Comments
 (0)