|
|
# Welcome to the Palisade Wiki
|
|
|
|
|
|
This wiki is a collection of useful information for users. We welcome additional material from the community. Please send any suggestions, additional suggested documentation and general correspondence to
|
|
|
|
|
|
* PALISADE Project contact@palisade-crypto.org
|
|
|
|
|
|
or
|
|
|
|
|
|
* PALISADE Project Leads:
|
|
|
* Kurt Rohloff krohloff@duality.cloud, rohloff@njit.edu
|
|
|
* Yuriy Polyakov ypolyakov@duality.cloud
|
|
|
* Gerard “Jerry” Ryan gwryan@njit.edu
|
|
|
|
|
|
# PALISADE Introduction
|
|
|
|
|
|
PALISADE is a general lattice cryptography library that currently includes efficient implementations of the following lattice cryptography capabilities:
|
|
|
* Homomorphic Encryption (HE)
|
|
|
* Brakerski/Fan-Vercauteren scheme (3 variants)
|
|
|
* Brakerski-Gentry-Vaikuntanathan scheme
|
|
|
* Stehle-Steinfeld scheme
|
|
|
* Proxy Re-Encryption for all HE schemes
|
|
|
* Digital Signature
|
|
|
* Identity-Based Encryption
|
|
|
* Ciphertext-Policy Attribute-Based Encryption
|
|
|
|
|
|
PALISADE is a cross-platform C++11 library supporting Linux, Windows, and macOS. The supported compilers are g++ v6.1 or later and clang++ v6.0 or later.
|
|
|
|
|
|
The library also includes unit tests and sample application demos.
|
|
|
|
|
|
PALISADE is available under the BSD 2-clause license.
|
|
|
|
|
|
The library is based on modular architecture with the following layers:
|
|
|
|
|
|
* Math operations layer supporting low-level modular arithmetic, number theoretic transforms, and integer sampling. This layer is implemented to be portable to multiple hardware computation substrates.
|
|
|
* Lattice operations layer supporting lattice operations, ring algebra, and lattice trapdoor sampling.
|
|
|
* Crypto layer containing efficient implementations of lattice cryptography schemes.
|
|
|
* Encoding layer supporting multiple plaintext encodings for cryptographic schemes.
|
|
|
|
|
|
A major focus is on the usability of the schemes. For instance, all HE schemes use the same common API, and are implemented using runtime polymorphism.
|
|
|
|
|
|
PALISADE implements efficient Residue Number System (RNS) algorithms to achieve high performance, e.g., PALISADE was used as the library for a winning genome-wide association studies solution at iDASH'18.
|
|
|
|
|
|
By default, the library is built without external dependencies. But the user is also provided options to add GMP/NTL and/or tcmalloc third-party libraries if desired.
|
|
|
|
|
|
# Getting Started with PALISADE
|
|
|
|
|
|
To become familiar with PALISADE, we recommend that you review the following wiki articles:
|
|
|
1. [General (OS-independent) Build instructions](Build-instructions)
|
|
|
1. [Building PALISADE in Linux](Instructions-for-building-PALISADE-in-Linux)
|
|
|
2. [Building PALISADE in Windows](Instructions-for-building-PALISADE-in-Windows)
|
|
|
3. [Building PALISADE in macOS](Instructions-for-building-PALISADE-in-macOS)
|
|
|
4. [Customizing the builds using CMake/make flags](Configuration-flags-to-customize-the-build)
|
|
|
2. [Explore the PALISADE library directory structure](Library-Directory-Structure)
|
|
|
3. [Use the PALISADE library](Use-The-Library)
|
|
|
1. [Simple Code Example](https://gitlab.com/palisade/palisade-release/blob/master/src/pke/demo/demo-simple-example.cpp)
|
|
|
2. [Simple Code Example with Serialization](https://gitlab.com/palisade/palisade-release/blob/master/src/pke/demo/demo-simple-example-serial.cpp)
|
|
|
|
|
|
# Further Documentation
|
|
|
|
|
|
1. [PALISADE User Manual](https://gitlab.com/palisade/palisade-release/blob/master/doc/palisade_manual.pdf)
|
|
|
2. [PALISADE Release Notes](https://gitlab.com/palisade/palisade-release/blob/master/Release_Notes.md)
|
|
|
3. [Known Issues](Known-Issues)
|
|
|
3. [Demo Programs for PKE Module](https://gitlab.com/palisade/palisade-release/blob/master/src/pke/demo/README.md)
|
|
|
4. [Lattice Layer](https://gitlab.com/palisade/palisade-release/blob/master/src/core/lib/lattice/README.md)
|
|
|
5. [Mathematical Backends for Multiprecision Arithmetic](https://gitlab.com/palisade/palisade-release/blob/master/src/core/lib/math/README.md)
|
|
|
6. [Gaussian Sampling in PALISADE](https://gitlab.com/palisade/palisade-release/blob/master/src/core/lib/math/SAMPLING_README.md)
|
|
|
7. [Exception Handling](palisade-exceptions)
|
|
|
|
|
|
# Modifying and Improving PALISADE
|
|
|
|
|
|
We encourage you to modify and improve upon PALISADE.
|
|
|
* [This documents describes how you can contribute improvements to the PALISADE library](Contributing-Improvements)
|
|
|
|
|
|
Note that we try to conform to a uniform programming style. We created and program PALISADE using a modification of the Google C++ programming style guide. We recommend that you follow this guide if you modify or otherwise improve PALISADE.
|
|
|
* [Please find information on the PALISADE Programming Style and Design Guide here](PALISADE-Programming-Style-Design-Guide).
|
|
|
|
|
|
# License Information
|
|
|
|
|
|
The PALISADE library uses the 2-clause BSD license which makes it easier for companies and other organizations to use the software and incorporate it into products without worry of entangling and distracting licensing issues.
|
|
|
* [The PALISADE license can be seen here.](https://gitlab.com/palisade/palisade-release/blob/master/License.md)
|
|
|
|
|
|
# Thanks to Our Contributors
|
|
|
|
|
|
Up-to-date lists of the organizations that have contributed and/or used PALISADE and the organizations that sponsored PALISADE development are available at https://palisade-crypto.org/community/.
|
|
|
|
|
|
An up-to-date list of core and community developers who have contributed code or algorithms to PALISADE is available [here](palisade-contributors). |
|
|
\ No newline at end of file |