Commit 7adb4e42 authored by Yuriy Polyakov's avatar Yuriy Polyakov

v1.8.0 changes

parent f7d92bb4
Pipeline #113432603 passed with stages
in 200 minutes and 57 seconds
......@@ -102,8 +102,8 @@ if( ${AUTOCONF_VER_LEN} EQUAL 0 )
endif()
set(PALISADE_VERSION_MAJOR 1)
set(PALISADE_VERSION_MINOR 7)
set(PALISADE_VERSION_PATCH d1)
set(PALISADE_VERSION_MINOR 8)
set(PALISADE_VERSION_PATCH 0)
set(PALISADE_VERSION ${PALISADE_VERSION_MAJOR}.${PALISADE_VERSION_MINOR}.${PALISADE_VERSION_PATCH})
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
......
01/15/2020: PALISADE v1.7.d is released
01/30/2020: PALISADE v1.8.0 (development) is released
* Adds the Gama-Izabachene-Nguyen-Xie (GINX) bootstrapping to the FHEW implementation
* Includes other FHEW optimizations: now the bootstrapping key size is 20x times smaller and runtime about 2.5x faster
* Adds XOR and XNOR gates to FHEW
01/22/2020: PALISADE v1.7.4 (stable) is released in the palisade-release repo
* includes all changes from development releases v1.7.a to v1.7.d
01/15/2020: PALISADE v1.7.d (development) is released
* Replaces the Mersenne Twister PRNG Engine with a cryptographically secure BLAKE2-based PRNG
* Fixes a PRNG bug affecting environments where multithreading is done not using OpenMP
12/26/2019: PALISADE v1.7.c is released
12/26/2019: PALISADE v1.7.c (development) is released
* Fixes a bug affecting applications using the PALISADE serialization capability
* Changes the installation paths for header files and library binary files
12/19/2019: PALISADE v1.7.b is released
12/19/2019: PALISADE v1.7.b (development) is released
* Simplifies the development of applications using PALISADE (only one header file is now needed for most applications)
* Changes the folder hierarchy of the library header files
11/15/2019: PALISADE v1.7.a is released
11/15/2019: PALISADE v1.7.a (development) is released
* Adds an optimized implementation of the CKKS scheme for approximate (real-number) homomorphic encryption. The implementation features automated rescaling/modswitching and hybrid key switching.
* Adds an optimized implementation of the FHEW scheme for Boolean-circuit homomorphic encryption, supporting standard HE parameters. Performs bootstrapping for each binary gate, and hence supports the evaluation of arbitrary Boolean circuits.
......
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.define "palisade", primary: true do |palisade|
palisade.vm.box = "ubuntu/xenial64"
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
#
# View the documentation for the provider you are using for more
# information on available options.
palisade.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get -y upgrade
# dependencies
apt-get -y install \
cmake
# core
apt-get -y install \
g++ \
bison \
flex \
lzip
# docs
apt-get -y install \
doxygen \
texlive-latex-base \
ghostscript \
graphviz
# audit tools
apt-get -y install \
python-pip \
flawfinder \
cppcheck \
shellcheck \
lcov \
gcovr \
valgrind
pip install cpplint
SHELL
end
config.vm.define "ubuntu", autostart: false do |ubuntu|
ubuntu.vm.box = "ubuntu/bionic64"
ubuntu.vm.provision "shell", inline: <<-SHELL
apt-get update
# core
apt-get -y install \
g++ \
bison \
flex \
lzip
SHELL
end
config.vm.define "debian9", autostart: false do |debian9|
debian9.vm.box = "debian/stretch64"
debian9.vm.provision "shell", inline: <<-SHELL
apt-get update
# core
apt-get -y install \
g++ \
flex \
bison \
lzip
SHELL
end
# debian 8 jessie will not build
# because the palisade library requires a version of bison
# which is higher than the highest version packaged with the distro
config.vm.define "debian8", autostart: false do |debian8|
debian8.vm.box = "debian/jessie64"
debian8.vm.provision "shell", inline: <<-SHELL
apt-get update
# core
apt-get -y install \
g++ \
flex \
bison \
lzip
SHELL
end
config.vm.define "fedora28", autostart: false do |fedora28|
fedora28.vm.box = "fedora/28-cloud-base"
fedora28.vm.box_version = "20180425"
fedora28.vm.provision "shell", inline: <<-SHELL
dnf update -y
# core
dnf -y install \
gcc-c++ \
flex \
bison \
lzip
SHELL
end
config.vm.define "fedora27", autostart: false do |fedora27|
fedora27.vm.box = "fedora/27-cloud-base"
fedora27.vm.box_version = "20171105"
fedora27.vm.provision "shell", inline: <<-SHELL
dnf update -y
# core
dnf -y install \
gcc-c++ \
flex \
bison \
lzip
SHELL
end
# note that centos will not build palisade out of the box
# because the g++ compiler that is packaged is not compatible
# meaning the compiler is not >=v5.*.*
config.vm.define "centos", autostart: false do |centos|
centos.vm.box = "centos/7"
centos.vm.provision "shell", inline: <<-SHELL
yum update -y
yum -y install \
epel-release
# core
yum -y install \
gcc-c++ \
flex \
bison \
lzip
SHELL
end
config.vm.define "arch", autostart: false do |arch|
arch.vm.box = "archlinux/archlinux"
arch.vbguest.auto_update = false
arch.vm.provision "shell", inline: <<-SHELL
pacman -Syu --noconfirm
pacman -S --noconfirm \
make \
gcc \
flex \
bison \
lzip
SHELL
end
config.vm.define "tumbleweed", autostart: false do |tumbleweed|
tumbleweed.vm.box = "opensuse/openSUSE-Tumbleweed-x86_64"
tumbleweed.vm.box_version = "1.0.6.20180530"
tumbleweed.vbguest.auto_update = false
tumbleweed.vm.provision "shell", inline: <<-SHELL
zypper -n --gpg-auto-import-key refresh
zypper -n update
zypper -n install \
gcc-c++ \
flex \
bison \
lzip
SHELL
end
config.vm.define "suse", autostart: false do |suse|
suse.vm.box = "opensuse/openSUSE-15.0-x86_64"
suse.vm.synced_folder ".", "/vagrant", type: "rsync"
suse.vbguest.auto_update = false
suse.vm.provision "shell", inline: <<-SHELL
zypper -n --gpg-auto-import-key refresh
zypper -n update
zypper -n install \
gcc-c++ \
flex \
bison \
lzip
SHELL
end
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
#vb.gui = true
# Customize the amount of memory on the VM:
vb.memory = "2048"
end
end
No preview for this file type
......@@ -38,7 +38,7 @@ PROJECT_NAME = "PALISADE Lattice Crypto Library"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = "v1.7.d"
PROJECT_NUMBER = "v1.8.0"
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
......
......@@ -180,7 +180,7 @@ namespace lbcrypto{
/**
* Evaluates a binary gate (calls bootstrapping as a subroutine)
*
* @param gate the gate; can be AND, OR, NAND, or NOR
* @param gate the gate; can be AND, OR, NAND, NOR, XOR, or XNOR
* @param ct1 first ciphertext
* @param ct2 second ciphertext
* @return a shared pointer to the resulting ciphertext
......
/*
* @file fhew.h - FHEW scheme header file
* The scheme is described in https://eprint.iacr.org/2014/816 and in
* "Bootstrapping in FHEW" by Daniele Micciancio and Yuriy Polyakov (to appear in IACR ePrint)
* "Bootstrapping in FHEW-like Cryptosystems" by Daniele Micciancio and Yuriy Polyakov (to appear in IACR ePrint)
*
* Full reference to https://eprint.iacr.org/2014/816:
* @misc{cryptoeprint:2014:816,
......@@ -43,7 +43,7 @@
namespace lbcrypto{
/**
* @brief Ring GSW accumulator schemes described in https://eprint.iacr.org/2014/816 and "Bootstrapping in FHEW"
* @brief Ring GSW accumulator schemes described in https://eprint.iacr.org/2014/816 and "Bootstrapping in FHEW-like Cryptosystems"
*/
class RingGSWAccumulatorScheme {
......
......@@ -41,7 +41,7 @@ namespace lbcrypto{
enum BINGATE {OR, AND, NOR, NAND, XOR, XNOR};
// Two variants of FHEW are supported based on the bootstrapping technique used: AP and GINX
// Please see "Bootstrapping in FHEW" for details on both bootstrapping techniques
// Please see "Bootstrapping in FHEW-like Cryptosystems" for details on both bootstrapping techniques
enum BINFHEMETHOD {
AP,
GINX
......
/*
* @file fhew.cpp - FHEW scheme (RingGSW accumulator) implementation
* The scheme is described in https://eprint.iacr.org/2014/816 and in
* "Bootstrapping in FHEW" by Daniele Micciancio and Yuriy Polyakov (to appear in IACR ePrint)
* "Bootstrapping in FHEW-like Cryptosystems" by Daniele Micciancio and Yuriy Polyakov (to appear in IACR ePrint)
*
* Full reference to https://eprint.iacr.org/2014/816:
* @misc{cryptoeprint:2014:816,
......@@ -90,7 +90,7 @@ std::shared_ptr<RingGSWCiphertext> RingGSWAccumulatorScheme::EncryptAP(const std
}
// Encryption for the GINX variant, as described in "Bootstrapping in FHEW"
// Encryption for the GINX variant, as described in "Bootstrapping in FHEW-like Cryptosystems"
std::shared_ptr<RingGSWCiphertext> RingGSWAccumulatorScheme::EncryptGINX(const std::shared_ptr<RingGSWCryptoParams> params,
const NativePoly &skNTT, const LWEPlaintext &m) const {
......@@ -183,7 +183,7 @@ RingGSWEvalKey RingGSWAccumulatorScheme::KeyGenAP(const std::shared_ptr<RingGSWC
return ek;
}
// Bootstrapping keys generation for the GINX variant, as described in "Bootstrapping in FHEW"
// Bootstrapping keys generation for the GINX variant, as described in "Bootstrapping in FHEW-like Cryptosystems"
RingGSWEvalKey RingGSWAccumulatorScheme::KeyGenGINX(const std::shared_ptr<RingGSWCryptoParams> params,
const std::shared_ptr<LWEEncryptionScheme> lwescheme, const std::shared_ptr<const LWEPrivateKeyImpl> LWEsk) const {
......@@ -276,7 +276,7 @@ void RingGSWAccumulatorScheme::SignedDigitDecompose(const std::shared_ptr<RingGS
}
}
// AP Accumulation as described in "Bootstrapping in FHEW"
// AP Accumulation as described in "Bootstrapping in FHEW-like Cryptosystems"
void RingGSWAccumulatorScheme::AddToACCAP(const std::shared_ptr<RingGSWCryptoParams> params, const RingGSWCiphertext &input,
std::shared_ptr<RingGSWCiphertext> acc) const {
......@@ -314,7 +314,7 @@ void RingGSWAccumulatorScheme::AddToACCAP(const std::shared_ptr<RingGSWCryptoPar
}
// GINX Accumulation as described in "Bootstrapping in FHEW"
// GINX Accumulation as described in "Bootstrapping in FHEW-like Cryptosystems"
void RingGSWAccumulatorScheme::AddToACCGINX(const std::shared_ptr<RingGSWCryptoParams> params, const RingGSWCiphertext &input, const NativeInteger& a,
std::shared_ptr<RingGSWCiphertext> acc) const {
......@@ -357,7 +357,7 @@ void RingGSWAccumulatorScheme::AddToACCGINX(const std::shared_ptr<RingGSWCryptoP
}
// Full evaluation as described in "Bootstrapping in FHEW"
// Full evaluation as described in "Bootstrapping in FHEW-like Cryptosystems"
std::shared_ptr<LWECiphertextImpl> RingGSWAccumulatorScheme::EvalBinGate(const std::shared_ptr<RingGSWCryptoParams> params,
const BINGATE gate, const RingGSWEvalKey& EK, const std::shared_ptr<const LWECiphertextImpl> ct1,
const std::shared_ptr<const LWECiphertextImpl> ct2, const std::shared_ptr<LWEEncryptionScheme> LWEscheme) const {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment