@@ -25,32 +25,25 @@ is a common choice thanks to its natural concurrency model and portability.
25
25
<img width =500 height =350 alt =" lattigo-hierarchy " src =" ./lattigo-hierarchy.svg " >
26
26
</p >
27
27
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:
54
47
55
48
- ` bfv ` : A Full-RNS variant of the Brakerski-Fan-Vercauteren scale-invariant homomorphic
56
49
encryption scheme. This scheme is instantiated via a wrapper of the ` bgv ` scheme.
@@ -63,19 +56,39 @@ The library exposes the following packages:
63
56
- ` ckks ` : A Full-RNS Homomorphic Encryption for Arithmetic for Approximate Numbers (HEAAN,
64
57
a.k.a. CKKS) scheme. It provides fixed-point approximate arithmetic over the complex numbers (in its classic
65
58
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.
66
86
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.
75
89
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.
79
92
80
93
- ` lattigo/examples ` : Executable Go programs that demonstrate the use of the Lattigo library. Each
81
94
subpackage includes test files that further demonstrate the use of Lattigo
@@ -88,30 +101,6 @@ The library exposes the following packages:
88
101
- ` sampling ` : Secure bytes sampling.
89
102
- ` structs ` : Generic structs for maps, vectors and matrices, including serialization.
90
103
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
-
115
104
### Documentation
116
105
117
106
The full documentation of the individual packages can be browsed as a web page using official
0 commit comments