Commit Graph

771 Commits

Author SHA1 Message Date
Deirdre Connolly 30491c2c55 Fix merkle_crh_sprout 2020-10-05 23:44:25 -04:00
Deirdre Connolly 064021b7bf Update test vectors 2020-10-05 23:44:25 -04:00
Deirdre Connolly 24fa507e41 Tidy tests 2020-10-05 23:44:25 -04:00
Deirdre Connolly 867576db21 Add a (theoretically) working Sprout note commitment tree impl and some tests 2020-10-05 23:44:25 -04:00
Deirdre Connolly 5e18e72522 Add some more human-readable language to the doc comment on merkle_crh_sapling 2020-10-05 23:43:23 -04:00
Deirdre Connolly bb0fe9955b Remove Arbitrary from NoteCommitmentTree 2020-10-05 23:43:23 -04:00
Deirdre Connolly 44af7855e4 Move hex_empty_roots test vectors into the only test that uses them 2020-10-05 23:43:23 -04:00
Deirdre Connolly 98e40aa44f Use VecDeque in places
All unwrap()'s are after checks to make sure we won't be unwrap'ing a None
2020-10-05 23:43:23 -04:00
Deirdre Connolly 6732084928 Revert Sprout note commitment tree stuff for now 2020-10-05 23:43:23 -04:00
Deirdre Connolly fea448227f Add comment about where the sapling empty merkle roots come from 2020-10-05 23:43:23 -04:00
Deirdre Connolly 3d45209f05 Sprout NoteCommitmentTree root computation 2020-10-05 23:43:23 -04:00
Deirdre Connolly 06c69913c3 We can accurately compute Sapling note commitment tree roots now 2020-10-05 23:43:23 -04:00
Deirdre Connolly 915372e6a2 Correctly computing empty internal nodes in the Sapling note commitment tree 2020-10-05 23:43:23 -04:00
Deirdre Connolly b93abea34f Incomplete impl of Sapling note commitment merkle tree 2020-10-05 23:43:23 -04:00
Deirdre Connolly 568edb54e6 Add merkle_crh_sprout() and tidy note* things 2020-10-05 23:43:23 -04:00
Jane Lusby 86ed13060f
Add tests for `Chain` implementation (#1093)
* Begin work on RFC5 implementation

* I think this is necessary

* holy shit supertrait implemented via subtrait

* implement most of the chain functions

* change to slightly better name

* implement fork

* fix outpoint handling in Chain struct

* update expect for work

* resolve review comment

* split utxo into two sets

* update the Chain definition

* just a little more

* update comment

* Apply suggestions from code review

Co-authored-by: teor <teor@riseup.net>

* apply changes from code review

* remove allow attribute in zebra-state/lib.rs

* Update zebra-state/src/memory_state.rs

Co-authored-by: teor <teor@riseup.net>

* merge ChainSet type into MemoryState

* rename state impl types

* Add error messages to asserts

* checkpoint so I can split off arbitrary changes into a PR

* export proptest impls for use in downstream crates

* add testjob for disabled feature in zebra-chain

* run rustfmt

* try to fix github actions syntax

* differentiate name

* prove that github action tests zebra-chain build without features

* revert change from last commit now that test is running

* remove accidentally introduced newline

* checkpoint

* add module doc comment

* update RFC for utxos

* add missing header

* working proptest for Chain

* apply change from chain impl PR

* setup config for proptests

* Update zebra-chain/src/block/arbitrary.rs

Co-authored-by: teor <teor@riseup.net>

* run rustfmt

Co-authored-by: teor <teor@riseup.net>
2020-10-02 15:51:51 -07:00
teor 28b0e5d197 Improve a test failure message 2020-09-29 11:42:00 -04:00
teor 58041d8a49 Rename TEST_BLOCKS to BLOCKS
To avoid confusion with TESTNET_BLOCKS.

Automated search and replace, made using this script:

sed -i 's/TEST_BLOCKS/BLOCKS/' \
  $(grep -r TEST_BLOCKS zebra* | cut -d: -f1 | sort -u)
2020-09-29 11:42:00 -04:00
teor a35f36dd0b Split TEST_BLOCKS into mainnet and testnet
And add some basic tests to make sure:
* the heights are correct
* the lists aren't truncated or empty
2020-09-29 11:42:00 -04:00
dependabot[bot] 15c5365ca7 build(deps): bump tracing from 0.1.19 to 0.1.21
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.19 to 0.1.21.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.19...tracing-0.1.21)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-29 11:01:34 -04:00
teor 6f371f3436
Add block test vectors for each network upgrade (#1096)
* Move block test vectors into separate files
* Refactor block test vectors into their own module
* Remove some duplicate test vector data

* Add mainnet block test vectors for each network upgrade
* Add testnet block test vectors for each network upgrade

* Update the TEST_BLOCKS list
* Add basic tests using TEST_BLOCKS

* Ignore shell.nix
2020-09-28 12:42:06 +10:00
Jane Lusby 352721bd88
Implement RFC5: State updates `Chain` type (#1069)
* Begin work on RFC5 implementation

* I think this is necessary

* holy shit supertrait implemented via subtrait

* implement most of the chain functions

* change to slightly better name

* implement fork

* fix outpoint handling in Chain struct

* update expect for work

* resolve review comment

* split utxo into two sets

* update the Chain definition

* just a little more

* update comment

* Apply suggestions from code review

Co-authored-by: teor <teor@riseup.net>

* apply changes from code review

* remove allow attribute in zebra-state/lib.rs

* Update zebra-state/src/memory_state.rs

Co-authored-by: teor <teor@riseup.net>

* merge ChainSet type into MemoryState

* rename state impl types

* Add error messages to asserts

* add module doc comment

* update RFC for utxos

* add missing header

Co-authored-by: teor <teor@riseup.net>
2020-09-24 15:46:04 -07:00
Jane Lusby 0b4e974c9e
export proptest impls for use in downstream crates (#1092)
* export proptest impls for use in downstream crates

* add testjob for disabled feature in zebra-chain

* run rustfmt

* try to fix github actions syntax

* differentiate name

* prove that github action tests zebra-chain build without features

* revert change from last commit now that test is running

* remove accidentally introduced newline

* Update .github/workflows/ci.yml

Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>

Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>
2020-09-23 18:52:52 -07:00
Alfredo Garcia 5fbb07460c fix comments, use i32, simplify arms 2020-09-17 16:48:21 -07:00
Alfredo Garcia 4f46474e2c implement add and sub for height 2020-09-17 16:48:21 -07:00
teor 584f2643b7 Update to `RootHash` in comments
We changed the name of the type and function, but forgot the comments.
2020-09-16 12:26:25 -04:00
dependabot[bot] b881eafe47 build(deps): bump jubjub from 0.5.0 to 0.5.1
Bumps [jubjub](https://github.com/zkcrypto/jubjub) from 0.5.0 to 0.5.1.
- [Release notes](https://github.com/zkcrypto/jubjub/releases)
- [Changelog](https://github.com/zkcrypto/jubjub/blob/main/RELEASES.md)
- [Commits](https://github.com/zkcrypto/jubjub/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-10 09:45:37 -07:00
dependabot[bot] a3984729be build(deps): bump jubjub from 0.4.0 to 0.5.0
Bumps [jubjub](https://github.com/zkcrypto/jubjub) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/zkcrypto/jubjub/releases)
- [Changelog](https://github.com/zkcrypto/jubjub/blob/main/RELEASES.md)
- [Commits](https://github.com/zkcrypto/jubjub/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-09 10:31:24 -04:00
Ramana Venkata 3f25da996a Add wrapper fn is_time_valid_at in zebra_consensus::block::check
This commit doesn't move the fn itself because it's tests can't
depend on `generate` code which is not exposed to other crates.
2020-09-09 12:48:15 +10:00
Ramana Venkata 7118e4da3c Move is_equihash_solution_valid to zebra-consensus 2020-09-09 12:48:15 +10:00
Henry de Valence ea6017d0dc network: add Network::default_port(). 2020-09-07 11:13:15 -07:00
Jane Lusby 6744f415d2
Implement sighash (#870)
* Implement sighash

* move sighash logic to a separate module

* start filling in more of the alg

* start setting up a test case

* make the test useful

* Iter transaction inputs

* better error message for expect

* add support for zip243 sighash

* ohey first testvector is passing, yayyy

* pass the second testvector

* add last testvector

* move a use statement

* use common deserialization code for amount everywhere

* cleanup attributes

* bring in fixed preimage

* fix discrepancy with spec

* always deserialize as a signed value

* Update zebra-chain/src/transaction/sighash.rs

* update unreachable statements

* add serialization impls for nonnegative amounts

* Apply suggestions from code review

* document sighash fn

* tweek docs

* fix mistake in translation for zip243

* consistent error messages

* reorder because i like it more that way

* document more panics

* Update zebra-chain/src/amount.rs

* Add comment regarding the serialization of spend descriptions in sighash

Co-authored-by: teor <teor@riseup.net>
Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>
2020-09-05 19:31:11 -04:00
Alfredo Garcia 454e75e7c0
Rename old references to BlockHeaderHash and BlockHeight (#1002)
* rename some references

* Apply suggestions from code review

Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
Co-authored-by: teor <teor@riseup.net>

Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
Co-authored-by: teor <teor@riseup.net>
2020-09-04 15:40:48 -07:00
Henry de Valence 0466466c52 chain: rename blockheaderhash reference. 2020-09-04 17:08:41 -04:00
Henry de Valence e96a472099 chain: impl Display for {block, transaction}::Hash
Also add a Display/FromStr round-trip proptest.
2020-09-04 17:08:41 -04:00
Henry de Valence 0a1878d9c3 chain: add docs about transaction and block hashes. 2020-09-04 17:08:41 -04:00
Henry de Valence 2a50298b2e chain: add transaction hash test. 2020-09-04 17:08:41 -04:00
Henry de Valence ca4a5ce30c chain: add Transaction::hash() method.
This makes Transaction and Block have a consistent API.
2020-09-04 17:08:41 -04:00
Jane Lusby 96c8809348
Implement Inventory Tracking RFC (#963)
* Add .cargo to the gitignore file

* Implement Inventory Tracking RFC

* checkpoint

* wire together the inventory registry

* add comment documenting condition

* make inventory registry optional
2020-09-01 14:28:54 -07:00
Henry de Valence 3ed967bcf8 deps: use x25519-dalek's new PartialEq, Eq methods 2020-08-31 13:30:14 -07:00
dependabot[bot] f7fe7b9053 build(deps): bump secp256k1 from 0.17.2 to 0.19.0
Bumps [secp256k1](https://github.com/rust-bitcoin/rust-secp256k1) from 0.17.2 to 0.19.0.
- [Release notes](https://github.com/rust-bitcoin/rust-secp256k1/releases)
- [Changelog](https://github.com/rust-bitcoin/rust-secp256k1/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-bitcoin/rust-secp256k1/compare/secp256k1-0.17.2...secp256k1-0.19.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-28 17:09:39 -04:00
Deirdre Connolly 447398691a Make SaplingNoteCommitmentTree private for now 2020-08-28 04:46:31 -04:00
Deirdre Connolly b467a75e08 Rename tree::*NoteTreeRootHash to tree::Root 2020-08-28 04:46:31 -04:00
Deirdre Connolly 31d98248ab Expose note types and make note modules private 2020-08-28 04:46:31 -04:00
Deirdre Connolly d795b8bfd9 Add memo to Note, remove NotePlaintext 2020-08-28 04:46:31 -04:00
Deirdre Connolly 5258e891dc Rename sapling::note::OutCiphertext to WrappedNoteKey 2020-08-28 04:46:31 -04:00
Deirdre Connolly cfc60936ce Little more detail to sapling::note::EncryptedNote docstring 2020-08-28 04:46:31 -04:00
Deirdre Connolly d6eecbe935 Rename Sprout EncyptedCiphertext to EncryptedNote 2020-08-28 04:46:31 -04:00
Deirdre Connolly 99b4a400af Make find_group_hash() pub(super) 2020-08-28 04:46:31 -04:00
Deirdre Connolly 7a92496244 Make RANDOMNESS_BEACON_URS pub(super) 2020-08-28 04:46:31 -04:00
Deirdre Connolly c027cfc0d2 Rename SaplingShieldedAddress to Address, make address & commitment private, export their structs 2020-08-28 04:46:31 -04:00
Deirdre Connolly df89a049cb Rename EncryptedCiphertext to EncryptedNote 2020-08-28 04:46:31 -04:00
dependabot[bot] 8e9019a847 build(deps): bump jubjub from 0.3.0 to 0.4.0
Bumps [jubjub](https://github.com/zkcrypto/jubjub) from 0.3.0 to 0.4.0.
- [Release notes](https://github.com/zkcrypto/jubjub/releases)
- [Changelog](https://github.com/zkcrypto/jubjub/blob/master/RELEASES.md)
- [Commits](https://github.com/zkcrypto/jubjub/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-25 17:35:54 -04:00
Ramana Venkata e90137e79b
Update sha2@0.9.1 (#938)
* Update sha2@0.9.1

Fixes #915

* Update zebra-chain/src/sprout/keys.rs

Co-authored-by: Jane Lusby <jlusby42@gmail.com>

* Update zebra-chain/src/sprout/note/nullifiers.rs

Co-authored-by: Jane Lusby <jlusby42@gmail.com>
2020-08-21 16:26:14 -07:00
teor 9a8af731b1 fix: Remove redundant ConsensusBranchId constants 2020-08-20 14:52:09 -04:00
Jane Lusby 1d6183ef84
Make zebra-script wrap the C++ script implementation in zcashconsensus (#708)
* attempt to use zcashconsensus crate in zebra-script

* boop

* update verify fn to use zebra types

* a bit more cleanup

* cleanup

* more

* beep boop

* fix renamed member

* cleaning

* get a real branch id

* remove as of yet unneeded api

* Update zebra-chain/src/transaction.rs

* Update zebra-chain/src/transaction.rs

* more cleanup

* oops wrong dep section

* use a tuple to communicate arg association

* update to use published version of zcash_script

* fix new compiler error

* install llvm on windows

* fix bindgen bug????

* try to get docker file to win

* okay try everything

* fix windows build maybe

* always download choco

* fix paths for moved types

* try a different error message

* try convenience script

* try installing just llvm

* add back one more

* try installing some headers

* try a diff package

* try everything

* remove the minimum

* try newer docker builder image

* cleanup docker image

* cleanup extra ci step
2020-08-18 11:08:53 -07:00
Alfredo Garcia 4dac4d4df7 move `is_coinbase_first` from chain to consensus 2020-08-18 11:03:40 -07:00
Henry de Valence d63562994d deps: Update x25519-dalek, ed25519-zebra 2020-08-17 20:47:48 -07:00
Henry de Valence 8e15c16b42 chain: TransparentAddress -> transparent::Address 2020-08-17 11:46:34 -07:00
Henry de Valence ebdceb5197 chain: rename TransactionHash to transaction::Hash 2020-08-17 11:46:34 -07:00
Henry de Valence d49d3d2b30 chain: tweak docs for JoinSplitData, ShieldedData 2020-08-17 11:46:34 -07:00
Henry de Valence 5c176d2f96 chain: move JoinSplit to sprout 2020-08-17 11:46:34 -07:00
Henry de Valence 1fc859d0c5 chain: move Spend, Output into sapling
The ShieldedData container for the spend and output descriptions of a
transaction does *not* move, because it's encoding transaction
structure.  A good sign that this is the right factoring is that the
transaction module now only needs to pull in sapling::{Spend, Output}
and not all the internals.
2020-08-17 11:46:34 -07:00
Henry de Valence d945cd28e8 chain: move Transparent{Input,Output} to transparent
Also bring the `Script` type there too.
2020-08-17 11:46:34 -07:00
Deirdre Connolly 25f63518f4 Allow clippy::unit_arg because of derive(Arbitrary) 2020-08-17 11:46:34 -07:00
Henry de Valence d57390d265 chain: doc tweaks (mostly block::) 2020-08-17 11:46:34 -07:00
Henry de Valence 94d6d448bb chain: rename to block::merkle::{Root, Tree}. 2020-08-17 11:46:34 -07:00
Henry de Valence 2712c4b72a chain: rename BlockHeader to block::Header 2020-08-17 11:46:34 -07:00
Henry de Valence 103b663c40 chain: rename BlockHeight to block::Height 2020-08-17 11:46:34 -07:00
Henry de Valence 61dea90e2f chain: rename BlockHeaderHash to block::Hash
This is the first in a sequence of changes that change the block:: items
to not include Block as a prefix in their name, in accordance with the
Rust API guidelines.
2020-08-17 11:46:34 -07:00
Henry de Valence 04ba696515 chain: remove block::block 2020-08-17 11:46:34 -07:00
Henry de Valence 9766d32fa6 chain: touch up amount docs 2020-08-17 11:46:34 -07:00
Henry de Valence d0ee7a9961 chain: amount::AmountConstraint -> amount::Constraint 2020-08-17 11:46:34 -07:00
Henry de Valence fd548592bf chain: remove clippy::try_error annotation 2020-08-17 11:46:34 -07:00
Henry de Valence dcc1e19129 chain: touch up docs 2020-08-17 11:46:34 -07:00
Henry de Valence ce1e81b274 chain: move merkle_tree to block::merkle.
This Merkle tree is the SHA256d one used only for including transactions
in a block, so it should be kept there in order to not be confused with
other Merkle trees (like the note commitment trees).
2020-08-17 11:46:34 -07:00
Henry de Valence 7298e7c636 chain: create a transparent module. 2020-08-17 11:46:34 -07:00
Henry de Valence e8f923ec86 chain: move Memo into transaction 2020-08-17 11:46:34 -07:00
Henry de Valence 312c66264a chain: extract sprout code into sprout module. 2020-08-17 11:46:34 -07:00
Henry de Valence e06f59ee21 chain: extract sapling code to sapling module 2020-08-17 11:46:34 -07:00
Henry de Valence c5a8cb0c91 chain: create primitives module.
This contains definitions of primitive types used in other structures
and re-exports of component libraries.
2020-08-17 11:46:34 -07:00
Henry de Valence 196e841cd9 chain: rename LightClientRootHash to RootHash
It's not accurate to call it a LightClientRootHash, because it's not
always a root has for a light client -- sometimes it's a different kind
of root hash.
2020-08-17 11:46:34 -07:00
Henry de Valence b296d1e2a3 chain: move Block into a leaf module.
This might make things a little easier to rearrange.  In the future it
would probably be good to change to block::Hash, block::Header, etc.
2020-08-17 11:46:34 -07:00
Henry de Valence 948b067808 chain: move Network, NetworkUpgrade to parameters
Also, avoid using star-imports of the enum variants, which pollutes the
namespace.
2020-08-17 11:46:34 -07:00
Henry de Valence 64d9d55992 chain: organize block tests
This moves the tests::generate module into the block tests.  Because
this whole set of changes is just focused on reorganization, the
generate code is unchanged, but in the future, the code should be
rewritten as a collection of proptest strategies.
2020-08-17 11:46:34 -07:00
Henry de Valence 855b89dec4 chain: create a new work module for proof-of-work
This extracts the `difficulty` module from `block` and the
`equihash_solution` module from the crate root.  The PoW calculations
are significantly more complicated than the other block code and pretty
dissimilar from it, so it makes more sense to create a common proof of
work module.

The `EquihashSolution` and `EQUIHASH_SOLUTION_SIZE` are renamed to
`equihash::Solution` and `equihash::SOLUTION_SIZE` and imported that
way, except in `block/header.rs`, to avoid a conflict with the
`equihash` crate.  In the future it would be better to encapsulate the
equihash solution check into the `equihash::Solution` type so that
callers only need to import our `work::equihash`.

The test organization leaves a little to be desired but I think that
this can be improved as we fill out the proof of work implementation.
2020-08-17 11:46:34 -07:00
Henry de Valence dad6340cd3 chain: move BlockHeight into block 2020-08-17 11:46:34 -07:00
Henry de Valence 5f71bcd0d1 chain: move LockTime into transaction 2020-08-17 11:46:34 -07:00
Henry de Valence 8e9a239687 chain: clean transaction tests module.
This moves the transaction strategies to `arbitrary`, to live with the
other strategy impls (`Arbitrary` is just a default type-associated
strategy), splits the proptests into a new `prop` module, and splits the
test vector checks into a `vector`s module.

This ensures that we keep code in leaf modules and only have
organization (use statements) in non-leaf modules.
2020-08-17 11:46:34 -07:00
Henry de Valence a35604aef3 chain: move amount to a top-level module. 2020-08-17 11:46:34 -07:00
Henry de Valence cee7d0b8eb chain: move serde_helpers into serialization. 2020-08-17 11:46:34 -07:00
Henry de Valence b36fe8f937 chain: move sha256d to serialization module.
This extracts the SHA256d code from being split across two modules and puts it
in one module, under serialization.

The code is unchanged except for three deleted tests:

* `sha256d_flush` in `sha256d_writer` (not a meaningful test);
* `transactionhash_debug` (constructs an invalid transaction hash, and the
  behavior is tested in the next test);
* `decode_state_debug` (we do not need to test the Debug output of
  DecodeState);
2020-08-17 11:46:34 -07:00
Henry de Valence 9f31e551c9 chain: split serialization.rs into files
The code is unchanged except for removing an unneeded clippy annotation in proptests.rs.
2020-08-17 11:46:34 -07:00
Henry de Valence 0d1f56ad2f chain: remove utils module
A catch-all utils module can really easily slip into being a place to stash
miscellaneous functions that don't really belong anywhere in particular.
2020-08-17 11:46:34 -07:00
teor 4bbefeb68e
Implement Add for Work (#894)
* feature: Implement CompactDifficulty to Work

* fix: Test Work on all difficulty test cases

* fix: Add Bitcoin test vectors for difficulty

* feature: Cumulative Work

* impl Add, AddAssign for Work
* derive Default for Work
* test cumulative work

* fix: comments

* fix: More comments

* Fix comment links

* Remove unused import

Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
2020-08-14 20:48:56 -04:00
Deirdre Connolly 616d82faaf Use the jubjub::AffinePoint in the canonical, encoded little-endian byte form in
Pedersen tests

Keeps the librustzcash test vectors with their big-endian byte order
as comments, for greppability.
2020-08-14 02:04:12 -04:00
Deirdre Connolly a2c9011e06 Impl ZcashDeserialize for jubjub::Fq, use in transaction deserialization 2020-08-14 02:04:12 -04:00
Deirdre Connolly 1255cec6a4 Serialize Amount to bytes using byteorder::LittleEndian 2020-08-14 02:04:12 -04:00
Deirdre Connolly 646b506e7a Whoops forgot to add sprout::NoteTreeRootHash 2020-08-14 02:04:12 -04:00
Deirdre Connolly 4914b80cdb Add a TODO about caching Pedersen hash generator points 2020-08-14 02:04:12 -04:00
Deirdre Connolly f753e63f3b Clarify docstring on NoteCommitment::new() 2020-08-14 02:04:12 -04:00
Deirdre Connolly 437f40d3c8 Refine JoinSplit::anchor to be a sprout::NoteTreeRootHash type 2020-08-14 02:04:12 -04:00
Deirdre Connolly 5a5882700c Tidy JoinSplit nullifiers deserialization 2020-08-14 02:04:12 -04:00
Deirdre Connolly 6b13ce3e83 Add Sapling EphemeralPublicKey type that wraps jubjub::AffinePoint 2020-08-14 02:04:12 -04:00
Deirdre Connolly 52a10d2837 Add note about whether sign checks in Amount -> Fr conversion matter
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly 75cad3bb0a Impl TryFrom's for Diversifier and use those to construct Sapling NoteCommitments 2020-08-14 02:04:12 -04:00
Deirdre Connolly c8771ef620 Defer to From/Into [u8; 32] vs Zcash(De)Serialize for sprout::NoteCommitments 2020-08-14 02:04:12 -04:00
Deirdre Connolly 619afffa16 Use convenience Reader/Writer methods to only use From/Into for nullifer serialization
And thus remove duplicative Zcash(De)Serialization impls
2020-08-14 02:04:12 -04:00
Deirdre Connolly 13b6ff1c65 Add 32byte and 64 bytes convenience writer methods to WriteExt 2020-08-14 02:04:12 -04:00
Deirdre Connolly e8fdd0e1f3 Impl TryFrom for Commitments, call from impl ZcashDeserialize 2020-08-14 02:04:12 -04:00
Deirdre Connolly 5d13880461 Remove Zcash(De)Serialize impls for *Commitments 2020-08-14 02:04:12 -04:00
Deirdre Connolly 014afd8e4a Move Pedersen hash functions to their own submodule 2020-08-14 02:04:12 -04:00
Deirdre Connolly be7ea200c8 Accept an Amount<NonNegative> for the value arg of a ValueCommitment constructor 2020-08-14 02:04:12 -04:00
Deirdre Connolly e024e43896 Support nullifier derivation from borrowed Spending, NullifierDeriving keys 2020-08-14 02:04:12 -04:00
Deirdre Connolly 40b5a73a15 impl From<&NullifierDerivingKey>, use that to derive Sapling Nullifier 2020-08-14 02:04:12 -04:00
Deirdre Connolly a8625b7b84 Remove empty doc comment 2020-08-14 02:04:12 -04:00
Deirdre Connolly a3530b0eed Move pedersen_hash() to go with the other Sapling hash functions, for now 2020-08-14 02:04:12 -04:00
Deirdre Connolly 0242df30cb A space 2020-08-14 02:04:12 -04:00
Deirdre Connolly 9d9491c4e8 Index at 1, not 0, the main loop of PedersenHashToPoint, to match spec math 2020-08-14 02:04:12 -04:00
Deirdre Connolly e5c07721b4 Typo fix
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly ca81e48843 Remove an extra line 2020-08-14 02:04:12 -04:00
Deirdre Connolly 60ae9d74e7 Typo
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly fe45c6402a Remove clippy::unit_arg allowance 2020-08-14 02:04:12 -04:00
Deirdre Connolly 2942bad6ff Make diversify_hash() private again 2020-08-14 02:04:12 -04:00
Deirdre Connolly 5a249f8da5 A space
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly 5ba453c2a1 Remove unused SaplingNoteTreeRootHash types re: Heartwood 2020-08-14 02:04:12 -04:00
Deirdre Connolly 68871c5bd4 From<Nullifier> for [u8; 32] 2020-08-14 02:04:12 -04:00
Deirdre Connolly b2584c4a8f A space 2020-08-14 02:04:12 -04:00
Deirdre Connolly 0c299972ec Clarify docstring about the Jubjub prime-order subgroup on generate_trapdoor() 2020-08-14 02:04:12 -04:00
Deirdre Connolly f816761a5c The pedersen hash to point test vectors now pass 2020-08-14 02:04:12 -04:00
Deirdre Connolly 425275ad35 Fix exclusive range, shift up enumerate() indexes with map() 2020-08-14 02:04:12 -04:00
Deirdre Connolly be22ef64e5 At least fewer M_i() rounds for test cases 2020-08-14 02:04:12 -04:00
Deirdre Connolly 41c8076dab Add test vectors that aren't being consumed right now 2020-08-14 02:04:12 -04:00
Deirdre Connolly 14d502a54b Compute pedersen hash to point in scalar field 2020-08-14 02:04:12 -04:00
Deirdre Connolly 8ececebea7 A space
Co-authored-by: teor <teor@riseup.net>
2020-08-14 02:04:12 -04:00
Deirdre Connolly 3b01dc50ef Use unicode scalar field characters instead of LaTeX
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-08-14 02:04:12 -04:00
Deirdre Connolly 1d494a2b7a Docstring wrap 2020-08-14 02:04:12 -04:00
Deirdre Connolly e22afa3c8f Generate uniformly random scalar w/ Fr::from_bytes_wide()
Which reduces mod r always.
2020-08-14 02:04:12 -04:00
Deirdre Connolly c46cda920f Add primitive merkle_crh_sapling function 2020-08-14 02:04:12 -04:00
Deirdre Connolly 10a9aa5844 Add prf_nf and use in From impl to derive Sapling Nullifier 2020-08-14 02:04:12 -04:00
Deirdre Connolly eb731a6e2f Add note commitment tree Position type 2020-08-14 02:04:12 -04:00
Deirdre Connolly 65f8f2c613 Add mixing_pedersen_hash
Tidy constructors for NoteCommitment
2020-08-14 02:04:12 -04:00
Deirdre Connolly ed888b38ef Correctly generate a sapling NoteCommitment from the NoteCommitmentRandomness 2020-08-14 02:04:12 -04:00
Deirdre Connolly b6385ca36f Move commitment types into commitments module
Docs, tidy
2020-08-14 02:04:12 -04:00
Deirdre Connolly 4ccec84768 Add explicit pedersen_hash function 2020-08-14 02:04:12 -04:00
Deirdre Connolly 83c41869e1 Improve docs 2020-08-14 02:04:12 -04:00
Deirdre Connolly caef323f9b pedersen_hash_to_point() works, with submethods using bitvec
Also tidy, document
2020-08-14 02:04:12 -04:00
Deirdre Connolly 919557c20c My BitSlice doesn't have a known size at compile time?
error[E0277]: the size for values of type  cannot be known at compilation time
2020-08-14 02:04:12 -04:00
Deirdre Connolly 579f1ed134 Flesh out windowed_pedersen_commitment_r 2020-08-14 02:04:12 -04:00
Deirdre Connolly 9d87f30d18 Start of, but currently unfinished, Sapling note commitment / Windowed Pedersen Commitment 2020-08-14 02:04:12 -04:00
Deirdre Connolly f64e0c4bc5 Sapling value commitment, half done Sapling note commitment 2020-08-14 02:04:12 -04:00
Deirdre Connolly 823b06b219 Break out subtypes into modules, including arbitrary's 2020-08-14 02:04:12 -04:00
Deirdre Connolly dfb10ab10f Add NoteCommitment.extract_u() 2020-08-14 02:04:12 -04:00
Deirdre Connolly 33730a05cb Do not confuse a NoteCommitment for U(NoteCommitment) 2020-08-14 02:04:12 -04:00
Deirdre Connolly 0f46a9b6a8 NoteCommitments, renames, ValueCommitment, strategies, stub commit() 2020-08-14 02:04:12 -04:00
Deirdre Connolly fa053e2b0b Derive a Sprout nullifier from a nullifier seed (rho) and spending key 2020-08-14 02:04:12 -04:00
Deirdre Connolly 0d618a3abf Start treestate module 2020-08-14 02:04:12 -04:00
Deirdre Connolly 28a7420079 Remove unused imports 2020-08-14 02:04:12 -04:00
Deirdre Connolly 15899bc6d3 More Note refinements 2020-08-14 02:04:12 -04:00
Deirdre Connolly 2c285985c8 Move nullifiers to respective note modules, pull in existing types from keys 2020-08-14 02:04:12 -04:00
Jane Lusby 8b78a55c71 Start work implementing sprout note commitment function 2020-08-14 02:04:12 -04:00
teor 0e21a70b88
feature: Implement CompactDifficulty to Work (#838)
* Implement CompactDifficulty to Work
* Add Bitcoin test vectors for difficulty
2020-08-14 09:48:15 +10:00
Henry de Valence 07917421cb
Correct coinbase check (#898)
* chain: add Transaction::is_coinbase()

This matches the check in zcashd/src/primitives/transaction.h:682
(CTransaction::IsCoinBase).

* chain: correct Block::is_coinbase_first

This matches zcashd/src/main.cpp:3968-3974 in CheckBlock.

Previously, the check allowed the first transaction to have multiple coinbase inputs.

* chain: return slices from Transaction::inputs()/outputs()

They're slices internally so we might as well just expose them that way.
2020-08-13 14:04:43 -07:00
Henry de Valence 36093b4721 Tweak light client root hash definition.
This changes the `light_client_root_hash` field to `light_client_root_bytes` to
hint that it's unparsed, and makes it public to match the rest of the
`BlockHeader` fields.  The `LightClientRootHash` serialization methods are
hidden from the public API, so that the `LightClientRootHash` has to be
constructed by the method on the `Block`.
2020-08-11 19:13:50 -04:00
dependabot[bot] 5cb61136c9
build(deps): bump tracing from 0.1.18 to 0.1.19 (#872)
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.18 to 0.1.19.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.18...tracing-0.1.19)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-11 10:18:54 -07:00
Henry de Valence f8a24f9c11
Rename script fields to lock/unlock scripts. (#866)
This is slightly clearer and more correct than the previous pk_script.
2020-08-10 11:49:38 -07:00
teor 7afd76f5fb feature: Add light_client_root_hash(network) to Block
* use the right variant in LightClientRootHash::from_bytes()
* make block.header.light_client_root_hash pub(super)
* add tests for LightClientRootHash and block.light_client_root_hash
2020-08-10 18:54:42 +10:00
teor ee6f0de14d refactor: Move NetworkUpgrade to zebra-chain 2020-08-10 18:54:42 +10:00
teor c4eb136426 feature: Add a LightClientRootHash type 2020-08-10 18:54:42 +10:00
teor 53ce01fd23 fix: Rename the light client hash field 2020-08-10 18:54:42 +10:00
Henry de Valence a987394782
Add KaTeX to rendered docs. (#832)
This adds a single test formula to the `zebra-chain` docs.  We can remove it
after merging this and running it through CI to confirm that it works.
2020-08-05 17:34:30 -07:00
teor d49c11ee70 fix: Allow PROPTEST_CASES to override the lower block case default 2020-08-05 02:07:05 -07:00
teor ac7a4ae517 fix: Speed up the block round trip proptest
Reduce the number of cases run by the block round trip proptest, to
speed up the Zebra tests.
2020-08-04 22:35:01 -07:00
teor 78b5bf5e9a refactor: Move the difficulty tests into their own file 2020-08-04 15:24:52 -04:00
teor efb9313460 fix: Resolve a type ambiguity in a proptest
For some reason, implementing
`PartialOrd<BlockHeaderHash> for ExpandedDifficulty` (or its converse)
makes this unrelated code ambiguous.
2020-08-04 12:29:07 +10:00
teor c8b502a5da feature: Compare ExpandedDifficulty and BlockHeaderHash 2020-08-04 12:29:07 +10:00
teor b7fac7b3bc feature: Make ExpandedDifficulty use U256 internally
Adds a dependency on the primitive-types crate.

Also adds custom hex debug formatting for compact and expanded
difficulties.
2020-08-04 12:29:07 +10:00
teor c04d1b7b8f doc: Consensus-critical difficulty encodings 2020-08-04 12:29:07 +10:00
teor 06157a7c8e
Update the BlockHeader fields for Heartwood (#767)
The Heartwood upgrade changes the meaning of the hashFinalSaplingRoot to
hashLightClientRoot. Since we don't know the network upgrade heights in
zebra-chain, we just use [u8; 32] for now.
2020-08-04 12:15:28 +10:00
dependabot[bot] f3b65f9609 build(deps): bump tracing from 0.1.17 to 0.1.18
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.17 to 0.1.18.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.17...tracing-0.1.18)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-03 15:49:30 -04:00
teor 195948e5b1 feature: Add an ExpandedDifficulty type and conversion
Also add tests.
2020-08-03 10:28:31 +10:00
teor c4dec3fb36 feature: Make a CompactDifficulty wrapper
Wrap the compact difficulty "bits" field in a CompactDifficulty struct,
and rename the header field for clarity.
2020-08-03 10:28:31 +10:00
Jane Lusby 1015db25a8
remap the state storage to only store blocks once (#741) 2020-07-31 09:21:54 +10:00
Henry de Valence 7d0a3debb6 chain: ensure impl Deserialize for Amount validates data.
This uses serde's try_from attribute to run deserialized values through the
TryFrom impl.  Also adds a test to make sure that validation actually does
happen.
2020-07-28 12:20:40 -07:00
teor 5ece62f0a5 fix: Update comments for Heartwood's hashChainHistoryRoot 2020-07-27 14:00:56 -04:00
Henry de Valence 4aa00ad216 Align crate versions and user-agent with NU numbers.
We had a brief discussion on discord and it seemed like we had consensus on the
following versioning policy:

* zebrad: match major version to NU version, so we will start by releasing
  zebrad 3.0.0;

* zebra-* libraries: start by matching zebrad's version, then increment major
  versions of each library as we need to make breaking changes (potentially
  faster than the zebrad version, always respecting semver but making no
  guarantees about the longevity of major releases).

This commit sets all of the crate versions to 3.0.0-alpha.0 -- the -alpha.0
marks it as a prerelease not subject to perfect adherence to compatibility
guarantees.
2020-07-24 11:46:37 -07:00
teor 41225660fb doc: The genesis coinbase is the same in every network 2020-07-23 03:46:24 -04:00
Jane Lusby 7d4e717182
Add block locator request to state layer (#712)
* Add block locator request to state layer

* pass genesis in request

* Update zebrad/src/commands/start/sync.rs

* fix errors
2020-07-22 18:01:31 -07:00
Henry de Valence 90ec2982bf docs: fix broken links 2020-07-22 17:55:52 -07:00
Alfredo Garcia db2eb80b3e
Create consensus utils and move byte_reverse_hex function to it (#705)
* move byte_reverse_hex function
2020-07-22 12:29:14 +10:00
Jane Lusby b8de256c48 remove serialization error variant of EquihashError 2020-07-22 11:09:22 +10:00
teor 1b0c0f027f
Add Hard-Coded Checkpoint Lists (#674)
* Add checkpoint list generation scripts
* Limit the checkpoint block data size
* Limit the checkpoint height gap
* Add Mainnet and Testnet checkpoint lists
* Parse hard-coded checkpoint lists

The lists were generated using the following limits:
- 256 MB spacing, based on block byte size, and
- 2000 blocks.
2020-07-21 23:11:51 +10:00
dependabot[bot] 474de52e5c
build(deps): bump displaydoc from 0.1.6 to 0.1.7 (#689)
Bumps [displaydoc](https://github.com/yaahc/displaydoc) from 0.1.6 to 0.1.7.
- [Release notes](https://github.com/yaahc/displaydoc/releases)
- [Commits](https://github.com/yaahc/displaydoc/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-20 11:00:15 -07:00
Alfredo Garcia fe2a468417
add favicon to generated docs (#681) 2020-07-17 16:45:29 -07:00
teor 1915634d2b
Check for bad heights or hashes in checkpoint lists (#639)
* Add MIN and MAX for BlockHeight and LockTime
* Remove duplicate test cases
* fix a comment about the minimum lock time

The minimum LockTime::Time is 5 November 1985 00:53:20 UTC, so the first
day that only contains valid times is 6 November 1985 (in all timezones).

Similarly, the maximum LockTime::Time is 7 February 2106 06::28::15 UTC,
so the last day that only contains valid times in all time zones is
5 February 2106.

* fix: Reject checkpoint lists with bad hashes or heights

Reject the all-zeroes hash, because it is the parent hash of the genesis
block, and should never appear in a checkpoint list.

Reject checkpoint heights that are greater than the maximum block
height.
2020-07-16 15:09:22 +10:00
teor a19fdd9f25 fix: Rename to is_time_valid_at 2020-07-15 09:16:54 -07:00
teor b2bb872df0 Use Unicode for section reference
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-07-15 09:16:54 -07:00
teor c2e4f7b0a5 refactor: Move the local clock check to a BlockHeader method 2020-07-15 09:16:54 -07:00
teor 5548dffd3b refactor: Move the coinbase first check to a Block method 2020-07-15 09:16:54 -07:00
teor e452ba1c13 fix: Use matches!() based on a new nightly clippy lint 2020-07-15 12:50:11 +10:00
Jane Lusby 06fff62561 remove git dependency on equihash crate 2020-07-10 07:52:52 -04:00
Alfredo Garcia 5d6a5ca329
Add consensus coinbase checks (#593)
* add coinbase check and test case

Co-authored-by: Jane Lusby <jane@zfnd.org>
2020-07-10 09:13:44 +10:00
Jane Lusby 0474a79669
Add cool helpers for using zcash_serialize / zcash_deserialize (#586)
Co-authored-by: Dimitris Apostolou <dimitris.apostolou@icloud.com>
2020-07-09 15:29:31 -04:00
Henry de Valence 8b72781fe1 deps: Update redjubjub to 0.2
Closes #606.
2020-07-09 15:20:23 -04:00
Alfredo Garcia f14e577ea9 apply clippy code suggestions 2020-07-07 18:33:14 -04:00
Henry de Valence 68f57b2577 Update ed25519-zebra to 1.0. 2020-07-07 11:49:21 -07:00
Henry de Valence e54438f4e4 Update zebra-chain/src/block/header.rs 2020-07-07 11:13:49 -07:00
Dimitris Apostolou ba81d7d4c0 Fix typos 2020-07-07 11:13:49 -07:00
Jane Lusby a733580fd8
add proptests for invalid forms of input (#550)
* add proptests for invalid forms of input

* apply proptests to each valid block we have

* start moving equihash logic to BlockHeader

* provide an error based interface

* cleanup logging in dependent crate

* use is_equihash_solution_valid everywhere

* switch to proper equihash crate branch
2020-07-07 11:01:02 -07:00
Alfredo Garcia db30e53470
Create a test for block size (#558)
* add block size limit test
* calculate max_transactions_in_block and max_inputs_in_tx
* abstract block generation
* move all test vectors to zebra-test
2020-07-07 10:37:32 +10:00
Alfredo Garcia d736355f9f
Add ZIP143 and ZIP243 test vectors (#585) 2020-07-03 09:45:40 +10:00
teor c8829d8408 fix: Adjust bounds on the LockTime Arbitrary impl
The previous code could generate LockTime::Time with (u32::MAX + 1),
but the maximum valid value is u32::MAX due to the field size.
2020-07-02 14:30:34 +10:00
Jane Lusby 00e750654a
add nullifier types (#568)
* add nullifier types

* Apply suggestions from code review

Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>

* add zcash_deserialize impls

* Add docs

Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>
2020-07-01 17:57:32 -07:00
Jane Lusby c216f5ca25
Refine type for MAC (#577) 2020-07-01 17:57:03 -07:00
Jane Lusby 8281b9040c
Start work on new Amount type (#554) 2020-07-01 16:31:30 -07:00
teor 7bace99569 fix: Update a comment with the correct parity-zcash path 2020-07-01 16:03:14 -04:00
Jane Lusby 6cbb6d4574
consolidate arbitrary impls to one file in zebra-chain (#553)
* consolidate arbitrary impls to one file in zebra-chain

* move the ones I missed

* move test-vectors

Co-authored-by: Jane Lusby <jane@zfnd.org>
2020-06-30 14:23:38 -07:00
Jane Lusby afd0e90a74
Implement equihash verification (#549)
This change brings in the `equihash` crate from librustzcash and uses it to add a basic `is_valid` test for `EquihashSolutions`.

Co-authored-by: Jane Lusby <jane@zfnd.org>
2020-06-26 11:21:02 -07:00
Alfredo Garcia 9cbd369a59
Refactor block module to have submodules (#512)
* create hash submodule for block

* create header submodule for block

* create serialize submodule for block

* add newline to hash.rs (fmt)

* Update zebra-chain/src/block/tests.rs

Co-authored-by: Jane Lusby <jlusby42@gmail.com>

Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
Co-authored-by: Jane Lusby <jlusby42@gmail.com>
2020-06-25 09:18:05 -07:00
teor a9efb8715e chain: Update the note about time truncation 2020-06-24 18:22:36 +10:00
teor 3f5e2695e3 chain: Tweak the version and time test bounds
Use MAX constants for the block header version and time arbitrary test
ranges. Reduces the block header time arbitrary test range from 2**32 to
2**32-1 (u32::MAX). (2**32 is an invalid time value, which gets
truncated to 0 during serialization.)

Also add some comments about DateTime conversions.

Part of #477.
2020-06-24 18:22:36 +10:00
teor 719aa75581 chain: Add a comment about transaction sizes
We don't need to check transaction sizes yet, because we aren't
parsing or generating transactions outside of blocks.

Part of #483.
2020-06-24 18:22:36 +10:00
Henry de Valence e8561d8f9e rename zebra-test-vectors to zebra-test 2020-06-22 20:23:02 -07:00
teor d8b48f885b
consensus: Add a checkpoint verifier stub (#502)
consensus: Add a checkpoint verifier stub

This stub only verifies blocks whose hashes are in the checkpoint
list.

It doesn't have tests, chain child verifies to their ancestors, or
support checkpoint maximum height queries.

Part of #429.
2020-06-22 08:51:43 +10:00
Henry de Valence a0e0e2302b Update ed25519-zebra to 0.4 2020-06-16 14:35:42 -07:00
Henry de Valence 9ddcccdcb4 Update ed25519-zebra to 0.3 2020-06-16 00:42:25 -04:00
Henry de Valence a023ba9b16
Add serde bounds to zebra-chain structures. (#231) 2020-06-15 15:08:14 -07:00
teor 210e11a86d chain: Check the maximum block size when parsing
The maximum block size is 2,000,000 bytes. This commit also limits the
maximum transaction size in parsed blocks. (See #484 for the
corresponding limit on mempool transactions.)

The proptests might test the maximum block size, but they are
randomised. So we also want to explicitly test large block sizes.
(See #482 for these test cases and tests.)

Part of #477.
2020-06-15 11:00:48 -07:00
teor 585fa7a1ae chain: Verify the solutionSize field in block headers
Verify the value of the equihash solution size field in block headers.

This field isn't stored in the BlockHeader struct, so we need to verify
it at parse time.

Part of #477.
2020-06-15 19:04:43 +10:00
Jane Lusby 9f802cd8dd Wrap Transaction in Arc 2020-06-06 18:13:17 -04:00
Deirdre Connolly b263489af6
Export ed25519 zebra (#445)
And use that one, and our similar redjubjub export, everywhere.

Fixes #405

* Move PRs to 'In Progress' column on project board when created
2020-06-06 18:10:32 -04:00
teor f1de07889c Fix a typo in a comment in block.rs 2020-06-04 04:49:23 -04:00
Jane Lusby e9af80b875
Add initial version of zebra-state (#414)
* rename zebra-storage to zebra-state

* Setup initial skeleton for zebra-state

* add test

* Apply suggestions from code review

Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>

* move shared test vectors to a common crate

Co-authored-by: Jane Lusby <jane@zfnd.org>
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-06-02 16:16:17 -07:00
dependabot-preview[bot] 145d9a1835 Bump proptest from 0.9.6 to 0.10.0
Bumps [proptest](https://github.com/altsysrq/proptest) from 0.9.6 to 0.10.0.
- [Release notes](https://github.com/altsysrq/proptest/releases)
- [Changelog](https://github.com/AltSysrq/proptest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/altsysrq/proptest/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-29 15:06:40 -04:00
dependabot-preview[bot] e317b68b1d Bump proptest-derive from 0.1.2 to 0.2.0
Bumps [proptest-derive](https://github.com/AltSysrq/proptest) from 0.1.2 to 0.2.0.
- [Release notes](https://github.com/AltSysrq/proptest/releases)
- [Changelog](https://github.com/AltSysrq/proptest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/AltSysrq/proptest/compare/proptest-derive-0.1.2...proptest-derive-0.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 23:00:29 -04:00
Jane Lusby 4a2d2a359c
add cargo fmt to ci (#403)
* add cargo fmt to ci

* rebase on main

* switch to stable

Co-authored-by: Jane Lusby <jane@zfnd.org>
2020-05-27 19:12:25 -07:00
Jane Lusby 4dc307f2f3 fix last warnings 2020-05-27 15:42:29 -04:00
Jane Lusby b6b35364f3 cleanup warnings throughout codebase 2020-05-27 15:42:29 -04:00
Deirdre Connolly 8d29d05761 Upgrade sha2 to 0.8.2 release
Resolves #326
2020-05-23 21:32:37 -04:00
Kiminuo 6465689555 transaction/hash.rs: Add FromStr implementation (issue #299)
Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
2020-05-14 15:30:11 -04:00
Deirdre Connolly 6ed6ccd62e Clean up imports and some doc comments 2020-04-29 22:42:52 -04:00
Deirdre Connolly 7367daef9f Tidy TransparentAddress FromStr/Display 2020-04-22 02:17:17 -04:00
Deirdre Connolly df7ed7ae81
Move note encryption types around (#362)
* Move around and dedupe note *Cipertext types

* Bump code coverage test timeout to 5 minutes

* Try uploading coverage to codecov.io
2020-04-19 14:45:25 -04:00
Deirdre Connolly 21eca164d8 Refine Output description ephemeral_key to jubjub::AffinePoint
And impl Arbitrary for Output to support better generation of those points in proptests.
2020-04-18 22:05:13 -04:00
Deirdre Connolly 7a4be955be Remove todo 2020-04-18 22:05:13 -04:00
Deirdre Connolly b53be18c8f Remove unused From<[u8; 32]> for SpendAuthorizingKey 2020-04-18 04:40:31 -04:00
Deirdre Connolly 630d021886 Remove unused From<[u8; 32]> for ProofAuthorizingKey 2020-04-18 04:40:31 -04:00
Deirdre Connolly d445799626 Remove the Deref's and make the From's consistent for all key types 2020-04-18 04:40:31 -04:00
Deirdre Connolly 37337c9e44 Remove some impl Deref's and PartialEq's that weren't used
Add some impl From<T> for [u8; 32] 's
2020-04-18 04:40:31 -04:00
Deirdre Connolly f8022442cf Remove some currently unused From impls for [u8; 32] 2020-04-18 04:40:31 -04:00
Deirdre Connolly 252acd85d8 Tidy imports 2020-04-18 04:40:31 -04:00
Deirdre Connolly 2156c6143b Complete impl Arbitrary for TransmissionKey 2020-04-18 04:40:31 -04:00
Deirdre Connolly abcca2c76b Finish Sapling keys roundtrip proptest 2020-04-18 04:40:31 -04:00
Deirdre Connolly 001b39c588 Impl PartialEq for AuthorizingKey and FullViewingKey 2020-04-18 04:40:31 -04:00
Deirdre Connolly 5d430cff12 Do not try to make a jubjub extended point work as a scalar in redjubjub PublicKey From impl 2020-04-18 04:40:31 -04:00
Deirdre Connolly 94c6d74ecb Add sapling key derivation bech32 encoding roundtrip proptest
And fix SpendingKey Display impl bug.
2020-04-18 04:40:31 -04:00
Deirdre Connolly 9daa1ba3c8 Impl PartialEq for some Sapling keys 2020-04-18 04:40:31 -04:00
Deirdre Connolly ba3ba6d2d9 Impl From<SpendingKey> for Diversifier
This is the _DefaultDiversifier_ method.
2020-04-18 04:40:31 -04:00
Deirdre Connolly 16f1e3061f Impl From<(AuthorizingKey, NullifierDerivingKey)> for IncomingViewingKey 2020-04-18 04:40:31 -04:00
Deirdre Connolly e508d09e9b Move sapling key tests to own module, test key derivation against test vectors
Impl a few From<[u8; 32]>'s for a few key types.
2020-04-18 04:40:31 -04:00
Deirdre Connolly ce1415a8ee Add generated test vectors from zcash-hackworks/zcash-test-vectors 2020-04-18 04:40:31 -04:00
Deirdre Connolly f01ea1b4fa Fix some Sprout key doc/message nits 2020-04-18 04:40:31 -04:00
Deirdre Connolly adab7335b6 Impl From<[u8; 32]>/Display/FromStr for Sapling SpendingKey, including network field 2020-04-18 04:40:31 -04:00
Deirdre Connolly 68c281c590 Impl Display/FromStr for Sapling IncomingViewingKey, including network field 2020-04-18 04:40:31 -04:00
Deirdre Connolly cdfcdc4751 Tidy imports 2020-04-18 04:40:31 -04:00
Deirdre Connolly 3eeb9925eb Impl Debug, Display, and FromStr for Sapling FullViewingKey 2020-04-18 04:40:31 -04:00
Deirdre Connolly c30a5a64b2 Get Sapling zaddr encoding roundtrip proptest working for now
TransmissionKey is just the jubjub affine point identity for now. :/
2020-04-18 04:40:31 -04:00
Deirdre Connolly aa18937b60 Add network, impl Display and FromStr for SaplingShieldedAddress 2020-04-18 04:40:31 -04:00
Deirdre Connolly ef9ab8b0ab Remove Debug test 2020-04-18 04:40:31 -04:00
Deirdre Connolly 01599a0735 Fix unneeded initial value and mut 2020-04-18 04:40:31 -04:00
Deirdre Connolly 23cd346f28 Add missing doc comment for sapling addresses 2020-04-18 04:40:31 -04:00
Deirdre Connolly 43e60fd9a9 Lots of doc improvements 2020-04-18 04:40:31 -04:00
Deirdre Connolly 33821d427d Add a lazy derive_keys_and_addresses test 2020-04-18 04:40:31 -04:00
Deirdre Connolly f9d6625fae All Sapling key derivation looks to be working
Modulo actual test vectors! Currently testing with random data each time to
just see if all the types derive without panicking.
2020-04-18 04:40:31 -04:00
Deirdre Connolly b7bd642910 Clippy pass 2020-04-18 04:40:31 -04:00
Deirdre Connolly bc13bccb8d Add a bunch of stuff for JubJub GroupHash, FindGroupHash, etc
Until it can be imported into the jubjub crate and upstreamed.
It has been ported from the types used in zcash_primitives and cleaned up
but still needs testing.
2020-04-18 04:40:31 -04:00
Deirdre Connolly 4acce5aa30 Remove static lifetime on some constants 2020-04-18 04:40:31 -04:00
Deirdre Connolly 7e2ae70d66 Wrap AuthorizingKey around redjubjub::PublicKey<SpendAuth>
And derive From's and Into's for it, halfway through full key derivation via a test case.
2020-04-18 04:40:31 -04:00
Deirdre Connolly 8388b13ac9 Turn all type aliases into wrapper types with impl Deref 2020-04-18 04:40:31 -04:00
Deirdre Connolly b9deef2956 Break out crh_ivk() and invoke in IncomingViewingKey derivation
There is only one invocation of this PRF but it's nice to keep it consistent with
the PRF^expand ones we have too.
2020-04-18 04:40:31 -04:00
Deirdre Connolly 786677e07b Add and use prf_addr() for sprout key derivation 2020-04-18 04:40:31 -04:00
Deirdre Connolly 13f2c229d9 Add prf_expand() and use that in sapling key derivation 2020-04-18 04:40:31 -04:00
Deirdre Connolly b3db623e29 Fill out SaplingShieldedAddress impls and some tests 2020-04-18 04:40:31 -04:00
Deirdre Connolly 451e592b28 Tidy keys::sapling, add commented out Arbitrary impl for now 2020-04-18 04:40:31 -04:00
Deirdre Connolly 7402a54379 Add bech32 2020-04-18 04:40:31 -04:00
Deirdre Connolly 743330fd0b Make several types wrap jubjub types and impl Deref 2020-04-18 04:40:31 -04:00
Deirdre Connolly 145afb7bda 2 Blakes, 2 Serious 2020-04-18 04:40:31 -04:00
Deirdre Connolly 39278a3095 Parameterize AuthorizingKey as PublicKeyBytes<SpendAuth> 2020-04-18 04:40:31 -04:00
Deirdre Connolly 097d4617df Update sapling keys derived from spending key via blake2b 2020-04-18 04:40:31 -04:00
Deirdre Connolly b167a3b96e Create our own Scalar alias for now 2020-04-18 04:40:31 -04:00
Deirdre Connolly 8add92445c Add jubjub, replace blake2 with blake2b_simd 2020-04-18 04:40:31 -04:00
Deirdre Connolly 1219f1b552 Improve FullViewingKey doc comment 2020-04-18 04:40:31 -04:00
Deirdre Connolly ebe5cce3bb Better doc comment for sapling::TranmissionKey 2020-04-18 04:40:31 -04:00
Deirdre Connolly b175d1f1ba Typo
Co-Authored-By: Daira Hopwood <daira@jacaranda.org>
2020-04-18 04:40:31 -04:00
Deirdre Connolly f5bdd449ee Derive OVK via Blake2b as PRF^expand with t=2
Co-Authored-By: Daira Hopwood <daira@jacaranda.org>
2020-04-18 04:40:31 -04:00
Deirdre Connolly 98a91ab92f Add simple FullViewingKey for now 2020-04-18 04:40:31 -04:00
Deirdre Connolly 8e42c6d8b0 Add stub for SaplingShieldedAddress 2020-04-18 04:40:31 -04:00
Deirdre Connolly e2743c0b15 Add all simple types for Sapling key derivation tree 2020-04-18 04:40:31 -04:00
Deirdre Connolly 62d30c0a33 Add blake2 dependency 2020-04-18 04:40:31 -04:00
Deirdre Connolly 21a8a29404 Better doc comments for Sprout SpendingKey fields 2020-04-15 03:22:48 -04:00