Server : nginx/1.18.0 System : Linux localhost 6.14.3-x86_64-linode168 #1 SMP PREEMPT_DYNAMIC Mon Apr 21 19:47:55 EDT 2025 x86_64 User : www-data ( 33) PHP Version : 8.0.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/ecommerce/node_modules/public-encrypt/ |
var parseKeys = require('parse-asn1')
var randomBytes = require('randombytes')
var createHash = require('create-hash')
var mgf = require('./mgf')
var xor = require('./xor')
var BN = require('bn.js')
var withPublic = require('./withPublic')
var crt = require('browserify-rsa')
var Buffer = require('safe-buffer').Buffer
module.exports = function publicEncrypt (publicKey, msg, reverse) {
var padding
if (publicKey.padding) {
padding = publicKey.padding
} else if (reverse) {
padding = 1
} else {
padding = 4
}
var key = parseKeys(publicKey)
var paddedMsg
if (padding === 4) {
paddedMsg = oaep(key, msg)
} else if (padding === 1) {
paddedMsg = pkcs1(key, msg, reverse)
} else if (padding === 3) {
paddedMsg = new BN(msg)
if (paddedMsg.cmp(key.modulus) >= 0) {
throw new Error('data too long for modulus')
}
} else {
throw new Error('unknown padding')
}
if (reverse) {
return crt(paddedMsg, key)
} else {
return withPublic(paddedMsg, key)
}
}
function oaep (key, msg) {
var k = key.modulus.byteLength()
var mLen = msg.length
var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
var hLen = iHash.length
var hLen2 = 2 * hLen
if (mLen > k - hLen2 - 2) {
throw new Error('message too long')
}
var ps = Buffer.alloc(k - mLen - hLen2 - 2)
var dblen = k - hLen - 1
var seed = randomBytes(hLen)
var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))
var maskedSeed = xor(seed, mgf(maskedDb, hLen))
return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))
}
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
}