WARNING: this repository is under active development. Unlike semantic versioning, we do expect backward incompatible changes when upgrading PATCH version.
We take inspiration from keep changelog and arkworks.
Breaking Changes and Fixed contain backward incompatible changes, bug fixes, and security patches; Added, Changed, Removed, Deprecated contain backward compatible improvements or new features.
- #498 (
jf-primitives) Add GPU-accelerated MSM forUnivariateKzgPCS::commit/batch_commit()using ICICLE.
- #559 (
jf-primitives) GPU-acceleratedbatch_commit()now doesn't require the input polynomials to be of the same degree.
v0.4.0 - 2024-02-20
- #270 (
jf-primitives) Major refactoring on AEAD internals.- Switch from
crypto_boxtochacha20poly1305(withcrypto_kxto establish shared secret) for AEAD. - Supports
--cfg curve25519_dalek_backend="u32_backend"RUSTFLAGS to select Curve25519 backend. - Remove
Canonical(De)Serializeon AEAD-related structs, and directly exposeserde::(De)Serializeinstead.
- Switch from
- #475 (
jf-primitives) Ergonomics changes for Merkle tree.- Constructors are removed from trait definitions.
- Remove the unnecessary trait bounds, for example
I: From<u64>. - Restricting the index type for
AppendableMerkleTreeSchemeto beu64. - Add new
update_with()andremove()interface for the universal Merkle tree. - Add new
iter()interface for Merkle tree scheme, allows user to iterate through all elements that are in memory.
- #489 (
jf-primitives) Add non destructive universal Merkle tree.
- #243 fixes bug in MerkleTreeGadget implementation for SparseRescueMerkleTree.
- #377 fix: VID ADVZ allow zero-length payload
- #233 BLS aggregation APIs
- #234 New
bytes_from_field_elementsutil - #231 Implemented FK23 for fast amortized opening for univariate PCS
- #225 Implemented Reed Solomon erasure code
- #254 Ensure
no_stdand target WASM support - #271 Serde support for Aggregateable signatures
- #291 Non-native field operations and elliptic curve addition
- #309 Reed-Solomon decoder accept FFT domain
- #320 Non-native elliptic curve addition in short Weierstrass form
- #337 Port VID from another repo
- #341 Port VDF from another repo
- #343 Rescue parameter for
ark_bn254::Fq - #362 Derive Eq, Hash at a bunch of places
- #381 VID take iterator instead of slice
- #389 Hello-world namespace support for ADVZ VID scheme
- #406 Implement KZG multiproof
- #438 ADVZ PayloadProver support requests that span multiple polynomial
- #256 Refactored Reed Solomon erasure code
- #238 add public keys into signature aggregation APIs
- #251 add sign_key_ref api for BLSKeyPair
- #297 Updated
tagged-base64dependency to thecrates.iopackage - #299 For Merkle tree,
DigestAlgorithmnow returns aResulttype. - #302 Followup APIs for non-native ECC circuit support.
- #323 Improve performance of range gate in ultra plonk.
- #371 VID disperse also return payload commitment
- #385 Use FFT to encode polynomials in eval form.
v0.3.0 - 2023-03-22
- #207 Update arkworks dependency to v0.4.0
v0.2.0 - 2023-01-20
- #80,#87 (
jf-plonk) RefactoredUniversalSNARKtrait - #89 (
jf-primitives) Use blst library for BLS signature/VRF - #91 (
jf-plonk) Introducestruct BoolVarwhenever necessary and possible - #96 (
jf-plonk) Introduce comparison gates - #107 (
jf-primitives) Updatedcrypto_boxfrom0.7.1to0.8.1 - #110 (workspace) Reorganized codebase structure
- Remove
jf-rescuecrate, rescue hash function now resides injf-primitives/rescue. - Plonk constraint system definition and concrete constructions now live in a standalone crate
jf-relation.- Basic and customized circuit gates are defined in
jf-relation. - Customized/advanced circuit implementations are located in their own crates.
- Plonk verifier related gadgets,
transcriptandplonk-verifierare now injf-plonk/circuit. - Primitive gadgets, including
commitment,el gamaletc. remains injf-primitives/circuit. - Circuit for rescue hash function is now in
jf-primitives/circuit/rescue.
- Plonk verifier related gadgets,
- Basic and customized circuit gates are defined in
par-utilsis moved tojf-utils.
- Remove
- #126 (nix) Used nix flake
- #135 Major Merkle Tree refactoring, Unification of different variants:
- Introduce new traits which define the functionalities.
MerkleTreeSchemeis the abstraction of a static array accumulator,AppendableMerkleTreeSchemeis the abstraction of an appendable vector accumulator.UniversalMerkleTreeSchemeis the abstraction of a key-value map accumulator, which also supports non-membership query/proof.ForgetableMerkleTreeSchemeallows you to forget/remember some leaves from the memory.
- Implementation of new generic merkle tree:
MerkleTreeandUniversalMerkleTree- A default rate-3 rescue merkle tree implementation is provided in
preludemodule. - Other example instantiation can be found in
examplemodule.
- A default rate-3 rescue merkle tree implementation is provided in
- Introduce new traits which define the functionalities.
- #137 (
jf-primitives) Refactored VRF APIs and traits - #144 (
jf-primitives) Updated append-only merkle tree gadget with the latest MT API - #119 (all) Updated dependencies
- Upgraded
criterionfrom0.3.1to0.4.0
- Upgraded
- #146 (
jf-primitives) Refactored Rescue sponge API:- Remove all
.*sponge.*methods fromPermutation. - Introduce
RescueCRHFwhich takes oversponge_with_paddingandsponge_no_paddingfromPermutation. - Introduce
RescuePRFwhich takes overfull_state_keyed_sponge_with_paddingandfull_state_keyed_sponge_no_paddingfromPermutation.
- Remove all
- #148, #156 (
jf-primitives) Refactored BLS Signature implementation- #148 Added trait bounds on associated types of
trait SignatureScheme - #156 Improved BLS correctness and API compliance with IRTF standard with better doc
- #148 Added trait bounds on associated types of
- #150 (
jf-primitives) RefactorRescueGadget- Introduce
SpongeStateVarto abstract overRescueStateVarandRescueNonNativeStateVarstructs. - Unify
RescueGadgetandRescueNonNativeGadgettraits intoRescueGadget.
- Introduce
- #158 (
jf-primitives) RefactoredMerkleTreeGadgetAPI:- Generic only over
MerkleTreeScheme. - New methods for allocating variables:
create_leaf_variable,create_membership_proof_variable,create_root_variable. - New methods for enforcing constraints:
is_memberandenforce_merkle_proof. - Move the remaining methods to the internals of circuit implementation for
RescueMerkleTree. - Implement
MerkleTreeGadgetforRescueMerkleTree.
- Generic only over
- #169 (
jf-primitives) Stabilize API effort- Introduced
trait CRHFand moved current implementations understruct FixedLengthRescueCRHF, VariableLengthRescueCRHF. - Introduced
trait CommitmentSchemeand moved current implementations understruct FixedLengthRescueCommitment.
- Introduced
- #194 (all) Set MSVR of all crates to 1.64.
- (
jf-primitives)zeroizefrom1.3to^1.5
- #76 (
jf-plonk) Splitting polynomials are masked to ensure zero-knowledge of Plonk- Now
PlonkKzgSnarkuse our own KZG10 implementation.
- Now
- #115 (
jf-relation) Fix a bug inlogic_orgate
- #85, #87 (all) Added
no_stdcompliance - #116 (
jf-primitives) Introduced newPolynomialCommitmentSchemetrait - #117 (
jf-relation) Added gadgets for comparison with constant values - #176 (
jf-primitives) Added implementation for light weight merkle tree -- an append-only merkle tree who only keeps its frontier. - #167 (
jf-primitives) AddDigestGadgetassociated type toMerkleTreeGadget.
- #105 (all) Trait bound relaxation
- #108 (
jf-utils) Allowed more general input todeserialize_canonical_bytes!() - #113 (
jf-plonk) Corrected error type forPlonkVerifiergadgets - #162 (
jf-utils) Renamed#serde(with="field_elem")to#serde(with="canonical") - #177 (
jf-primitives) Refactor multilinear PCS opening. - #197 (
jf-relation) Addedno_stdattribute.
- #143 (
jf-utils) Removedtagged_blob, usetagged_base64::taggedinstead
v0.1.2-patch.1 - 2022-11-30
- #107 (
jf-primitives) Updatedcrypto_boxfrom0.7.1to0.8.1 - #149 (
jf-primitives, nix)- Updated dependencies
crypto_boxfrom0.7.1to0.8.1zeroizefrom1.3to^1.5
- Used nix flake instead, bumped rust version to
1.65
- Updated dependencies
v0.1.2 - 2022-06-22
- #72 (
jf-utils) Improved#[tagged_blob(...)]macro to supportconstvariables in addition to string literals
v0.1.1 - 2022-05-17
- #53 (
jf-primitives) Defined and using our own signature scheme trait - #57 (
jf-plonk) Updatedis_xxxtocheck_xxxgadget APIs - #65 (
jf-plonk) Added HashToGroup implementation to TE Curves
- #65 (
jf-plonk) Fixed a missing decomposing check in range gate
- #51 (
jf-plonk) Introduced lookup table domain separation - #55 (
jf-primitives) Added naive implementations of BLS signature and VRF - #65 (
jf-primitives) AddedHashToGroupsupport for both SW and TE curves
- #66 (dep) Updated
tagged-base64reference url to reflect the Espresso Systems name change