Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
    • Switch to GitLab Next
  • Sign in / Register
PALISADE Development
PALISADE Development
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 62
    • Issues 62
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
    • Iterations
  • Merge Requests 1
    • Merge Requests 1
  • Requirements
    • Requirements
    • List
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Security & Compliance
    • Security & Compliance
    • Dependency List
    • License Compliance
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
  • Analytics
    • Analytics
    • CI / CD
    • Code Review
    • Insights
    • Issue
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PALISADE
  • PALISADE DevelopmentPALISADE Development
  • Wiki
  • Home

Last edited by Yuriy Polyakov Oct 01, 2020
Page history

Home

Welcome to the Palisade Wiki

Palisade is an open source project. We are pleased to announce that we are in the process of transitioning to fiscal sponsorship by NumFOCUS.org. Please see our PALISADE Governance document for a listing of the various PALISADE teams and their responsibilities. Also see our Code of Conduct for guidance on the responsibilities of our contributors and maintainers.

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@dualitytech.com, rohloff@njit.edu
    • Yuriy Polyakov ypolyakov@dualitytech.com
    • Dave Cousins dcousins@njit.edu, dcousins@dualitytech.com

PALISADE Introduction

PALISADE is a general lattice cryptography library that currently includes efficient implementations of the following lattice cryptography capabilities:

  • Fully Homomorphic Encryption (FHE)
    • Brakerski/Fan-Vercauteren (BFV) scheme for integer arithmetic
    • Brakerski-Gentry-Vaikuntanathan (BGV) scheme for integer arithmetic
    • Cheon-Kim-Kim-Song (CKKS) scheme for real-number arithmetic
    • Ducas-Micciancio (FHEW) and Chillotti-Gama-Georgieva-Izabachene (TFHE) schemes for Boolean circuit evaluation
    • Stehle-Steinfeld scheme for limited integer arithmetic
  • Multi-Party Extensions of FHE (to support multi-key FHE)
    • Threshold FHE for BGV, BFV, and CKKS schemes
    • Proxy Re-Encryption for BGV, BFV, and CKKS 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 FHE schemes with packing use the same common API, and are implemented using runtime polymorphism.

PALISADE implements efficient Residue Number System (RNS) algorithms to achieve high performance for BGV, BFV, and CKKS, 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 (thread sensitive memory allocation) 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
    1. Building PALISADE in Linux
    2. Building PALISADE in Windows
    3. Building PALISADE in macOS
    4. Customizing the builds using CMake/make flags
  2. Instructions for building C++ projects that use PALISADE
  3. Explore the PALISADE library directory structure
  4. Use the PALISADE library

To get familiar with the main API of PALISADE, we recommend looking at the code of the following examples:

  1. FHE for arithmetic over integers (BFV):
    1. Simple Code Example
    2. Simple Code Example with Serialization
  2. FHE for arithmetic over integers (BGV):
    1. Simple Code Example
    2. Simple Code Example with Serialization
  3. FHE for arithmetic over real numbers (CKKS):
    1. Simple Code Example
    2. Advanced Code Example
  4. FHE for Boolean circuits (FHEW/TFHE):
    1. Simple Code Example
    2. Code with JSON serialization
    3. Code with Binary Serialization
  5. Threshold FHE:
    1. Code Example for BGV, BFV, and CKKS

Further Documentation

Documents and README.md files in the PALISADE repo tree:

  1. PALISADE User Manual contains detailed descriptions of the PALISADE library and how to use it in applications
  2. PALISADE Webinars are YouTube videos (recorded monthly) that introduce and and discuss latest news on PALISADE, homomorphic encryption, and applications of homomorphic encryption
  3. PALISADE API is the API documentation automatically generated using Doxygen
  4. PALISADE Release Notes are updates for every major and minor release
  5. Benchmarking PALISADE code in the benchmark directory
  6. Example Programs for the Public Key Encryption (PKE) Module in the src/pke/examples directory
  7. The Palisade Lattice Layer in the src/core/include/lattice directory
  8. Various Mathematical Backends for Multiprecision Arithmetic in the src/core/include/math directory
  9. Discrete Gaussian Sampling implemented in PALISADE in the src/core/include/math directory

Wiki pages in doc/wiki

  1. This Home page
  2. Publications on Lattice Crypto Scheme Implementations in PALISADE
  3. Known Issues
  4. CI Documentation
  5. Exception Handling
  6. Frequently Asked Questions
  7. How To Rebase a Feature Branch from the Master Branch

Modifying and Improving PALISADE

We encourage you to modify and improve upon PALISADE. Please refer to the Contributing.md file for details on following our process for Major and Minor contributions, as well as discussions of our programming style requirements. Contributing.md.

  • If you plan major modifications of PALISADE, please consult with us first, as PALISADE is a work in progress. This way you can make sure your additions will be consistent with the planned releases of PALISADE. It will also ensure that you base your changes on the most recent version of the development library.

  • All additions to the released versions of PALISADE are subject to approval by the PALISADE governance team as outlined in the PALISADE Governance document.

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.

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 provided in the Contributors wiki article.

How to Cite PALISADE

To cite PALISADE in academic papers, please use the following BibTeX entry. If a different (older) version is used, please update the release version and month/year using the date from https://gitlab.com/palisade/palisade-development/blob/master/Release_Notes.md

@misc{PALISADE,
    title = {{PALISADE} {L}attice {C}ryptography {L}ibrary (release 1.10.4)},
    howpublished =  {\url{https://palisade-crypto.org/}},
    month = Sep,
    year = 2020,
}

Frequently Asked Questions

Please see the PALISADE Frequently-Asked-Questions Page for a list of common issues and solutions.

Clone repository
  • Build instructions
  • CI Documentation
  • Cross Compiling for ETTIS
  • Frequently Asked Questions
  • Home
  • How to rebase your branch from the master branch
  • Instructions for building PALISADE in Linux
  • Instructions for building PALISADE in Windows
  • Instructions for building PALISADE in macOS
  • Instructions for building user projects that use PALISADE
  • Known Issues
  • Library Directory Structure
  • PALISADE Contributors
  • PALISADE Programming Style Design Guide
  • Palisade Exceptions
View All Pages