197 lines
4.9 KiB
JavaScript
197 lines
4.9 KiB
JavaScript
var assert = require('assert');
|
|
var bignum = require('../');
|
|
var put = require('put');
|
|
|
|
exports.buf_be = function () {
|
|
var buf1 = new Buffer([1,2,3,4]);
|
|
var num = bignum.fromBuffer(buf1, { size : 4 }).toNumber();
|
|
assert.eql(
|
|
num,
|
|
1*Math.pow(256, 3)
|
|
+ 2 * Math.pow(256, 2)
|
|
+ 3 * 256
|
|
+ 4
|
|
);
|
|
|
|
var buf2 = put().word32be(num).buffer();
|
|
assert.eql(buf1, buf2,
|
|
'[ ' + [].slice.call(buf1) + ' ] != [ ' + [].slice.call(buf2) + ' ]'
|
|
);
|
|
};
|
|
|
|
exports.buf_le = function () {
|
|
var buf1 = new Buffer([1,2,3,4]);
|
|
var num = bignum
|
|
.fromBuffer(buf1, { size : 4, endian : 'little' })
|
|
.toNumber()
|
|
;
|
|
var buf2 = put().word32le(num).buffer();
|
|
assert.eql(buf1, buf2,
|
|
'[ ' + [].join.call(buf1, ',')
|
|
+ ' ] != [ '
|
|
+ [].join.call(buf2, ',') + ' ]'
|
|
);
|
|
};
|
|
|
|
exports.buf_be_le = function () {
|
|
var buf_be = new Buffer([1,2,3,4,5,6,7,8]);
|
|
var buf_le = new Buffer([4,3,2,1,8,7,6,5]);
|
|
|
|
var num_be = bignum
|
|
.fromBuffer(buf_be, { size : 4, endian : 'big' })
|
|
.toString()
|
|
;
|
|
var num_le = bignum
|
|
.fromBuffer(buf_le, { size : 4, endian : 'little' })
|
|
.toString()
|
|
;
|
|
|
|
assert.eql(num_be, num_le);
|
|
};
|
|
|
|
exports.buf_high_bits = function () {
|
|
var buf_be = new Buffer([
|
|
201,202,203,204,
|
|
205,206,207,208
|
|
]);
|
|
var buf_le = new Buffer([
|
|
204,203,202,201,
|
|
208,207,206,205
|
|
]);
|
|
|
|
var num_be = bignum
|
|
.fromBuffer(buf_be, { size : 4, endian : 'big' })
|
|
.toString()
|
|
;
|
|
var num_le = bignum
|
|
.fromBuffer(buf_le, { size : 4, endian : 'little' })
|
|
.toString()
|
|
;
|
|
|
|
assert.eql(num_be, num_le);
|
|
};
|
|
|
|
exports.buf_to_from = function () {
|
|
var nums = [
|
|
0, 1, 10, 15, 3, 16,
|
|
7238, 1337, 31337, 505050,
|
|
'172389721984375328763297498273498732984324',
|
|
'32848432742',
|
|
'12988282841231897498217398217398127983721983719283721',
|
|
'718293798217398217312387213972198321'
|
|
];
|
|
|
|
nums.forEach(function (num) {
|
|
var b = bignum(num);
|
|
var u = b.toBuffer();
|
|
|
|
assert.ok(u);
|
|
assert.eql(
|
|
bignum.fromBuffer(u).toString(),
|
|
b.toString()
|
|
);
|
|
});
|
|
|
|
assert.throws(function () {
|
|
bignum(-1).toBuffer(); // can't pack negative numbers yet
|
|
});
|
|
};
|
|
|
|
exports.toBuf = function () {
|
|
var buf = new Buffer([ 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f ]);
|
|
var b = bignum(
|
|
0x0a * 256*256*256*256*256
|
|
+ 0x0b * 256*256*256*256
|
|
+ 0x0c * 256*256*256
|
|
+ 0x0d * 256*256
|
|
+ 0x0e * 256
|
|
+ 0x0f
|
|
);
|
|
|
|
assert.eql(b.toString(16), '0a0b0c0d0e0f');
|
|
|
|
assert.eql(
|
|
[].slice.call(b.toBuffer({ endian : 'big', size : 2 })),
|
|
[ 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f ]
|
|
);
|
|
|
|
assert.eql(
|
|
[].slice.call(b.toBuffer({ endian : 'little', size : 2 })),
|
|
[ 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e ]
|
|
);
|
|
|
|
assert.eql(
|
|
bignum.fromBuffer(buf).toString(16),
|
|
b.toString(16)
|
|
);
|
|
|
|
assert.eql(
|
|
[].slice.call(bignum(43135012110).toBuffer({
|
|
endian : 'little', size : 4
|
|
})),
|
|
[ 0x0a, 0x00, 0x00, 0x00, 0x0e, 0x0d, 0x0c, 0x0b ]
|
|
);
|
|
|
|
assert.eql(
|
|
[].slice.call(bignum(43135012110).toBuffer({
|
|
endian : 'big', size : 4
|
|
})),
|
|
[ 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e ]
|
|
);
|
|
};
|
|
|
|
exports.zeroPad = function () {
|
|
var b = bignum(0x123456);
|
|
|
|
assert.eql(
|
|
[].slice.call(b.toBuffer({ endian : 'big', size:4 })),
|
|
[ 0x00, 0x12, 0x34, 0x56 ]
|
|
);
|
|
|
|
assert.eql(
|
|
[].slice.call(b.toBuffer({ endian : 'little', size:4 })),
|
|
[ 0x56, 0x34, 0x12, 0x00 ]
|
|
);
|
|
};
|
|
|
|
exports.toMpint = function () {
|
|
// test values taken directly out of
|
|
// http://tools.ietf.org/html/rfc4251#page-10
|
|
|
|
var refs = {
|
|
'0' : new Buffer([ 0x00, 0x00, 0x00, 0x00 ]),
|
|
'9a378f9b2e332a7' : new Buffer([
|
|
0x00, 0x00, 0x00, 0x08,
|
|
0x09, 0xa3, 0x78, 0xf9,
|
|
0xb2, 0xe3, 0x32, 0xa7,
|
|
]),
|
|
'80' : new Buffer([ 0x00, 0x00, 0x00, 0x02, 0x00, 0x80 ]),
|
|
'-1234' : new Buffer([ 0x00, 0x00, 0x00, 0x02, 0xed, 0xcc ]),
|
|
'-deadbeef' : new Buffer([
|
|
0x00, 0x00, 0x00, 0x05, 0xff, 0x21, 0x52, 0x41, 0x11
|
|
]),
|
|
};
|
|
|
|
Object.keys(refs).forEach(function (key) {
|
|
var buf0 = bignum(key, 16).toBuffer('mpint');
|
|
var buf1 = refs[key];
|
|
|
|
assert.eql(
|
|
buf0, buf1,
|
|
buf0.inspect() + ' != ' + buf1.inspect()
|
|
+ ' for bignum(' + key + ')'
|
|
);
|
|
});
|
|
};
|
|
|
|
if (process.argv[1] === __filename) {
|
|
assert.eql = assert.deepEqual;
|
|
Object.keys(exports).forEach(function (ex) {
|
|
exports[ex]();
|
|
});
|
|
|
|
if ("function" === typeof gc) {
|
|
gc();
|
|
}
|
|
}
|