Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
83c47ab
modify import crates in benches
NTTVy03 Nov 23, 2024
0e02dc3
restructure to add optimized paillier
NTTVy03 Nov 24, 2024
d9f4f42
remove traits.rs from common part
NTTVy03 Nov 24, 2024
b01c484
init optimized paillier
NTTVy03 Nov 24, 2024
8d4ca21
done lib optimized paillier
NTTVy03 Nov 24, 2024
501f2bb
add examples for optimized paillier
NTTVy03 Nov 24, 2024
ed52b60
error: is_prime always return false
NTTVy03 Nov 24, 2024
bb37047
check samll prime
Nov 25, 2024
0763190
make other_div odd
NTTVy03 Nov 25, 2024
7c74861
sample key
NTTVy03 Nov 27, 2024
7797a2b
Merge pull request #1 from nxhieu3102/vy/optimized-paillier
nxhieu3102 Nov 27, 2024
cfff429
update params
NTTVy03 Nov 27, 2024
cf89258
add test optimized paillier
NTTVy03 Nov 27, 2024
294b03e
add bench
nxhieu3102 Nov 28, 2024
d82ace1
FAILED crt decryption
NTTVy03 Dec 4, 2024
b4cd30e
Add benchmark details
nxhieu3102 Dec 6, 2024
7d7a0d2
add precompute table
NTTVy03 Dec 6, 2024
3d0131c
Benchmark
nxhieu3102 Dec 6, 2024
70dee8c
resolve conflict
nxhieu3102 Dec 6, 2024
fbeb1a1
Add benchmark for precomputable
nxhieu3102 Dec 6, 2024
0449e35
fast encryption with precompute table
NTTVy03 Dec 7, 2024
c852e80
Merge branch 'vy/optimized-paillier' of github.com:nxhieu3102/rust-pa…
nxhieu3102 Dec 11, 2024
b58af0d
feat: add benchmark results from precompute tables
nxhieu3102 Dec 13, 2024
cadd5f5
Add encode and decode transfer precompute table
nxhieu3102 Dec 27, 2024
45916f5
Add wasm
nxhieu3102 Jan 12, 2025
01037ed
add optmized
nxhieu3102 Feb 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
146 changes: 135 additions & 11 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,166 @@ categories = ["cryptography", "algorithms"]
keywords = ["paillier", "homomorphic", "encryption", "zero-knowledge", "cryptoagorithms"]

[dependencies]
redis = "0.20.2"
rayon = "1.1"
serde = { version = "1.0", features = ["derive"] }
curv-kzen = { version = "0.10.0", default-features = false }
curv-kzen = { git = "https://github.com/nxhieu3102/curv-kzen"}
serde_json = "1.0"
once_cell = "1.20.2"
bincode = "1.3.3"
getrandom = { version = "0.2.15", features = ["js", "js-sys"] }
rand = { version = "0.8.5", features = ["std"] }
rand_core = { version = "0.6.4", default-features = false, features = ["std"] }
rust-gmp = { git = "https://github.com/nxhieu3102/rust-gmp" }
wasm-bindgen = { version = "0.2.99", features = ["serde-serialize"] }
serde-wasm-bindgen = "0.4"
console_error_panic_hook = "0.1"
instant = "0.1.2"

#[replace]
#"getrandom:0.1.16" = { git = "https://github.com/rust-lang/crates.io-index#getrandom@0.2.15", features = ["js", "js-sys"] }

[dev-dependencies]
bencher = "0.1"
serde_json = "1.0"
rand = "0.6"

[lib]
crate-type = ["cdylib", "rlib"]

[features]
default = ["curv-kzen/rust-gmp-kzen"]
default = ["curv-kzen/rust-gmp"]
#
#[dependencies.web-sys]
#features = [
# 'console',
# 'Document',
# 'HtmlElement',
# 'HtmlInputElement',
# 'MessageEvent',
# 'Window',
# 'Worker',
#]

[[bench]]
name = "arith"
harness = false
######### Paillier

[[bench]]
name = "encryption"
harness = false
# benchmark
#[[bench]]
#name = "arith"
#harness = false
#path = "benches/paillier/arith.rs"
#
#[[bench]]
#name = "encryption"
#harness = false
#path = "benches/paillier/encryption.rs"
#
#[[bench]]
#name = "keygen"
#harness = false
#path = "benches/paillier/keygen.rs"
#
#[[bench]]
#name = "keygen_optimized"
#harness = false
#path = "benches/optimized_paillier/keygen.rs"
#

[[bench]]
name = "keygen"
name = "encryption_optimized"
harness = false
path = "benches/optimized_paillier/encryption.rs"


[[bench]]
name = "proof"
name = "encryption_precomputed"
harness = false
path = "benches/optimized_paillier/encryption_precompute.rs"
#
#
#[[bench]]
#name = "encryption"
#harness = false
#path = "benches/paillier/encryption.rs"

#[[bench]]
#name = "proof"
#harness = false
#path = "benches/paillier/proof.rs"

# examples
[[example]]
name = "basic"
path = "examples/paillier/basic.rs"

[[example]]
name = "core"
path = "examples/paillier/core.rs"

[[example]]
name = "packed"
path = "examples/paillier/packed.rs"

[[example]]
name = "simple-voting"
path = "examples/paillier/simple-voting.rs"


[profile.release]
strip = true

# ######### Optimized Paillier

# # benchmark
# [[bench]]
# name = "optimized-arith"
# harness = false
# path = "benches/optimized_paillier/arith.rs"

# [[bench]]
# name = "optimized-encryption"
# harness = false
# path = "benches/optimized_paillier/encryption.rs"

# [[bench]]
# name = "optimized-keygen"
# harness = false
# path = "benches/optimized_paillier/keygen.rs"

# [[bench]]
# name = "optimized-proof"
# harness = false
# path = "benches/optimized_paillier/proof.rs"

# examples
[[example]]
name = "optimized-basic"
path = "examples/optimized_paillier/basic.rs"

[[example]]
name = "optimized-core"
path = "examples/optimized_paillier/core.rs"

[[example]]
name = "optimized-test"
path = "examples/optimized_paillier/test.rs"


[[example]]
name = "test-redis"
path = "examples/optimized_paillier/test_produce_redis.rs"

[[example]]
name = "server-redis"
path = "examples/optimized_paillier/server.rs"

[[example]]
name = "client-redis"
path = "examples/optimized_paillier/client.rs"

# [[example]]
# name = "optimized-packed"
# path = "examples/optimized_paillier/packed.rs"

# [[example]]
# name = "optimized-simple-voting"
# path = "examples/optimized_paillier/simple-voting.rs"
102 changes: 102 additions & 0 deletions MODIFY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# MODIFY NOTE

## Getting started
* Date: 24/11/2024
* `cargo build`: passed
* `cargo test`: passed
* Paillier (from kzen)
* Benchmark:
* `cargo bench --bench arith`: passed
* `cargo bench --bench keygen`: passed
* `cargo bench --bench encryption`: passed
* Run examples:
* `cargo run --example basic`: passed
* `cargo run --example core`: passed
* `cargo run --example packed`: passed
* `cargo run --example simple-voting`: passed
* Optimized Paillier (empty)
* Run examples:
* `cargo run --example optimized-basic`: passed
* `cargo run --example optimized-core`: passed

## Sample NGen

```
===========================================================
n_size = 64
alpha_size = 32
gen_time = 234
p = 2101691299
q = 465613451
div_p = 38821
div_q = 51449
===========================================================
```

```
===========================================================
n_size = 2048
alpha_size = 448
gen_time = 11195
p = 58840286422659759040264722526723163115947585338232456760625037250347772947158924579397568010160401824142812407358290596642469990113927112749530655037092283267003056548558029709374658607773847180644927643815153088281601855305598381448858360794678123176275437646277062199420220697194572706984411597767662174219
q = 64569320288008737248616342555880093394368754507783709070327116553058977898351053473313292166959127254971093796968717357648354685162478156927773865332477516856906959367256797593402514551692581319610393653175392375527614160563282643144940815153885487175996514917461421149259641826709133924683180923570779884947
div_p = 15020304164245057288431929989769857115735852482951590711910706652979
div_q = 21291950558579076623582777617978449486334160877503898213693845753489
===========================================================
```

```
===========================================================
n_size = 3072
alpha_size = 512
gen_time = 246373
p = 511479651376224135272510549291813726725085588644000144390246920284089633806866245291894928884913259574379086550363925403850413173986973487685163365879828389748775240175196719314782411464618959641226583759356220571651944502205970413863391374017952394537965816866787020521293548166710458258946582754459138709097568517186969786687208493059413981479688451224568797001791635883320000393162007667342648510508377971774561555170786272293051567478904245081572845245807307
q = 408688923564388086770782670828554032815349871060780368487215231105504904096120966258288262010611196136366763506941040487096261381967334049436641767735823105707115366229675719387516094237626310679608958275177271062969683521196639600377217249748410709342800361563209028049583860752998494197224302418042315187593638470416050226484723961650690899502439365115818805238922704291710151853557251540191180125702699283103368367194650231059400021257599482834484887390657427
div_p = 105468378392084646673579943620984635694804684018952838207630615507767968581119
div_q = 65181696622438207121235849281510929530480083573363361041105652905028734934053
===========================================================
```

```
===========================================================
n_size = 7680
alpha_size = 768
gen_time = 40224
p = 6483944159568602234743433287765985946568872689763444602499477344465421553868319907560314258797453688400901564033240446899325916225561664595034911777966745967314585327845474061638386581132946278521996052586187736868208468184896701433112596107009704384611390894561479324334606627348126189444943602388340747404474119360803949336554093548540153505531124844943915525635875918026853425919204942209020365568422025417601327892932473277119726186713754760025581870340318481572787579930563791187565874005119817580896115802667387794698346489197875370991587613848574410649869104072546837046705479636144407869657455890853097418304554263910965475960891236781712978560764751130025212227164528177549521793464728452055022445669384091285366112040906855496800439734231689712130197137205355345677879010694891735612317533013048020181052525282710614607507682167652968243975813423458793233675733074158841107411581456622200750464602176938730043681521230118712721590288782777478115499228079605358817242638647388127479711808910940851526190358102456639941486724638505500870130479625523894659913607154345463761805926654401219481769877389706307596411038006485662977399550797304245588887
q = 6708611161024339711834618631875332132849356030137011615569717827011266494436731545257119735273815049002301913192353876889092092745952090748004430573950629639268969809263219969034171022726712927208907951305156203516550772077082012497653326569637754415911231447721819996465965206153166225418166638513924550832934599841026834095908219734056366039350352079091570796780938267810384379738230648300074257500715111603677751585889176589329766689758918425610887350319680149423555358770644649564009136024669045378936742454437187042981789361392319903731402150211362299716899950530245728655150953083170176132999794523337455989710395322846040055738788813271132155760234689971731926426955289139682606969594530152175734258410628460991111204222887233961976179225203391634860283819111940998250699792718002119160174846935950798529922047004301123155747955966903083808360283847103334190941715566391661832612723692881298962816932397195257212822026981056621489003847186174599323810454396884435833351537188843489111555070272651105342868876683780507681726554641198175947838729542485576703186644149967316980819945570365298401243054861821084940338908758781174049216867223411802280971
div_p = 37619610332726096310244328945095026542049686330606019794058723848280445514899053425870276153409928946985577861439743
div_q = 30418232874405657382590349600704892457300333262539637972809743960501259169335536097724731776176638538230514275762809
===========================================================
```

## Implementation
* DONE: key gen, encrypt, decrypt, add, mul
* TODO:
* test
* benchmarks
* example
* ERROR:
* `is_prime` always returns `false`???

## Init Optimized Paillier (lib)
* Date: 24/11/2024
* lib directory: `src/optimized_paillier`
* `mod.rs`: declare sub-modules and structs
* `traits.rs`: interfaces for Optimized Paillier (don't need to read)
* [TODO] `core/`: internal functions, which execute on raw plaintext and ciphertext (`BigInt`)
* [TODO] `keygen.rs`: entry point of key generation
* [TODO] `encoding/integral.rs`: entry point of get key, encrypt, decrypt, add, mul... features; use functions in `core/`

> Many functions are unimplemented, so `cargo build` will raise many warnings. You don't need to fix them :>

## Restructure `kzen` project
* Date: 24/11/2024
* Restructure the kzen lib to add Optimized Paillier
* `traits` and `serialize` are common components
* `optimized_paillier` is a sub-module of `kzen` lib (as `paillier`)
* `optimized_paillier` will implement all traits in `traits.rs`

## Import crate for `benches`
* Date: 23/11/2024
* `use crate::helpers::*` instead of `use helpers::*;` because of Rust 2018 changed rules of path and module system [[read more](https://doc.rust-lang.org/edition-guide/rust-2018/path-changes.html)]
* Import `bencher` submodules
Binary file added benches/.DS_Store
Binary file not shown.
25 changes: 0 additions & 25 deletions benches/keygen.rs

This file was deleted.

Binary file added benches/optimized_paillier/.DS_Store
Binary file not shown.
Binary file not shown.
Loading