Commit Graph

42 Commits

Author SHA1 Message Date
Deirdre Connolly 79085903a0
Zeroize full signingkey (#73)
* Zeroize full signingkey

Includes Default and DefaultIsZeroes impl for VerificationKey.

Resolves #72

* derive Zeroize for SigningKey
2023-03-15 11:04:32 -03:00
Conrado Gouvea c079b0e507 update curve25519-dalek to 4.0.0-pre.5; sha2 to 0.10 2023-01-17 15:59:35 -05:00
Conrado Gouvea 612e51af2e v3.1.0 2022-10-26 16:28:40 -04:00
Christian Poveda 15e028616c
add `no_std` support (#57) 2022-05-05 10:40:29 -03:00
dependabot[bot] 7b8447ad79 Update color-eyre requirement from 0.5 to 0.6
Updates the requirements on [color-eyre](https://github.com/yaahc/color-eyre) to permit the latest version.
- [Release notes](https://github.com/yaahc/color-eyre/releases)
- [Changelog](https://github.com/yaahc/color-eyre/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yaahc/color-eyre/compare/v0.5.2...v0.6.0)

---
updated-dependencies:
- dependency-name: color-eyre
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 17:06:12 -05:00
Deirdre Connolly 9dd5d07120 v3.0.0 2021-10-12 13:25:18 -04:00
Fintan Halpenny 5382ead398 dependencies: update zeroize to 1.2
There was a vulnerability reported[0] in zeroize which is patches with
versions >=1.2.0. This patch sets the bound to "1.2" in the Cargo.toml.

[0]: https://rustsec.org/advisories/RUSTSEC-2021-0115

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
2021-10-12 11:36:06 -04:00
Deirdre Connolly 539fad040c Update rand_core to 0.6 and rand to 0.8 2021-03-30 11:19:07 -04:00
Deirdre Connolly 9a2f706ace Revert "Update rand_core to 0.6 and rand to 0.8"
This reverts commit ae0c163b17.
2021-03-25 21:54:08 -04:00
Deirdre Connolly ae0c163b17 Update rand_core to 0.6 and rand to 0.8 2021-03-25 21:48:24 -04:00
Kim Altintop 0e7a96a267
Add Zeroize impl for SigningKey (#34)
* Add Zeroize impl for SigningKey
2020-12-03 13:10:52 -08:00
Henry de Valence 72e1b17d86 Bump version to 2.2.0 2020-09-25 11:26:45 -07:00
Henry de Valence 2808cbd188 Bump version to 2.1.2 2020-08-17 20:09:26 -07:00
Henry de Valence 8fdd6a8d18 Update sha2 to 0.9 and curve25519-dalek to 3.0. 2020-08-17 20:07:42 -07:00
Henry de Valence a484604310 Bump version to 2.1.1 and update CHANGELOG 2020-07-30 10:20:27 -07:00
Henry de Valence af787e1dae Bump version to 2.1.0 2020-07-15 12:31:49 -07:00
dependabot[bot] 54ac8c2de3 Update color-eyre requirement from 0.4 to 0.5
Updates the requirements on [color-eyre](https://github.com/yaahc/color-eyre) to permit the latest version.
- [Release notes](https://github.com/yaahc/color-eyre/releases)
- [Commits](https://github.com/yaahc/color-eyre/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-10 15:35:12 -04:00
Henry de Valence 02521ccd9e Release 2.0.0 2020-07-06 19:43:29 -07:00
Henry de Valence e7afed68e5 Merge branch '1.x' into main 2020-07-06 19:41:12 -07:00
Henry de Valence d0a430b5e4
Implement ZIP 215 validation rules. (#24)
* Implement ZIP 215 validation rules.

These have the effect that batched and singleton verification are now
equivalent.

* Add ZIP 215 conformance tests.

This test constructs signatures on the message "Zcash" using small-order
verification keys, some with canonical and some with non-canonical encodings of
points.  All of these signatures should pass verification under the ZIP 215
rules, but most of them should fail verification under legacy rules.

These tests exercise all of the special-case behaviors from the specific
version of libsodium used by Zcashd:

* the all-zero check for the verification key;

* the excluded point encodings for the signature's R value;

* the choice to test equality of the encoded bytes of the recomputed R value
  rather than on the projective coordinates of the two points.

Running
```
cargo test -- --nocapture
```
will print a hex-formatted list of the test cases, which can also be found here:

https://gist.github.com/hdevalence/93ed42d17ecab8e42138b213812c8cc7

* Update spec links.

Thanks to @ebfull for pointing this out.

* No ... there is another.

@ebfull pointed out that two test cases were duplicates.  The cause was that I
misread the RFC8032 check was checking for the non-canonical encoding of
the identity point that NCC Group apparently brought up.  Carefully analyzing all
the cases instead of assuming reveals there is another non-canonically encoded
point (of order 2).

* Change formatting of printed test cases.
2020-07-06 19:40:20 -07:00
Henry de Valence 551af0690e Release 1.0.0 2020-07-06 19:37:14 -07:00
Henry de Valence e07ceac55a Release 1.0.0-pre.0 2020-06-26 11:27:00 -07:00
Henry de Valence f118a5bdaa Bump version to 0.4.1, fixing docs.rs 2020-06-17 14:28:12 -07:00
Henry de Valence a2c6a6192b Bump version to 0.4.0 2020-06-16 13:46:29 -07:00
Henry de Valence 3b022e3898 Update CHANGELOG for 0.3.0 2020-06-15 21:15:10 -07:00
Henry de Valence cacd50d992
Remove futures-based batch verification API. (#19)
The futures-based batch verification design is still good, but it turns out
that things like the latency bounds and control of when to flush the batch
should be common across different kinds of batchable verification.  This should
be done by the forthcoming `tower-batch` middleware currently in the Zebra
repo.
2020-06-15 18:47:49 -07:00
Henry de Valence 13ce317681 Update CHANGELOG for 0.2.3 2020-06-15 13:30:10 -07:00
Henry de Valence 709676ee8d
Use the hex crate for nicer debug output. (#14) 2020-06-09 17:06:17 -07:00
dependabot-preview[bot] 3dc7c554ee Update hex requirement from 0.3 to 0.4
Updates the requirements on [hex](https://github.com/KokaKiwi/rust-hex) to permit the latest version.
- [Release notes](https://github.com/KokaKiwi/rust-hex/releases)
- [Commits](https://github.com/KokaKiwi/rust-hex/compare/v0.3...v0.4.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-10 18:10:35 -04:00
Henry de Valence 095910f32f Bump version to 0.2.2 2020-04-01 19:16:27 -07:00
Henry de Valence 2e30e16048 Bump version to 0.2.1 2020-04-01 19:00:05 -07:00
Henry de Valence f1fa3805cd Bump version to 0.2.0. 2020-01-30 17:52:13 -08:00
Henry de Valence 2663474cd1 Add motivational documentation to the batch module. 2020-01-30 17:44:09 -08:00
Henry de Valence 96a4ef2481 Add non-batched verification with an identical Service interface.
This will hopefully allow things like building a Tower layer with a timeout and
a retry policy that retries timed out requests (not a big enough concurrent
batch) with singleton verification, or retries a failed batch by falling back
to singleton verification to detect which element of a batch failed.

However, there are still some rough spots in the API, and it's not clear that
manually dropping the service is an adequate way to flush requests (see comment).
2020-01-30 17:44:09 -08:00
Henry de Valence 1d6488f736 Periodically flush pending verification requests.
This implements the last suggestion in the previous commit message: the
verification service maintains a target batch size and periodically flushes
signature verification requests after reaching that many pending requests.
Requests can be manually flushed by dropping the service.  In contrast to
flushing requests by calling an inherent method, this approach has the
advantage that the verification service can be wrapped in other tower
middleware without losing functionality (drops propagate through wrapped
services).

This approach still does not impose any maximum latency on verification
requests, but it seems potentially better to leave that out of scope for the
verification service itself, as consumers wishing to have latency bounds can do
so using a timeout layer, perhaps with a retry policy that does singleton
verification after a timeout, etc.
2020-01-28 23:10:07 -08:00
Henry de Valence 21796986c0 Add benchmarks verifying batch performance estimates.
In fact the speedup can be slightly greater than the 2x predicted, because
although the multiexp is half the size, the remaining half has 128-bit scalars
instead of 256-bit ones.
2020-01-28 21:36:48 -08:00
Henry de Valence d9d64fd050 Initial implementation of futures-based batch verification.
This commit incidentally includes an optimization for batch verification that
improves performance when verifying multiple signatures from the same public
key.

I'm not totally happy with a few things about this API, however.  Currently,
the actual batch computation is performed only when the inherent `finalize()`
method is called on the service.  However, this doesn't work well with `tower`
layering, because once the service is wrapped, the inherent method is no longer
available.  Another option would be for the batching service to be created with
a batch size parameter, automatically resolving the batch computation whenever
the batch size was reached.  This improves latency but does not solve the
problem of finalizing the batch, since unless there's guaranteed to be a
constant stream of verification requests, a tail of requests may be left
unresolved.  A third option would be for the service to return some kind of
control handle on creation that would allow shutdown via a channel or
something, but this is also unsatisfying because it means that the service has
to be listening for a shutdown signal.  A fourth option would be to have a
batch size parameter but customize the `Drop` impl to finalize all pending
requests on drop; this would potentially allow "flushing" pending requests by
manually dropping the service in a way that would still be possible when using
tower wrappers.
2020-01-28 21:36:37 -08:00
Henry de Valence 2ac8b716fa Prepare 0.1.0 release. 2020-01-24 13:01:41 -08:00
Henry de Valence 98d337bed8 Add test vectors from RFC8032. 2020-01-23 17:14:13 -08:00
Henry de Valence 4f9bb3d06b Implement sign, verify. 2020-01-23 17:14:13 -08:00
Henry de Valence 77a5dd8680 Stub out the API, based on redjubjub. 2020-01-22 14:57:26 -08:00
Henry de Valence 2e62704e6a Initial commit. 2020-01-22 11:31:27 -08:00