router-toolkit
Version:
A npm module for managing routers and access points
68 lines (67 loc) • 1.87 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const parseKeys_1 = __importDefault(require("./parseKeys"));
var crt = require('browserify-rsa');
var BN = require('bn.js');
var randomBytes = require('randombytes');
var Buffer = require('safe-buffer').Buffer;
function withPublic(paddedMsg, key) {
return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray());
}
function publicEncrypt(publicKey, msg, reverse) {
var padding;
if (publicKey.padding) {
padding = publicKey.padding;
}
else if (reverse) {
padding = 1;
}
else {
padding = 4;
}
var key = (0, parseKeys_1.default)(publicKey);
var paddedMsg = pkcs1(key, msg, reverse);
if (reverse) {
return crt(paddedMsg, key);
}
else {
return withPublic(paddedMsg, key);
}
}
exports.default = publicEncrypt;
function pkcs1(key, msg, reverse) {
var mLen = msg.length;
var k = key.modulus.byteLength();
if (mLen > k - 11) {
throw new Error('message too long');
}
var ps;
if (reverse) {
ps = Buffer.alloc(k - mLen - 3, 0xff);
}
else {
ps = nonZero(k - mLen - 3);
}
return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k));
}
function nonZero(len) {
var out = Buffer.allocUnsafe(len);
var i = 0;
var cache = randomBytes(len * 2);
var cur = 0;
var num;
while (i < len) {
if (cur === cache.length) {
cache = randomBytes(len * 2);
cur = 0;
}
num = cache[cur++];
if (num) {
out[i++] = num;
}
}
return out;
}