Skip to content

Commit 583860c

Browse files
committed
Allow large (but safe) integers for counters.
1 parent 8ac229a commit 583860c

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -632,9 +632,14 @@
632632
throw new Error('invalid counter value (must be an integer)');
633633
}
634634

635+
// We cannot safely handle numbers beyond the safe range for integers
636+
if (value > Number.MAX_SAFE_INTEGER) {
637+
throw new Error('integer value out of safe range');
638+
}
639+
635640
for (var index = 15; index >= 0; --index) {
636641
this._counter[index] = value % 256;
637-
value = value >> 8;
642+
value = parseInt(value / 256);
638643
}
639644
}
640645

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "aes-js",
3-
"version": "3.0.0",
3+
"version": "3.1.0",
44
"bugs": {
55
"url": "http://github.com/ricmoo/aes-js/issues",
66
"email": "github@ricmoo.com"

test/test-counter.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ module.exports = {
6565
'test-counter-number-254': makeTest({number: 254, incrementResult: "000000000000000000000000000000ff"}),
6666
'test-counter-number-255': makeTest({number: 255, incrementResult: "00000000000000000000000000000100"}),
6767
'test-counter-number-256': makeTest({number: 256, incrementResult: "00000000000000000000000000000101"}),
68+
'test-counter-number-large': makeTest({number: 1099511627774, incrementResult: "0000000000000000000000ffffffffff"}),
69+
'test-counter-number-max': makeTest({number: 9007199254740991, incrementResult: "00000000000000000020000000000000"}),
6870
'test-counter-bytes-0000': makeTest({bytes: "00000000000000000000000000000000", incrementResult: "00000000000000000000000000000001"}),
6971
'test-counter-bytes-00ff': makeTest({bytes: "000000000000000000000000000000ff", incrementResult: "00000000000000000000000000000100"}),
7072
'test-counter-bytes-ffff': makeTest({bytes: "ffffffffffffffffffffffffffffffff", incrementResult: "00000000000000000000000000000000"}),

test/test-errors.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ module.exports = {
163163
},
164164
'invalid counter setValue (non-integer number) failed to throw an error');
165165

166+
test.throws(function() {
167+
var counter = new aes.Counter(Number.MAX_SAFE_INTEGER + 1);
168+
}, function(error) {
169+
return (error.message === 'integer value out of safe range');
170+
},
171+
'invalid counter value (out of range) failed to throw an error');
172+
166173
var badThings = [0, 1.5, 1];
167174
for (var i = 0; i < badThings.length; i++) {
168175
var counter = new aes.Counter();

0 commit comments

Comments
 (0)