Commit Graph

38 Commits

Author SHA1 Message Date
Conrado Gouvea 08bb408846
add Pallas and Jubjub ciphersuites and FROST support (#33)
* clippy fixes; remove old FROST code

* add RedPallas ciphersuite and FROST support

* organized code

* simplified version

* remove randomized_frost; point to frost-randomized crate

* move rerandomized test to frost-rerandomized; clean up dependencies; add 'frost' feature

* remove stale comment

* add Jubjub support

* add torsion and identity checks where needed; tests

* Apply suggestions from code review

Co-authored-by: Marek <mail@marek.onl>

* Apply suggestions from code review

Co-authored-by: Marek <mail@marek.onl>

* change Jubjub serialize() to use to_bytes(); add comment to Pallas serialize()

* update frost-rerandomized version

* unpin nightly Rust in coverage.yaml

* fix conditional hex dependency

* move FROST code inside frost folder

* Apply suggestions from code review

Co-authored-by: Marek <mail@marek.onl>

---------

Co-authored-by: Marek <mail@marek.onl>
Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>
2023-02-28 00:01:50 +01:00
Conrado Gouvea 805ef4b5c0
port improvements from Zebra (#40)
* simplify fmt::Debug impls with new hex_if_possible()

* Update src/signature.rs authors

Co-authored-by: Deirdre Connolly <deirdre@zfnd.org>
2023-01-30 16:16:53 -05:00
Conrado Gouvea 6f0dffc12e clippy fixes; remove old FROST code 2023-01-02 19:20:08 -05:00
Tomas Krnak ed11f440ce
Add `no-std` support (#11)
* Add no_std support

* Update CHANGELOG

* Remove unused alloc feature flag

* Remove a forgotten comment

Co-authored-by: str4d <thestr4d@gmail.com>

* Make zeroize dependency optional

* Add alloc feature flag

* Clean the code by outer attributes

* use 2021 edition

Co-authored-by: str4d <thestr4d@gmail.com>
Co-authored-by: Conrado Gouvea <conradoplg@gmail.com>
2022-05-06 11:57:45 -03:00
Deirdre Connolly 093087eb1d
Update the include_str support to fix CI on nightly (#12)
* Update the include_str support to fix CI on nightly

* Upgrade coverage.yaml to use cargo-llvm-cov

* Show CodeCov comment on PRs
2022-01-19 17:42:12 -05:00
Jack Grigg 7b1229a692 reddsa 0.1.0 2021-11-19 23:09:00 +00:00
Jack Grigg d99a256b6f Set MSRV to 1.51
The `doc(include)` logic is placed back behind the `nightly` feature
flag, as it requires 1.54.
2021-11-19 23:06:53 +00:00
Jack Grigg 0627048eba Add Orchard signature types for RedPallas 2021-11-18 21:16:07 +00:00
Jack Grigg 878dd1351b Introduce SpendAuth: SigType and Binding: SigType traits
The prior `SpendAuth` and `Binding` enums have been renamed to
`sapling::{SpendAuth, Binding}`. These might subsequently be removed
from the crate entirely (moving into a wrapping `redjubjub` crate).

The code assumes that scalar and point representations are [u8; 32],
which will be the case for all curves we instantiate RedDSA with for
Zcash.
2021-11-18 21:15:03 +00:00
Jack Grigg 7e80588550 Rename crate to reddsa 2021-11-18 21:14:08 +00:00
Deirdre Connolly 3db05e29f7 Remove extra module-level doc to allow doc = include_str to work 2021-06-22 16:37:36 -04:00
Alfredo Garcia 751af8a76b remove external_docs 2021-06-22 16:37:36 -04:00
Alfredo Garcia ced2819690 another try 2021-06-22 16:37:36 -04:00
Alfredo Garcia 79b8b52baa try to fix the docs build 2021-06-22 16:37:36 -04:00
Alfredo Garcia fa3c602698
Implement the messages spec (#114)
* start messages and validation

* add missing docs to constants

* change validation to matches, fix constant doc

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

* fix the build

* validate share_commitment

* add new constants and validations

* fix validation

* derive serde Serialize and Deserialize in all messages structs

* update created structs

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

* fix build

* define and use a new MAX_SIGNERS constant

* change group_public type

* add some test cases

* add validation and serialization tests for SigningCommitments

* add validation and serialization test to SigningPackage

* change some fields order matching the spec

* fix field order in tests according to last updates to the spec

* implement serialize and deserialize for ParticipantId

* move serde-json to dev-dependencies section

* change to pub(crate)

* fix serialize of VerificationKey

* add assert to serialize

* add note, fix typo

* improve some code in tests

* test serialization of individual fields

* start messages and validation

* add missing docs to constants

* change validation to matches, fix constant doc

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

* fix the build

* validate share_commitment

* add new constants and validations

* fix validation

* define and use a new MAX_SIGNERS constant

* change group_public type

* change some fields order matching the spec

* change message fields to new spec

* remove some non needed conversions

* use a BTreeMap to guarantee the order

* remove some calls to `clone()` by implementing `Copy`

* change message type in frost and add validate_signatureshare test

* change `share_commitment` to BTreeMap

* add `serialize_signatureshare` test

* add aggregatesignature tests

* add some test header messages utility functions

* add a setup utility

* move the general serialization checks into an utility function

* fi some typos

* add and use a `generate_share_commitment` utility

* add create_signing_commitments utility function

* improve the serialization tests

* make room for prop tests

* add arbitrary tests for serialization

* remove allow dead code from messages

* fix some imports

* make signature module public only to the crate

* simplify a bit the frost tests

* improve the generated docs

* add a `prop_filter` to Header arbitrary

* (ab)use proptest_derive

* improve validation for Message

* improve some utility functions

* change frost to serialization id conversion

* add a quick btreemap test

* change the `MsgType` to `u32`

* add no leftover bytes checks

* add a full_setup utility

* add map len checks

Co-authored-by: teor <teor@riseup.net>
2021-06-16 16:13:23 -03:00
Jack Grigg 3571be2184 Migrate to jubjub 0.6 2021-04-03 09:48:53 -04:00
Deirdre Connolly 2ebc08f910
Frost keygen with dealer (#47)
Implements FROST (Flexible Round Optimized Schnorr Threshold Signatures, https://eprint.iacr.org/2020/852) where key generation is performed by a trusted dealer. 

Future work will include implementing distributed key generation and re-randomizability. 

Co-authored-by: Chelsea Komlo <me@chelseakomlo.com>
Co-authored-by: Isis Lovecruft <isis@patternsinthevoid.net>
2021-02-25 09:06:54 -07:00
Henry de Valence 233294d701 Bump version to 0.2.2 2020-07-15 12:42:14 -07:00
Henry de Valence cc50b23713 Bump version to 0.2.1 2020-07-09 11:52:30 -07:00
Henry de Valence eb5714779c release: update CHANGELOG and version. 2020-07-09 10:30:01 -07:00
Deirdre Connolly ba256655dd
Optimized batch verification (#36)
* Pulls in some traits and methods from curve25519-dalek around the
vartime multiscalar multiplication.

* Move scalar mul things we want to upstream to jubjub to their own crate

* Make Verify agnostic to the SigType

Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
Co-authored-by: Jane Lusby <jlusby42@gmail.com>
2020-07-03 18:23:28 -04:00
Deirdre Connolly f27b9c3c77
Change terminology to signing, verification keys (#35)
Matches ed25519-zebra.

Resolves #33
2020-06-25 11:56:29 -07:00
Henry de Valence aa023b428e Bump version and update changelog. 2020-01-17 10:28:12 -08:00
Henry de Valence 798a3e4631 Fix trait bounds on SigType.
When Rust derives Copy, Clone, Eq, PartialEq, etc. on a type with
`PhantomData<T>`, it adds a `T: Clone` etc. bound, regardless of whether `T` is
only ever used inside of the `PhantomData`.  A better fix would be to fix the
derived bounds themselves, but in the meantime this works, even if it's
slightly ugly.
2019-12-09 11:55:53 -08:00
Henry de Valence a3f0830bc1 Make Binding, SpendAuth enums so they show in a different Rustdoc section. 2019-12-04 16:41:16 -08:00
Henry de Valence 7b979ddd65 Add property tests for signatures. 2019-12-04 16:14:44 -08:00
Henry de Valence 8bcfeae920 Add a basic test.
This ran into problems with Clone/Copy bounds -- it seems like the
derived impls require that the phantom type T also be Clone / Copy /
Debug for the type to be.  This commit does a hacky fix that makes it
work for now, but it should be cleaned up later.
2019-12-04 11:45:44 -08:00
Henry de Valence 710ac6fba9 Add an hash-to-scalar implementation. 2019-12-04 11:45:30 -08:00
Henry de Valence 84b042003b Add methods to the Sealed trait, simplifying types.
The motivation is as follows.  The sealed trait pattern allows creating
a type-level equivalent of an enum: the trait corresponds to the enum
type and its implementors correspond to the enum variants; the `Sealed`
restriction ensures that there is a fixed set of enum variants.

In this picture, adding methods to the public trait corresponds to a
public method on an enum, while adding methods to the private trait
corresponds to a private method on an enum.  This means that we can add
a method to get the basepoint (whose possible choices are enumerated by
SigType) and avoid having to do specialized impls.
2019-12-04 11:41:46 -08:00
Henry de Valence b44f149381 Reorganize data types. 2019-12-03 15:59:24 -08:00
Henry de Valence 06a0a6404d Serialize PublicKey, SecretKey 2019-12-03 14:51:38 -08:00
Henry de Valence faebd2b783 Add byte encodings for Binding, SpendAuth basepoints.
These were extracted by adding printlns to the test suite for librustzcash.
2019-12-03 13:37:12 -08:00
Henry de Valence 6ca14abeec Make the signature type be a type parameter.
This means that using a BindingSig as a SpendAuthSig or vice versa becomes a
compile error.  Internally, we can share implementations, but having type
parameters and specialized impls means that the correct parameters can be
substituted in to whatever inner functions exist.
2019-12-03 12:22:35 -08:00
Henry de Valence eaaad6a0b8 Add rerandomization stub API. 2019-12-02 22:32:55 -08:00
Henry de Valence 156c6b6e7c Define main types for the library. 2019-12-02 21:58:19 -08:00
Henry de Valence 8bdb8580ff Add error stub 2019-12-02 21:36:47 -08:00
Henry de Valence c3fe237fe9 Add readme, module layout 2019-12-02 21:32:38 -08:00
Henry de Valence ecac1f8205 cargo new --lib 2019-12-02 14:12:06 -08:00