Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
e81a966
Update MSRV to 1.85.1
nuttycom Apr 17, 2026
872a219
Migrate from yanked `core2` library to `corez`
nuttycom Apr 17, 2026
b0bf267
Merge pull request #482 from zcash/corez_migration
nuttycom Apr 17, 2026
44de07d
Return DepthOverflow error instead of panicking at depth 255
MavenRain Apr 2, 2026
8a23aa2
refactor: turn repository into cargo workspace
ebfull Apr 10, 2026
2d9a186
refactor: turn root package into `orchard_internal` crate; expose API…
ebfull Apr 10, 2026
9bcc140
nit: hide orchard_internal crate name from public `Address` docs code…
ebfull Apr 10, 2026
8e9e736
fix: specify `orchard_internal` version via `[workspace.dependencies]`
nuttycom Apr 17, 2026
af5beb4
fix: resolve `public/README.md` via symlink to root `README.md`
nuttycom Apr 17, 2026
efb1350
Merge pull request #479 from MavenRain/fix/464-depth-overflow
nuttycom Apr 17, 2026
58aca49
Use `#![forbid(unsafe_code)]` instead of `#![deny(unsafe_code)]`
nuttycom Apr 17, 2026
6c6eb9d
Restore `src/value.rs` module-level documentation
czarcas7ic Apr 19, 2026
cc51ea3
Bump README MSRV to 1.85.1
czarcas7ic Apr 19, 2026
5945216
Fix `Cargo.toml` author emails
czarcas7ic Apr 19, 2026
a067980
Update `public/LICENSE-MIT` copyright
czarcas7ic Apr 19, 2026
bcadd71
Symlink `public/katex-header.html` to root
czarcas7ic Apr 19, 2026
0389ec3
Unblock no_std CI against typenum 1.20+
czarcas7ic Apr 19, 2026
9b27cd2
Merge pull request #3 from valargroup/adam/address-pr-480-review
ebfull Apr 20, 2026
9bb43b6
copyright: update and consolidate copyright information
ebfull Apr 20, 2026
106d2d1
doc: deduplicate / propagate value module documentation
ebfull Apr 20, 2026
7e90bf2
Merge pull request #480 from ebfull/orchard_internal
nuttycom Apr 20, 2026
a6927d6
chore: clarify that CHANGELOG.md applies to the `orchard` crate speci…
ebfull Apr 21, 2026
0645747
chore: make `orchard_internal` version detached from `orchard` versio…
ebfull Apr 21, 2026
f119a41
Merge pull request #490 from zcash/detached_internal_versions
nuttycom Apr 21, 2026
41babaa
Update to plotters 0.3.7 to resolve test panic.
nuttycom Apr 20, 2026
27393f3
consensus: Reject identity rk in Action::from_parts and Instance::fro…
daira Apr 22, 2026
e8dd8ec
circuit: Make Instance fields private behind `pub(crate)` accessors.
daira Apr 22, 2026
0fce1f2
test: Cover pczt IdentityRk error paths.
daira Apr 22, 2026
4a106e1
Merge pull request #492 from daira/alt/rk-identity-at-constructors
nuttycom Apr 22, 2026
ae56960
Revert orchard_internal crate split.
ebfull Apr 22, 2026
081c2ac
Merge pull request #493 from ebfull/undo-orchard-internal
nuttycom Apr 22, 2026
2b20623
Release orchard v0.13.0
nuttycom Apr 22, 2026
7a1277e
Merge pull request #494 from zcash/release-0.13.0
nuttycom Apr 22, 2026
c0b6b91
feat: add unstable-voting-circuits feature to widen internals
czarcas7ic Apr 22, 2026
f9f35ab
docs: replace `#[allow(missing_docs)]` with actual doc comments
daira Apr 23, 2026
4dc6386
Merge pull request #18 from daira/missing-docs-unstable-voting-circuits
czarcas7ic Apr 23, 2026
21d85e8
Restore visibility of zero() to pub(crate); Change visibility in a se…
ValarDragon Apr 23, 2026
d05a1f6
Merge pull request #488 from valargroup/adam/visibility-widening
ebfull Apr 24, 2026
27d719a
feat: add SpendAuthG fixed-base multiplication support
czarcas7ic Apr 23, 2026
0cbaa0d
Fix inlining ValueCommitV
ValarDragon Apr 24, 2026
1117335
Correct rationale and tighten assertions in `spend_auth_g_short_route…
p0mvn Apr 26, 2026
b0db769
Update CHANGELOG.md
czarcas7ic Apr 26, 2026
545d51e
Merge pull request #489 from valargroup/adam/spend-auth-g-fixed-base
ebfull Apr 26, 2026
146b2d0
value: Replace NoteValue::zero() with NoteValue::ZERO const
czarcas7ic Apr 26, 2026
2d88d48
Merge pull request #495 from valargroup/dev/note_value_zero_const
ebfull Apr 26, 2026
f8915bc
Release orchard v0.13.1
czarcas7ic Apr 27, 2026
a5441bf
Merge pull request #498 from valargroup/adam/release-0.13.1
ebfull Apr 27, 2026
2a90ab8
refactor: drop legacy FixedPoint impls for NullifierK and ValueCommitV
p0mvn Apr 25, 2026
53014be
refactor: collapse OrchardFixedBases to a unit struct
ebfull Apr 27, 2026
c6c93d5
Merge pull request #496 from valargroup/valar/drop-legacy-fixed-point…
ebfull Apr 27, 2026
2a5a80a
Add patch dependency on zodl-inc/halo2-security-fixes@32a87582dfb0ad9…
nuttycom May 30, 2026
af1b91e
CI: Only run tests on merge with target branch, not bare branch
str4d Jun 1, 2026
6d22935
Check epk validity in `Action::from_parts`.
nuttycom May 31, 2026
419c45a
Update `Action` generators to construct valid TransmittedNoteCipherte…
nuttycom May 31, 2026
e307ef0
Bound Orchard proof size when constructing a bundle from untrusted pa…
nuttycom May 31, 2026
472b777
Merge pull request #6 from zodl-inc/action_check_epk_validity
str4d Jun 1, 2026
1f673a1
Merge pull request #7 from zodl-inc/bound_orchard_proof_size
str4d Jun 1, 2026
8c0c71e
Thread CircuitVersion through the Action circuit for the var-base-mul…
daira May 31, 2026
93c8987
Implement core::error::Error instead of std::error::Error for new err…
nuttycom Jun 1, 2026
5dbb50c
Proof size enforcement must be lenient prior to NU6.2
nuttycom Jun 1, 2026
6e76352
Merge branch 'conditional_proof_size_enforcement' into release-0.14.0
str4d Jun 1, 2026
db628ae
Make the Orchard circuit version a runtime value
daira Jun 2, 2026
adea33e
Allow the Orchard builder to build for a chosen circuit version
daira Jun 2, 2026
51956fb
Gate the circuit-dependent benches on the `circuit` feature
daira Jun 2, 2026
602f255
Merge pull request #13 from zodl-inc/expose-proving-key-version
str4d Jun 2, 2026
549bd5b
Expose the circuit version of an unproven Orchard bundle
daira Jun 2, 2026
9c1b5af
Merge branch 'expose-unproven-circuit-version' into release-0.14.0
nuttycom Jun 2, 2026
994dad2
Release orchard version 0.14.0
nuttycom Jun 2, 2026
e7b7b88
Update changelog for 0.14.0 release.
nuttycom Jun 3, 2026
8de1724
Update dependencies for orchard 0.14.0 release.
nuttycom Jun 3, 2026
82e0739
Merge pull request #500 from zcash/release-0.14.0
nuttycom Jun 3, 2026
5723ae4
Merge branch 'zcash-main' into merge_upstream_20260609
ConstanceBeguier Jun 16, 2026
ac82e19
Update halo2 in Cargo.toml
ConstanceBeguier Jun 16, 2026
1e5e13e
Fix clippy
ConstanceBeguier Jun 16, 2026
c881000
Fix new tests in src/action.rs
ConstanceBeguier Jun 16, 2026
7842b2c
Fix tests
ConstanceBeguier Jun 16, 2026
72784d7
Update expected_proof_size
ConstanceBeguier Jun 16, 2026
44afad1
Fix intra-doc links
ConstanceBeguier Jun 16, 2026
33f10e3
Update README
ConstanceBeguier Jun 16, 2026
e187c15
Move circuit_data folder
ConstanceBeguier Jun 17, 2026
05040ba
Simplify expected_proof_size implementation
ConstanceBeguier Jun 17, 2026
bb309ad
Prevent ZSA proofs on insecure ECC chips
ConstanceBeguier Jun 23, 2026
045ca8a
Add a comment
ConstanceBeguier Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
name: CI checks

on: [push, pull_request]
on:
pull_request:
push:
branches: main

jobs:
test:
Expand Down
145 changes: 144 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,156 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to Rust's notion of
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [0.14.0] - 2026-06-02

### Added
- `orchard::action::ActionFromPartsError`
- `orchard::Proof::expected_proof_size`, the canonical byte length of a proof
for a given number of actions.
- `orchard::bundle::BundleError`
- `impl From<orchard::action::ActionFromPartsError> for orchard::pczt::TxExtractorError`
- `impl From<orchard::bundle::BundleError> for orchard::pczt::TxExtractorError`
- `orchard::bundle::ProofSizeEnforcement`
- `orchard::Bundle::<Authorized, V>::try_from_parts`, which constructs an
authorized bundle while rejecting a proof whose length is not the canonical
size for the bundle's number of actions (GHSA-2x4w-pxqw-58v9). This is now the
only way to construct a `Bundle<Authorized, _>`, so an authorized bundle can
no longer hold a proof padded with arbitrary data when proof size enforcement
is strict.
- `orchard::Bundle::<EffectsOnly, V>::from_parts`
- `orchard::circuit::OrchardCircuitVersion`, an enum selecting the Action circuit
version, with variants `InsecurePreNu6_2` and `FixedPostNu6_2`.
- `orchard::circuit::ProvingKey::build_for_version` and
`orchard::circuit::VerifyingKey::build_for_version`, which build the key for a
given `OrchardCircuitVersion`; `build()` continues to build the fixed circuit.
`ProvingKey::build_for_version` can build the proving key for the pre-NU6.2
(insecure) circuit.
- `orchard::circuit::ProvingKey::circuit_version`, the version the proving key
produces proofs for. `Proof::create` now returns an error if a circuit's
version does not match the proving key's.
- `orchard::circuit::Circuit::from_action_context_for_version`, like
`from_action_context` but building the circuit for a chosen
`OrchardCircuitVersion`.
- `orchard::builder::Builder::new_for_version` (requires the `circuit` feature),
which constructs a builder that produces proofs for a given
`OrchardCircuitVersion` (`Builder::new` uses `FixedPostNu6_2`).
- `orchard::builder::bundle_for_version` (requires the `circuit` feature), like
`bundle` but building the Action circuits for a given `OrchardCircuitVersion`.
- `orchard::Bundle::<InProgress<Unproven, S>, V>::circuit_version` (requires the
`circuit` feature), the `OrchardCircuitVersion` the bundle's actions were built
for, so a caller can select a matching `ProvingKey` without tracking it
separately.

### Changed
- Updated to `halo2_gadgets 0.5.0`
- `orchard::action::Action::from_parts` now returns
`Result<Self, orchard::action::ActionFromPartsError>` instead of `Option<Self>`.
- `orchard::pczt::TxExtractorError` has added variants `InvalidEpk` and
`NonCanonicalProofSize`. The Transaction Extractor role now rejects a PCZT
whose `zkproof` is not the canonical size for its number of actions
(GHSA-2x4w-pxqw-58v9).
- `unstable-voting-circuits`-only:
- `orchard::constants::OrchardFixedBases` is now a unit struct rather than a
3-variant enum. It is a trait carrier for the halo2_gadgets `FixedPoints`
impl and was never constructed as a value; the concrete fixed bases live
in `OrchardFixedBasesFull`, `OrchardBaseFieldBases`, and
`OrchardShortScalarBases`, which are unchanged.

### Removed
- `orchard::Bundle::from_parts`. Construct a bundle through the
authorization-specific constructor instead: `Bundle::<EffectsOnly, V>::from_parts`,
or `Bundle::<Authorized, V>::try_from_parts` for an authorized bundle.
- `unstable-voting-circuits`-only:
- The five dead `From<X> for OrchardFixedBases` conversions (from
`OrchardFixedBasesFull`, `NullifierK`, `ValueCommitV`,
`OrchardBaseFieldBases`, `OrchardShortScalarBases`). None were reachable;
in-circuit dispatch goes through the per-slot enums.
- `impl FixedPoint<pallas::Affine> for NullifierK` and
`impl FixedPoint<pallas::Affine> for ValueCommitV`. After the 0.13.1
enum refactor, dispatch routes through `OrchardBaseFieldBases::NullifierK`
and `OrchardShortScalarBases::ValueCommitV`, leaving the standalone
unit-struct impls dead.

### Fixed
- The update to `halo2_gadgets 0.5.0` fixes a critical vulnerability related to
its use in the Orchard circuit. Please see the release notes for
`halo2_gadgets 0.5.0` for additional details.
- An authorized `Bundle` or a PCZT can no longer carry a `zkproof` padded with
arbitrary trailing data, and an `Action` can no longer be constructed with an
`epk` that does not encode a non-identity Pallas point (GHSA-2x4w-pxqw-58v9).
See the `Bundle::<Authorized, V>::try_from_parts`,
`Proof::expected_proof_size`, `Action::from_parts`, and `TxExtractorError`
entries under `Added` and `Changed` above for the API surface of these checks.

## [0.13.1] - 2026-04-27

### Added
- `orchard::{L_ORCHARD_BASE, L_ORCHARD_SCALAR, L_VALUE}`, the bit-length
parameters of the Orchard base field, scalar field, and value encoding
as defined in the Zcash protocol specification.
- `orchard::value::NoteValue::ZERO`, a `const NoteValue` equal to zero.
- The following modules and APIs are available behind the
`unstable-voting-circuits` feature flag to support downstream
voting-circuit development. These temporary APIs are not covered by the
crate's semver stability guarantees and may change in any future release:
- Modules: `orchard::{constants, spec}`,
`orchard::circuit::{commit_ivk, commit_ivk::gadgets, note_commit,
note_commit::gadgets, gadget::add_chip}`,
`orchard::note::{commitment, nullifier}`.
- Address and circuit helpers: `Address::{g_d, pk_d}`,
`circuit::gadget::{AddInstruction, assign_free_advice, derive_nullifier,
commit_ivk, note_commit}`,
`circuit::gadget::add_chip::{AddConfig, AddChip}` and
`AddChip::{configure, construct}`,
`CommitIvkChip::{configure, construct}`,
`NoteCommitChip::{configure, construct}`.
- Fixed bases: `orchard::constants::OrchardFixedBases` has three
variants: `Full(OrchardFixedBasesFull)` for full-width scalar
multiplication, `Base(OrchardBaseFieldBases)` for base-field
scalars, and `Short(OrchardShortScalarBases)` for short signed
scalars. `OrchardBaseFieldBases` covers `NullifierK` and
`SpendAuthGBase`; `OrchardShortScalarBases` covers `ValueCommitV`
and `SpendAuthGShort`. `From<NullifierK>`, `From<ValueCommitV>`,
`From<OrchardFixedBasesFull>`, `From<OrchardBaseFieldBases>`, and
`From<OrchardShortScalarBases>` conversions to `OrchardFixedBases`
are provided.
- Key, note, tree, and value APIs: `SpendingKey::random`,
`SpendAuthorizingKey::derive_inner`, `NullifierDerivingKey` and
`CommitIvkRandomness` and their `inner` methods,
`FullViewingKey::{nk, rivk}`,
`DiversifiedTransmissionKey::{inner, to_bytes}`,
`orchard::note::NoteCommitTrapdoor` and `NoteCommitTrapdoor::inner`,
`Rho::{from_nf_old, into_inner}`, `RandomSeed::{psi, rcm}`,
`Note::{new, dummy}`, `NoteCommitment::inner`,
`ExtractedNoteCommitment::inner`, `Nullifier::{from_inner, inner}`,
`NonIdentityPallasPoint` and `NonIdentityPallasPoint::from_bytes`,
`MerklePath::dummy`, and `MerkleHashOrchard::inner`.

## [0.13.0] - 2026-04-22

### Added
- `orchard::primitives::redpallas::VerificationKey<T>::is_identity`, which
returns `true` if the verification key is the identity `pallas::Point`.
- `orchard::primitives::redpallas::testing::arb_valid_spendauth_keypair`
(under the `test-dependencies` feature): a uniformly-distributed valid
`(rsk, rk)` key pair with non-identity `rk`.

### Changed
- MSRV is now 1.85.1
- Migrated from yanked `core2` library to `corez`
- `orchard::pczt::Bundle::extract` now takes its `self` argument by
reference instead of by value.
- `orchard::zip32::Error` has added variant `MaxDerivationDepth`
- `orchard::Action::from_parts` and `orchard::circuit::Instance::from_parts`
now return `Option<Self>`, yielding `None` when `rk` is the identity
`pallas::Point`. Callers that previously treated the return as `Self`
must now handle the `None` case. This aligns the crate with the
consensus rule introduced in zcashd v6.12.1 and Zebra 4.3.1 (see
<https://zodl.com/zcashd-zebra-april-2026-disclosure/> and
<https://zfnd.org/zebra-4-3-1-critical-security-fixes-dockerized-mining-and-ci-hardening/>);
the Zcash protocol specification will be updated to match.
- `orchard::pczt::TxExtractorError` has added variant `IdentityRk`.
- `orchard::pczt::ProverError` has added variant `IdentityRk`.

## [0.12.0] - 2025-12-05

Expand Down
Loading
Loading