mirror of
https://github.com/arnaucube/babyjubjub-ark.git
synced 2026-01-13 09:11:28 +01:00
04d20b9e05aece18e4f462e1e66235f25c4de696
(On a Intel(R) Core(TM) i7-8705G CPU @ 3.10GHz, with 32 GB of RAM) - before: ``` sign_poseidon time: [383.01 ms 384.46 ms 385.98 ms] verify_poseidon time: [250.56 ms 251.46 ms 252.43 ms] ``` - current: ``` sign_poseidon time: [973.38 us 973.83 us 974.41 us] verify_poseidon time: [835.34 us 839.94 us 845.29 us] ``` sign_poseidon: `394x` improvement verify_poseidon: `300x` improvement
babyjubjub-rs

BabyJubJub elliptic curve implementation in Rust. A twisted edwards curve embedded in the curve of BN128.
BabyJubJub curve explanation: https://medium.com/zokrates/efficient-ecc-in-zksnarks-using-zokrates-bd9ae37b8186
Uses:
- MiMC7 hash function: https://github.com/arnaucube/mimc-rs
- Poseidon hash function https://github.com/arnaucube/poseidon-rs
Compatible with the BabyJubJub Go implementation from https://github.com/iden3/go-iden3-crypto
Warning
Doing this in my free time to get familiar with Rust, do not use in production.
- point addition
- point scalar multiplication
- eddsa keys generation
- eddsa signature
- eddsa signature verification
- {point, pk, signature} compress&decompress parsers
References
- BabyJubJub curve explanation: https://medium.com/zokrates/efficient-ecc-in-zksnarks-using-zokrates-bd9ae37b8186
- C++ & Explanation https://github.com/barryWhiteHat/baby_jubjub
- Javascript & Circom: https://github.com/iden3/circomlib
- Go https://github.com/iden3/go-iden3-crypto
- JubJub curve explanation: https://z.cash/technology/jubjub/
Languages
Rust
100%