diff --git a/lib/crypto/Crypto.js b/lib/crypto/Crypto.js index 4d53560..02dca59 100644 --- a/lib/crypto/Crypto.js +++ b/lib/crypto/Crypto.js @@ -67,19 +67,16 @@ module.exports = class Crypto { } static sign(key, msg, salt = crypto.randomBytes(32)) { - // console.log(key.d()); const base = new BigNumber(emsaPSS(msg, salt)); const power = new BigNumber(key.d()); const mod = new BigNumber(key.n()); + const buffer = modPow(base, power, mod).toBEBuffer(); - //Somehow sometimes we have a 514 byte hex key that starts with "00". In that case use only the last 512 bytes - var hexString = modPow(base, power, mod).toBEBuffer().toString('hex'); - if(hexString.substr(0,2) === "00" && hexString.length == 514) - { - console.log("hex string of key starts with \"00\" and is 514 bytes long, fixing it to be 512 bytes long by stripping leading \"00\""); - hexString = hexString.substr(2); - } - return Buffer.from(hexString, 'hex').toString('base64'); + if (buffer.byteLength !== 257 || buffer[0] === 0x00) + return buffer.slice(1).toString('base64'); + + // console.log('hex string of key starts with "00" and is 514 bytes long, fixing it to be 512 bytes long by stripping leading "00"'); + return buffer.toString('base64'); } static pad(d) {