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_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
- #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
AppendableMerkleTreeScheme
to 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_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
- #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-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 leaves 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