Gathering detailed insights and metrics for paillier-bigint
Gathering detailed insights and metrics for paillier-bigint
Gathering detailed insights and metrics for paillier-bigint
Gathering detailed insights and metrics for paillier-bigint
paillier-pure
No-dependency version of paillier-bigint
paillier-js
A pure Javascript implementation of the Paillier cryptosystem. THIS PROJECT IS NO LONGER MAINTAINED. Consider switching to paillier-bigint that it is a pure JS native implementation and will work with both Node.js and Browsers, and not just Node.js
pallier-big-integer
An implementation of the Paillier cryptosystem relying on the js-biginteger with reference to pailler-bigint
doloressint
An implementation of the Paillier cryptosystem using native JS (ECMA 2020) implementation of BigInt
An implementation of the Paillier cryptosystem using native JS implementation of BigInt
npm install paillier-bigint
Typescript
Module System
Min. Node Version
Node Version
NPM Version
JavaScript (74.45%)
TypeScript (25.55%)
Total Downloads
0
Last Day
0
Last Week
0
Last Month
0
Last Year
0
MIT License
47 Stars
101 Commits
9 Forks
1 Watchers
3 Branches
2 Contributors
Updated on Feb 11, 2025
Latest Version
3.4.3
Package Id
paillier-bigint@3.4.3
Unpacked Size
84.35 kB
Size
17.21 kB
File Count
23
NPM Version
9.5.1
Node Version
18.16.1
Published on
Jun 30, 2023
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
1
28
An implementation of the Paillier cryptosystem relying on the native JS implementation of BigInt.
It can be used by any Web Browser or webview supporting BigInt and with Node.js (>=10.4.0). In the latter case, for multi-threaded primality tests, you should use Node.js v11 or newer or enable at runtime with node --experimental-worker
with Node.js version >= 10.5.0 and < 11.
The operations supported on BigInts are not constant time. BigInt can be therefore unsuitable for use in cryptography. Many platforms provide native support for cryptography, such as Web Cryptography API or Node.js Crypto.
The Paillier cryptosystem, named after and invented by Pascal Paillier in 1999, is a probabilistic asymmetric algorithm for public key cryptography. A notable feature of the Paillier cryptosystem is its homomorphic properties.
The product of two ciphertexts will decrypt to the sum of their corresponding plaintexts,
D( E(m1) · E(m2) ) mod n2 = m1 + m2 mod n
The product of a ciphertext with a plaintext raising g will decrypt to the sum of the corresponding plaintexts,
D( E(m1) · gm2 ) mod n2 = m1 + m2 mod n
An encrypted plaintext raised to the power of another plaintext will decrypt to the product of the two plaintexts,
D( E(m1)m2 mod n2 ) = m1 · m2 mod n,
D( E(m2)m1 mod n2 ) = m1 · m2 mod n.
More generally, an encrypted plaintext raised to a constant k will decrypt to the product of the plaintext and the constant,
D( E(m1)k mod n2 ) = k · m1 mod n.
However, given the Paillier encryptions of two messages there is no known way to compute an encryption of the product of these messages without knowing the private key.
n
, or keyLength
in bits.p
and q
randomly and independently of each other such that gcd( p·q, (p-1)(q-1) )=1
and n=p·q
has a key length of keyLength. For instance:
p
with a bit length of keyLength/2 + 1
.q
with a bit length of keyLength/2
.n=p·q
is keyLength
.λ
, g
and μ
. Among other ways, it can be done as follows:
λ = lcm(p-1, q-1)
with lcm(a, b) = a·b / gcd(a, b)
.α
and β
in Z*
of n
, and select generator g
in Z*
of n**2
as g = ( α·n + 1 ) β**n mod n**2
.μ = ( L( g^λ mod n**2 ) )**(-1) mod n
where L(x)=(x-1)/n
.λ = (p-1, q-1)
g = n+1
μ = λ**(-1) mod n
The public (encryption) key is (n, g).
The private (decryption) key is (λ, μ).
Let m
in [0, n)
be the clear-text message,
Select random integer r
in Z*
of n
.
Compute ciphertext as: c = g**m · r**n mod n**2
Let c
be the ciphertext to decrypt, where c
in (0, n**2)
.
m = L( c**λ mod n**2 ) · μ mod n
paillier-bigint
can be imported to your project with npm
:
1npm install paillier-bigint
Then either require (Node.js CJS):
1const paillierBigint = require('paillier-bigint')
or import (JavaScript ES module):
1import * as paillierBigint from 'paillier-bigint'
The appropriate version for browser or node is automatically exported.
You can also download the IIFE bundle, the ESM bundle or the UMD bundle and manually add it to your project, or, if you have already imported paillier-bigint
to your project, just get the bundles from node_modules/paillier-bigint/dist/bundles/
.
An example of usage could be:
1async function paillierTest () { 2 // (asynchronous) creation of a random private, public key pair for the Paillier cryptosystem 3 const { publicKey, privateKey } = await paillierBigint.generateRandomKeys(3072) 4 5 // Optionally, you can create your public/private keys from known parameters 6 // const publicKey = new paillierBigint.PublicKey(n, g) 7 // const privateKey = new paillierBigint.PrivateKey(lambda, mu, publicKey) 8 9 const m1 = 12345678901234567890n 10 const m2 = 5n 11 12 // encryption/decryption 13 const c1 = publicKey.encrypt(m1) 14 console.log(privateKey.decrypt(c1)) // 12345678901234567890n 15 16 // homomorphic addition of two ciphertexts (encrypted numbers) 17 const c2 = publicKey.encrypt(m2) 18 const encryptedSum = publicKey.addition(c1, c2) 19 console.log(privateKey.decrypt(encryptedSum)) // m1 + m2 = 12345678901234567895n 20 21 // multiplication by k 22 const k = 10n 23 const encryptedMul = publicKey.multiply(c1, k) 24 console.log(privateKey.decrypt(encryptedMul)) // k · m1 = 123456789012345678900n 25} 26paillierTest()
Consider using bigint-conversion if you need to convert from/to bigint to/from unicode text, hex, buffer.
No vulnerabilities found.
Reason
no dangerous workflow patterns detected
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
dependency not pinned by hash detected -- score normalized to 4
Details
Reason
Found 0/30 approved changesets -- score normalized to 0
Reason
detected GitHub workflow tokens with excessive permissions
Details
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
no SAST tool detected
Details
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
project is not fuzzed
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
17 existing vulnerabilities detected
Details
Score
Last Scanned on 2025-07-07
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More