Skip to content

Commit e2e3721

Browse files
committed
address first round of v6 comments
1 parent c5c12f3 commit e2e3721

File tree

109 files changed

+1224
-1104
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+1224
-1104
lines changed

README.md

Lines changed: 50 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,25 @@ is a common choice thanks to its natural concurrency model and portability.
2525
<img width=500 height=350 alt="lattigo-hierarchy" src="./lattigo-hierarchy.svg">
2626
</p>
2727

28-
The library exposes the following packages:
29-
30-
- `lattigo/he`: The main package of the library which provides scheme-agnostic interfaces
31-
and Homomorphic Encryption for different plaintext domains.
32-
33-
- `hebin`: Homomorphic Encryption for binary arithmetic. It comprises blind rotations (a.k.a Lookup Tables) over RLWE ciphertexts.
34-
35-
- `hefloat`: Homomorphic Encryption for fixed-point approximate arithmetic over the complex or real numbers.
36-
37-
- `bootstrapping`: Bootstrapping for fixed-point approximate arithmetic over the real
38-
and complex numbers, with support for the Conjugate Invariant ring, batch bootstrapping with automatic
39-
packing/unpacking of sparsely packed/smaller ring degree ciphertexts, arbitrary precision bootstrapping,
40-
and advanced circuit customization/parameterization.
41-
42-
- `heint`: Homomorphic Encryption for modular arithmetic over the integers.
43-
44-
- `lattigo/mhe`: Package for multiparty (a.k.a. distributed or threshold) key-generation and
45-
interactive ciphertext bootstrapping with secret-shared secret keys.
46-
47-
- `mhefloat`: Homomorphic decryption and re-encryption from and to Linear-Secret-Sharing-Shares,
48-
as well as interactive ciphertext bootstrapping for the package `he/hefloat`.
49-
50-
- `mheint`: Homomorphic decryption and re-encryption from and to Linear-Secret-Sharing-Shares,
51-
as well as interactive ciphertext bootstrapping for the package `he/heint`.
52-
53-
- `lattigo/schemes`: A package implementing RLWE-based homomorphic encryption schemes.
28+
Lattigo is a strictly hierarchical library whose packages form a linear dependency chain ranging from
29+
low-level arithmetic functionalities to high-level homomorphic circuits. A graphical depiction of the
30+
Lattigo package organization is given in the Figure above.
31+
32+
- `lattigo/ring`: At the lowest level resides the `ring` package providing modular arithmetic operations for polynomials
33+
in the RNS basis, including: RNS basis extension; RNS rescaling; number theoretic transform (NTT); uniform,
34+
Gaussian and ternary sampling.
35+
36+
- `lattigo/core`: This package implements the core cryptographic functionalities of the library and builds directly
37+
upon the arithmetic functionalities provided by the `ring` package:
38+
39+
- `rlwe`: Common base for generic RLWE-based homomorphic encryption.
40+
It provides all homomorphic functionalities and defines all structs that are not scheme-specific.
41+
This includes plaintext, ciphertext, key-generation, encryption, decryption and key-switching, as
42+
well as other more advanced primitives such as RLWE-repacking.
43+
44+
- `rgsw`: A Full-RNS variant of Ring-GSW ciphertexts and the external product.
45+
46+
- `lattigo/schemes`: The implementation of RLWE-based homomorphic encryption schemes are found in the `schemes` package:
5447

5548
- `bfv`: A Full-RNS variant of the Brakerski-Fan-Vercauteren scale-invariant homomorphic
5649
encryption scheme. This scheme is instantiated via a wrapper of the `bgv` scheme.
@@ -63,19 +56,39 @@ The library exposes the following packages:
6356
- `ckks`: A Full-RNS Homomorphic Encryption for Arithmetic for Approximate Numbers (HEAAN,
6457
a.k.a. CKKS) scheme. It provides fixed-point approximate arithmetic over the complex numbers (in its classic
6558
variant) and over the real numbers (in its conjugate-invariant variant).
59+
60+
- `lattigo/circuits`: The circuits package provides implementation of a select set of homomorphic circuits for
61+
the `bgv` and `ckks` cryptosystems:
62+
63+
- `bgv/lintrans`, `ckks/lintrans`: Arbitrary linear transformations and slot permutations for both `bgv` and `ckks`.
64+
Scheme-generic objects and functions are part of `common/lintrans`.
65+
66+
- `bgv/polynomial`, `ckks/polynomial`: Polynomial evaluation circuits for `bgv` and `ckks`.
67+
Scheme-generic objects and functions are part of `common/polynomial`.
68+
69+
- `ckks/minimax`: Minimax composite polynomial evaluator for `ckks`.
70+
71+
- `ckks/comparison`: Homomorphic comparison-based circuits such as `sign`, `max` and `step` for the `ckks` scheme.
72+
73+
- `ckks/inverse`: Homomorphic inverse circuit for `ckks`.
74+
75+
- `ckks/mod1`: Homomorphic circuit for the `mod1` function using the `ckks` cryptosystem.
76+
77+
- `ckks/dft`: Homomorphic Discrete Fourier Transform circuits for the `ckks` scheme.
78+
79+
- `ckks/bootstrapping`: Bootstrapping for fixed-point approximate arithmetic over the real
80+
and complex numbers, i.e., the `ckks` scheme, with support for the Conjugate Invariant ring, batch bootstrapping with automatic
81+
packing/unpacking of sparsely packed/smaller ring degree ciphertexts, arbitrary precision bootstrapping,
82+
and advanced circuit customization/parameterization.
83+
84+
- `lattigo/multiparty`: Package for multiparty (a.k.a. distributed or threshold) key-generation and
85+
interactive ciphertext bootstrapping with secret-shared secret keys.
6686

67-
- `lattigo/core`: A package implementing the core cryptographic functionalities of the library.
68-
69-
- `rlwe`: Common base for generic RLWE-based homomorphic encryption.
70-
It provides all homomorphic functionalities and defines all structs that are not scheme-specific.
71-
This includes plaintext, ciphertext, key-generation, encryption, decryption and key-switching, as
72-
well as other more advanced primitives such as RLWE-repacking.
73-
74-
- `rgsw`: A Full-RNS variant of Ring-GSW ciphertexts and the external product.
87+
- `mpckks`: Homomorphic decryption and re-encryption from and to Linear-Secret-Sharing-Shares,
88+
as well as interactive ciphertext bootstrapping for the `schemes/ckks` package.
7589

76-
- `lattigo/ring`: Modular arithmetic operations for polynomials in the RNS basis, including: RNS
77-
basis extension; RNS rescaling; number theoretic transform (NTT); uniform, Gaussian and ternary
78-
sampling.
90+
- `mpbgv`: Homomorphic decryption and re-encryption from and to Linear-Secret-Sharing-Shares,
91+
as well as interactive ciphertext bootstrapping for the `schemes/bgv` package.
7992

8093
- `lattigo/examples`: Executable Go programs that demonstrate the use of the Lattigo library. Each
8194
subpackage includes test files that further demonstrate the use of Lattigo
@@ -88,30 +101,6 @@ The library exposes the following packages:
88101
- `sampling`: Secure bytes sampling.
89102
- `structs`: Generic structs for maps, vectors and matrices, including serialization.
90103

91-
```mermaid
92-
---
93-
title: Packages Dependency & Organization
94-
---
95-
flowchart LR
96-
RING(RING) --> RLWE(RLWE)
97-
RLWE --> RGSW(RGSW)
98-
RLWE --> HE([HE])
99-
RLWE --> CKKS{{CKKS}}
100-
RGSW --> HEBin{HEBin}
101-
HE --> HEFloat{HEFloat}
102-
HE --> HEInt{HEInt}
103-
HE --> HEBin
104-
BFV/BGV --> HEInt
105-
CKKS --> HEFloat
106-
RLWE --> BFV/BGV{{BFV/BGV}}
107-
MHE --> MHEFloat
108-
HEFloat --> MHEFloat((MHEFloat))
109-
HEFloat --> Bootstrapping
110-
HEInt --> MHEInt((MHEInt))
111-
RLWE --> MHE([MHE])
112-
MHE --> MHEInt
113-
```
114-
115104
### Documentation
116105

117106
The full documentation of the individual packages can be browsed as a web page using official

circuits/bgv/linear_transformation/linear_transformation.go

Lines changed: 0 additions & 207 deletions
This file was deleted.

0 commit comments

Comments
 (0)