mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16:44 +01:00
Add BDD Arithmetic (#98)
* Added some circuit, evaluation + some layouts * Refactor + memory reduction * Rows -> Dnum, Digits -> Dsize * fix #96 + glwe_packing (indirectly CBT) * clippy
This commit is contained in:
committed by
GitHub
parent
37e13b965c
commit
6357a05509
@@ -18,7 +18,7 @@ use poulpy_hal::{
|
||||
use crate::{
|
||||
encryption::SIGMA,
|
||||
layouts::{
|
||||
GGLWEAutomorphismKey, GGLWEAutomorphismKeyLayout, GGLWELayoutInfos, GLWEPlaintext, GLWESecret,
|
||||
GGLWEAutomorphismKey, GGLWEAutomorphismKeyLayout, GGLWEInfos, GLWEPlaintext, GLWESecret,
|
||||
prepared::{GGLWEAutomorphismKeyPrepared, GLWESecretPrepared, Prepare, PrepareAlloc},
|
||||
},
|
||||
noise::log2_std_noise_gglwe_product,
|
||||
@@ -70,26 +70,26 @@ where
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 60;
|
||||
let k_out: usize = 40;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
let p0: i64 = -1;
|
||||
let p1: i64 = -5;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
let k_apply: usize = (digits + di) * base2k;
|
||||
for di in 1..dsize + 1 {
|
||||
let k_apply: usize = (dsize + di) * base2k;
|
||||
|
||||
let n: usize = module.n();
|
||||
let digits_in: usize = 1;
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let rows_in: usize = k_in / (base2k * di);
|
||||
let rows_out: usize = k_out / (base2k * di);
|
||||
let rows_apply: usize = k_in.div_ceil(base2k * di);
|
||||
let dnum_in: usize = k_in / (base2k * di);
|
||||
let dnum_out: usize = k_out / (base2k * di);
|
||||
let dnum_apply: usize = k_in.div_ceil(base2k * di);
|
||||
|
||||
let auto_key_in_infos: GGLWEAutomorphismKeyLayout = GGLWEAutomorphismKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_in.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -97,8 +97,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows_out.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_out.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -106,8 +106,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_apply.into(),
|
||||
rows: rows_apply.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum_apply.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -183,7 +183,7 @@ where
|
||||
let sk_auto_dft: GLWESecretPrepared<Vec<u8>, B> = sk_auto.prepare_alloc(module, scratch.borrow());
|
||||
|
||||
(0..auto_key_out.rank_in().into()).for_each(|col_i| {
|
||||
(0..auto_key_out.rows().into()).for_each(|row_i| {
|
||||
(0..auto_key_out.dnum().into()).for_each(|row_i| {
|
||||
auto_key_out
|
||||
.at(row_i, col_i)
|
||||
.decrypt(module, &mut pt, &sk_auto_dft, scratch.borrow());
|
||||
@@ -191,7 +191,7 @@ where
|
||||
module.vec_znx_sub_scalar_inplace(
|
||||
&mut pt.data,
|
||||
0,
|
||||
(digits_in - 1) + row_i * digits_in,
|
||||
(dsize_in - 1) + row_i * dsize_in,
|
||||
&sk.data,
|
||||
col_i,
|
||||
);
|
||||
@@ -280,25 +280,25 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 60;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
let p0: i64 = -1;
|
||||
let p1: i64 = -5;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
let k_apply: usize = (digits + di) * base2k;
|
||||
for di in 1..dsize + 1 {
|
||||
let k_apply: usize = (dsize + di) * base2k;
|
||||
|
||||
let n: usize = module.n();
|
||||
let digits_in: usize = 1;
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let rows_in: usize = k_in / (base2k * di);
|
||||
let rows_apply: usize = k_in.div_ceil(base2k * di);
|
||||
let dnum_in: usize = k_in / (base2k * di);
|
||||
let dnum_apply: usize = k_in.div_ceil(base2k * di);
|
||||
|
||||
let auto_key_layout: GGLWEAutomorphismKeyLayout = GGLWEAutomorphismKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_in.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -306,8 +306,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_apply.into(),
|
||||
rows: rows_apply.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum_apply.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -373,14 +373,14 @@ where
|
||||
let sk_auto_dft: GLWESecretPrepared<Vec<u8>, B> = sk_auto.prepare_alloc(module, scratch.borrow());
|
||||
|
||||
(0..auto_key.rank_in().into()).for_each(|col_i| {
|
||||
(0..auto_key.rows().into()).for_each(|row_i| {
|
||||
(0..auto_key.dnum().into()).for_each(|row_i| {
|
||||
auto_key
|
||||
.at(row_i, col_i)
|
||||
.decrypt(module, &mut pt, &sk_auto_dft, scratch.borrow());
|
||||
module.vec_znx_sub_scalar_inplace(
|
||||
&mut pt.data,
|
||||
0,
|
||||
(digits_in - 1) + row_i * digits_in,
|
||||
(dsize_in - 1) + row_i * dsize_in,
|
||||
&sk.data,
|
||||
col_i,
|
||||
);
|
||||
|
||||
@@ -77,27 +77,27 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 54;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
let p: i64 = -5;
|
||||
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ksk: usize = k_in + base2k * di;
|
||||
let k_tsk: usize = k_ksk;
|
||||
let k_out: usize = k_ksk; // Better capture noise.
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in.div_ceil(base2k * di);
|
||||
let rows_in: usize = k_in.div_euclid(base2k * di);
|
||||
let dnum: usize = k_in.div_ceil(base2k * di);
|
||||
let dnum_in: usize = k_in.div_euclid(base2k * di);
|
||||
|
||||
let digits_in: usize = 1;
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let ggsw_in_layout: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_in.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -105,8 +105,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -114,8 +114,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_tsk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -123,8 +123,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -270,24 +270,24 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 54;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
let p: i64 = -1;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ksk: usize = k_out + base2k * di;
|
||||
let k_tsk: usize = k_ksk;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(di * base2k);
|
||||
let rows_in: usize = k_out.div_euclid(base2k * di);
|
||||
let digits_in: usize = 1;
|
||||
let dnum: usize = k_out.div_ceil(di * base2k);
|
||||
let dnum_in: usize = k_out.div_euclid(base2k * di);
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let ggsw_out_layout: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -295,8 +295,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_tsk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -304,8 +304,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
|
||||
@@ -67,15 +67,15 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 60;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
let p: i64 = -5;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ksk: usize = k_in + base2k * di;
|
||||
let k_out: usize = k_ksk; // Better capture noise.
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in.div_ceil(base2k * digits);
|
||||
let dnum: usize = k_in.div_ceil(base2k * dsize);
|
||||
|
||||
let ct_in_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -96,8 +96,8 @@ where
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rank: rank.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
};
|
||||
|
||||
let mut autokey: GGLWEAutomorphismKey<Vec<u8>> = GGLWEAutomorphismKey::alloc(&autokey_infos);
|
||||
@@ -148,7 +148,7 @@ where
|
||||
|
||||
let max_noise: f64 = log2_std_noise_gglwe_product(
|
||||
module.n() as f64,
|
||||
base2k * digits,
|
||||
base2k * dsize,
|
||||
0.5,
|
||||
0.5,
|
||||
0f64,
|
||||
@@ -210,14 +210,14 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 60;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
let p = -5;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ksk: usize = k_out + base2k * di;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(base2k * digits);
|
||||
let dnum: usize = k_out.div_ceil(base2k * dsize);
|
||||
|
||||
let ct_out_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -231,8 +231,8 @@ where
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rank: rank.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
};
|
||||
|
||||
let mut autokey: GGLWEAutomorphismKey<Vec<u8>> = GGLWEAutomorphismKey::alloc(&autokey_infos);
|
||||
@@ -282,7 +282,7 @@ where
|
||||
|
||||
let max_noise: f64 = log2_std_noise_gglwe_product(
|
||||
module.n() as f64,
|
||||
base2k * digits,
|
||||
base2k * dsize,
|
||||
0.5,
|
||||
0.5,
|
||||
0f64,
|
||||
|
||||
@@ -16,9 +16,9 @@ use poulpy_hal::{
|
||||
};
|
||||
|
||||
use crate::layouts::{
|
||||
Base2K, Degree, GLWECiphertext, GLWECiphertextLayout, GLWEPlaintext, GLWESecret, GLWEToLWESwitchingKey,
|
||||
GLWEToLWESwitchingKeyLayout, LWECiphertext, LWECiphertextLayout, LWEPlaintext, LWESecret, LWEToGLWESwitchingKey,
|
||||
LWEToGLWESwitchingKeyLayout, Rank, Rows, TorusPrecision,
|
||||
Base2K, Degree, Dnum, GLWECiphertext, GLWECiphertextLayout, GLWEPlaintext, GLWESecret, GLWEToLWEKey, GLWEToLWEKeyLayout,
|
||||
LWECiphertext, LWECiphertextLayout, LWEPlaintext, LWESecret, LWEToGLWESwitchingKey, LWEToGLWESwitchingKeyLayout, Rank,
|
||||
TorusPrecision,
|
||||
prepared::{GLWESecretPrepared, GLWEToLWESwitchingKeyPrepared, LWEToGLWESwitchingKeyPrepared, PrepareAlloc},
|
||||
};
|
||||
|
||||
@@ -79,7 +79,7 @@ where
|
||||
n: n_glwe,
|
||||
base2k: Base2K(17),
|
||||
k: TorusPrecision(51),
|
||||
rows: Rows(2),
|
||||
dnum: Dnum(2),
|
||||
rank_out: rank,
|
||||
};
|
||||
|
||||
@@ -188,11 +188,11 @@ where
|
||||
let rank: Rank = Rank(2);
|
||||
let k_lwe_pt: TorusPrecision = TorusPrecision(8);
|
||||
|
||||
let glwe_to_lwe_infos: GLWEToLWESwitchingKeyLayout = GLWEToLWESwitchingKeyLayout {
|
||||
let glwe_to_lwe_infos: GLWEToLWEKeyLayout = GLWEToLWEKeyLayout {
|
||||
n: n_glwe,
|
||||
base2k: Base2K(17),
|
||||
k: TorusPrecision(51),
|
||||
rows: Rows(2),
|
||||
dnum: Dnum(2),
|
||||
rank_in: rank,
|
||||
};
|
||||
|
||||
@@ -214,7 +214,7 @@ where
|
||||
let mut source_xe: Source = Source::new([0u8; 32]);
|
||||
|
||||
let mut scratch: ScratchOwned<B> = ScratchOwned::alloc(
|
||||
GLWEToLWESwitchingKey::encrypt_sk_scratch_space(module, &glwe_to_lwe_infos)
|
||||
GLWEToLWEKey::encrypt_sk_scratch_space(module, &glwe_to_lwe_infos)
|
||||
| LWECiphertext::from_glwe_scratch_space(module, &lwe_infos, &glwe_infos, &glwe_to_lwe_infos)
|
||||
| GLWECiphertext::decrypt_scratch_space(module, &glwe_infos),
|
||||
);
|
||||
@@ -241,7 +241,7 @@ where
|
||||
scratch.borrow(),
|
||||
);
|
||||
|
||||
let mut ksk: GLWEToLWESwitchingKey<Vec<u8>> = GLWEToLWESwitchingKey::alloc(&glwe_to_lwe_infos);
|
||||
let mut ksk: GLWEToLWEKey<Vec<u8>> = GLWEToLWEKey::alloc(&glwe_to_lwe_infos);
|
||||
|
||||
ksk.encrypt_sk(
|
||||
module,
|
||||
|
||||
@@ -69,18 +69,18 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_ksk: usize = 60;
|
||||
let digits: usize = k_ksk.div_ceil(base2k) - 1;
|
||||
let dsize: usize = k_ksk.div_ceil(base2k) - 1;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
let dnum: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
|
||||
let atk_infos: GGLWEAutomorphismKeyLayout = GGLWEAutomorphismKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -172,18 +172,18 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_ksk: usize = 60;
|
||||
let digits: usize = k_ksk.div_ceil(base2k) - 1;
|
||||
let dsize: usize = k_ksk.div_ceil(base2k) - 1;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
let dnum: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
|
||||
let atk_infos: GGLWEAutomorphismKeyLayout = GGLWEAutomorphismKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
|
||||
@@ -64,19 +64,19 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_ksk: usize = 54;
|
||||
let digits: usize = k_ksk / base2k;
|
||||
let dsize: usize = k_ksk / base2k;
|
||||
for rank_in in 1_usize..3 {
|
||||
for rank_out in 1_usize..3 {
|
||||
for di in 1_usize..digits + 1 {
|
||||
for di in 1_usize..dsize + 1 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
let dnum: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
|
||||
let gglwe_infos: GGLWECiphertextLayout = GGLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank_in.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
@@ -156,19 +156,19 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_ksk: usize = 54;
|
||||
let digits: usize = k_ksk / base2k;
|
||||
let dsize: usize = k_ksk / base2k;
|
||||
for rank_in in 1_usize..3 {
|
||||
for rank_out in 1_usize..3 {
|
||||
for di in 1_usize..digits + 1 {
|
||||
for di in 1_usize..dsize + 1 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
let dnum: usize = (k_ksk - di * base2k) / (di * base2k);
|
||||
|
||||
let gglwe_infos: GGLWECiphertextLayout = GGLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank_in.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
|
||||
@@ -67,18 +67,18 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k: usize = 54;
|
||||
let digits: usize = k / base2k;
|
||||
let dsize: usize = k / base2k;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = (k - di * base2k) / (di * base2k);
|
||||
let dnum: usize = (k - di * base2k) / (di * base2k);
|
||||
|
||||
let ggsw_infos: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -160,18 +160,18 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k: usize = 54;
|
||||
let digits: usize = k / base2k;
|
||||
let dsize: usize = k / base2k;
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = (k - di * base2k) / (di * base2k);
|
||||
let dnum: usize = (k - di * base2k) / (di * base2k);
|
||||
|
||||
let ggsw_infos: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ use poulpy_hal::{
|
||||
use crate::{
|
||||
encryption::SIGMA,
|
||||
layouts::{
|
||||
Digits, GGLWETensorKey, GGLWETensorKeyLayout, GLWEPlaintext, GLWESecret,
|
||||
Dsize, GGLWETensorKey, GGLWETensorKeyLayout, GLWEPlaintext, GLWESecret,
|
||||
compressed::{Decompress, GGLWETensorKeyCompressed},
|
||||
prepared::{GLWESecretPrepared, PrepareAlloc},
|
||||
},
|
||||
@@ -69,14 +69,14 @@ where
|
||||
|
||||
for rank in 1_usize..3 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k / base2k;
|
||||
let dnum: usize = k / base2k;
|
||||
|
||||
let tensor_key_infos = GGLWETensorKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k.into(),
|
||||
rows: rows.into(),
|
||||
digits: Digits(1),
|
||||
dnum: dnum.into(),
|
||||
dsize: Dsize(1),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -127,7 +127,7 @@ where
|
||||
0,
|
||||
scratch.borrow(),
|
||||
);
|
||||
for row_i in 0..rows {
|
||||
for row_i in 0..dnum {
|
||||
tensor_key
|
||||
.at(i, j)
|
||||
.at(row_i, 0)
|
||||
@@ -188,14 +188,14 @@ where
|
||||
let k = 54;
|
||||
for rank in 1_usize..3 {
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k / base2k;
|
||||
let dnum: usize = k / base2k;
|
||||
|
||||
let tensor_key_infos: GGLWETensorKeyLayout = GGLWETensorKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k.into(),
|
||||
rows: rows.into(),
|
||||
digits: Digits(1),
|
||||
dnum: dnum.into(),
|
||||
dsize: Dsize(1),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -244,7 +244,7 @@ where
|
||||
0,
|
||||
scratch.borrow(),
|
||||
);
|
||||
for row_i in 0..rows {
|
||||
for row_i in 0..dnum {
|
||||
tensor_key
|
||||
.at(i, j)
|
||||
.at(row_i, 0)
|
||||
|
||||
@@ -70,23 +70,23 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 60;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
for rank_in in 1_usize..3 {
|
||||
for rank_out in 1_usize..3 {
|
||||
for di in 1_usize..digits + 1 {
|
||||
for di in 1_usize..dsize + 1 {
|
||||
let k_ggsw: usize = k_in + base2k * di;
|
||||
let k_out: usize = k_in; // Better capture noise.
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in.div_ceil(base2k * di);
|
||||
let digits_in: usize = 1;
|
||||
let dnum: usize = k_in.div_ceil(base2k * di);
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let gglwe_in_infos: GGLWESwitchingKeyLayout = GGLWESwitchingKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_in.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank_in: rank_in.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
@@ -95,8 +95,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank_in: rank_in.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
@@ -105,8 +105,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ggsw.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank_out.into(),
|
||||
};
|
||||
|
||||
@@ -252,23 +252,23 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 60;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
for rank_in in 1_usize..3 {
|
||||
for rank_out in 1_usize..3 {
|
||||
for di in 1_usize..digits + 1 {
|
||||
for di in 1_usize..dsize + 1 {
|
||||
let k_ggsw: usize = k_out + base2k * di;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(base2k * di);
|
||||
let dnum: usize = k_out.div_ceil(base2k * di);
|
||||
|
||||
let digits_in: usize = 1;
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let gglwe_out_infos: GGLWESwitchingKeyLayout = GGLWESwitchingKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank_in: rank_in.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
@@ -277,8 +277,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ggsw.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank_out.into(),
|
||||
};
|
||||
|
||||
|
||||
@@ -72,24 +72,24 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 60;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_apply: usize = k_in + base2k * di;
|
||||
|
||||
let k_out: usize = k_in; // Better capture noise.
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in.div_ceil(base2k * di);
|
||||
let rows_in: usize = k_in.div_euclid(base2k * di);
|
||||
let digits_in: usize = 1;
|
||||
let dnum: usize = k_in.div_ceil(base2k * di);
|
||||
let dnum_in: usize = k_in.div_euclid(base2k * di);
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let ggsw_in_infos: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_in.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -97,8 +97,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -106,8 +106,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_apply.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -237,22 +237,22 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 60;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_apply: usize = k_out + base2k * di;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(di * base2k);
|
||||
let rows_in: usize = k_out.div_euclid(base2k * di);
|
||||
let digits_in: usize = 1;
|
||||
let dnum: usize = k_out.div_ceil(di * base2k);
|
||||
let dnum_in: usize = k_out.div_euclid(base2k * di);
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let ggsw_out_infos: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows_in.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_in.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -260,8 +260,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_apply.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
|
||||
@@ -64,14 +64,14 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 45;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ggsw: usize = k_in + base2k * di;
|
||||
let k_out: usize = k_ggsw; // Better capture noise
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in.div_ceil(base2k * digits);
|
||||
let dnum: usize = k_in.div_ceil(base2k * dsize);
|
||||
|
||||
let glwe_in_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -91,8 +91,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ggsw.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -158,7 +158,7 @@ where
|
||||
|
||||
let max_noise: f64 = noise_ggsw_product(
|
||||
n as f64,
|
||||
base2k * digits,
|
||||
base2k * dsize,
|
||||
0.5,
|
||||
var_msg,
|
||||
var_a0_err,
|
||||
@@ -216,13 +216,13 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 60;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ggsw: usize = k_out + base2k * di;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(base2k * digits);
|
||||
let dnum: usize = k_out.div_ceil(base2k * dsize);
|
||||
|
||||
let glwe_out_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -235,8 +235,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ggsw.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -301,7 +301,7 @@ where
|
||||
|
||||
let max_noise: f64 = noise_ggsw_product(
|
||||
n as f64,
|
||||
base2k * digits,
|
||||
base2k * dsize,
|
||||
0.5,
|
||||
var_msg,
|
||||
var_a0_err,
|
||||
|
||||
@@ -66,26 +66,26 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 60;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
|
||||
for rank_in_s0s1 in 1_usize..3 {
|
||||
for rank_out_s0s1 in 1_usize..3 {
|
||||
for rank_out_s1s2 in 1_usize..3 {
|
||||
for di in 1_usize..digits + 1 {
|
||||
for di in 1_usize..dsize + 1 {
|
||||
let k_ksk: usize = k_in + base2k * di;
|
||||
let k_out: usize = k_ksk; // Better capture noise.
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in / base2k;
|
||||
let rows_apply: usize = k_in.div_ceil(base2k * di);
|
||||
let digits_in: usize = 1;
|
||||
let dnum: usize = k_in / base2k;
|
||||
let dnum_apply: usize = k_in.div_ceil(base2k * di);
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let gglwe_s0s1_infos: GGLWESwitchingKeyLayout = GGLWESwitchingKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_in.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank_in: rank_in_s0s1.into(),
|
||||
rank_out: rank_out_s0s1.into(),
|
||||
};
|
||||
@@ -94,8 +94,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows_apply.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum_apply.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank_out_s0s1.into(),
|
||||
rank_out: rank_out_s1s2.into(),
|
||||
};
|
||||
@@ -104,8 +104,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows_apply.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum_apply.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank_in: rank_in_s0s1.into(),
|
||||
rank_out: rank_out_s1s2.into(),
|
||||
};
|
||||
@@ -236,22 +236,22 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 60;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
for rank_in in 1_usize..3 {
|
||||
for rank_out in 1_usize..3 {
|
||||
for di in 1_usize..digits + 1 {
|
||||
for di in 1_usize..dsize + 1 {
|
||||
let k_ksk: usize = k_out + base2k * di;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(base2k * di);
|
||||
let digits_in: usize = 1;
|
||||
let dnum: usize = k_out.div_ceil(base2k * di);
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let gglwe_s0s1_infos: GGLWESwitchingKeyLayout = GGLWESwitchingKeyLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank_in: rank_in.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
@@ -260,8 +260,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank_out.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
|
||||
@@ -73,24 +73,24 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 54;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ksk: usize = k_in + base2k * di;
|
||||
let k_tsk: usize = k_ksk;
|
||||
let k_out: usize = k_ksk; // Better capture noise.
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in.div_ceil(di * base2k);
|
||||
let dnum: usize = k_in.div_ceil(di * base2k);
|
||||
|
||||
let digits_in: usize = 1;
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let ggsw_in_infos: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_in.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -98,8 +98,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -107,8 +107,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_tsk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -116,8 +116,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank.into(),
|
||||
rank_out: rank.into(),
|
||||
};
|
||||
@@ -262,23 +262,23 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 54;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ksk: usize = k_out + base2k * di;
|
||||
let k_tsk: usize = k_ksk;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(di * base2k);
|
||||
let dnum: usize = k_out.div_ceil(di * base2k);
|
||||
|
||||
let digits_in: usize = 1;
|
||||
let dsize_in: usize = 1;
|
||||
|
||||
let ggsw_out_infos: GGSWCiphertextLayout = GGSWCiphertextLayout {
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_out.into(),
|
||||
rows: rows.into(),
|
||||
digits: digits_in.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: dsize_in.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -286,8 +286,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_tsk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank: rank.into(),
|
||||
};
|
||||
|
||||
@@ -295,8 +295,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank.into(),
|
||||
rank_out: rank.into(),
|
||||
};
|
||||
|
||||
@@ -66,16 +66,16 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_in: usize = 45;
|
||||
let digits: usize = k_in.div_ceil(base2k);
|
||||
let dsize: usize = k_in.div_ceil(base2k);
|
||||
|
||||
for rank_in in 1_usize..3 {
|
||||
for rank_out in 1_usize..3 {
|
||||
for di in 1_usize..digits + 1 {
|
||||
for di in 1_usize..dsize + 1 {
|
||||
let k_ksk: usize = k_in + base2k * di;
|
||||
let k_out: usize = k_ksk; // better capture noise
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_in.div_ceil(base2k * digits);
|
||||
let dnum: usize = k_in.div_ceil(base2k * dsize);
|
||||
|
||||
let glwe_in_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -95,8 +95,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank_in.into(),
|
||||
rank_out: rank_out.into(),
|
||||
};
|
||||
@@ -150,7 +150,7 @@ where
|
||||
|
||||
let max_noise: f64 = log2_std_noise_gglwe_product(
|
||||
module.n() as f64,
|
||||
base2k * digits,
|
||||
base2k * dsize,
|
||||
0.5,
|
||||
0.5,
|
||||
0f64,
|
||||
@@ -208,14 +208,14 @@ where
|
||||
{
|
||||
let base2k: usize = 12;
|
||||
let k_out: usize = 45;
|
||||
let digits: usize = k_out.div_ceil(base2k);
|
||||
let dsize: usize = k_out.div_ceil(base2k);
|
||||
|
||||
for rank in 1_usize..3 {
|
||||
for di in 1..digits + 1 {
|
||||
for di in 1..dsize + 1 {
|
||||
let k_ksk: usize = k_out + base2k * di;
|
||||
|
||||
let n: usize = module.n();
|
||||
let rows: usize = k_out.div_ceil(base2k * digits);
|
||||
let dnum: usize = k_out.div_ceil(base2k * dsize);
|
||||
|
||||
let glwe_out_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -228,8 +228,8 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
digits: di.into(),
|
||||
dnum: dnum.into(),
|
||||
dsize: di.into(),
|
||||
rank_in: rank.into(),
|
||||
rank_out: rank.into(),
|
||||
};
|
||||
@@ -282,7 +282,7 @@ where
|
||||
|
||||
let max_noise: f64 = log2_std_noise_gglwe_product(
|
||||
module.n() as f64,
|
||||
base2k * digits,
|
||||
base2k * dsize,
|
||||
0.5,
|
||||
0.5,
|
||||
0f64,
|
||||
|
||||
@@ -73,7 +73,7 @@ where
|
||||
let k_lwe_pt: usize = 8;
|
||||
|
||||
let k_ksk: usize = k_lwe_ct + base2k;
|
||||
let rows: usize = k_lwe_ct.div_ceil(base2k);
|
||||
let dnum: usize = k_lwe_ct.div_ceil(base2k);
|
||||
|
||||
let mut source_xs: Source = Source::new([0u8; 32]);
|
||||
let mut source_xa: Source = Source::new([0u8; 32]);
|
||||
@@ -83,7 +83,7 @@ where
|
||||
n: n.into(),
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rows: rows.into(),
|
||||
dnum: dnum.into(),
|
||||
};
|
||||
|
||||
let lwe_in_infos: LWECiphertextLayout = LWECiphertextLayout {
|
||||
|
||||
@@ -83,10 +83,10 @@ where
|
||||
let k_ct: usize = 36;
|
||||
let pt_k: usize = 18;
|
||||
let rank: usize = 3;
|
||||
let digits: usize = 1;
|
||||
let k_ksk: usize = k_ct + base2k * digits;
|
||||
let dsize: usize = 1;
|
||||
let k_ksk: usize = k_ct + base2k * dsize;
|
||||
|
||||
let rows: usize = k_ct.div_ceil(base2k * digits);
|
||||
let dnum: usize = k_ct.div_ceil(base2k * dsize);
|
||||
|
||||
let glwe_out_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -100,8 +100,8 @@ where
|
||||
base2k: base2k.into(),
|
||||
k: k_ksk.into(),
|
||||
rank: rank.into(),
|
||||
digits: digits.into(),
|
||||
rows: rows.into(),
|
||||
dsize: dsize.into(),
|
||||
dnum: dnum.into(),
|
||||
};
|
||||
|
||||
let mut scratch: ScratchOwned<B> = ScratchOwned::alloc(
|
||||
|
||||
@@ -80,8 +80,8 @@ where
|
||||
let n: usize = module.n();
|
||||
let k_autokey: usize = k + base2k;
|
||||
|
||||
let digits: usize = 1;
|
||||
let rows: usize = k.div_ceil(base2k * digits);
|
||||
let dsize: usize = 1;
|
||||
let dnum: usize = k.div_ceil(base2k * dsize);
|
||||
|
||||
let glwe_out_infos: GLWECiphertextLayout = GLWECiphertextLayout {
|
||||
n: n.into(),
|
||||
@@ -95,8 +95,8 @@ where
|
||||
base2k: base2k.into(),
|
||||
k: k_autokey.into(),
|
||||
rank: rank.into(),
|
||||
digits: digits.into(),
|
||||
rows: rows.into(),
|
||||
dsize: dsize.into(),
|
||||
dnum: dnum.into(),
|
||||
};
|
||||
|
||||
let mut glwe_out: GLWECiphertext<Vec<u8>> = GLWECiphertext::alloc(&glwe_out_infos);
|
||||
|
||||
Reference in New Issue
Block a user