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_box
tochacha20poly1305
(withcrypto_kx
to establish shared secret) for AEAD. - Supports
--cfg curve25519_dalek_backend="u32_backend"
RUSTFLAGS to select Curve25519 backend. - Remove
Canonical(De)Serialize
on AEAD-related structs, and directly exposeserde::(De)Serialize
instead.
- 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_elements
util - #231 Implemented FK23 for fast amortized opening for univariate PCS
- #225 Implemented Reed Solomon erasure code
- #254 Ensure
no_std
and 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-base64
dependency to thecrates.io
package - #299 For Merkle tree,
DigestAlgorithm
now returns aResult
type. - #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
) RefactoredUniversalSNARK
trait - #89 (
jf-primitives
) Use blst library for BLS signature/VRF - #91 (
jf-plonk
) Introducestruct BoolVar
whenever necessary and possible - #96 (
jf-plonk
) Introduce comparison gates - #107 (
jf-primitives
) Updatedcrypto_box
from0.7.1
to0.8.1
- #110 (workspace) Reorganized codebase structure
- Remove
jf-rescue
crate, 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,
transcript
andplonk-verifier
are now injf-plonk/circuit
. - Primitive gadgets, including
commitment
,el gamal
etc. 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-utils
is 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.
MerkleTreeScheme
is the abstraction of a static array accumulator,AppendableMerkleTreeScheme
is the abstraction of an appendable vector accumulator.UniversalMerkleTreeScheme
is the abstraction of a key-value map accumulator, which also supports non-membership query/proof.ForgetableMerkleTreeScheme
allows you to forget/remember some leafs from the memory.
- Implementation of new generic merkle tree:
MerkleTree
andUniversalMerkleTree
- A default rate-3 rescue merkle tree implementation is provided in
prelude
module. - Other example instantiation can be found in
example
module.
- 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
criterion
from0.3.1
to0.4.0
- Upgraded
- #146 (
jf-primitives
) Refactored Rescue sponge API:- Remove all
.*sponge.*
methods fromPermutation
. - Introduce
RescueCRHF
which takes oversponge_with_padding
andsponge_no_padding
fromPermutation
. - Introduce
RescuePRF
which takes overfull_state_keyed_sponge_with_padding
andfull_state_keyed_sponge_no_padding
fromPermutation
.
- 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
SpongeStateVar
to abstract overRescueStateVar
andRescueNonNativeStateVar
structs. - Unify
RescueGadget
andRescueNonNativeGadget
traits intoRescueGadget
.
- Introduce
- #158 (
jf-primitives
) RefactoredMerkleTreeGadget
API:- 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_member
andenforce_merkle_proof
. - Move the remaining methods to the internals of circuit implementation for
RescueMerkleTree
. - Implement
MerkleTreeGadget
forRescueMerkleTree
.
- Generic only over
- #169 (
jf-primitives
) Stabilize API effort- Introduced
trait CRHF
and moved current implementations understruct FixedLengthRescueCRHF, VariableLengthRescueCRHF
. - Introduced
trait CommitmentScheme
and moved current implementations understruct FixedLengthRescueCommitment
.
- Introduced
- #194 (all) Set MSVR of all crates to 1.64.
- (
jf-primitives
)zeroize
from1.3
to^1.5
- #76 (
jf-plonk
) Splitting polynomials are masked to ensure zero-knowledge of Plonk- Now
PlonkKzgSnark
use our own KZG10 implementation.
- Now
- #115 (
jf-relation
) Fix a bug inlogic_or
gate
- #85, #87 (all) Added
no_std
compliance - #116 (
jf-primitives
) Introduced newPolynomialCommitmentScheme
trait - #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
) AddDigestGadget
associated type toMerkleTreeGadget
.
- #105 (all) Trait bound relaxation
- #108 (
jf-utils
) Allowed more general input todeserialize_canonical_bytes!()
- #113 (
jf-plonk
) Corrected error type forPlonkVerifier
gadgets - #162 (
jf-utils
) Renamed#serde(with="field_elem")
to#serde(with="canonical")
- #177 (
jf-primitives
) Refactor multilinear PCS opening. - #197 (
jf-relation
) Addedno_std
attribute.
- #143 (
jf-utils
) Removedtagged_blob
, usetagged_base64::tagged
instead
v0.1.2-patch.1 - 2022-11-30
- #107 (
jf-primitives
) Updatedcrypto_box
from0.7.1
to0.8.1
- #149 (
jf-primitives
, nix)- Updated dependencies
crypto_box
from0.7.1
to0.8.1
zeroize
from1.3
to^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 supportconst
variables 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_xxx
tocheck_xxx
gadget 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
) AddedHashToGroup
support for both SW and TE curves
- #66 (dep) Updated
tagged-base64
reference url to reflect the Espresso Systems name change