UNPKG

router-toolkit

Version:

A npm module for managing routers and access points

68 lines (67 loc) 1.87 kB
"use strict"; 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; }