2023-12-12 10:24:13 -08:00
|
|
|
# Changelog
|
|
|
|
All notable changes to this library will be documented in this file.
|
|
|
|
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
|
and this library adheres to Rust's notion of
|
|
|
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
|
|
|
|
## [Unreleased]
|
2024-01-26 11:30:42 -08:00
|
|
|
|
2024-08-12 14:23:27 -07:00
|
|
|
## [0.2.0] - 2024-08-12
|
|
|
|
|
|
|
|
### Changed
|
|
|
|
- Updated to `incrementalmerkletree` version `0.6`.
|
|
|
|
|
2024-03-24 18:19:30 -07:00
|
|
|
## [0.1.3] - 2024-03-25
|
|
|
|
|
2024-03-20 10:39:06 -07:00
|
|
|
### Added
|
|
|
|
- `impl {PartialOrd, Ord} for sapling_crypto::note::Nullifier`
|
2024-03-24 18:19:30 -07:00
|
|
|
- Additions under the `test-dependencies` feature flag:
|
|
|
|
- `sapling-crypto::tree::Node::random`
|
|
|
|
- `impl Distribution<sapling-crypto::tree::Node> for Standard`
|
2024-03-20 10:39:06 -07:00
|
|
|
|
2024-03-08 11:57:52 -08:00
|
|
|
## [0.1.2] - 2024-03-08
|
|
|
|
### Added
|
2024-03-08 09:54:28 -08:00
|
|
|
- `sapling_crypto::zip32::IncomingViewingKey`
|
|
|
|
- `sapling_crypto::zip32::DiversifiableFullViewingKey::to_external_ivk`
|
|
|
|
|
2024-02-15 11:42:19 -08:00
|
|
|
## [0.1.1] - 2024-02-15
|
2024-02-12 12:13:44 -08:00
|
|
|
### Fixed
|
|
|
|
- `sapling_crypto::builder::BundleType::num_outputs` now matches the previous
|
|
|
|
behaviour for Sapling bundle padding, by including dummy outputs if there are
|
|
|
|
no requested outputs but some requested spends, and `bundle_required` is set
|
|
|
|
to `false` (as in `BundleType::DEFAULT`).
|
|
|
|
|
2024-01-26 11:30:42 -08:00
|
|
|
## [0.1.0] - 2024-01-26
|
|
|
|
The crate has been completely rewritten. See [`zcash/librustzcash`] for the
|
|
|
|
history of this rewrite.
|
|
|
|
|
2023-12-12 10:24:13 -08:00
|
|
|
The entries below are relative to the `zcash_primitives::sapling` module as of
|
|
|
|
`zcash_primitives 0.13.0`.
|
|
|
|
|
|
|
|
### Added
|
2023-12-20 19:36:21 -08:00
|
|
|
- `sapling_crypto::Anchor`
|
2023-12-12 10:24:13 -08:00
|
|
|
- `sapling_crypto::BatchValidator` (moved from `zcash_proofs::sapling`).
|
|
|
|
- `sapling_crypto::SaplingVerificationContext` (moved from
|
|
|
|
`zcash_proofs::sapling`).
|
|
|
|
- `sapling_crypto::builder` (moved from
|
2023-12-18 14:48:43 -08:00
|
|
|
`zcash_primitives::transaction::components::sapling::builder`). Further
|
2023-12-12 10:24:13 -08:00
|
|
|
additions to this module:
|
|
|
|
- `UnauthorizedBundle`
|
|
|
|
- `InProgress`
|
|
|
|
- `{InProgressProofs, Unproven, Proven}`
|
|
|
|
- `{InProgressSignatures, Unsigned, PartiallyAuthorized}`
|
|
|
|
- `{MaybeSigned, SigningParts}`
|
2023-12-18 14:48:43 -08:00
|
|
|
- `SpendInfo`
|
|
|
|
- `OutputInfo`
|
2023-12-12 10:24:13 -08:00
|
|
|
- `ProverProgress`
|
2023-12-11 11:36:16 -08:00
|
|
|
- `BundleType`
|
2023-12-21 15:08:51 -08:00
|
|
|
- `SigningMetadata`
|
2023-12-18 14:48:43 -08:00
|
|
|
- `bundle` bundle builder function.
|
2023-12-12 10:24:13 -08:00
|
|
|
- `sapling_crypto::bundle` module:
|
|
|
|
- The following types moved from
|
|
|
|
`zcash_primitives::transaction::components::sapling`:
|
|
|
|
- `Bundle`
|
|
|
|
- `SpendDescription, SpendDescriptionV5`
|
|
|
|
- `OutputDescription, OutputDescriptionV5`
|
2023-12-21 15:08:51 -08:00
|
|
|
- `Authorization, Authorized`
|
2023-12-12 10:24:13 -08:00
|
|
|
- `GrothProofBytes`
|
|
|
|
- `Bundle::<InProgress<Unproven, _>>::create_proofs`
|
|
|
|
- `Bundle::<InProgress<_, Unsigned>>::prepare`
|
|
|
|
- `Bundle::<InProgress<_, PartiallyAuthorized>>::{sign, append_signatures}`
|
|
|
|
- `Bundle::<InProgress<Proven, PartiallyAuthorized>>::finalize`
|
|
|
|
- `Bundle::<InProgress<Proven, Unsigned>>::apply_signatures`
|
|
|
|
- `Bundle::try_map_authorization`
|
|
|
|
- `testing` module, containing the following functions moved from
|
|
|
|
`zcash_primitives::transaction::components::sapling::testing`:
|
|
|
|
- `arb_output_description`
|
|
|
|
- `arb_bundle`
|
|
|
|
- `sapling_crypto::circuit` module (moved from `zcash_proofs::circuit::sapling`).
|
|
|
|
Additional additions to this module:
|
|
|
|
- `{SpendParameters, OutputParameters}`
|
|
|
|
- `{SpendVerifyingKey, PreparedSpendVerifyingKey}`
|
|
|
|
- `{OutputVerifyingKey, PreparedOutputVerifyingKey}`
|
|
|
|
- `sapling_crypto::constants` module.
|
|
|
|
- `sapling_crypto::keys`:
|
|
|
|
- `SpendAuthorizingKey`
|
|
|
|
- `SpendValidatingKey`
|
|
|
|
- `sapling_crypto::note_encryption`:
|
|
|
|
- `CompactOutputDescription` (moved from
|
|
|
|
`zcash_primitives::transaction::components::sapling`).
|
|
|
|
- `SaplingDomain::new`
|
|
|
|
- `Zip212Enforcement`
|
|
|
|
- `sapling_crypto::prover::{SpendProver, OutputProver}`
|
|
|
|
- `sapling_crypto::tree::Node::{from_bytes, to_bytes}`
|
|
|
|
- `sapling_crypto::value`:
|
2023-12-18 14:48:43 -08:00
|
|
|
- `NoteValue::ZERO`
|
2023-12-12 10:24:13 -08:00
|
|
|
- `ValueCommitTrapdoor::from_bytes`
|
|
|
|
- `impl Sub<TrapdoorSum> for TrapdoorSum`
|
|
|
|
- `impl Sub<CommitmentSum> for CommitmentSum`
|
|
|
|
- `sapling_crypto::zip32` module (moved from `zcash_primitives::zip32::sapling`).
|
|
|
|
- `impl Debug for sapling_crypto::keys::{ExpandedSpendingKey, ProofGenerationKey}`
|
|
|
|
- Test helpers, behind the `test-dependencies` feature flag:
|
|
|
|
- `sapling_crypto::prover::mock::{MockSpendProver, MockOutputProver}`
|
|
|
|
|
|
|
|
### Changed
|
|
|
|
- `sapling_crypto`:
|
|
|
|
- `BatchValidator::validate` now takes the `SpendVerifyingKey` and
|
|
|
|
`OutputVerifyingKey` newtypes.
|
|
|
|
- `SaplingVerificationContext::new` now always creates a context with ZIP 216
|
|
|
|
rules enforced, and no longer has a boolean for configuring this.
|
|
|
|
- `SaplingVerificationContext::{check_spend, final_check}` now use the
|
|
|
|
`redjubjub` crate types for `rk`, `spend_auth_sig`, and `binding_sig`.
|
|
|
|
- `SaplingVerificationContext::{check_spend, check_output}` now take
|
|
|
|
the `PreparedSpendVerifyingKey` and `PreparedOutputVerifyingKey`
|
|
|
|
newtypes.
|
|
|
|
- `SaplingVerificationContext::final_check` now takes its `value_balance`
|
2023-12-12 11:54:27 -08:00
|
|
|
argument as `V: Into<i64>` instead of
|
|
|
|
`zcash_primitives::transaction::components::Amount`.
|
2023-12-12 10:24:13 -08:00
|
|
|
- `sapling_crypto::address::PaymentAddress::create_note` now takes its `value`
|
|
|
|
argument as a `NoteValue` instead of as a bare `u64`.
|
|
|
|
- `sapling_crypto::builder`:
|
2023-12-19 19:39:56 -08:00
|
|
|
- `SaplingBuilder` has been renamed to `Builder`
|
2023-12-21 15:08:51 -08:00
|
|
|
- `MaybeSigned::SigningMetadata` has been renamed to `MaybeSigned::SigningParts`
|
2023-12-19 19:39:56 -08:00
|
|
|
- `Builder` no longer has a `P: zcash_primitives::consensus::Parameters`
|
2023-12-12 11:54:27 -08:00
|
|
|
type parameter.
|
2023-12-19 19:39:56 -08:00
|
|
|
- `Builder::new` now takes a `Zip212Enforcement` argument instead of a
|
2023-12-12 11:54:27 -08:00
|
|
|
`P: zcash_primitives::consensus::Parameters` argument and a target height.
|
2023-12-20 18:13:27 -08:00
|
|
|
It also now takes as an argument the Sapling anchor to be used for all
|
|
|
|
spends in the bundle.
|
2023-12-19 19:39:56 -08:00
|
|
|
- `Builder::add_spend` now takes `extsk` by reference. Also, it no
|
2023-12-12 10:24:13 -08:00
|
|
|
longer takes a `diversifier` argument as the diversifier may be obtained
|
2023-12-20 18:13:27 -08:00
|
|
|
from the note. All calls to `add_spend` are now required to use an anchor
|
|
|
|
that corresponds to the anchor provided at builder construction.
|
2023-12-19 19:39:56 -08:00
|
|
|
- `Builder::add_output` now takes an `Option<[u8; 512]>` memo instead
|
2023-12-12 10:24:13 -08:00
|
|
|
of a `MemoBytes`.
|
2023-12-19 19:39:56 -08:00
|
|
|
- `Builder::build` no longer takes a prover, proving context, progress
|
2023-12-12 10:24:13 -08:00
|
|
|
notifier, or target height. Instead, it has `SpendProver, OutputProver`
|
|
|
|
generic parameters and returns `(UnauthorizedBundle, SaplingMetadata)`. The
|
|
|
|
caller can then use `Bundle::<InProgress<Unproven, _>>::create_proofs` to
|
|
|
|
create spend and output proofs for the bundle.
|
2023-12-19 19:39:56 -08:00
|
|
|
- `Builder::build` now takes a `BundleType` argument that instructs
|
2023-12-11 11:36:16 -08:00
|
|
|
it how to pad the bundle with dummy outputs.
|
2023-12-12 10:24:13 -08:00
|
|
|
- `Error` has new error variants:
|
|
|
|
- `Error::DuplicateSignature`
|
|
|
|
- `Error::InvalidExternalSignature`
|
|
|
|
- `Error::MissingSignatures`
|
2023-12-11 11:36:16 -08:00
|
|
|
- `Error::BundleTypeNotSatisfiable`
|
2023-12-12 10:24:13 -08:00
|
|
|
- `sapling_crypto::bundle`:
|
|
|
|
- `Bundle` now has a second generic parameter `V`.
|
2023-12-12 11:54:27 -08:00
|
|
|
- `Bundle::value_balance` now returns `&V` instead of
|
|
|
|
`&zcash_primitives::transaction::components::Amount`.
|
2023-12-21 15:08:51 -08:00
|
|
|
- `Bundle::map_authorization` now takes a context argument and explicit
|
|
|
|
functions for each mappable field, rather than a `MapAuth` value, in
|
|
|
|
order to simplify handling of context values.
|
2023-12-12 10:24:13 -08:00
|
|
|
- `Authorized::binding_sig` now has type `redjubjub::Signature<Binding>`.
|
|
|
|
- `Authorized::AuthSig` now has type `redjubjub::Signature<SpendAuth>`.
|
|
|
|
- `SpendDescription::temporary_zcashd_from_parts` now takes `rk` as
|
|
|
|
`redjubjub::VerificationKey<SpendAuth>` instead of
|
|
|
|
`sapling_crypto::redjubjub::PublicKey`.
|
|
|
|
- `SpendDescription::rk` now returns `&redjubjub::VerificationKey<SpendAuth>`.
|
|
|
|
- `SpendDescriptionV5::into_spend_description` now takes `spend_auth_sig` as
|
|
|
|
`redjubjub::Signature<SpendAuth>` instead of
|
|
|
|
`sapling_crypto::redjubjub::Signature`.
|
|
|
|
- `testing::arb_bundle` now takes a `value_balance: V` argument.
|
|
|
|
- `sapling_crypto::circuit::ValueCommitmentOpening::value` is now represented as
|
|
|
|
a `NoteValue` instead of as a bare `u64`.
|
|
|
|
- `sapling_crypto::keys`:
|
|
|
|
- `DecodingError` has a new variant `UnsupportedChildIndex`.
|
|
|
|
- `ExpandedSpendingKey.ask` now has type `SpendAuthorizingKey`.
|
|
|
|
- `ProofGenerationKey.ak` now has type `SpendValidatingKey`.
|
|
|
|
- `ViewingKey.ak` now has type `SpendValidatingKey`.
|
|
|
|
- `sapling_crypto::note_encryption`:
|
2023-12-12 11:54:27 -08:00
|
|
|
- `SaplingDomain` no longer has a `P: zcash_primitives::consensus::Parameters`
|
|
|
|
type parameter.
|
2023-12-12 10:24:13 -08:00
|
|
|
- The following methods now take a `Zip212Enforcement` argument instead of a
|
2023-12-12 11:54:27 -08:00
|
|
|
`P: zcash_primitives::consensus::Parameters` argument:
|
2023-12-12 10:24:13 -08:00
|
|
|
- `plaintext_version_is_valid`
|
|
|
|
- `try_sapling_note_decryption`
|
|
|
|
- `try_sapling_compact_note_decryption`
|
|
|
|
- `try_sapling_output_recovery_with_ock`
|
|
|
|
- `try_sapling_output_recovery`
|
2023-12-12 11:54:27 -08:00
|
|
|
- `SaplingDomain::Memo` now has type `[u8; 512]` instead of
|
|
|
|
`zcash_primitives::memo::MemoBytes`.
|
2023-12-12 10:24:13 -08:00
|
|
|
- `sapling_note_encryption` now takes `memo` as a `[u8; 512]` instead of
|
2023-12-12 11:54:27 -08:00
|
|
|
`zcash_primitives::memo::MemoBytes`.
|
|
|
|
- The following methods now return `[u8; 512]` instead of
|
|
|
|
`zcash_primitives::memo::MemoBytes`:
|
2023-12-12 10:24:13 -08:00
|
|
|
- `try_sapling_note_decryption`
|
|
|
|
- `try_sapling_output_recovery_with_ock`
|
|
|
|
- `try_sapling_output_recovery`
|
|
|
|
- `sapling_crypto::util::generate_random_rseed` now takes a `Zip212Enforcement`
|
2023-12-12 11:54:27 -08:00
|
|
|
argument instead of a `P: zcash_primitives::consensus::Parameters` argument
|
|
|
|
and a height.
|
2023-12-12 10:24:13 -08:00
|
|
|
- `sapling_crypto::value`:
|
|
|
|
- `TrapdoorSum::into_bsk` now returns `redjubjub::SigningKey<Binding>` instead
|
|
|
|
of `sapling_crypto::redjubjub::PrivateKey`.
|
|
|
|
- `CommitmentSum::into_bvk` now returns `redjubjub::VerificationKey<Binding>`
|
|
|
|
instead of `sapling_crypto::redjubjub::PublicKey`.
|
|
|
|
|
|
|
|
### Removed
|
|
|
|
- `sapling_crypto::bundle`:
|
|
|
|
- `SpendDescription::{read, read_nullifier, read_rk, read_spend_auth_sig}`
|
|
|
|
- `SpendDescription::{write_v4, write_v5_without_witness_data}`
|
|
|
|
- `SpendDescriptionV5::read`
|
|
|
|
- `OutputDescription::read`
|
|
|
|
- `OutputDescription::{write_v4, write_v5_without_proof}`
|
|
|
|
- `OutputDescriptionV5::read`
|
2023-12-21 15:08:51 -08:00
|
|
|
- `MapAuth` trait
|
2023-12-18 14:48:43 -08:00
|
|
|
- `sapling_crypto::builder`:
|
|
|
|
- `SpendDescriptionInfo`
|
2023-12-12 10:24:13 -08:00
|
|
|
- `sapling_crypto::note_encryption::SaplingDomain::for_height` (use
|
|
|
|
`SaplingDomain::new` instead).
|
|
|
|
- `sapling_crypto::redjubjub` module (use the `redjubjub` crate instead).
|
|
|
|
- `sapling_crypto::spend_sig` (use `redjubjub::SigningKey::{randomize, sign}`
|
|
|
|
instead).
|
2023-12-15 09:01:35 -08:00
|
|
|
- `sapling_crypto::builder::SaplingBuilder::bundle_output_count`
|
2023-12-12 10:24:13 -08:00
|
|
|
|
|
|
|
## [0.0.1] - 2017-12-06
|
|
|
|
Initial release to reserve crate name.
|