Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

paillier-bigint

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

paillier-bigint - npm Package Compare versions

Comparing version 3.4.1 to 3.4.2

61

dist/bundle.esm.js

@@ -1,2 +0,2 @@

function n(n){return n>=0?n:-n}function t(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++;}while((n>>=1n)>1n);return t}function e(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,o=1n,i=0n;for(;0n!==n;){const s=t/n,u=t%n,a=e-o*s,c=r-i*s;t=n,n=u,e=o,r=i,o=a,i=c;}return {g:t,x:e,y:r}}function r(t,e){let r="number"==typeof t?BigInt(n(t)):n(t),o="number"==typeof e?BigInt(n(e)):n(e);if(0n===r)return o;if(0n===o)return r;let i=0n;for(;0n===(1n&(r|o));)r>>=1n,o>>=1n,i++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&o);)o>>=1n;if(r>o){const n=r;r=o,o=n;}o-=r;}while(0n!==o);return r<<i}function o(t,e){return "number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),0n===t&&0n===e?BigInt(0):n(t/r(t,e)*e)}function u(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function a(n,t){const r=e(u(n,t),t);if(1n!==r.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return u(r.x,t)}function c(t,e,r){if("number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof r&&(r=BigInt(r)),r<=0n)throw new RangeError("n must be > 0");if(1n===r)return 0n;if(t=u(t,r),e<0n)return a(c(t,n(e),r),r);let o=1n;for(;e>0;)e%2n===1n&&(o=o*t%r),e/=2n,t=t**2n%r;return o}function f(n){let t=0n;for(const e of n.values()){t=(t<<8n)+BigInt(e);}return t}function g(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,o=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,o));}t&&(r[0]=128|r[0]),e(r);}}))}function m(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,o=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,o));}return t&&(e[0]=128|e[0]),e}}function d(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,o)=>{g(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n;}n(e);}));}))}function b(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=m(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n;}return e}function l(n,e=1n){if(n<=e)throw new RangeError("Arguments MUST be: max > min");const r=n-e,o=t(r);let i;do{i=f(b(o));}while(i>r);return i+e}let w=!1;function h(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const o=new Worker(p());o.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(o.terminate(),e(n.data._bcu.isPrime));},o.onmessageerror=n=>{r(n);};const i={_bcu:{rnd:n,iterations:t,id:0}};o.postMessage(i);}))}function y(n,t){if(2n===n)return !0;if(0n===(1n&n)||1n===n)return !1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return !0;if(n%r===0n)return !1}let r=0n;const o=n-1n;let i=o;for(;i%2n===0n;)i/=2n,++r;const s=o/2n**r;do{let t=c(l(o,2n),s,n);if(1n===t||t===o)continue;let e=1;for(;e<r&&(t=c(t,2n,n),t!==o);){if(1n===t)return !1;e++;}if(t!==o)return !1}while(0!=--t);return !0}function p(){let n=`\n 'use strict';\n const ${e.name} = ${e.toString()};\n const ${a.name} = ${a.toString()};\n const ${c.name} = ${c.toString()};\n const ${u.name} = ${u.toString()};\n const ${b.name} = ${b.toString()};\n const ${m.name} = ${m.toString()};\n const ${l.name} = ${l.toString()};\n const ${h.name} = ${y.toString()};\n ${t.toString()};\n ${f.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${h.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function $(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!w){let e=0n;do{e=f(b(n,!0));}while(!y(e,t));return new Promise((n=>{n(e);}))}return new Promise(((e,r)=>{const o=[],i=(r,i)=>{if(r._bcu.isPrime){for(let n=0;n<o.length;n++)o[n].terminate();for(;o.length>0;)o.pop();e(r._bcu.value);}else {const e=f(b(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};i.postMessage(n);}catch(n){}}};{const n=p();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>i(n.data,t),o.push(t);}}for(let e=0;e<o.length;e++)d(n,!0).then((function(n){const r=f(n);o[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}});})).catch(r);}))}function S(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=f(b(n,!0));}while(!y(e,t));return e}void 0!==self.Worker&&(w=!0);
function n(n){return n>=0?n:-n}function t(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++;}while((n>>=1n)>1n);return t}function e(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,o=1n,i=0n;for(;0n!==n;){const s=t/n,u=t%n,a=e-o*s,c=r-i*s;t=n,n=u,e=o,r=i,o=a,i=c;}return {g:t,x:e,y:r}}function r(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function o(n,t){const o=e(r(n,t),t);if(1n!==o.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return r(o.x,t)}function i(n,t,e){if(n.length!==t.length)throw new RangeError("The remainders and modulos arrays should have the same length");const i=e??t.reduce(((n,t)=>n*t),1n);return t.reduce(((t,e,s)=>{const u=i/e;return r(t+u*o(u,e)%i*n[s]%i,i)}),0n)}function s(t,e){let r="number"==typeof t?BigInt(n(t)):n(t),o="number"==typeof e?BigInt(n(e)):n(e);if(0n===r)return o;if(0n===o)return r;let i=0n;for(;0n===(1n&(r|o));)r>>=1n,o>>=1n,i++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&o);)o>>=1n;if(r>o){const n=r;r=o,o=n;}o-=r;}while(0n!==o);return r<<i}function u(t,e){return "number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),0n===t&&0n===e?BigInt(0):n(t/s(t,e)*e)}function m(n){return n.map((n=>n[0]**(n[1]-1n)*(n[0]-1n))).reduce(((n,t)=>t*n),1n)}function d(t,e,s,u){if("number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof s&&(s=BigInt(s)),s<=0n)throw new RangeError("n must be > 0");if(1n===s)return 0n;if(t=r(t,s),e<0n)return o(d(t,n(e),s,u),s);if(void 0!==u)return function(n,t,e,r){const o=r.map((n=>n[0]**n[1])),s=r.map((n=>m([n]))),u=s.map(((e,r)=>d(n,t%e,o[r])));return i(u,o,e)}(t,e,s,function(n){const t={};return n.forEach((n=>{if("bigint"==typeof n||"number"==typeof n){const e=String(n);void 0===t[e]?t[e]={p:BigInt(n),k:1n}:t[e].k+=1n;}else {const e=String(n[0]);void 0===t[e]?t[e]={p:BigInt(n[0]),k:BigInt(n[1])}:t[e].k+=BigInt(n[1]);}})),Object.values(t).map((n=>[n.p,n.k]))}(u));let a=1n;for(;e>0;)e%2n===1n&&(a=a*t%s),e/=2n,t=t**2n%s;return a}function l(n){let t=0n;for(const e of n.values()){t=(t<<8n)+BigInt(e);}return t}function b(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,o=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,o));}t&&(r[0]=128|r[0]),e(r);}}))}function h(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,o=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,o));}return t&&(e[0]=128|e[0]),e}}function w(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,o)=>{b(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n;}n(e);}));}))}function p(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=h(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n;}return e}function y(n,e=1n){if(n<=e)throw new RangeError("Arguments MUST be: max > min");const r=n-e,o=t(r);let i;do{i=l(p(o));}while(i>r);return i+e}let B=!1;function I(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const o=new Worker($());o.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(o.terminate(),e(n.data._bcu.isPrime));},o.onmessageerror=n=>{r(n);};const i={_bcu:{rnd:n,iterations:t,id:0}};o.postMessage(i);}))}function S(n,t){if(2n===n)return !0;if(0n===(1n&n)||1n===n)return !1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return !0;if(n%r===0n)return !1}let r=0n;const o=n-1n;let i=o;for(;i%2n===0n;)i/=2n,++r;const s=o/2n**r;do{let t=d(y(o,2n),s,n);if(1n===t||t===o)continue;let e=1;for(;e<r&&(t=d(t,2n,n),t!==o);){if(1n===t)return !1;e++;}if(t!==o)return !1}while(0!=--t);return !0}function $(){let n=`\n 'use strict';\n const ${e.name} = ${e.toString()};\n const ${o.name} = ${o.toString()};\n const ${d.name} = ${d.toString()};\n const ${r.name} = ${r.toString()};\n const ${p.name} = ${p.toString()};\n const ${h.name} = ${h.toString()};\n const ${y.name} = ${y.toString()};\n const ${I.name} = ${S.toString()};\n ${t.toString()};\n ${l.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${I.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function R(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!B){let e=0n;do{e=l(p(n,!0));}while(!S(e,t));return new Promise((n=>{n(e);}))}return new Promise(((e,r)=>{const o=[],i=(r,i)=>{if(r._bcu.isPrime){for(let n=0;n<o.length;n++)o[n].terminate();for(;o.length>0;)o.pop();e(r._bcu.value);}else {const e=l(p(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};i.postMessage(n);}catch(n){}}};{const n=$();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>i(n.data,t),o.push(t);}}for(let e=0;e<o.length;e++)w(n,!0).then((function(n){const r=l(n);o[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}});})).catch(r);}))}function M(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=l(p(n,!0));}while(!S(e,t));return e}void 0!==self.Worker&&(B=!0);

@@ -12,9 +12,9 @@ class PublicKey {

}
encrypt(m, r$1) {
if (r$1 === undefined) {
encrypt(m, r) {
if (r === undefined) {
do {
r$1 = l(this.n);
} while (r(r$1, this.n) !== 1n);
r = y(this.n);
} while (s(r, this.n) !== 1n);
}
return (c(this.g, m, this._n2) * c(r$1, this.n, this._n2)) % this._n2;
return (d(this.g, m, this._n2) * d(r, this.n, this._n2)) % this._n2;
}

@@ -25,6 +25,6 @@ addition(...ciphertexts) {

plaintextAddition(ciphertext, ...plaintexts) {
return plaintexts.reduce((sum, next) => sum * c(this.g, next, this._n2) % this._n2, ciphertext);
return plaintexts.reduce((sum, next) => sum * d(this.g, next, this._n2) % this._n2, ciphertext);
}
multiply(c$1, k) {
return c(c$1, k, this._n2);
multiply(c, k) {
return d(c, k, this._n2);
}

@@ -47,6 +47,9 @@ }

}
decrypt(c$1) {
return (L(c(c$1, this.lambda, this.publicKey._n2), this.publicKey.n) * this.mu) % this.publicKey.n;
decrypt(c) {
if (this._p !== undefined && this._q !== undefined) {
return (L(d(c, this.lambda, this.publicKey._n2, [[this._p, 2], [this._q, 2]]), this.publicKey.n) * this.mu) % this.publicKey.n;
}
return (L(d(c, this.lambda, this.publicKey._n2), this.publicKey.n) * this.mu) % this.publicKey.n;
}
getRandomFactor(c$1) {
getRandomFactor(c) {
if (this.publicKey.g !== this.n + 1n)

@@ -57,7 +60,7 @@ throw RangeError('Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )');

}
const m = this.decrypt(c$1);
const m = this.decrypt(c);
const phi = (this._p - 1n) * (this._q - 1n);
const nInvModPhi = a(this.n, phi);
const c1 = c$1 * (1n - m * this.n) % this.publicKey._n2;
return c(c1, nInvModPhi, this.n);
const nInvModPhi = o(this.n, phi);
const c1 = c * (1n - m * this.n) % this.publicKey._n2;
return d(c1, nInvModPhi, this.n, [[this._p, 1], [this._q, 1]]);
}

@@ -72,4 +75,4 @@ }

do {
p = await $(Math.floor(bitlength / 2) + 1);
q = await $(Math.floor(bitlength / 2));
p = await R(Math.floor(bitlength / 2) + 1);
q = await R(Math.floor(bitlength / 2));
n = p * q;

@@ -80,3 +83,3 @@ } while (q === p || t(n) !== bitlength);

lambda = (p - 1n) * (q - 1n);
mu = a(lambda, n);
mu = o(lambda, n);
}

@@ -86,4 +89,4 @@ else {

g = getGenerator(n, n2);
lambda = o(p - 1n, q - 1n);
mu = a(L(c(g, lambda, n2), n), n);
lambda = u(p - 1n, q - 1n);
mu = o(L(d(g, lambda, n2), n), n);
}

@@ -97,4 +100,4 @@ const publicKey = new PublicKey(n, g);

do {
p = S(Math.floor(bitlength / 2) + 1);
q = S(Math.floor(bitlength / 2));
p = M(Math.floor(bitlength / 2) + 1);
q = M(Math.floor(bitlength / 2));
n = p * q;

@@ -105,3 +108,3 @@ } while (q === p || t(n) !== bitlength);

lambda = (p - 1n) * (q - 1n);
mu = a(lambda, n);
mu = o(lambda, n);
}

@@ -111,4 +114,4 @@ else {

g = getGenerator(n, n2);
lambda = o(p - 1n, q - 1n);
mu = a(L(c(g, lambda, n2), n), n);
lambda = u(p - 1n, q - 1n);
mu = o(L(d(g, lambda, n2), n), n);
}

@@ -120,7 +123,7 @@ const publicKey = new PublicKey(n, g);

function getGenerator(n, n2) {
const alpha = l(n);
const beta = l(n);
return ((alpha * n + 1n) * c(beta, n, n2)) % n2;
const alpha = y(n);
const beta = y(n);
return ((alpha * n + 1n) * d(beta, n, n2)) % n2;
}
export { PrivateKey, PublicKey, generateRandomKeys, generateRandomKeysSync };

@@ -1,1 +0,1 @@

function n(n){return n>=0?n:-n}function t(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++}while((n>>=1n)>1n);return t}function e(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,i=1n,o=0n;for(;0n!==n;){const s=t/n,u=t%n,c=e-i*s,a=r-o*s;t=n,n=u,e=i,r=o,i=c,o=a}return{g:t,x:e,y:r}}function r(t,e){let r="number"==typeof t?BigInt(n(t)):n(t),i="number"==typeof e?BigInt(n(e)):n(e);if(0n===r)return i;if(0n===i)return r;let o=0n;for(;0n===(1n&(r|i));)r>>=1n,i>>=1n,o++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&i);)i>>=1n;if(r>i){const n=r;r=i,i=n}i-=r}while(0n!==i);return r<<o}function i(t,e){return"number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),0n===t&&0n===e?BigInt(0):n(t/r(t,e)*e)}function o(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function s(n,t){const r=e(o(n,t),t);if(1n!==r.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return o(r.x,t)}function u(t,e,r){if("number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof r&&(r=BigInt(r)),r<=0n)throw new RangeError("n must be > 0");if(1n===r)return 0n;if(t=o(t,r),e<0n)return s(u(t,n(e),r),r);let i=1n;for(;e>0;)e%2n===1n&&(i=i*t%r),e/=2n,t=t**2n%r;return i}function c(n){let t=0n;for(const e of n.values())t=(t<<8n)+BigInt(e);return t}function a(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,i=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,i))}return t&&(e[0]=128|e[0]),e}}function f(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,i)=>{(function(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,i=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,i))}t&&(r[0]=128|r[0]),e(r)}}))})(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}n(e)}))}))}function g(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=a(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}return e}function h(n,e=1n){if(n<=e)throw new RangeError("Arguments MUST be: max > min");const r=n-e,i=t(r);let o;do{o=c(g(i))}while(o>r);return o+e}let l=!1;function d(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const i=new Worker(b());i.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(i.terminate(),e(n.data._bcu.isPrime))},i.onmessageerror=n=>{r(n)};const o={_bcu:{rnd:n,iterations:t,id:0}};i.postMessage(o)}))}function m(n,t){if(2n===n)return!0;if(0n===(1n&n)||1n===n)return!1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return!0;if(n%r===0n)return!1}let r=0n;const i=n-1n;let o=i;for(;o%2n===0n;)o/=2n,++r;const s=i/2n**r;do{let t=u(h(i,2n),s,n);if(1n===t||t===i)continue;let e=1;for(;e<r&&(t=u(t,2n,n),t!==i);){if(1n===t)return!1;e++}if(t!==i)return!1}while(0!=--t);return!0}function b(){let n=`\n 'use strict';\n const ${e.name} = ${e.toString()};\n const ${s.name} = ${s.toString()};\n const ${u.name} = ${u.toString()};\n const ${o.name} = ${o.toString()};\n const ${g.name} = ${g.toString()};\n const ${a.name} = ${a.toString()};\n const ${h.name} = ${h.toString()};\n const ${d.name} = ${m.toString()};\n ${t.toString()};\n ${c.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${d.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function w(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!l){let e=0n;do{e=c(g(n,!0))}while(!m(e,t));return new Promise((n=>{n(e)}))}return new Promise(((e,r)=>{const i=[],o=(r,o)=>{if(r._bcu.isPrime){for(let n=0;n<i.length;n++)i[n].terminate();for(;i.length>0;)i.pop();e(r._bcu.value)}else{const e=c(g(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};o.postMessage(n)}catch(n){}}};{const n=b();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>o(n.data,t),i.push(t)}}for(let e=0;e<i.length;e++)f(n,!0).then((function(n){const r=c(n);i[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}})})).catch(r)}))}function p(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=c(g(n,!0))}while(!m(e,t));return e}void 0!==self.Worker&&(l=!0);class y{constructor(n,t){this.n=n,this._n2=this.n**2n,this.g=t}get bitLength(){return t(this.n)}encrypt(n,t){if(void 0===t)do{t=h(this.n)}while(1n!==r(t,this.n));return u(this.g,n,this._n2)*u(t,this.n,this._n2)%this._n2}addition(...n){return n.reduce(((n,t)=>n*t%this._n2),1n)}plaintextAddition(n,...t){return t.reduce(((n,t)=>n*u(this.g,t,this._n2)%this._n2),n)}multiply(n,t){return u(n,t,this._n2)}}class _{constructor(n,t,e,r,i){this.lambda=n,this.mu=t,this._p=r,this._q=i,this.publicKey=e}get bitLength(){return t(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return $(u(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const t=this.decrypt(n),e=(this._p-1n)*(this._q-1n),r=s(this.n,e);return u(n*(1n-t*this.n)%this.publicKey._n2,r,this.n)}}function $(n,t){return(n-1n)/t}async function M(n=3072,e=!1){let r,o,c,a,f,g;do{r=await w(Math.floor(n/2)+1),o=await w(Math.floor(n/2)),c=r*o}while(o===r||t(c)!==n);if(e)a=c+1n,f=(r-1n)*(o-1n),g=s(f,c);else{const n=c**2n;a=S(c,n),f=i(r-1n,o-1n),g=s($(u(a,f,n),c),c)}const h=new y(c,a);return{publicKey:h,privateKey:new _(f,g,h,r,o)}}function R(n=3072,e=!1){let r,o,c,a,f,g;do{r=p(Math.floor(n/2)+1),o=p(Math.floor(n/2)),c=r*o}while(o===r||t(c)!==n);if(e)a=c+1n,f=(r-1n)*(o-1n),g=s(f,c);else{const n=c**2n;a=S(c,n),f=i(r-1n,o-1n),g=s($(u(a,f,n),c),c)}const h=new y(c,a);return{publicKey:h,privateKey:new _(f,g,h,r,o)}}function S(n,t){return(h(n)*n+1n)*u(h(n),n,t)%t}export{_ as PrivateKey,y as PublicKey,M as generateRandomKeys,R as generateRandomKeysSync};
function n(n){return n>=0?n:-n}function t(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++}while((n>>=1n)>1n);return t}function e(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,i=1n,o=0n;for(;0n!==n;){const s=t/n,u=t%n,c=e-i*s,a=r-o*s;t=n,n=u,e=i,r=o,i=c,o=a}return{g:t,x:e,y:r}}function r(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function i(n,t){const i=e(r(n,t),t);if(1n!==i.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return r(i.x,t)}function o(n,t,e){if(n.length!==t.length)throw new RangeError("The remainders and modulos arrays should have the same length");const o=e??t.reduce(((n,t)=>n*t),1n);return t.reduce(((t,e,s)=>{const u=o/e;return r(t+u*i(u,e)%o*n[s]%o,o)}),0n)}function s(t,e){let r="number"==typeof t?BigInt(n(t)):n(t),i="number"==typeof e?BigInt(n(e)):n(e);if(0n===r)return i;if(0n===i)return r;let o=0n;for(;0n===(1n&(r|i));)r>>=1n,i>>=1n,o++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&i);)i>>=1n;if(r>i){const n=r;r=i,i=n}i-=r}while(0n!==i);return r<<o}function u(t,e){return"number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),0n===t&&0n===e?BigInt(0):n(t/s(t,e)*e)}function c(t,e,s,u){if("number"==typeof t&&(t=BigInt(t)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof s&&(s=BigInt(s)),s<=0n)throw new RangeError("n must be > 0");if(1n===s)return 0n;if(t=r(t,s),e<0n)return i(c(t,n(e),s,u),s);if(void 0!==u)return function(n,t,e,r){const i=r.map((n=>n[0]**n[1])),s=r.map((n=>function(n){return n.map((n=>n[0]**(n[1]-1n)*(n[0]-1n))).reduce(((n,t)=>t*n),1n)}([n]))),u=s.map(((e,r)=>c(n,t%e,i[r])));return o(u,i,e)}(t,e,s,function(n){const t={};return n.forEach((n=>{if("bigint"==typeof n||"number"==typeof n){const e=String(n);void 0===t[e]?t[e]={p:BigInt(n),k:1n}:t[e].k+=1n}else{const e=String(n[0]);void 0===t[e]?t[e]={p:BigInt(n[0]),k:BigInt(n[1])}:t[e].k+=BigInt(n[1])}})),Object.values(t).map((n=>[n.p,n.k]))}(u));let a=1n;for(;e>0;)e%2n===1n&&(a=a*t%s),e/=2n,t=t**2n%s;return a}function a(n){let t=0n;for(const e of n.values())t=(t<<8n)+BigInt(e);return t}function f(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,i=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,i))}return t&&(e[0]=128|e[0]),e}}function h(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,i)=>{(function(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,i=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,i))}t&&(r[0]=128|r[0]),e(r)}}))})(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}n(e)}))}))}function g(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=f(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}return e}function l(n,e=1n){if(n<=e)throw new RangeError("Arguments MUST be: max > min");const r=n-e,i=t(r);let o;do{o=a(g(i))}while(o>r);return o+e}let d=!1;function m(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const i=new Worker(p());i.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(i.terminate(),e(n.data._bcu.isPrime))},i.onmessageerror=n=>{r(n)};const o={_bcu:{rnd:n,iterations:t,id:0}};i.postMessage(o)}))}function b(n,t){if(2n===n)return!0;if(0n===(1n&n)||1n===n)return!1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return!0;if(n%r===0n)return!1}let r=0n;const i=n-1n;let o=i;for(;o%2n===0n;)o/=2n,++r;const s=i/2n**r;do{let t=c(l(i,2n),s,n);if(1n===t||t===i)continue;let e=1;for(;e<r&&(t=c(t,2n,n),t!==i);){if(1n===t)return!1;e++}if(t!==i)return!1}while(0!=--t);return!0}function p(){let n=`\n 'use strict';\n const ${e.name} = ${e.toString()};\n const ${i.name} = ${i.toString()};\n const ${c.name} = ${c.toString()};\n const ${r.name} = ${r.toString()};\n const ${g.name} = ${g.toString()};\n const ${f.name} = ${f.toString()};\n const ${l.name} = ${l.toString()};\n const ${m.name} = ${b.toString()};\n ${t.toString()};\n ${a.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${m.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function w(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!d){let e=0n;do{e=a(g(n,!0))}while(!b(e,t));return new Promise((n=>{n(e)}))}return new Promise(((e,r)=>{const i=[],o=(r,o)=>{if(r._bcu.isPrime){for(let n=0;n<i.length;n++)i[n].terminate();for(;i.length>0;)i.pop();e(r._bcu.value)}else{const e=a(g(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};o.postMessage(n)}catch(n){}}};{const n=p();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>o(n.data,t),i.push(t)}}for(let e=0;e<i.length;e++)h(n,!0).then((function(n){const r=a(n);i[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}})})).catch(r)}))}function y(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=a(g(n,!0))}while(!b(e,t));return e}void 0!==self.Worker&&(d=!0);class _{constructor(n,t){this.n=n,this._n2=this.n**2n,this.g=t}get bitLength(){return t(this.n)}encrypt(n,t){if(void 0===t)do{t=l(this.n)}while(1n!==s(t,this.n));return c(this.g,n,this._n2)*c(t,this.n,this._n2)%this._n2}addition(...n){return n.reduce(((n,t)=>n*t%this._n2),1n)}plaintextAddition(n,...t){return t.reduce(((n,t)=>n*c(this.g,t,this._n2)%this._n2),n)}multiply(n,t){return c(n,t,this._n2)}}class v{constructor(n,t,e,r,i){this.lambda=n,this.mu=t,this._p=r,this._q=i,this.publicKey=e}get bitLength(){return t(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return void 0!==this._p&&void 0!==this._q?S(c(n,this.lambda,this.publicKey._n2,[[this._p,2],[this._q,2]]),this.publicKey.n)*this.mu%this.publicKey.n:S(c(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const t=this.decrypt(n),e=(this._p-1n)*(this._q-1n),r=i(this.n,e);return c(n*(1n-t*this.n)%this.publicKey._n2,r,this.n,[[this._p,1],[this._q,1]])}}function S(n,t){return(n-1n)/t}async function R(n=3072,e=!1){let r,o,s,a,f,h;do{r=await w(Math.floor(n/2)+1),o=await w(Math.floor(n/2)),s=r*o}while(o===r||t(s)!==n);if(e)a=s+1n,f=(r-1n)*(o-1n),h=i(f,s);else{const n=s**2n;a=M(s,n),f=u(r-1n,o-1n),h=i(S(c(a,f,n),s),s)}const g=new _(s,a);return{publicKey:g,privateKey:new v(f,h,g,r,o)}}function $(n=3072,e=!1){let r,o,s,a,f,h;do{r=y(Math.floor(n/2)+1),o=y(Math.floor(n/2)),s=r*o}while(o===r||t(s)!==n);if(e)a=s+1n,f=(r-1n)*(o-1n),h=i(f,s);else{const n=s**2n;a=M(s,n),f=u(r-1n,o-1n),h=i(S(c(a,f,n),s),s)}const g=new _(s,a);return{publicKey:g,privateKey:new v(f,h,g,r,o)}}function M(n,t){return(l(n)*n+1n)*c(l(n),n,t)%t}export{v as PrivateKey,_ as PublicKey,R as generateRandomKeys,$ as generateRandomKeysSync};

@@ -1,1 +0,1 @@

var paillierBigint=function(n){"use strict";function t(n){return n>=0?n:-n}function e(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++}while((n>>=1n)>1n);return t}function r(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,i=1n,o=0n;for(;0n!==n;){const s=t/n,u=t%n,a=e-i*s,c=r-o*s;t=n,n=u,e=i,r=o,i=a,o=c}return{g:t,x:e,y:r}}function i(n,e){let r="number"==typeof n?BigInt(t(n)):t(n),i="number"==typeof e?BigInt(t(e)):t(e);if(0n===r)return i;if(0n===i)return r;let o=0n;for(;0n===(1n&(r|i));)r>>=1n,i>>=1n,o++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&i);)i>>=1n;if(r>i){const n=r;r=i,i=n}i-=r}while(0n!==i);return r<<o}function o(n,e){return"number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),0n===n&&0n===e?BigInt(0):t(n/i(n,e)*e)}function s(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function u(n,t){const e=r(s(n,t),t);if(1n!==e.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return s(e.x,t)}function a(n,e,r){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof r&&(r=BigInt(r)),r<=0n)throw new RangeError("n must be > 0");if(1n===r)return 0n;if(n=s(n,r),e<0n)return u(a(n,t(e),r),r);let i=1n;for(;e>0;)e%2n===1n&&(i=i*n%r),e/=2n,n=n**2n%r;return i}function c(n){let t=0n;for(const e of n.values())t=(t<<8n)+BigInt(e);return t}function f(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,i=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,i))}return t&&(e[0]=128|e[0]),e}}function g(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,i)=>{(function(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,i=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,i))}t&&(r[0]=128|r[0]),e(r)}}))})(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}n(e)}))}))}function h(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=f(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}return e}function l(n,t=1n){if(n<=t)throw new RangeError("Arguments MUST be: max > min");const r=n-t,i=e(r);let o;do{o=c(h(i))}while(o>r);return o+t}let d=!1;function m(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const i=new Worker(w());i.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(i.terminate(),e(n.data._bcu.isPrime))},i.onmessageerror=n=>{r(n)};const o={_bcu:{rnd:n,iterations:t,id:0}};i.postMessage(o)}))}function b(n,t){if(2n===n)return!0;if(0n===(1n&n)||1n===n)return!1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return!0;if(n%r===0n)return!1}let r=0n;const i=n-1n;let o=i;for(;o%2n===0n;)o/=2n,++r;const s=i/2n**r;do{let t=a(l(i,2n),s,n);if(1n===t||t===i)continue;let e=1;for(;e<r&&(t=a(t,2n,n),t!==i);){if(1n===t)return!1;e++}if(t!==i)return!1}while(0!=--t);return!0}function w(){let n=`\n 'use strict';\n const ${r.name} = ${r.toString()};\n const ${u.name} = ${u.toString()};\n const ${a.name} = ${a.toString()};\n const ${s.name} = ${s.toString()};\n const ${h.name} = ${h.toString()};\n const ${f.name} = ${f.toString()};\n const ${l.name} = ${l.toString()};\n const ${m.name} = ${b.toString()};\n ${e.toString()};\n ${c.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${m.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function y(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!d){let e=0n;do{e=c(h(n,!0))}while(!b(e,t));return new Promise((n=>{n(e)}))}return new Promise(((e,r)=>{const i=[],o=(r,o)=>{if(r._bcu.isPrime){for(let n=0;n<i.length;n++)i[n].terminate();for(;i.length>0;)i.pop();e(r._bcu.value)}else{const e=c(h(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};o.postMessage(n)}catch(n){}}};{const n=w();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>o(n.data,t),i.push(t)}}for(let e=0;e<i.length;e++)g(n,!0).then((function(n){const r=c(n);i[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}})})).catch(r)}))}function p(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=c(h(n,!0))}while(!b(e,t));return e}void 0!==self.Worker&&(d=!0);class _{constructor(n,t){this.n=n,this._n2=this.n**2n,this.g=t}get bitLength(){return e(this.n)}encrypt(n,t){if(void 0===t)do{t=l(this.n)}while(1n!==i(t,this.n));return a(this.g,n,this._n2)*a(t,this.n,this._n2)%this._n2}addition(...n){return n.reduce(((n,t)=>n*t%this._n2),1n)}plaintextAddition(n,...t){return t.reduce(((n,t)=>n*a(this.g,t,this._n2)%this._n2),n)}multiply(n,t){return a(n,t,this._n2)}}class R{constructor(n,t,e,r,i){this.lambda=n,this.mu=t,this._p=r,this._q=i,this.publicKey=e}get bitLength(){return e(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return S(a(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const t=this.decrypt(n),e=(this._p-1n)*(this._q-1n),r=u(this.n,e);return a(n*(1n-t*this.n)%this.publicKey._n2,r,this.n)}}function S(n,t){return(n-1n)/t}function $(n,t){return(l(n)*n+1n)*a(l(n),n,t)%t}return n.PrivateKey=R,n.PublicKey=_,n.generateRandomKeys=async function(n=3072,t=!1){let r,i,s,c,f,g;do{r=await y(Math.floor(n/2)+1),i=await y(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)c=s+1n,f=(r-1n)*(i-1n),g=u(f,s);else{const n=s**2n;c=$(s,n),f=o(r-1n,i-1n),g=u(S(a(c,f,n),s),s)}const h=new _(s,c);return{publicKey:h,privateKey:new R(f,g,h,r,i)}},n.generateRandomKeysSync=function(n=3072,t=!1){let r,i,s,c,f,g;do{r=p(Math.floor(n/2)+1),i=p(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)c=s+1n,f=(r-1n)*(i-1n),g=u(f,s);else{const n=s**2n;c=$(s,n),f=o(r-1n,i-1n),g=u(S(a(c,f,n),s),s)}const h=new _(s,c);return{publicKey:h,privateKey:new R(f,g,h,r,i)}},n}({});
var paillierBigint=function(n){"use strict";function t(n){return n>=0?n:-n}function e(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++}while((n>>=1n)>1n);return t}function r(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,i=1n,o=0n;for(;0n!==n;){const s=t/n,u=t%n,a=e-i*s,c=r-o*s;t=n,n=u,e=i,r=o,i=a,o=c}return{g:t,x:e,y:r}}function i(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function o(n,t){const e=r(i(n,t),t);if(1n!==e.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return i(e.x,t)}function s(n,t,e){if(n.length!==t.length)throw new RangeError("The remainders and modulos arrays should have the same length");const r=e??t.reduce(((n,t)=>n*t),1n);return t.reduce(((t,e,s)=>{const u=r/e;return i(t+u*o(u,e)%r*n[s]%r,r)}),0n)}function u(n,e){let r="number"==typeof n?BigInt(t(n)):t(n),i="number"==typeof e?BigInt(t(e)):t(e);if(0n===r)return i;if(0n===i)return r;let o=0n;for(;0n===(1n&(r|i));)r>>=1n,i>>=1n,o++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&i);)i>>=1n;if(r>i){const n=r;r=i,i=n}i-=r}while(0n!==i);return r<<o}function a(n,e){return"number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),0n===n&&0n===e?BigInt(0):t(n/u(n,e)*e)}function c(n,e,r,u){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof r&&(r=BigInt(r)),r<=0n)throw new RangeError("n must be > 0");if(1n===r)return 0n;if(n=i(n,r),e<0n)return o(c(n,t(e),r,u),r);if(void 0!==u)return function(n,t,e,r){const i=r.map((n=>n[0]**n[1])),o=r.map((n=>function(n){return n.map((n=>n[0]**(n[1]-1n)*(n[0]-1n))).reduce(((n,t)=>t*n),1n)}([n]))),u=o.map(((e,r)=>c(n,t%e,i[r])));return s(u,i,e)}(n,e,r,function(n){const t={};return n.forEach((n=>{if("bigint"==typeof n||"number"==typeof n){const e=String(n);void 0===t[e]?t[e]={p:BigInt(n),k:1n}:t[e].k+=1n}else{const e=String(n[0]);void 0===t[e]?t[e]={p:BigInt(n[0]),k:BigInt(n[1])}:t[e].k+=BigInt(n[1])}})),Object.values(t).map((n=>[n.p,n.k]))}(u));let a=1n;for(;e>0;)e%2n===1n&&(a=a*n%r),e/=2n,n=n**2n%r;return a}function f(n){let t=0n;for(const e of n.values())t=(t<<8n)+BigInt(e);return t}function h(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,i=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,i))}return t&&(e[0]=128|e[0]),e}}function g(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,i)=>{(function(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,i=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,i))}t&&(r[0]=128|r[0]),e(r)}}))})(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}n(e)}))}))}function l(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=h(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}return e}function d(n,t=1n){if(n<=t)throw new RangeError("Arguments MUST be: max > min");const r=n-t,i=e(r);let o;do{o=f(l(i))}while(o>r);return o+t}let m=!1;function b(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const i=new Worker(y());i.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(i.terminate(),e(n.data._bcu.isPrime))},i.onmessageerror=n=>{r(n)};const o={_bcu:{rnd:n,iterations:t,id:0}};i.postMessage(o)}))}function p(n,t){if(2n===n)return!0;if(0n===(1n&n)||1n===n)return!1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return!0;if(n%r===0n)return!1}let r=0n;const i=n-1n;let o=i;for(;o%2n===0n;)o/=2n,++r;const s=i/2n**r;do{let t=c(d(i,2n),s,n);if(1n===t||t===i)continue;let e=1;for(;e<r&&(t=c(t,2n,n),t!==i);){if(1n===t)return!1;e++}if(t!==i)return!1}while(0!=--t);return!0}function y(){let n=`\n 'use strict';\n const ${r.name} = ${r.toString()};\n const ${o.name} = ${o.toString()};\n const ${c.name} = ${c.toString()};\n const ${i.name} = ${i.toString()};\n const ${l.name} = ${l.toString()};\n const ${h.name} = ${h.toString()};\n const ${d.name} = ${d.toString()};\n const ${b.name} = ${p.toString()};\n ${e.toString()};\n ${f.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${b.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function w(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!m){let e=0n;do{e=f(l(n,!0))}while(!p(e,t));return new Promise((n=>{n(e)}))}return new Promise(((e,r)=>{const i=[],o=(r,o)=>{if(r._bcu.isPrime){for(let n=0;n<i.length;n++)i[n].terminate();for(;i.length>0;)i.pop();e(r._bcu.value)}else{const e=f(l(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};o.postMessage(n)}catch(n){}}};{const n=y();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>o(n.data,t),i.push(t)}}for(let e=0;e<i.length;e++)g(n,!0).then((function(n){const r=f(n);i[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}})})).catch(r)}))}function _(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=f(l(n,!0))}while(!p(e,t));return e}void 0!==self.Worker&&(m=!0);class v{constructor(n,t){this.n=n,this._n2=this.n**2n,this.g=t}get bitLength(){return e(this.n)}encrypt(n,t){if(void 0===t)do{t=d(this.n)}while(1n!==u(t,this.n));return c(this.g,n,this._n2)*c(t,this.n,this._n2)%this._n2}addition(...n){return n.reduce(((n,t)=>n*t%this._n2),1n)}plaintextAddition(n,...t){return t.reduce(((n,t)=>n*c(this.g,t,this._n2)%this._n2),n)}multiply(n,t){return c(n,t,this._n2)}}class R{constructor(n,t,e,r,i){this.lambda=n,this.mu=t,this._p=r,this._q=i,this.publicKey=e}get bitLength(){return e(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return void 0!==this._p&&void 0!==this._q?S(c(n,this.lambda,this.publicKey._n2,[[this._p,2],[this._q,2]]),this.publicKey.n)*this.mu%this.publicKey.n:S(c(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const t=this.decrypt(n),e=(this._p-1n)*(this._q-1n),r=o(this.n,e);return c(n*(1n-t*this.n)%this.publicKey._n2,r,this.n,[[this._p,1],[this._q,1]])}}function S(n,t){return(n-1n)/t}function K(n,t){return(d(n)*n+1n)*c(d(n),n,t)%t}return n.PrivateKey=R,n.PublicKey=v,n.generateRandomKeys=async function(n=3072,t=!1){let r,i,s,u,f,h;do{r=await w(Math.floor(n/2)+1),i=await w(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)u=s+1n,f=(r-1n)*(i-1n),h=o(f,s);else{const n=s**2n;u=K(s,n),f=a(r-1n,i-1n),h=o(S(c(u,f,n),s),s)}const g=new v(s,u);return{publicKey:g,privateKey:new R(f,h,g,r,i)}},n.generateRandomKeysSync=function(n=3072,t=!1){let r,i,s,u,f,h;do{r=_(Math.floor(n/2)+1),i=_(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)u=s+1n,f=(r-1n)*(i-1n),h=o(f,s);else{const n=s**2n;u=K(s,n),f=a(r-1n,i-1n),h=o(S(c(u,f,n),s),s)}const g=new v(s,u);return{publicKey:g,privateKey:new R(f,h,g,r,i)}},n}({});

@@ -1,1 +0,1 @@

!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).paillierBigint={})}(this,(function(n){"use strict";function t(n){return n>=0?n:-n}function e(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++}while((n>>=1n)>1n);return t}function r(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,i=1n,o=0n;for(;0n!==n;){const s=t/n,u=t%n,a=e-i*s,c=r-o*s;t=n,n=u,e=i,r=o,i=a,o=c}return{g:t,x:e,y:r}}function i(n,e){let r="number"==typeof n?BigInt(t(n)):t(n),i="number"==typeof e?BigInt(t(e)):t(e);if(0n===r)return i;if(0n===i)return r;let o=0n;for(;0n===(1n&(r|i));)r>>=1n,i>>=1n,o++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&i);)i>>=1n;if(r>i){const n=r;r=i,i=n}i-=r}while(0n!==i);return r<<o}function o(n,e){return"number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),0n===n&&0n===e?BigInt(0):t(n/i(n,e)*e)}function s(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function u(n,t){const e=r(s(n,t),t);if(1n!==e.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return s(e.x,t)}function a(n,e,r){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof r&&(r=BigInt(r)),r<=0n)throw new RangeError("n must be > 0");if(1n===r)return 0n;if(n=s(n,r),e<0n)return u(a(n,t(e),r),r);let i=1n;for(;e>0;)e%2n===1n&&(i=i*n%r),e/=2n,n=n**2n%r;return i}function c(n){let t=0n;for(const e of n.values())t=(t<<8n)+BigInt(e);return t}function f(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,i=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,i))}return t&&(e[0]=128|e[0]),e}}function g(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,i)=>{(function(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,i=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,i))}t&&(r[0]=128|r[0]),e(r)}}))})(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}n(e)}))}))}function h(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=f(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}return e}function l(n,t=1n){if(n<=t)throw new RangeError("Arguments MUST be: max > min");const r=n-t,i=e(r);let o;do{o=c(h(i))}while(o>r);return o+t}let d=!1;function m(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const i=new Worker(y());i.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(i.terminate(),e(n.data._bcu.isPrime))},i.onmessageerror=n=>{r(n)};const o={_bcu:{rnd:n,iterations:t,id:0}};i.postMessage(o)}))}function b(n,t){if(2n===n)return!0;if(0n===(1n&n)||1n===n)return!1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return!0;if(n%r===0n)return!1}let r=0n;const i=n-1n;let o=i;for(;o%2n===0n;)o/=2n,++r;const s=i/2n**r;do{let t=a(l(i,2n),s,n);if(1n===t||t===i)continue;let e=1;for(;e<r&&(t=a(t,2n,n),t!==i);){if(1n===t)return!1;e++}if(t!==i)return!1}while(0!=--t);return!0}function y(){let n=`\n 'use strict';\n const ${r.name} = ${r.toString()};\n const ${u.name} = ${u.toString()};\n const ${a.name} = ${a.toString()};\n const ${s.name} = ${s.toString()};\n const ${h.name} = ${h.toString()};\n const ${f.name} = ${f.toString()};\n const ${l.name} = ${l.toString()};\n const ${m.name} = ${b.toString()};\n ${e.toString()};\n ${c.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${m.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function p(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!d){let e=0n;do{e=c(h(n,!0))}while(!b(e,t));return new Promise((n=>{n(e)}))}return new Promise(((e,r)=>{const i=[],o=(r,o)=>{if(r._bcu.isPrime){for(let n=0;n<i.length;n++)i[n].terminate();for(;i.length>0;)i.pop();e(r._bcu.value)}else{const e=c(h(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};o.postMessage(n)}catch(n){}}};{const n=y();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>o(n.data,t),i.push(t)}}for(let e=0;e<i.length;e++)g(n,!0).then((function(n){const r=c(n);i[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}})})).catch(r)}))}function w(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=c(h(n,!0))}while(!b(e,t));return e}void 0!==self.Worker&&(d=!0);class _{constructor(n,t){this.n=n,this._n2=this.n**2n,this.g=t}get bitLength(){return e(this.n)}encrypt(n,t){if(void 0===t)do{t=l(this.n)}while(1n!==i(t,this.n));return a(this.g,n,this._n2)*a(t,this.n,this._n2)%this._n2}addition(...n){return n.reduce(((n,t)=>n*t%this._n2),1n)}plaintextAddition(n,...t){return t.reduce(((n,t)=>n*a(this.g,t,this._n2)%this._n2),n)}multiply(n,t){return a(n,t,this._n2)}}class R{constructor(n,t,e,r,i){this.lambda=n,this.mu=t,this._p=r,this._q=i,this.publicKey=e}get bitLength(){return e(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return S(a(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const t=this.decrypt(n),e=(this._p-1n)*(this._q-1n),r=u(this.n,e);return a(n*(1n-t*this.n)%this.publicKey._n2,r,this.n)}}function S(n,t){return(n-1n)/t}function $(n,t){return(l(n)*n+1n)*a(l(n),n,t)%t}n.PrivateKey=R,n.PublicKey=_,n.generateRandomKeys=async function(n=3072,t=!1){let r,i,s,c,f,g;do{r=await p(Math.floor(n/2)+1),i=await p(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)c=s+1n,f=(r-1n)*(i-1n),g=u(f,s);else{const n=s**2n;c=$(s,n),f=o(r-1n,i-1n),g=u(S(a(c,f,n),s),s)}const h=new _(s,c);return{publicKey:h,privateKey:new R(f,g,h,r,i)}},n.generateRandomKeysSync=function(n=3072,t=!1){let r,i,s,c,f,g;do{r=w(Math.floor(n/2)+1),i=w(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)c=s+1n,f=(r-1n)*(i-1n),g=u(f,s);else{const n=s**2n;c=$(s,n),f=o(r-1n,i-1n),g=u(S(a(c,f,n),s),s)}const h=new _(s,c);return{publicKey:h,privateKey:new R(f,g,h,r,i)}}}));
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).paillierBigint={})}(this,(function(n){"use strict";function t(n){return n>=0?n:-n}function e(n){if("number"==typeof n&&(n=BigInt(n)),1n===n)return 1;let t=1;do{t++}while((n>>=1n)>1n);return t}function r(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),n<=0n||t<=0n)throw new RangeError("a and b MUST be > 0");let e=0n,r=1n,i=1n,o=0n;for(;0n!==n;){const s=t/n,u=t%n,c=e-i*s,a=r-o*s;t=n,n=u,e=i,r=o,i=c,o=a}return{g:t,x:e,y:r}}function i(n,t){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof t&&(t=BigInt(t)),t<=0n)throw new RangeError("n must be > 0");const e=n%t;return e<0n?e+t:e}function o(n,t){const e=r(i(n,t),t);if(1n!==e.g)throw new RangeError(`${n.toString()} does not have inverse modulo ${t.toString()}`);return i(e.x,t)}function s(n,t,e){if(n.length!==t.length)throw new RangeError("The remainders and modulos arrays should have the same length");const r=e??t.reduce(((n,t)=>n*t),1n);return t.reduce(((t,e,s)=>{const u=r/e;return i(t+u*o(u,e)%r*n[s]%r,r)}),0n)}function u(n,e){let r="number"==typeof n?BigInt(t(n)):t(n),i="number"==typeof e?BigInt(t(e)):t(e);if(0n===r)return i;if(0n===i)return r;let o=0n;for(;0n===(1n&(r|i));)r>>=1n,i>>=1n,o++;for(;0n===(1n&r);)r>>=1n;do{for(;0n===(1n&i);)i>>=1n;if(r>i){const n=r;r=i,i=n}i-=r}while(0n!==i);return r<<o}function c(n,e){return"number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),0n===n&&0n===e?BigInt(0):t(n/u(n,e)*e)}function a(n,e,r,u){if("number"==typeof n&&(n=BigInt(n)),"number"==typeof e&&(e=BigInt(e)),"number"==typeof r&&(r=BigInt(r)),r<=0n)throw new RangeError("n must be > 0");if(1n===r)return 0n;if(n=i(n,r),e<0n)return o(a(n,t(e),r,u),r);if(void 0!==u)return function(n,t,e,r){const i=r.map((n=>n[0]**n[1])),o=r.map((n=>function(n){return n.map((n=>n[0]**(n[1]-1n)*(n[0]-1n))).reduce(((n,t)=>t*n),1n)}([n]))),u=o.map(((e,r)=>a(n,t%e,i[r])));return s(u,i,e)}(n,e,r,function(n){const t={};return n.forEach((n=>{if("bigint"==typeof n||"number"==typeof n){const e=String(n);void 0===t[e]?t[e]={p:BigInt(n),k:1n}:t[e].k+=1n}else{const e=String(n[0]);void 0===t[e]?t[e]={p:BigInt(n[0]),k:BigInt(n[1])}:t[e].k+=BigInt(n[1])}})),Object.values(t).map((n=>[n.p,n.k]))}(u));let c=1n;for(;e>0;)e%2n===1n&&(c=c*n%r),e/=2n,n=n**2n%r;return c}function f(n){let t=0n;for(const e of n.values())t=(t<<8n)+BigInt(e);return t}function h(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");{const e=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(e);else for(let t=0;t<Math.ceil(n/65536);t++){const r=65536*t,i=r+65535<n?r+65535:n-1;self.crypto.getRandomValues(e.subarray(r,i))}return t&&(e[0]=128|e[0]),e}}function g(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=Math.ceil(n/8),r=n%8;return new Promise(((n,i)=>{(function(n,t=!1){if(n<1)throw new RangeError("byteLength MUST be > 0");return new Promise((function(e,r){{const r=new Uint8Array(n);if(n<=65536)self.crypto.getRandomValues(r);else for(let t=0;t<Math.ceil(n/65536);t++){const e=65536*t,i=e+65535<n?e+65535:n-1;self.crypto.getRandomValues(r.subarray(e,i))}t&&(r[0]=128|r[0]),e(r)}}))})(e,!1).then((function(e){if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}n(e)}))}))}function l(n,t=!1){if(n<1)throw new RangeError("bitLength MUST be > 0");const e=h(Math.ceil(n/8),!1),r=n%8;if(0!==r&&(e[0]=e[0]&2**r-1),t){const n=0!==r?2**(r-1):128;e[0]=e[0]|n}return e}function d(n,t=1n){if(n<=t)throw new RangeError("Arguments MUST be: max > min");const r=n-t,i=e(r);let o;do{o=f(l(i))}while(o>r);return o+t}let m=!1;function b(n,t=16,e=!1){if("number"==typeof n&&(n=BigInt(n)),n<0n)throw RangeError("w MUST be >= 0");return new Promise(((e,r)=>{const i=new Worker(y());i.onmessage=n=>{void 0!==n?.data?._bcu?.isPrime&&(i.terminate(),e(n.data._bcu.isPrime))},i.onmessageerror=n=>{r(n)};const o={_bcu:{rnd:n,iterations:t,id:0}};i.postMessage(o)}))}function p(n,t){if(2n===n)return!0;if(0n===(1n&n)||1n===n)return!1;const e=[3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n,1009n,1013n,1019n,1021n,1031n,1033n,1039n,1049n,1051n,1061n,1063n,1069n,1087n,1091n,1093n,1097n,1103n,1109n,1117n,1123n,1129n,1151n,1153n,1163n,1171n,1181n,1187n,1193n,1201n,1213n,1217n,1223n,1229n,1231n,1237n,1249n,1259n,1277n,1279n,1283n,1289n,1291n,1297n,1301n,1303n,1307n,1319n,1321n,1327n,1361n,1367n,1373n,1381n,1399n,1409n,1423n,1427n,1429n,1433n,1439n,1447n,1451n,1453n,1459n,1471n,1481n,1483n,1487n,1489n,1493n,1499n,1511n,1523n,1531n,1543n,1549n,1553n,1559n,1567n,1571n,1579n,1583n,1597n];for(let t=0;t<e.length&&e[t]<=n;t++){const r=e[t];if(n===r)return!0;if(n%r===0n)return!1}let r=0n;const i=n-1n;let o=i;for(;o%2n===0n;)o/=2n,++r;const s=i/2n**r;do{let t=a(d(i,2n),s,n);if(1n===t||t===i)continue;let e=1;for(;e<r&&(t=a(t,2n,n),t!==i);){if(1n===t)return!1;e++}if(t!==i)return!1}while(0!=--t);return!0}function y(){let n=`\n 'use strict';\n const ${r.name} = ${r.toString()};\n const ${o.name} = ${o.toString()};\n const ${a.name} = ${a.toString()};\n const ${i.name} = ${i.toString()};\n const ${l.name} = ${l.toString()};\n const ${h.name} = ${h.toString()};\n const ${d.name} = ${d.toString()};\n const ${b.name} = ${p.toString()};\n ${e.toString()};\n ${f.toString()};`;return n+=`\n onmessage = async function(msg) {\n if (msg !== undefined && msg.data !== undefined && msg.data._bcu !== undefined && msg.data._bcu.id !== undefined && msg.data._bcu.iterations !== undefined && msg.data._bcu.rnd !== undefined) {\n const msgToParent = {\n _bcu: {\n isPrime: await ${b.name}(msg.data._bcu.rnd, msg.data._bcu.iterations),\n value: msg.data._bcu.rnd,\n id: msg.data._bcu.id\n }\n };\n postMessage(msgToParent);\n }\n }`,function(n){n=`(() => {${n}})()`;const t=new Blob([n],{type:"text/javascript"});return window.URL.createObjectURL(t)}(n)}function w(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");if(!m){let e=0n;do{e=f(l(n,!0))}while(!p(e,t));return new Promise((n=>{n(e)}))}return new Promise(((e,r)=>{const i=[],o=(r,o)=>{if(r._bcu.isPrime){for(let n=0;n<i.length;n++)i[n].terminate();for(;i.length>0;)i.pop();e(r._bcu.value)}else{const e=f(l(n,!0));try{const n={_bcu:{rnd:e,iterations:t,id:r._bcu.id}};o.postMessage(n)}catch(n){}}};{const n=y();for(let t=0;t<self.navigator.hardwareConcurrency-1;t++){const t=new Worker(n);t.onmessage=n=>o(n.data,t),i.push(t)}}for(let e=0;e<i.length;e++)g(n,!0).then((function(n){const r=f(n);i[e].postMessage({_bcu:{rnd:r,iterations:t,id:e}})})).catch(r)}))}function _(n,t=16){if(n<1)throw new RangeError("bitLength MUST be > 0");let e=0n;do{e=f(l(n,!0))}while(!p(e,t));return e}void 0!==self.Worker&&(m=!0);class v{constructor(n,t){this.n=n,this._n2=this.n**2n,this.g=t}get bitLength(){return e(this.n)}encrypt(n,t){if(void 0===t)do{t=d(this.n)}while(1n!==u(t,this.n));return a(this.g,n,this._n2)*a(t,this.n,this._n2)%this._n2}addition(...n){return n.reduce(((n,t)=>n*t%this._n2),1n)}plaintextAddition(n,...t){return t.reduce(((n,t)=>n*a(this.g,t,this._n2)%this._n2),n)}multiply(n,t){return a(n,t,this._n2)}}class R{constructor(n,t,e,r,i){this.lambda=n,this.mu=t,this._p=r,this._q=i,this.publicKey=e}get bitLength(){return e(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return void 0!==this._p&&void 0!==this._q?S(a(n,this.lambda,this.publicKey._n2,[[this._p,2],[this._q,2]]),this.publicKey.n)*this.mu%this.publicKey.n:S(a(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const t=this.decrypt(n),e=(this._p-1n)*(this._q-1n),r=o(this.n,e);return a(n*(1n-t*this.n)%this.publicKey._n2,r,this.n,[[this._p,1],[this._q,1]])}}function S(n,t){return(n-1n)/t}function K(n,t){return(d(n)*n+1n)*a(d(n),n,t)%t}n.PrivateKey=R,n.PublicKey=v,n.generateRandomKeys=async function(n=3072,t=!1){let r,i,s,u,f,h;do{r=await w(Math.floor(n/2)+1),i=await w(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)u=s+1n,f=(r-1n)*(i-1n),h=o(f,s);else{const n=s**2n;u=K(s,n),f=c(r-1n,i-1n),h=o(S(a(u,f,n),s),s)}const g=new v(s,u);return{publicKey:g,privateKey:new R(f,h,g,r,i)}},n.generateRandomKeysSync=function(n=3072,t=!1){let r,i,s,u,f,h;do{r=_(Math.floor(n/2)+1),i=_(Math.floor(n/2)),s=r*i}while(i===r||e(s)!==n);if(t)u=s+1n,f=(r-1n)*(i-1n),h=o(f,s);else{const n=s**2n;u=K(s,n),f=c(r-1n,i-1n),h=o(S(a(u,f,n),s),s)}const g=new v(s,u);return{publicKey:g,privateKey:new R(f,h,g,r,i)}}}));

@@ -1,2 +0,1 @@

import*as t from"bigint-crypto-utils";class n{constructor(t,n){this.n=t,this._n2=this.n**2n,this.g=n}get bitLength(){return t.bitLength(this.n)}encrypt(n,i){if(void 0===i)do{i=t.randBetween(this.n)}while(1n!==t.gcd(i,this.n));return t.modPow(this.g,n,this._n2)*t.modPow(i,this.n,this._n2)%this._n2}addition(...t){return t.reduce(((t,n)=>t*n%this._n2),1n)}plaintextAddition(n,...i){return i.reduce(((n,i)=>n*t.modPow(this.g,i,this._n2)%this._n2),n)}multiply(n,i){return t.modPow(n,i,this._n2)}}class i{constructor(t,n,i,e,o){this.lambda=t,this.mu=n,this._p=e,this._q=o,this.publicKey=i}get bitLength(){return t.bitLength(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return e(t.modPow(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const i=this.decrypt(n),e=(this._p-1n)*(this._q-1n),o=t.modInv(this.n,e),r=n*(1n-i*this.n)%this.publicKey._n2;return t.modPow(r,o,this.n)}}function e(t,n){return(t-1n)/n}async function o(o=3072,r=!1){let h,c,u,d,a,l;do{h=await t.prime(Math.floor(o/2)+1),c=await t.prime(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(r)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=s(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const m=new n(u,d);return{publicKey:m,privateKey:new i(a,l,m,h,c)}}function r(o=3072,r=!1){let h,c,u,d,a,l;do{h=t.primeSync(Math.floor(o/2)+1),c=t.primeSync(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(r)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=s(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const m=new n(u,d);return{publicKey:m,privateKey:new i(a,l,m,h,c)}}function s(n,i){const e=t.randBetween(n),o=t.randBetween(n);return(e*n+1n)*t.modPow(o,n,i)%i}export{i as PrivateKey,n as PublicKey,o as generateRandomKeys,r as generateRandomKeysSync};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguYnJvd3Nlci5lc20uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy90cy9QdWJsaWNLZXkudHMiLCIuLi9zcmMvdHMvUHJpdmF0ZUtleS50cyIsIi4uL3NyYy90cy9nZW5lcmF0ZVJhbmRvbUtleXMudHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIlB1YmxpY0tleSIsImNvbnN0cnVjdG9yIiwibiIsImciLCJ0aGlzIiwiX24yIiwiYml0TGVuZ3RoIiwiYmN1IiwiZW5jcnlwdCIsIm0iLCJyIiwidW5kZWZpbmVkIiwicmFuZEJldHdlZW4iLCJnY2QiLCJtb2RQb3ciLCJhZGRpdGlvbiIsImNpcGhlcnRleHRzIiwicmVkdWNlIiwic3VtIiwibmV4dCIsInBsYWludGV4dEFkZGl0aW9uIiwiY2lwaGVydGV4dCIsInBsYWludGV4dHMiLCJtdWx0aXBseSIsImMiLCJrIiwiUHJpdmF0ZUtleSIsImxhbWJkYSIsIm11IiwicHVibGljS2V5IiwicCIsInEiLCJfcCIsIl9xIiwiZGVjcnlwdCIsIkwiLCJnZXRSYW5kb21GYWN0b3IiLCJSYW5nZUVycm9yIiwiRXJyb3IiLCJwaGkiLCJuSW52TW9kUGhpIiwibW9kSW52IiwiYzEiLCJhIiwiYXN5bmMiLCJnZW5lcmF0ZVJhbmRvbUtleXMiLCJiaXRsZW5ndGgiLCJzaW1wbGVWYXJpYW50IiwicHJpbWUiLCJNYXRoIiwiZmxvb3IiLCJuMiIsImdldEdlbmVyYXRvciIsImxjbSIsInByaXZhdGVLZXkiLCJnZW5lcmF0ZVJhbmRvbUtleXNTeW5jIiwicHJpbWVTeW5jIiwiYWxwaGEiLCJiZXRhIl0sIm1hcHBpbmdzIjoic0NBS2MsTUFBT0EsRUFXbkJDLFlBQWFDLEVBQVdDLEdBQ3RCQyxLQUFLRixFQUFJQSxFQUNURSxLQUFLQyxJQUFNRCxLQUFLRixHQUFLLEdBQ3JCRSxLQUFLRCxFQUFJQSxDQUNWLENBTUdHLGdCQUNGLE9BQU9DLEVBQUlELFVBQVVGLEtBQUtGLEVBQzNCLENBVURNLFFBQVNDLEVBQVdD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
import*as t from"bigint-crypto-utils";class n{constructor(t,n){this.n=t,this._n2=this.n**2n,this.g=n}get bitLength(){return t.bitLength(this.n)}encrypt(n,i){if(void 0===i)do{i=t.randBetween(this.n)}while(1n!==t.gcd(i,this.n));return t.modPow(this.g,n,this._n2)*t.modPow(i,this.n,this._n2)%this._n2}addition(...t){return t.reduce(((t,n)=>t*n%this._n2),1n)}plaintextAddition(n,...i){return i.reduce(((n,i)=>n*t.modPow(this.g,i,this._n2)%this._n2),n)}multiply(n,i){return t.modPow(n,i,this._n2)}}class i{constructor(t,n,i,e,o){this.lambda=t,this.mu=n,this._p=e,this._q=o,this.publicKey=i}get bitLength(){return t.bitLength(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return void 0!==this._p&&void 0!==this._q?e(t.modPow(n,this.lambda,this.publicKey._n2,[[this._p,2],[this._q,2]]),this.publicKey.n)*this.mu%this.publicKey.n:e(t.modPow(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const i=this.decrypt(n),e=(this._p-1n)*(this._q-1n),o=t.modInv(this.n,e),s=n*(1n-i*this.n)%this.publicKey._n2;return t.modPow(s,o,this.n,[[this._p,1],[this._q,1]])}}function e(t,n){return(t-1n)/n}async function o(o=3072,s=!1){let h,c,u,d,a,l;do{h=await t.prime(Math.floor(o/2)+1),c=await t.prime(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(s)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=r(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const p=new n(u,d);return{publicKey:p,privateKey:new i(a,l,p,h,c)}}function s(o=3072,s=!1){let h,c,u,d,a,l;do{h=t.primeSync(Math.floor(o/2)+1),c=t.primeSync(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(s)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=r(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const p=new n(u,d);return{publicKey:p,privateKey:new i(a,l,p,h,c)}}function r(n,i){const e=t.randBetween(n),o=t.randBetween(n);return(e*n+1n)*t.modPow(o,n,i)%i}export{i as PrivateKey,n as PublicKey,o as generateRandomKeys,s as generateRandomKeysSync};

@@ -0,1 +1,4 @@

/**
* Class for a Paillier public key
*/
declare class PublicKey {

@@ -5,10 +8,53 @@ readonly n: bigint;

readonly _n2: bigint;
/**
* Creates an instance of class PublicKey
* @param n - The public modulo
* @param g - The public generator
*/
constructor(n: bigint, g: bigint);
/**
* Get the bit length of the public modulo
* @returns The bit length of the public modulo
*/
get bitLength(): number;
/**
* Paillier public-key encryption
*
* @param m - A bigint representation of a plaintext message
* @param r - The random integer factor for encryption. By default is a random in (1,n)
*
* @returns The encryption of m with this public key
*/
encrypt(m: bigint, r?: bigint): bigint;
/**
* Homomorphic addition
*
* @param ciphertexts - n >= 2 ciphertexts (c_1,..., c_n) that are the encryption of (m_1, ..., m_n) with this public key
*
* @returns The encryption of (m_1 + ... + m_n) with this public key
*/
addition(...ciphertexts: bigint[]): bigint;
/**
* Pseudo-homomorphic addition of plaintext to chipertext
*
* @param ciphertext - an encryption of m1 with this public key
* @param plaintexts - 1 or more plaintexts (m_2, ..., m_n)
*
* @returns The encryption of (m_1 + ... + m_n) with this public key
*/
plaintextAddition(ciphertext: bigint, ...plaintexts: bigint[]): bigint;
/**
* Pseudo-homomorphic Paillier multiplication
*
* @param {bigint} c - a number m encrypted with this public key
* @param {bigint | number} k - either a bigint or a number
*
* @returns {bigint} - the encryption of k·m with this public key
*/
multiply(c: bigint, k: bigint | number): bigint;
}
/**
* Class for Paillier private keys.
*/
declare class PrivateKey {

@@ -20,6 +66,47 @@ readonly lambda: bigint;

private readonly _q?;
/**
* Creates an instance of class PrivateKey
*
* @param lambda
* @param mu
* @param publicKey
* @param p - a big prime
* @param q- a big prime
*/
constructor(lambda: bigint, mu: bigint, publicKey: PublicKey, p?: bigint, q?: bigint);
/**
* Get the bit length of the public modulo
* @returns The bit length of the public modulo
*/
get bitLength(): number;
/**
* Get the public modulo n=p·q
* @returns The public modulo n=p·q
*/
get n(): bigint;
/**
* Paillier private-key decryption
*
* @param c - A bigint encrypted with the public key
*
* @returns The decryption of c with this private key
*/
decrypt(c: bigint): bigint;
/**
* Recover the random factor used for encrypting a message with the complementary public key.
* The recovery function only works if the public key generator g was using the simple variant
* g = 1 + n
* It is also necessary to know p and q (usually stored in the private key)
*
* @param c - The encryption using the public of message m with random factor r
*
* @returns The random factor (mod n)
*
* @throws {RangeError}
* Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )
*
* @throws {Error}
* Cannot get random factor without knowing p and q
*
*/
getRandomFactor(c: bigint): bigint;

@@ -32,5 +119,22 @@ }

}
/**
* Generates a pair private, public key for the Paillier cryptosystem.
*
* @param bitlength - The bit length of the public modulo
* @param simplevariant - Use the simple variant to compute the generator (g=n+1). This is REQUIRED if you want to be able to recover the random integer factor used when encrypting with the public key
*
* @returns A promise that resolves to a {@link KeyPair} of public, private keys
*/
declare function generateRandomKeys(bitlength?: number, simpleVariant?: boolean): Promise<KeyPair>;
/**
* Generates a pair private, public key for the Paillier cryptosystem in synchronous mode.
* Synchronous mode is NOT RECOMMENDED since it won't use workers and thus it'll be slower and may freeze thw window in browser's javascript.
*
* @param bitlength - The bit length of the public modulo
* @param simplevariant - Use the simple variant to compute the generator (g=n+1)
*
* @returns A pair of public, private keys
*/
declare function generateRandomKeysSync(bitlength?: number, simpleVariant?: boolean): KeyPair;
export { KeyPair, PrivateKey, PublicKey, generateRandomKeys, generateRandomKeysSync };

@@ -1,2 +0,1 @@

import*as t from"bigint-crypto-utils";class n{constructor(t,n){this.n=t,this._n2=this.n**2n,this.g=n}get bitLength(){return t.bitLength(this.n)}encrypt(n,i){if(void 0===i)do{i=t.randBetween(this.n)}while(1n!==t.gcd(i,this.n));return t.modPow(this.g,n,this._n2)*t.modPow(i,this.n,this._n2)%this._n2}addition(...t){return t.reduce(((t,n)=>t*n%this._n2),1n)}plaintextAddition(n,...i){return i.reduce(((n,i)=>n*t.modPow(this.g,i,this._n2)%this._n2),n)}multiply(n,i){return t.modPow(n,i,this._n2)}}class i{constructor(t,n,i,e,o){this.lambda=t,this.mu=n,this._p=e,this._q=o,this.publicKey=i}get bitLength(){return t.bitLength(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return e(t.modPow(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const i=this.decrypt(n),e=(this._p-1n)*(this._q-1n),o=t.modInv(this.n,e),r=n*(1n-i*this.n)%this.publicKey._n2;return t.modPow(r,o,this.n)}}function e(t,n){return(t-1n)/n}async function o(o=3072,r=!1){let h,c,u,d,a,l;do{h=await t.prime(Math.floor(o/2)+1),c=await t.prime(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(r)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=s(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const m=new n(u,d);return{publicKey:m,privateKey:new i(a,l,m,h,c)}}function r(o=3072,r=!1){let h,c,u,d,a,l;do{h=t.primeSync(Math.floor(o/2)+1),c=t.primeSync(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(r)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=s(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const m=new n(u,d);return{publicKey:m,privateKey:new i(a,l,m,h,c)}}function s(n,i){const e=t.randBetween(n),o=t.randBetween(n);return(e*n+1n)*t.modPow(o,n,i)%i}export{i as PrivateKey,n as PublicKey,o as generateRandomKeys,r as generateRandomKeysSync};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubm9kZS5lc20uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy90cy9QdWJsaWNLZXkudHMiLCIuLi9zcmMvdHMvUHJpdmF0ZUtleS50cyIsIi4uL3NyYy90cy9nZW5lcmF0ZVJhbmRvbUtleXMudHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIlB1YmxpY0tleSIsImNvbnN0cnVjdG9yIiwibiIsImciLCJ0aGlzIiwiX24yIiwiYml0TGVuZ3RoIiwiYmN1IiwiZW5jcnlwdCIsIm0iLCJyIiwidW5kZWZpbmVkIiwicmFuZEJldHdlZW4iLCJnY2QiLCJtb2RQb3ciLCJhZGRpdGlvbiIsImNpcGhlcnRleHRzIiwicmVkdWNlIiwic3VtIiwibmV4dCIsInBsYWludGV4dEFkZGl0aW9uIiwiY2lwaGVydGV4dCIsInBsYWludGV4dHMiLCJtdWx0aXBseSIsImMiLCJrIiwiUHJpdmF0ZUtleSIsImxhbWJkYSIsIm11IiwicHVibGljS2V5IiwicCIsInEiLCJfcCIsIl9xIiwiZGVjcnlwdCIsIkwiLCJnZXRSYW5kb21GYWN0b3IiLCJSYW5nZUVycm9yIiwiRXJyb3IiLCJwaGkiLCJuSW52TW9kUGhpIiwibW9kSW52IiwiYzEiLCJhIiwiYXN5bmMiLCJnZW5lcmF0ZVJhbmRvbUtleXMiLCJiaXRsZW5ndGgiLCJzaW1wbGVWYXJpYW50IiwicHJpbWUiLCJNYXRoIiwiZmxvb3IiLCJuMiIsImdldEdlbmVyYXRvciIsImxjbSIsInByaXZhdGVLZXkiLCJnZW5lcmF0ZVJhbmRvbUtleXNTeW5jIiwicHJpbWVTeW5jIiwiYWxwaGEiLCJiZXRhIl0sIm1hcHBpbmdzIjoic0NBS2MsTUFBT0EsRUFXbkJDLFlBQWFDLEVBQVdDLEdBQ3RCQyxLQUFLRixFQUFJQSxFQUNURSxLQUFLQyxJQUFNRCxLQUFLRixHQUFLLEdBQ3JCRSxLQUFLRCxFQUFJQSxDQUNWLENBTUdHLGdCQUNGLE9BQU9DLEVBQUlELFVBQVVGLEtBQUtGLEVBQzNCLENBVURNLFFBQVNDLEVBQVdDLEdBQ2xCLFFBQVVDLElBQU5ELEVBQ0YsR0FDRUEsRUFBSUgsRUFBSUssWUFBWVIsS0FBS0YsU0FDSyxLQUF2QkssRUFBSU0sSUFBSUgsRUFBR04sS0FBS0YsSUFFM0IsT0FBUUssRUFBSU8sT0FBT1YsS0FBS0QsRUFBR00sRUFBR0wsS0FBS0MsS0FBT0UsRUFBSU8sT0FBT0osRUFBR04sS0FBS0YsRUFBR0UsS0FBS0MsS0FBUUQsS0FBS0MsR0FDbkYsQ0FTRFUsWUFBYUMsR0FDWCxPQUFPQSxFQUFZQyxRQUFPLENBQUNDLEVBQUtDLElBQVNELEVBQU1DLEVBQU9mLEtBQUtDLEtBQUssR0FDakUsQ0FVRGUsa0JBQW1CQyxLQUF1QkMsR0FDeEMsT0FBT0EsRUFBV0wsUUFBTyxDQUFDQyxFQUFLQyxJQUFTRCxFQUFNWCxFQUFJTyxPQUFPVixLQUFLRCxFQUFHZ0IsRUFBTWYsS0FBS0MsS0FBT0QsS0FBS0MsS0FBS2dCLEVBQzlGLENBVURFLFNBQVVDLEVBQVdDLEdBQ25CLE9BQU9sQixFQUFJTyxPQUFPVSxFQUFHQyxFQUFHckIsS0FBS0MsSUFDOUIsRUMxRVcsTUFBT3FCLEVBZ0JuQnpCLFlBQWEwQixFQUFnQkMsRUFBWUMsRUFBc0JDLEVBQVlDLEdBQ3pFM0IsS0FBS3VCLE9BQVNBLEVBQ2R2QixLQUFLd0IsR0FBS0EsRUFDVnhCLEtBQUs0QixHQUFLRixFQUNWMUIsS0FBSzZCLEdBQUtGLEVBQ1YzQixLQUFLeUIsVUFBWUEsQ0FDbEIsQ0FNR3ZCLGdCQUNGLE9BQU9DLEVBQUlELFVBQVVGLEtBQUt5QixVQUFVM0IsRUFDckMsQ0FNR0EsUUFDRixPQUFPRSxLQUFLeUIsVUFBVTNCLENBQ3ZCLENBU0RnQyxRQUFTVixHQUNQLE9BQVFXLEVBQUU1QixFQUFJTyxPQUFPVSxFQUFHcEIsS0FBS3VCLE9BQVF2QixLQUFLeUIsVUFBVXhCLEtBQU1ELEtBQUt5QixVQUFVM0IsR0FBS0UsS0FBS3dCLEdBQU14QixLQUFLeUIsVUFBVTNCLENBQ3pHLENBbUJEa0MsZ0JBQWlCWixHQUNmLEdBQUlwQixLQUFLeUIsVUFBVTFCLElBQU1DLEtBQUtGLEVBQUksR0FBSSxNQUFNbUMsV0FBVyxxS0FDdkQsUUFBZ0IxQixJQUFaUCxLQUFLNEIsU0FBZ0NyQixJQUFaUCxLQUFLNkIsR0FDaEMsTUFBTUssTUFBTSxvREFFZCxNQUFNN0IsRUFBSUwsS0FBSzhCLFFBQVFWLEdBQ2pCZSxHQUFPbkMsS0FBSzRCLEdBQUssS0FBTzVCLEtBQUs2QixHQUFLLElBQ2xDTyxFQUFhakMsRUFBSWtDLE9BQU9yQyxLQUFLRixFQUFHcUMsR0FDaENHLEVBQUtsQixHQUFLLEdBQUtmLEVBQUlMLEtBQUtGLEdBQUtFLEtBQUt5QixVQUFVeEIsSUFDbEQsT0FBT0UsRUFBSU8sT0FBTzRCLEVBQUlGLEVBQVlwQyxLQUFLRixFQUN4QyxFQUdhLFNBQUFpQyxFQUFHUSxFQUFXekMsR0FDNUIsT0FBUXlDLEVBQUksSUFBTXpDLENBQ3BCLENDeEVPMEMsZUFBZUMsRUFBb0JDLEVBQW9CLEtBQU1DLEdBQXlCLEdBQzNGLElBQUlqQixFQUFXQyxFQUFXN0IsRUFBV0MsRUFBV3dCLEVBQWdCQyxFQUVoRSxHQUNFRSxRQUFVdkIsRUFBSXlDLE1BQU1DLEtBQUtDLE1BQU1KLEVBQVksR0FBSyxHQUNoRGYsUUFBVXhCLEVBQUl5QyxNQUFNQyxLQUFLQyxNQUFNSixFQUFZLElBQzNDNUMsRUFBSTRCLEVBQUlDLFFBQ0RBLElBQU1ELEdBQUt2QixFQUFJRCxVQUFVSixLQUFPNEMsR0FFekMsR0FBSUMsRUFJRjVDLEVBQUlELEVBQUksR0FDUnlCLEdBQVVHLEVBQUksS0FBT0MsRUFBSSxJQUN6QkgsRUFBS3JCLEVBQUlrQyxPQUFPZCxFQUFRekIsT0FDbkIsQ0FDTCxNQUFNaUQsRUFBS2pELEdBQUssR0FDaEJDLEVBQUlpRCxFQUFhbEQsRUFBR2lELEdBQ3BCeEIsRUFBU3BCLEVBQUk4QyxJQUFJdkIsRUFBSSxHQUFJQyxFQUFJLElBQzdCSCxFQUFLckIsRUFBSWtDLE9BQU9OLEVBQUU1QixFQUFJTyxPQUFPWCxFQUFHd0IsRUFBUXdCLEdBQUtqRCxHQUFJQSxFQUNsRCxDQUVELE1BQU0yQixFQUFZLElBQUk3QixFQUFVRSxFQUFHQyxHQUVuQyxNQUFPLENBQUUwQixZQUFXeUIsV0FERCxJQUFJNUIsRUFBV0MsRUFBUUMsRUFBSUMsRUFBV0MsRUFBR0MsR0FFOUQsVUFXZ0J3QixFQUF3QlQsRUFBb0IsS0FBTUMsR0FBeUIsR0FDekYsSUFBSWpCLEVBQVdDLEVBQVc3QixFQUFXQyxFQUFXd0IsRUFBZ0JDLEVBRWhFLEdBQ0VFLEVBQUl2QixFQUFJaUQsVUFBVVAsS0FBS0MsTUFBTUosRUFBWSxHQUFLLEdBQzlDZixFQUFJeEIsRUFBSWlELFVBQVVQLEtBQUtDLE1BQU1KLEVBQVksSUFDekM1QyxFQUFJNEIsRUFBSUMsUUFDREEsSUFBTUQsR0FBS3ZCLEVBQUlELFVBQVVKLEtBQU80QyxHQUV6QyxHQUFJQyxFQUlGNUMsRUFBSUQsRUFBSSxHQUNSeUIsR0FBVUcsRUFBSSxLQUFPQyxFQUFJLElBQ3pCSCxFQUFLckIsRUFBSWtDLE9BQU9kLEVBQVF6QixPQUNuQixDQUNMLE1BQU1pRCxFQUFLakQsR0FBSyxHQUNoQkMsRUFBSWlELEVBQWFsRCxFQUFHaUQsR0FDcEJ4QixFQUFTcEIsRUFBSThDLElBQUl2QixFQUFJLEdBQUlDLEVBQUksSUFDN0JILEVBQUtyQixFQUFJa0MsT0FBT04sRUFBRTVCLEVBQUlPLE9BQU9YLEVBQUd3QixFQUFRd0IsR0FBS2pELEdBQUlBLEVBQ2xELENBRUQsTUFBTTJCLEVBQVksSUFBSTdCLEVBQVVFLEVBQUdDLEdBRW5DLE1BQU8sQ0FBRTBCLFlBQVd5QixXQURELElBQUk1QixFQUFXQyxFQUFRQyxFQUFJQyxFQUFXQyxFQUFHQyxHQUU5RCxDQUVBLFNBQVNxQixFQUFjbEQsRUFBV2lELEdBQ2hDLE1BQU1NLEVBQVFsRCxFQUFJSyxZQUFZVixHQUN4QndELEVBQU9uRCxFQUFJSyxZQUFZVixHQUM3QixPQUFTdUQsRUFBUXZELEVBQUksSUFBTUssRUFBSU8sT0FBTzRDLEVBQU14RCxFQUFHaUQsR0FBT0EsQ0FDeEQifQ==
import*as t from"bigint-crypto-utils";class n{constructor(t,n){this.n=t,this._n2=this.n**2n,this.g=n}get bitLength(){return t.bitLength(this.n)}encrypt(n,i){if(void 0===i)do{i=t.randBetween(this.n)}while(1n!==t.gcd(i,this.n));return t.modPow(this.g,n,this._n2)*t.modPow(i,this.n,this._n2)%this._n2}addition(...t){return t.reduce(((t,n)=>t*n%this._n2),1n)}plaintextAddition(n,...i){return i.reduce(((n,i)=>n*t.modPow(this.g,i,this._n2)%this._n2),n)}multiply(n,i){return t.modPow(n,i,this._n2)}}class i{constructor(t,n,i,e,o){this.lambda=t,this.mu=n,this._p=e,this._q=o,this.publicKey=i}get bitLength(){return t.bitLength(this.publicKey.n)}get n(){return this.publicKey.n}decrypt(n){return void 0!==this._p&&void 0!==this._q?e(t.modPow(n,this.lambda,this.publicKey._n2,[[this._p,2],[this._q,2]]),this.publicKey.n)*this.mu%this.publicKey.n:e(t.modPow(n,this.lambda,this.publicKey._n2),this.publicKey.n)*this.mu%this.publicKey.n}getRandomFactor(n){if(this.publicKey.g!==this.n+1n)throw RangeError("Cannot recover the random factor if publicKey.g != publicKey.n + 1. You should generate yout keys using the simple variant, e.g. generateRandomKeys(3072, true) )");if(void 0===this._p||void 0===this._q)throw Error("Cannot get random factor without knowing p and q");const i=this.decrypt(n),e=(this._p-1n)*(this._q-1n),o=t.modInv(this.n,e),s=n*(1n-i*this.n)%this.publicKey._n2;return t.modPow(s,o,this.n,[[this._p,1],[this._q,1]])}}function e(t,n){return(t-1n)/n}async function o(o=3072,s=!1){let h,c,u,d,a,l;do{h=await t.prime(Math.floor(o/2)+1),c=await t.prime(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(s)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=r(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const p=new n(u,d);return{publicKey:p,privateKey:new i(a,l,p,h,c)}}function s(o=3072,s=!1){let h,c,u,d,a,l;do{h=t.primeSync(Math.floor(o/2)+1),c=t.primeSync(Math.floor(o/2)),u=h*c}while(c===h||t.bitLength(u)!==o);if(s)d=u+1n,a=(h-1n)*(c-1n),l=t.modInv(a,u);else{const n=u**2n;d=r(u,n),a=t.lcm(h-1n,c-1n),l=t.modInv(e(t.modPow(d,a,n),u),u)}const p=new n(u,d);return{publicKey:p,privateKey:new i(a,l,p,h,c)}}function r(n,i){const e=t.randBetween(n),o=t.randBetween(n);return(e*n+1n)*t.modPow(o,n,i)%i}export{i as PrivateKey,n as PublicKey,o as generateRandomKeys,s as generateRandomKeysSync};

@@ -1,2 +0,2 @@

# paillier-bigint - v3.4.1
# paillier-bigint - v3.4.2

@@ -40,6 +40,2 @@ ## Table of contents

#### Defined in
[generateRandomKeys.ts:18](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/generateRandomKeys.ts#L18)
___

@@ -66,5 +62,1 @@

A pair of public, private keys
#### Defined in
[generateRandomKeys.ts:55](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/generateRandomKeys.ts#L55)

@@ -45,6 +45,2 @@ # Class: PrivateKey

#### Defined in
[PrivateKey.ts:23](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L23)
## Properties

@@ -56,6 +52,2 @@

#### Defined in
[PrivateKey.ts:8](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L8)
___

@@ -67,6 +59,2 @@

#### Defined in
[PrivateKey.ts:9](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L9)
___

@@ -78,6 +66,2 @@

#### Defined in
[PrivateKey.ts:10](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L10)
## Accessors

@@ -97,6 +81,2 @@

#### Defined in
[PrivateKey.ts:35](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L35)
___

@@ -116,6 +96,2 @@

#### Defined in
[PrivateKey.ts:43](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L43)
## Methods

@@ -141,6 +117,2 @@

#### Defined in
[PrivateKey.ts:54](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L54)
___

@@ -176,5 +148,1 @@

The random factor (mod n)
#### Defined in
[PrivateKey.ts:75](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PrivateKey.ts#L75)

@@ -43,6 +43,2 @@ # Class: PublicKey

#### Defined in
[PublicKey.ts:17](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L17)
## Properties

@@ -54,6 +50,2 @@

#### Defined in
[PublicKey.ts:10](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L10)
___

@@ -65,6 +57,2 @@

#### Defined in
[PublicKey.ts:8](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L8)
___

@@ -76,6 +64,2 @@

#### Defined in
[PublicKey.ts:7](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L7)
## Accessors

@@ -95,6 +79,2 @@

#### Defined in
[PublicKey.ts:27](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L27)
## Methods

@@ -120,6 +100,2 @@

#### Defined in
[PublicKey.ts:55](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L55)
___

@@ -146,6 +122,2 @@

#### Defined in
[PublicKey.ts:39](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L39)
___

@@ -172,6 +144,2 @@

#### Defined in
[PublicKey.ts:79](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L79)
___

@@ -197,5 +165,1 @@

The encryption of (m_1 + ... + m_n) with this public key
#### Defined in
[PublicKey.ts:67](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/PublicKey.ts#L67)

@@ -16,6 +16,2 @@ # Interface: KeyPair

#### Defined in
[generateRandomKeys.ts:7](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/generateRandomKeys.ts#L7)
___

@@ -26,5 +22,1 @@

• **publicKey**: [`PublicKey`](../classes/PublicKey.md)
#### Defined in
[generateRandomKeys.ts:6](https://github.com/juanelas/paillier-bigint/blob/8a14c4e/src/ts/generateRandomKeys.ts#L6)
{
"name": "paillier-bigint",
"version": "3.4.1",
"version": "3.4.2",
"description": "An implementation of the Paillier cryptosystem using native JS (ECMA 2020) implementation of BigInt",

@@ -52,6 +52,22 @@ "keywords": [

"./esm-browser-bundle": "./dist/bundle.esm.min.js",
"./dist/bundle.esm.min.js": "./dist/bundle.esm.min.js",
"./esm-browser-bundle-nomin": "./dist/bundle.esm.js",
"./dist/bundle.esm.js": "./dist/bundle.esm.js",
"./iife-browser-bundle": "./dist/bundle.iife.js",
"./dist/bundle.iife.js": "./dist/bundle.iife.js",
"./umd-browser-bundle": "./dist/bundle.umd.js",
"./types": "./dist/index.d.ts"
"./dist/bundle.umd.js": "./dist/bundle.umd.js",
"./dist/index.node": {
"types": "./dist/index.d.ts",
"default": "./dist/index.node.cjs"
},
"./dist/index.node.esm": {
"types": "./dist/index.d.ts",
"default": "./dist/index.node.esm.js"
},
"./dist/index.browser.esm": {
"types": "./dist/index.d.ts",
"default": "./dist/index.browser.esm.js"
},
"./package.json": "./package.json"
},

@@ -138,3 +154,3 @@ "imports": {

"devDependencies": {
"@rollup/plugin-commonjs": "^24.0.1",
"@rollup/plugin-commonjs": "^25.0.2",
"@rollup/plugin-inject": "^5.0.3",

@@ -149,3 +165,3 @@ "@rollup/plugin-json": "^6.0.0",

"@types/mocha": "^10.0.0",
"c8": "^7.12.0",
"c8": "^8.0.0",
"chai": "^4.3.3",

@@ -159,3 +175,3 @@ "dotenv": "^16.0.3",

"pirates": "^4.0.1",
"puppeteer": "^19.1.2",
"puppeteer": "^20.7.3",
"rimraf": "^5.0.0",

@@ -168,7 +184,7 @@ "rollup": "^3.20.2",

"typedoc-plugin-markdown": "~3.14.0",
"typescript": "^5.0.3"
"typescript": "^4.6.0"
},
"dependencies": {
"bigint-crypto-utils": "^3.2.2"
"bigint-crypto-utils": "^3.3.0"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc