mirror of
https://github.com/node-ebics/node-ebics-client.git
synced 2024-11-22 14:12:07 +00:00
chore: restructure BigNumber
This commit is contained in:
parent
24afdeb257
commit
eafe2f9f55
65
lib/crypto/BigNumber.js
Normal file
65
lib/crypto/BigNumber.js
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const { jsbn: { BigInteger } } = require('node-forge');
|
||||||
|
|
||||||
|
class BigNumber {
|
||||||
|
constructor(value, radix = 10) {
|
||||||
|
if (value === null || value === undefined)
|
||||||
|
throw new Error('value is missing.');
|
||||||
|
|
||||||
|
this._n = new BigInteger(null);
|
||||||
|
|
||||||
|
if (value instanceof BigNumber)
|
||||||
|
this._n = value._n;
|
||||||
|
else if (value instanceof BigInteger)
|
||||||
|
this._n = value;
|
||||||
|
else if (typeof value === 'number')
|
||||||
|
this._n.fromInt(value);
|
||||||
|
else if (typeof value === 'string')
|
||||||
|
this._n.fromString(value, radix);
|
||||||
|
else if (Buffer.isBuffer(value))
|
||||||
|
this._n.fromString(value.toString('hex'), 16);
|
||||||
|
else if (Array.isArray(value))
|
||||||
|
this._n.fromString(Buffer.from(value).toString('hex'), 16);
|
||||||
|
else
|
||||||
|
throw new TypeError('Unsupported value type.');
|
||||||
|
}
|
||||||
|
|
||||||
|
toBEBuffer(length = undefined) {
|
||||||
|
const arr = this._n.toByteArray();
|
||||||
|
if (length && arr.length > length)
|
||||||
|
throw new Error('Number out of range.');
|
||||||
|
while (length && arr.length < length)
|
||||||
|
arr.unshift(0);
|
||||||
|
return Buffer.from(arr);
|
||||||
|
}
|
||||||
|
|
||||||
|
toBuffer() {
|
||||||
|
return Buffer.from(this._n.toByteArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
toString(radix = 10) {
|
||||||
|
const result = this._n.toString(radix);
|
||||||
|
if (radix === 16)
|
||||||
|
return result.padStart(2, '0');
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
and(num) {
|
||||||
|
return new BigNumber(this._n.and(new BigNumber(num)._n));
|
||||||
|
}
|
||||||
|
|
||||||
|
mul(num) {
|
||||||
|
return new BigNumber(this._n.multiply(new BigNumber(num)._n));
|
||||||
|
}
|
||||||
|
|
||||||
|
mod(num) {
|
||||||
|
return new BigNumber(this._n.mod(new BigNumber(num)._n));
|
||||||
|
}
|
||||||
|
|
||||||
|
shrn(num) {
|
||||||
|
return new BigNumber(this._n.shiftRight(new BigNumber(num)._n));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BigNumber;
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
|
|
||||||
const BigNumber = require('../BigNumber.js');
|
const BigNumber = require('./BigNumber.js');
|
||||||
const mgf1 = require('./MGF1');
|
const mgf1 = require('./MGF1');
|
||||||
|
|
||||||
const modPow = (base, power, mod) => {
|
const modPow = (base, power, mod) => {
|
||||||
@ -27,7 +27,7 @@ const emsaPSS = (msg, salt) => {
|
|||||||
const dbMask = mgf1.generate(mTickHash, db.length);
|
const dbMask = mgf1.generate(mTickHash, db.length);
|
||||||
const maskedDb = mgf1.xor(db, dbMask);
|
const maskedDb = mgf1.xor(db, dbMask);
|
||||||
|
|
||||||
let maskedDbMsb = mgf1.rjust(BigNumber.fromBuffer(maskedDb.slice(0, 1)).toString(2), 8, '0');
|
let maskedDbMsb = mgf1.rjust(new BigNumber(maskedDb.slice(0, 1)).toString(2), 8, '0');
|
||||||
|
|
||||||
|
|
||||||
maskedDbMsb = `0${maskedDbMsb.substr(1)}`;
|
maskedDbMsb = `0${maskedDbMsb.substr(1)}`;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
|
|
||||||
const BigNumber = require('../BigNumber.js');
|
const BigNumber = require('./BigNumber.js');
|
||||||
|
|
||||||
const MFG_LEN = 32;
|
const MFG_LEN = 32;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user