Skip to content

Commit

Permalink
Merge v1.3.0 branch (closes #12 closes #21)
Browse files Browse the repository at this point in the history
Release of v1.3.0
  • Loading branch information
ChristianMct authored Dec 20, 2019
2 parents 12ff58e + 802e809 commit bb095f1
Show file tree
Hide file tree
Showing 108 changed files with 15,585 additions and 12,296 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
language: go

go:
- 1.x
- 1.13.x

env:
- GO111MODULE=on
Expand Down
56 changes: 53 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,60 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
### Added
- Bootstrapping for CKKS.
- Modulable CRT decomposition for the key-switching keys.
- Examples for the distributed schemes.
- Network layer implementation of protocols supporting Secure Multiparty Computation (SMC).

## [1.3.0] - 2019-12-20
### Added
- All schemes : new switching-keys and key-switching algorithm based on the concept presented in https://eprint.iacr.org/2019/688.pdf.
- All schemes : new marshaling interface for all structures.
- BFV/CKKS : new Parameters structs and API enabling a better customization and fine tuning for specific applications.
- CKKS : new API for hoisted rotations, which is faster than sequential rotations.
- DBFV/DCKKS : added collective refresh of a ciphertext (decentralized bootstrapping).
- RING : added Ziggurat sampling, available from the context.
- RING : enabled dense and sparse ternary polynomials sampling directly from the context.
- RING : new API enabling "level" wise polynomial arithmetic.
- RING : new API for modulus switching with flooring and rounding.
- UTILS : utils now regroups all the utility methods which were previously duplicated among packages.
### Removed
- BFV/CKKS/DBFV/DCKKS : removed their respective context. Ring context remains public.
- All schemes : removed key-switching with bit decomposition. This option will however be re-introduced at a later stage since applications using small parameters can suffer from this change.
- BFV/CKKS/RING : removed redudant/irrelevant tests and benchmarks.
- BFV : removed context QP as it is not any more used in the multiplication.
- BFV : removed int encoder, now only batch encoding is supported.
- CKKS : modulus switching is now located in Ring.
- RING : removed the algorithms that needed Float128 during the BFV multiplication.
- RING : removed most wrapping methods for bigInt, which are now replaced by the native math/big package.
- RING : removed ternary sampler, which is now part of the context.
### Changed
- All schemes : Encryptor, Decryptor, Encoder, Evaluator, KeyGenerator are now interface types.
- All schemes : Improved Godoc and error strings.
- ALl schemes : greatly reduced the number of methods that could return an error.
- All schemes : new tests and benchmarks with fully supported regex.
- All schemes : coefficient wise arithmetic using double slices is now substentially faster.
- BFV/CKKS : changed the name of the underlying ring contexts. Q now represents the ciphertext modulus (with QMul being the extended ciphertext modulus for BFV) and QP represents modulus of the keys (P being the special primes used during the new key-switching).
- BFV/CKKS/DBFV/DCKKS : structures are now created using the parameters instead of the context.
- BFV : quantization during multiplication doesn't use Float128 any more, resulting in a substential speed improvement.
- BFV : BatchEncoder has been renamed Encoder.
- CKKS : the scale is now stored as a float64 instead of a power of 2.
- CKKS : rounding is applied instead of flooring when a real value is converted to an integer value. This change affects the rescaling and the encoding.
- CKKS : previously needed one ring context per level, now only uses one context for all levels.
- CKKS : new baby-step giant-step algorithm for evaluating polynomials in standard and Chebyshev basis.
- CKKS : reduced the number of NTT needed during the encryption.
- CKKS : API for MultConst is now MultByConst.
- BFV/CKKS : new API for the rotation-keys generation.
- DBFV/DCKKS : complete revamp of the API and interfaces enabling a much easier integration into larger systems.
- DBFV/DCKKS : improved PCKS and CKS using the concept of the new key-switching technique which enables to reduces the added noise.
- DCKKS : all protocols work for ciphertexts at any levels.
- RING : faster MulScalarBigint (now similar to MulScalar).
- UTILS : PRNG must be keyed to be forward secure.
### Fixes
- All packages : typos, godoc and golint.
- CKKS : ciphertext rotation now correctly sets the scale of the output ciphertext.
- DBFV/DCKKS : correctness is now ensured when the same protocol instance is used to generate multiples shares.

## [1.2.0] - 2019-12-01
Internal version, merged with 1.3.0.

## [1.1.0] - 2019-10-01
### Added
- CHANGELOG.md file.
Expand Down Expand Up @@ -55,4 +105,4 @@ All notable changes to this project will be documented in this file.

## [1.0.0] - 2019-08-17
### Added
- First public release.
- First public release.
6 changes: 4 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ test_lint:
}

test_local:
go test -v -race -short -p=1 ./...
go test -v -short -p=1 ./... -timeout=0
go run ./examples/bfv/examples_bfv.go
go run ./examples/ckks/examples_ckks.go

test: test_fmt test_local

local: test_fmt test_lint test_local
local: test_fmt test_lint test_local
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ See CHANGELOG.md for the current and past versions.
### Upcoming features

- Bootstrapping for CKKS.
- Modulable CRT decomposition for the key-switching keys.
- Examples for the distributed schemes.
- README for distributed schemes
- Network layer implementation of protocols supporting Secure Multiparty Computation (SMC).


Expand All @@ -65,15 +64,14 @@ If you want to contribute to Lattigo or you have any suggestion, do not hesitate
Please use the following BibTex entry for citing Lattigo:

@misc{lattigo,
title = {Lattigo 1.1.0},
title = {Lattigo 1.3.0},
howpublished = {Online: \url{http://github.com/ldsec/lattigo}},
month = oct,
month = dec,
year = 2019,
note = {EPFL-LDS}
}



## References

1. Somewhat Practical Fully Homomorphic Encryption (<https://eprint.iacr.org/2012/144>)
Expand All @@ -87,3 +85,5 @@ Please use the following BibTex entry for citing Lattigo:
1. Faster arithmetic for number-theoretic transforms (<https://arxiv.org/abs/1205.2926>)
1. Speeding up the Number Theoretic Transform for Faster Ideal Lattice-Based Cryptography (<https://eprint.iacr.org/2016/504>)
1. Gaussian sampling in lattice-based cryptography (<https://tel.archives-ouvertes.fr/tel-01245066v2>)

The Lattigo logo is a lattice-based version of the original Golang mascot by [Renee French](http://reneefrench.blogspot.com/).
2 changes: 1 addition & 1 deletion bfv/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ maps an array of integers to a polynomial with the property:
<p align="center">
<img src="https://latex.codecogs.com/gif.latex?decode%28encode%28m_1%29%20%5Cotimes%20encode%28m_2%29%29%20%3D%20m_1%20%5Codot%20m_2">,
</p>
where <img src="https://latex.codecogs.com/gif.latex?%5Cotimes"> represents a component-wise product, and <img src="https://latex.codecogs.com/gif.latex?%5Codot"> represents a nega-cyclic convolution.
where represents &nbsp; ![equation](https://latex.codecogs.com/gif.latex?%24%5Codot%24) &nbsp; a component-wise product,and &nbsp; ![equation](https://latex.codecogs.com/gif.latex?%24%5Cotimes%24) &nbsp; represents a nega-cyclic convolution.

## Security parameters

Expand Down
Loading

0 comments on commit bb095f1

Please sign in to comment.