Skip to content

Commit 0ab531a

Browse files
committed
updated CHANGELOG
1 parent 0125088 commit 0ab531a

File tree

1 file changed

+52
-57
lines changed

1 file changed

+52
-57
lines changed

.github/CHANGELOG.md

+52-57
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ All notable changes to this library are documented in this file.
44
## [0.0.1] - 24.06.2024
55

66
Changes affecting the entire library:
7-
- Extensive refactoring of the `Ring` object (see below).
7+
- Extensive refactoring of the `Ring` object (see much below for details).
88
- Refactored how polynomials and their derivative structs (e.g. ciphertexts and keys) are instantiated.
99
They now all have the following methods:
10-
- `.FromBuffer` which allow to assign a new backing to the receiver from an `[]uint64` slice
10+
- `.FromBuffer` which allow to assign a new backing array to the receiver from an `[]uint64` slice
1111
- `.BufferSize` which returns the minimum size of the `[]uint64` slice to provide to `.FromBuffer`
1212
- Calling `New<Something>` will internally call the two here above methods
1313
- Removed the package `ring/ringqp`: all instances of `RingQP` have been replaced
@@ -21,96 +21,95 @@ Changes affecting the entire library:
2121
- Linear Transformations:
2222
- Generalized implementation of linear transformation such that package specific code (e.g. `heint` or `hefloat`) is not necessary anymore.
2323
- Significantly improved the search for the best giant step size, which is not anymore constrained to a power of two:
24-
- Added `OptimalLinearTransformationGiantStep` which replaces `FindBestBSGSRatio` and returns much more optimal values (not constrained to be a power of two anymore) that properly minimize the number of Galois elements.
25-
- Removed the `LogBSGSRatio` from the `LinearTransformationParameters`:
24+
- Added `OptimalLinearTransformationGiantStep` which replaces `FindBestBSGSRatio` and returns much more optimal values (not constrained to be a power of two anymore) that properly minimize the number of Galois elements.
25+
- `LinearTransformationParameters`:
2626
- Removed the `LogBSGSRatio` field.
2727
- Removed the `Naive` field.
2828
- Added the `GiantStep` field.
29-
- LinearTransformationParameters:
30-
- Added `GaloisElements`: returns the set of Galois elements necessary to evaluate the diagonalized matrix.
31-
- LinearTransformation:
29+
- Added `.GaloisElements(*)`: returns the set of Galois elements necessary to evaluate the diagonalized matrix.
30+
- `LinearTransformation`:
3231
- Removed the ` LogBabyStepGianStepRatio` field.
3332
- Removed the `N1` field.
3433
- Added the `GiantStep` field.
35-
- Diagonals (diagonalized matrix):
34+
- `Diagonals` (diagonalized matrix):
3635
- Added `Add`: add two diagonalized matrices together.
3736
- Added `Mul`: multiply ttwo diagonalized matrices together.
3837
- Added `Indexes`: returns the indexes of the non-zero diagonals of the diagonalized matrix.
3938
- Added `GaloisElements`: returns the set of Galois elements necessary to evaluate the diagonalized matrix.
4039
- Added `At`: returns a specific diagonal of the diagonalized matrix.
41-
- Added `Evaluate: evaluates the diagonalized matrix on a vector.
42-
- Permutation (permutation matrix):
40+
- Added `Evaluate`: evaluates the diagonalized matrix on a vector.
41+
- `Permutation` (permutation matrix):
4342
- Added `Indexes`: returns the indexes of the non-zero diagonals of the permutation.
4443
- Added `Diagonals`: returns the diagonalized matrix of the permutation.
4544
- Added `GaloisElements`: returns the set of Galois elements necessary to evaluate the permutation.
46-
- Improved relinearization patterns when evaluating a polynomial with the flag `lazy=true`
47-
- Polynomial Evaluation:
45+
- **Polynomial Evaluation**:
46+
- Improved relinearization patterns when evaluating a polynomial with the flag `lazy=true`.
4847
- The output of polynomial evaluation is not rescaled anymore, enabling more optimal noise management.
49-
- Added `EncodedPolynomial` type, a pre-encoded `VectorPolynomial` into `rlwe.Plaintext`.
48+
- Added `EncodedPolynomial` type, a pre-encoded `VectorPolynomial` into `rlwe.Plaintext` and associated methods for evaluation.
5049
- `PolynomialVector`:
5150
- Simplified the field `Mapping` which now takes a single slices as mapping, instead of a map of slices.
52-
- Added `Evaluate`.
51+
- Added `Evaluate` method.
5352

5453
- `heint`:
55-
- Added support for prime power plaintext modulus.
54+
- Added support for prime power plaintext modulus:
55+
- Removed `PlaintextModlus` as it wasn't specific enough to distinguish between the base plaintext modulus and its powers.
56+
- Added `T` which is the base plaintext modulus.
57+
- Added `R` wich is the base plaintext modulus power.
58+
- Field names `T` and `R` will be subject to change in the next release if better names can be found.
5659
- Merged `schemes/bgv/` into `heint`.
5760
- Removed package specific code for linear transformations (this functionality now solely depends on the `he` package).
5861

5962
- `hefloat`:
6063
- Bootstrapping:
61-
- Added [EvalRound+](https://eprint.iacr.org/2024/1379)
64+
- Added [EvalRound+](https://eprint.iacr.org/2024/1379).
6265
- Reworked `Parameters` and `ParametersLiteral`.
6366
- Fixed wrong returned `MinimumInputLevel`.
6467
- Added API to estimate the failure probability:
65-
- `FailureProbability` returns PR[||I(X)|| > K].
66-
- `FindSuitableK` returns the smallest K satisfying PR[||I(X)|| > K] <= 2^{logfailure}.
67-
- `ModifiedIrwinHall` estimates PR[||I(X)|| > K].
68-
69-
- Evaluator:
70-
- Added `MatchScalesForMul`
71-
- InverseEvaluator:
68+
- `FailureProbability` returns $$\text{PR}[||I(X)|| > K]$$.
69+
- `FindSuitableK` returns the smallest K satisfying $$\text{PR}[||I(X)|| > K] <= 2^{\text{logfailure}}$$.
70+
- `ModifiedIrwinHall` estimates $$\text{PR}[||I(X)|| > K]$$.
71+
- Improved serialization support for `ParametersLiteral`.
72+
- `Evaluator`:
73+
- Added `MatchScalesForMul` which enables to match the scales of two ciphertext such that after multiplication and rescaling the scaling factor is the one desired.
74+
- `InverseEvaluator`:
7275
- Changed `log2Min` and `log2Max` to `Min` and `Max` respectively. This enables a more human friendly parameterization.
7376
- Added `InvSqrt`, which returns 1/sqrt(x) by Newton iterations. Contrary to the GoldschmidtDivision algorithm, it can be used to refine a value already close to the ideal value, enabling composition with polynomial approximation.
74-
- GoldschmidtDivision takes as operand the number of iterations instead of automatically estimating them.
75-
- IntervalNormalization uses one less level per iteration (2 instead of 3), and use one less bootstrapping per iteration if using the Conjugate Invariant ring.
77+
- `GoldschmidtDivision` takes as operand the number of iterations instead of automatically estimating them.
78+
- `IntervalNormalization` uses one less level per iteration (2 instead of 3), and use one less bootstrapping per iteration if using the Conjugate Invariant ring.
7679
- Added affine transformation for EvalMod1.
7780
- Merged `schemes/ckks` into `hefloat`.
7881
- Removed package specific code for linear transformations (this functionality now solely depends on the `he` package).
7982
- Improved statistics, which now also display the standard deviation as well as the error statistics.
8083

81-
- `hefloat/bootstrapping`:
82-
- Improved serialization support for `bootstrapping.ParametersLiteral`.
83-
8484
- `mhe`:
85-
- General rework, uniformization and simplification of the API of all protocols.
85+
- General rework, uniformization and simplification of the API of all protocols. All protocols now comply to the similar interface `Gen`, `Aggregate`, `Finalize`.
8686
- Greatly reduced code and code complexity of all protocols:
87-
- Protocols use the `rlwe.Encryptor` instead of re-implementing encryption routines
88-
- Shares are now standardized using the new structs defined in the `ring` package
89-
- New non-interactive protocols:
90-
- `mhe.CircularCiphertextProtocol`: non-interactive generation of `RLWE(ms)`.
91-
- `mhe.CircularGadgetCiphertextProtocol`: non-interactive generation of `GRLWE(ms)`.
92-
- These two protocols enable a fully non-interactive setup for `heint`, `hefloat` and `hebin`.
93-
- Improved the interactive relinearization key gen protocol (https://eprint.iacr.org/2021/1085).
87+
- Protocols use the `rlwe.Encryptor` instead of re-implementing encryption routines.
88+
- Shares are now standardized using the new structs defined in the `ring` package.
89+
- New single-round protocols which enable a fully single-round setup for `heint`, `hefloat` and `hebin`:
90+
- `mhe.CircularCiphertextProtocol`: single-round generation of `RLWE(ms)`.
91+
- `mhe.CircularGadgetCiphertextProtocol`: single-round generation of `GRLWE(ms)`.
92+
- An single-round setup example can be found [here](https://github.com/Pro7ech/lattigo/blob/master/examples/multi_party/setup/one_round/main.go).
93+
- Improved the interactive relinearization key gen protocol from [Homomorphic Encryption for Multiple Users with Less Communications](https://eprint.iacr.org/2021/1085).
9494
- Added full support for deterministic share generation.
9595

9696
- `core`:
97-
- Removed `core`.
98-
99-
- `rlwe`:
100-
- Moved out of `core`.
101-
- Expanded the API of the `Encryptor` to support deterministic encryption and be able to perform key-switching.
102-
- Added support for signed digit decomposition.
103-
- Parameters can be specified with any combination of (`Q`, `LogQ`) and (`P`, `LogP`).
104-
- Added `NoiseCiphertext`, which returns the base 2 logarithm of the standard deviation of the
105-
residual noise in an `rlwe.Ciphertext`.
106-
- Removed field `nbPi` in `DecomposeNTT`.
107-
- Added [Optimizing HE operations via Level-aware Key-switching Framework](https://eprint.iacr.org/2023/1328).
108-
109-
- `rgsw`:
110-
- Moved out of `core`.
111-
- Added support for `RGSWxRGSW` product.
112-
- Added `.FromGadgetCiphertext` which produces an `rgsw.Ciphertext` from an `rlwe.GadgetCiphertext`.
113-
- Added signed digit decomposition.
97+
- Removed the `core` package (which was empty after the changes).
98+
99+
- `rlwe`:
100+
- Moved out of `core`.
101+
- Expanded the API of the `Encryptor` to support full deterministic encryption and be able to perform key-switching.
102+
- Added support for signed digit decomposition via the struct `DigitDecomposition`.
103+
- Parameters can be specified with any combination of (`Q`, `LogQ`) and (`P`, `LogP`).
104+
- Added `NoiseCiphertext`, which returns the base 2 logarithm of the standard deviation of the residual noise in an `rlwe.Ciphertext`.
105+
- Removed field `nbPi` in `DecomposeNTT`.
106+
- Added [Optimizing HE operations via Level-aware Key-switching Framework](https://eprint.iacr.org/2023/1328).
107+
108+
- `rgsw`:
109+
- Moved out of `core`.
110+
- Added support for `RGSWxRGSW` product.
111+
- Added `.FromGadgetCiphertext` which produces an `rgsw.Ciphertext` from an `rlwe.GadgetCiphertext`.
112+
- Added support for signed digit decomposition.
114113

115114
- `schemes`:
116115
- `bfv`: removed.
@@ -141,20 +140,16 @@ Changes affecting the entire library:
141140
- `utils`:
142141
- Removed many slices utilities, which are now available through the native package `slice`.
143142
- Removed `Min` and `Max` which now have native supported in Go as `min` and `max`.
144-
145143
- `structs`:
146144
- Added `Copyer` interface and support (TODO review copy/clone).
147-
148145
- `sampling`:
149146
- Replaced the blake2b based XOF (`sampling.PRNG`) by the `math/rand/v2` ChaCha8-based CSPRNG (`sampling.Source`).
150147
- The `sampling.Source` struct is now used for all sampling the library.
151-
152148
- `bignum`:
153149
- Refactored and fixed many bugs in the multi-interval Remez minimax polynomial approximation algorithm which now properly works when doing multi-interval approximations.
154150
- Added `Log2ErfC` which returns the base 2 logarithm of the complementary error function.
155151
- Added `Stats([]big.Int, prec)`, which returns the base 2 logarithm of the standard deviation and the mean
156152
- Added `ToComplexSlice` to cast a numerical slice to a `[]bignum.Complex`.
157-
158153
- `concurrency`:
159154
- New package providing basic support for concurrency.
160155

0 commit comments

Comments
 (0)