We take inspiration from keep changelog and arkworks, and follow semantic versioning for our releases.
Breaking Changes and Fixed contain backward incompatible changes, bug fixes, and security patches; Added, Changed, Removed, Deprecated contain backward compatible improvements or new features.
- #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
- #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
- #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 leafs 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