Piotr Dyraga d892a58e4b Cleared up Paillier scheme API
The code for generating private key is based on approach described in [KL 08], construction 11.32 which is compatible with the one described in [DJN 10], section 3.2 except that instead of generating Lamda private key compontent from LCM of `p` and `q` we use Euler's totient function as suggested in [KL 08]. I cleared up naming as well as removed G and Mu parameters from Paillier key. For the modification of Paillier scheme we use, where g = n + 1, N is the only one parameter needed for a public key. Also, Mu is needed only for Decrypting and can be computed there from Lambda and N so there is no need to keep it in the private key.

I added documentation to <Key, Enc, Dec> functions with an important note that `p` and `q` supplied to `CreatePrivateKey` must be either of equal length or `gcd(pq, (p-1)(q-1)) = 1` which is assured if both primes are of equal length. This requirement is mentioned both in [KL 08] and [DJN 10].

[KL 08]:  Jonathan Katz, Yehuda Lindell, (2008)
          Introduction to Modern Cryptography: Principles and Protocols,
          Chapman & Hall/CRC

[DJN 10]: Ivan Damgard, Mads Jurik, Jesper Buus Nielsen, (2010)
          A Generalization of Paillier’s Public-Key System
          with Applications to Electronic Voting
          Aarhus University, Dept. of Computer Science, BRICS
2018-05-24 18:41:10 +02:00
2014-11-29 22:22:14 -08:00
2015-02-22 13:02:08 -08:00
2018-05-24 18:41:10 +02:00
2014-11-29 22:22:14 -08:00
2018-05-24 18:41:10 +02:00
2014-11-29 22:47:18 -08:00
2014-11-29 23:29:34 -08:00
2014-11-29 23:29:34 -08:00
2014-11-29 23:29:34 -08:00

paillier

Go implementation of the paillier cryptosystem and threshold paillier crytposystem.

travis

introduction

Implementation of the paillier cryptosystem. See http://en.wikipedia.org/wiki/Paillier_cryptosystem for an introduction.

The threshold paillier cryptosystem is a translation of the java version that can be found at http://cs.utdallas.edu/dspl/cgi-bin/pailliertoolbox/ that is an implementation of the algorithm defined in Damgård's paper "A Generalization of Paillier's Public-Key System with Applications to Electronic Voting".

Another important feature of the library is the ease of serilisation of all the structs in JSON and BSON.

Implements the paillier cryptosystem and threshold paillier crytposystem.

caveat

As any cryptographic library, if you use it, you need to trust it. Unfortunatly, this library as not been verified by a third party. There might be some bugs and vulnerabilities. If you find one, please fill a bug.

If you need to encrypt something serious, use the library provided by Go. If you want to have fun, use Paillier!

S
Description
Paillier cryptosystem implemented in Go
Readme MIT
188 KiB
0 Stars 1 Watchers 0 Forks
Languages
Go 100%