Kris Nuttycombe
2945905d52
Implement manual serialization for incremental Merkle tree components.
...
This also adds parsing of the legacy CommitmentTree format,
to permit easy migration of persisted data.
2021-08-05 09:32:44 -06:00
str4d
c02931dc82
Tweak test comment
2021-07-30 20:35:23 +01:00
Jack Grigg
00b369b2a4
zcash_address: Include HRP inside Unified Address Padding bytes
...
Closes zcash/librustzcash#418 .
2021-07-30 15:34:36 +01:00
Jack Grigg
b875f6c34b
zcash_address: Fix clippy lint by using matches! macro
2021-07-12 21:17:25 +01:00
Jack Grigg
8527dcbc32
zcash_address: Remove outdated unified::Receiver documentation
...
Receiver ordering is now explicitly defined by Typecode, and Receiver
is now a public type.
2021-07-12 21:11:24 +01:00
Jack Grigg
478625f72d
zcash_address: Add UA test cases for truncation and invalid padding
2021-07-12 20:56:35 +01:00
Jack Grigg
77d1f0c778
zcash_address: Invert Typecode::is_shielded to Typecode::is_transparent
...
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-07-12 20:19:26 +01:00
Jack Grigg
060a15eaf8
zcash_address: Enable constructing a unified::Address from Vec<Receiver>
...
This enforces the same structural validity checks as at parsing time.
2021-07-12 13:39:01 +01:00
Jack Grigg
384af079a8
zcash_address: Add `unified::Address::receivers{_as_parsed}` APIs
...
These expose the receivers in sorted order, and in parsed order.
2021-07-12 13:35:06 +01:00
Jack Grigg
b175b9bec9
zcash_address: Use preference ordering for Receivers
2021-07-12 13:34:44 +01:00
Jack Grigg
7708b27202
zcash_address: Enforce UA structural validity checks
2021-07-12 12:10:23 +01:00
Jack Grigg
cd94b41d61
zcash_address: Introduce UA-specific parser error type
2021-07-12 11:45:25 +01:00
Jack Grigg
01a8dba450
zcash_address: Add a Typecode enum
2021-07-12 11:42:49 +01:00
Jack Grigg
752ee442f8
zcash_address: Add Unified Address test vectors
2021-06-18 20:06:02 +01:00
Jack Grigg
c7c79d266e
zcash_note_encryption: Add `ShieldedOutput::ephemeral_key() -> EphemeralKeyBytes`
...
This replaces the `ShieldedOutput::epk() -> &Domain::EphemeralPublicKey`
which could not be satisfied by output types that did not parse epk.
2021-06-10 18:35:19 +01:00
str4d
2f3e4989ba
Merge pull request #352 from str4d/zcash_address
...
New component: zcash_address crate
2021-06-07 00:36:48 +01:00
Jack Grigg
af02e1142b
zcash_address: Fix clippy lint
2021-06-07 00:13:21 +01:00
str4d
1590565f04
zcash_address: Minor cleanups
...
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-06-06 23:58:52 +01:00
str4d
f36034cfac
zcash_address: Use exhaustive matching in Display impl
...
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-06-06 23:54:11 +01:00
Jack Grigg
1222391dd7
Migrate to bitvec 0.22, ff 0.10, etc.
...
Requires patching three dependencies:
- bellman is pending a new release.
- nom is part of the funty breakage; we are blocking on a new release.
- orchard is in development.
2021-06-04 22:02:48 +01:00
Jack Grigg
eba6f417fe
zcash_note_encryption: Doc fixes
2021-05-29 00:15:25 +01:00
Jack Grigg
362838c3fa
zcash_note_encryption: Fix array size in Domain::extract_{esk, pk_d}
...
Decrypted output size is `OUT_PLAINTEXT_BYTES`, which the decryptor
can always provide (either by decrypting into the correct size array
as now, or truncating the buffer before passing it to the domain).
2021-05-28 23:48:03 +01:00
Jack Grigg
f6705f23c3
zcash_note_encryption: Add ovk recovery API
2021-05-28 23:45:23 +01:00
Jack Grigg
ae43e6c074
zcash_note_encryption: Pass cmstar_bytes to Domain::derive_ock
...
PRF^ock in the spec takes cm* as a byte array.
2021-05-28 23:41:13 +01:00
Jack Grigg
ee2b96c82d
zcash_note_encryption: s/TryFrom/From on ExtractedCommitmentBytes bound
...
This was left over from an earlier refactor where we could call a domain
API to extract cmstar from a note commitment (which could fail for
Orchard). This part of extraction was subsequently refactored into the
domain logic (and is rejected earlier for Orchard). The resulting bound
is wrong because it's always possible to serialize a scalar.
2021-05-28 22:57:48 +01:00
Jack Grigg
16627b4569
zcash_note_encryption: Enforce ZIP 212 check on esk from outPlaintext
...
It needs to equal the esk derived from the note (for v2 note plaintexts).
2021-05-28 22:33:00 +01:00
Jack Grigg
ff94f66d8e
zcash_address: Fix padding and F4Jumble positions in Address::to_bytes
...
These need to be applied to the entire UA encoding, not to the encoding
of each individual receiver.
2021-05-25 21:24:47 +01:00
Jack Grigg
ff8695de03
zcash_address: Add failing test showing unified::Address encoding bug
2021-05-25 21:24:47 +01:00
str4d
c2b57048bf
Update components/zcash_address/README.md
...
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-05-25 16:37:25 +01:00
Jack Grigg
e982d7211f
zcash_address: Implement Unified Address encoding / decoding
2021-05-20 22:50:59 +01:00
Jack Grigg
6717cd821c
Move F4Jumble implementation into zcash_address
2021-05-20 22:50:59 +01:00
Jack Grigg
ae2b8bfd6d
zcash_address: Replace Orchard address encodings with Unified Addresses
...
This commit removes the now-undefined Orchard encoding logic, and adds
the general Bech32m encoding/decoding logic for Unified Addresses. The
internal data format of Unified Addresses is not correct in this commit.
2021-05-20 22:50:59 +01:00
Jack Grigg
9f7398cd05
zcash_address: Add convert::ToAddress helper trait
2021-05-20 14:54:27 +01:00
Jack Grigg
ce8797e4b1
zcash_address: impl {Clone, Copy, Eq, Hash} for ZcashAddress
2021-05-20 14:54:27 +01:00
Jack Grigg
ff07eeaabb
zcash_address: Document ZcashAddress::convert
2021-05-20 14:54:27 +01:00
Jack Grigg
b9f704955a
zcash_address: Move ZcashAddress::convert into root
...
Using two separate `impl ZcashAddress` blocks resulted in separate
blocks in the documentation, which is unnecessary.
2021-05-20 14:54:27 +01:00
Jack Grigg
c7fcee27a2
zcash_address: Add ZcashAddress::try_from_encoded method
...
This places parsing documentation front and centre, while also making
it clear that `str::parse` is the anticipated main entry point.
2021-05-20 14:54:27 +01:00
Jack Grigg
f7b1058171
zcash_address: Extend MaybeZcash heuristics to 64-byte addresses
2021-05-20 14:54:27 +01:00
Jack Grigg
a366460157
zcash_address: ZcashAddress::convert() -> T: FromAddress
...
This enables easy conversion of an encoded Zcash address to a target
type, with automatic handling of Zcash address types that are not
supported by the target.
2021-05-20 14:54:27 +01:00
Jack Grigg
ec77175d2b
zcash_address: Add address-encoding support
...
This provides round-trip encoding for Zcash addresses.
2021-05-20 14:54:27 +01:00
Jack Grigg
c754363c07
zcash_address: Initial empty library crate
2021-05-20 14:54:25 +01:00
Jack Grigg
5623e02a7c
Migrate to ff 0.9 et al.
2021-05-19 18:29:37 +01:00
Jack Grigg
28a45028ab
cargo fmt
2021-04-16 14:03:55 +12:00
Daira Hopwood
dc0f6e7115
Update comment about which case is covered by example code
2021-04-16 00:10:05 +01:00
Kris Nuttycombe
b2b3efd4c2
Fix naming cmstar -> cmstar_bytes and cm -> cmstar
2021-04-15 15:24:45 -06:00
Kris Nuttycombe
00d04de547
Make cmstar check follow the spec more closely.
2021-04-14 15:38:58 -06:00
Kris Nuttycombe
389e6ca6a3
Minor comment on epk canonicity.
2021-04-12 18:43:21 -06:00
Kris Nuttycombe
f34e87884a
Update documentation for note encryption traits.
2021-04-12 17:41:06 -06:00
Kris Nuttycombe
6fc1d1d1c0
Use ephemeral_key bytes instead of the epk abstract point where specified.
2021-04-12 16:19:50 -06:00
Kris Nuttycombe
324fc36521
Use ShieldedOutput trait for note encryption/decryption.
...
This change modifies note encryption and decryption functions
to treat a shielded output as a single value instead of handling
the parts of an output as independent arguments.
2021-04-12 12:59:06 -06:00