Commit Graph

976 Commits

Author SHA1 Message Date
Jack Grigg 6149166ccb
Migrate zcash_primitives to rand 0.5 2019-07-19 00:35:06 +02:00
str4d 8361674efc
Merge branch 'master' into blake2_simd 2019-07-18 18:22:20 +02:00
Jack Grigg 504c3eaeae
Address Daira's review comments 2019-07-15 16:33:43 +02:00
Jack Grigg 07dbfbef59
Address Eirik's review comments 2019-07-10 13:53:22 -04:00
Jack Grigg 79006ecbdf
Unify Sapling tree depth constants
When sapling-crypto is refactored, the zcash_primitives::sapling
constant would become the canonical one.
2019-07-10 13:53:22 -04:00
Jack Grigg e67560b154
Document merkle_tree module 2019-07-10 13:53:22 -04:00
Jack Grigg b9cea33804
Move merkle_tree::Node into sapling module
This makes the merkle_tree module properly generic over the tree hash.
It still hard-codes a depth 32 tree, because Rust doesn't yet support
generic sizes, and we are unlikely to need to alter the tree depth in
future circuit changes.
2019-07-10 13:53:22 -04:00
Jack Grigg 263bbe1207
Use Iterator::all() in place of Iterator::fold() 2019-07-10 13:53:22 -04:00
Jack Grigg 98d7621135
Don't assert when parsing a CommitmentTreeWitness 2019-07-10 13:53:22 -04:00
Jack Grigg 9b4186705a
Add serialization APIs to CommitmentTree and IncrementalWitness 2019-07-10 13:53:22 -04:00
Jack Grigg 70a7069058
Helper for serializing Option<T> 2019-07-10 13:53:22 -04:00
Jack Grigg 667d6101c9
Sapling incremental witnesses 2019-07-10 13:53:20 -04:00
Jack Grigg bf74915053
Move CommitmentTreeWitness into zcash_primitives 2019-07-10 13:52:47 -04:00
Jack Grigg f4059a5faa
Sapling commitment tree 2019-07-10 13:44:21 -04:00
Jack Grigg 8f3f95ee08
Sapling commitment tree empty roots 2019-07-10 13:44:21 -04:00
Jack Grigg 785f22ca5a
Move Sapling commitment tree hash into zcash_primitives 2019-07-10 13:44:19 -04:00
Jack Grigg 999dcbfcab
Migrate to blake2b_simd and blake2s_simd crates
The primary reason for migrating is that these crates provide APIs for
setting the personalisation string. This enables us to depend solely on
published crates, and thus publish our own crates.

The SIMD implementations are ported from libsodium.

Closes #67.
2019-07-10 13:12:14 -04:00
Jack Grigg f25a8a557e
Convert zip32 crate into a module of zcash_primitives 2019-06-27 16:14:24 +01:00
str4d 3b6f5e3d5e
Merge pull request #69 from str4d/sapling-note-encryption
Sapling note encryption
2019-06-06 20:50:17 +01:00
Jack Grigg b65aae9bc1
Test both invalid and incorrect diversifiers 2019-06-06 13:56:06 +01:00
Jack Grigg fdb6e208db
Check note plaintext version byte when decrypting 2019-06-06 13:38:34 +01:00
Jack Grigg 060977fe54
Return edwards::Point from sapling_ka_agree
This matches how sapling_ka_agree and kdf_sapling are defined in the
protocol spec. kdf_sapling also now takes ownership of dhsecret to
discourage use of the sapling_ka_agree output elsewhere.
2019-06-06 13:38:33 +01:00
Jack Grigg 9d80be62f9
Simplify Memo::to_utf8 implementation 2019-06-06 13:38:32 +01:00
Jack Grigg 6846ac5f9e
Require that ak in FullViewingKey is prime order 2019-06-06 13:38:31 +01:00
Jack Grigg 75bede4bc8
Use fixed-length arrays instead of Vec 2019-06-06 13:38:30 +01:00
Jack Grigg d4fce58019
Tweaks to debug output and function names 2019-06-05 14:19:50 +01:00
Jack Grigg 23aa869bf4
Add comments with specification references 2019-06-05 14:19:33 +01:00
Jack Grigg 6d03b5c1db
Replace AeadCipher::seal with AeadCipher::seal_to 2019-06-05 13:55:17 +01:00
str4d c5642f9f5e
Merge pull request #70 from rex4539/electric-coin-company
Electric Coin Company
2019-05-23 17:33:38 +01:00
Dimitris Apostolou 34f762cea2
Electric Coin Company 2019-05-09 20:32:39 +03:00
Jack Grigg edf7bc144d
Document note_encryption module 2019-04-11 16:08:32 -07:00
Jack Grigg 6dcb4040af
Switch to crypto_api_chachapoly crate
This crate exposes both the ChaCha20Poly1305 IETF construction, and the
underlying ChaCha20 IETF primitive, removing the need for depending on
our own fork of the previous chacha20-poly1305-aead crate.
2019-04-11 06:33:41 -07:00
Jack Grigg e17e4b1346
Test invalid decryption edge cases 2019-04-05 21:05:05 +01:00
Jack Grigg 9086dd9afb
Enforce consistent plaintext and ciphertext lengths 2019-04-05 21:05:05 +01:00
Jack Grigg 899d852c39
Inline empty nonces 2019-04-05 21:05:05 +01:00
Jack Grigg 566db65a91
Use a slice instead of a vector in prf_expand() 2019-04-05 21:05:05 +01:00
Jack Grigg 2b1583d75f
Deduplicate Sapling key agreement logic 2019-04-05 21:05:05 +01:00
Jack Grigg 247f3fb038
Impl traits and functions for Memo 2019-04-05 21:05:05 +01:00
Jack Grigg 484330ebd9
Trial Sapling compact note decryption
Part of ZIP 307.
2019-04-05 21:05:05 +01:00
Jack Grigg 8e098d4d72
Trial Sapling output recovery 2019-04-05 21:05:05 +01:00
Jack Grigg 6996853168
Trial Sapling note decryption 2019-04-05 21:05:05 +01:00
Jack Grigg 757316d355
Test prf_ock 2019-04-05 21:05:05 +01:00
Jack Grigg 70caa7d4b0
Sapling note encryption test vectors 2019-04-05 21:05:05 +01:00
George Tankersley 65bbe7daed
Implement Sapling note encryption 2019-04-05 21:05:05 +01:00
Jack Grigg 9b455a12cc
Move Sapling key structs from zip32 to zcash_primitives 2019-04-05 21:05:03 +01:00
Jack Grigg 6c99d71d4f
cargo fmt 2019-04-02 01:30:00 +01:00
Jack Grigg 3501365950
Test Transaction::txid() 2019-04-02 01:29:48 +01:00
Jack Grigg 663f9d619d
Use named fields in Transaction struct 2019-04-02 01:29:22 +01:00
Jack Grigg b856d23069
Reverse a clone of [u8; 32] instead of allocating 2019-03-07 23:43:58 +00:00
Jack Grigg 4289843852
Compute TxId for Transaction 2019-03-07 23:42:00 +00:00
Jack Grigg 670bb277e9
Block header serialisation 2019-03-07 23:41:59 +00:00
Jack Grigg a1664c6bbc
impl Display for BlockHash and TxId 2019-03-07 23:41:46 +00:00
Jack Grigg 20d5cdc571
TxId struct 2019-03-07 23:26:03 +00:00
Jack Grigg e21be37042
Block header representation 2019-03-07 23:26:00 +00:00
Jack Grigg 3d39706aee
Make SpendDescription.spend_auth_sig optional 2019-02-26 13:44:28 -07:00
Jack Grigg 012d43bc8c
derive Debug for various structs 2019-02-26 13:44:28 -07:00
Jack Grigg 09a20aacfe
Make zcash_primitives::JUBJUB the canonical instantiation of JubjubBls12 2019-02-26 13:44:28 -07:00
Jack Grigg 6b43b2d0d6
Refactor Sapling spendAuthSig creation into zcash_primitives::sapling 2019-02-26 13:44:28 -07:00
Jack Grigg 482bef87f0
Add ff and group crates to Cargo workspace 2019-01-06 09:50:07 +00:00
Jack Grigg 538de482f3
Update zcash_primitives crate to use ff crate 2019-01-06 09:31:20 +00:00
Jack Grigg 1a1c77536d
cargo fmt 1.31.1 2019-01-03 21:52:06 +00:00
Jack Grigg c9b23dfdef
Extract single-TxOut hashing from signature_hash_data() for clarity 2018-11-30 23:13:39 +00:00
Jack Grigg e25b614573
Match error message in Amount::Read_i64() to allow_negative value 2018-11-30 23:04:04 +00:00
Jack Grigg 7ff32b04d6
Document enforcement of consensus rules on transaction components 2018-11-30 22:59:48 +00:00
Jack Grigg d707ebd321
Use Option<[u8; N]> for JoinSplit pubkey and signature in a transaction 2018-11-30 01:08:45 +00:00
Jack Grigg 9b06205ed6
Reject unexpected binding sig during transaction write 2018-11-30 00:54:30 +00:00
Jack Grigg 61ce4dd3d6
Enforce range checks when reading Amounts 2018-11-30 00:30:37 +00:00
Jack Grigg 9282c7da29
Replace tx_read_write() test vector with one from current testnet chain 2018-11-16 09:50:27 +00:00
Jack Grigg 2d2e4aad86
Pass &[E] into Vector::write() instead of &Vec<E> 2018-11-16 08:55:06 +00:00
Jack Grigg cc183efda4
Define MAX_SIZE constant for CompactSize serialization 2018-11-16 08:52:53 +00:00
Jack Grigg 1f11c404dc
Convert Transaction into a wrapping struct with impl Deref
Users who have a Transaction can now only obtain an immutable reference
to its underlying data.
2018-11-09 08:34:49 +13:00
Jack Grigg 0c81695731
ZIP 243 2018-11-09 08:34:49 +13:00
Jack Grigg 2d8b1fe504
ZIP 143 2018-11-09 08:34:38 +13:00
Jack Grigg e490b79907
Transaction serialization 2018-10-11 18:05:50 +01:00
Jack Grigg 91ff2c71cf
Helper for serializing CompactSize-prefixed vectors 2018-10-11 17:48:12 +01:00
Jack Grigg ad16ba6a35
Empty crates as a base for code refactoring 2018-08-28 22:24:14 +01:00