Commit graph

2388 commits

Author SHA1 Message Date
Dirk Stolle
c33b49bf5a
Update actions/checkout in GitHub Actions workflow to v3 (#282) 2023-03-07 02:44:55 -05:00
Dirk Stolle
3efde345b6
Remove invalid input fields from CI action for Rust setup (#283)
Neither `override` nor `profile` are valid inputs for the
`dtolnay/rust-toolchain` action. It always uses the minimal
profile anyways.
2023-03-07 02:35:10 -05:00
Tony Arcieri
e0e02cfcf4
Bump ed25519 to v2.2; pkcs8 to v0.10 (#285)
The `ed25519` v2.2.0 crate bumps the `pkcs8` dependency to v0.10.

This updates `ed25519` to the latest version and updates the PKCS#8
support to use the new API.
2023-03-07 02:20:09 -05:00
Tony Arcieri
4686ade1b5
Use named fields for struct VerifyingKey (#284)
Previously it was a 2-tuple containing a `CompressedEdwardsY`
serialization and a decompressed `EdwardsPoint`, however using
`.0` and `.1` for these respectively makes the code hard to read.

This commit changes them to `compressed` and `point`, which as it were
are the names of the local variables used when constructing a
`VerifyingKey`, which improves clarity.
2023-03-07 02:16:19 -05:00
Tony Arcieri
97d6d5544a
Merge pull request #106 from striezel-stash/fix-typos
Fix two typos
2023-02-26 07:37:26 -07:00
Dirk Stolle
327618c7d8 Fix two typos 2023-02-24 22:22:19 +01:00
Tony Arcieri
3194759f6e
Merge pull request #96 from dlblv/fix/add-secret-as-bytes
Add `.as_bytes()` method for `StaticSecret`
2023-02-17 09:52:53 -07:00
Michael Rosenberg
619ef68d73
Merge pull request #279 from rozbb/main
Bump curve25519 dep to rc.1
2023-02-04 10:06:05 -05:00
Michael Rosenberg
0b04124175
Fixed MSRV build 2023-02-04 03:24:09 -05:00
Michael Rosenberg
b77fa51569
Bump curve25519-dalek dep to rc.1 2023-02-04 03:21:36 -05:00
Michael Rosenberg
ce3eed873c
Merge pull request #278 from dalek-cryptography/release/2.0
Merge `release/2.0` into `main`
2023-02-02 18:12:59 -05:00
Michael Rosenberg
b2d0f0ecd7
Bump to rc.1 2023-02-02 17:21:56 -05:00
Michael Rosenberg
57a8add0fd
Removed vestigial nightly feature from docsrs instructions 2023-02-02 17:18:47 -05:00
Michael Rosenberg
783b6e81c4
README changes for 2.0 (#275)
* Added items to changelog for 2.0 release

* Removed unnecessary uses of std in doctests

* Gated `Context` behind `digest`

* Fixed noncompiling doctest when only `digest` is enabled

* README feature flag list mostly done

* Copied changelog to readme

* Redid the malleability section in README

* Added CONTRIBUTING.md

* Bumped version number to 2.0.0-pre.0; small changes to README

* Updated changelog for #277

* Added pem feature description

Co-authored-by: pinkforest(she/her) <36498018+pinkforest@users.noreply.github.com>
2023-02-02 17:07:56 -05:00
Michael Rosenberg
3b71630d9f
Fix docsrs build (#505)
* Add docsrs build to CI

* Put cfg flags in both RUSTFLAGS and RUSTDOCFLAGS
2023-02-02 04:06:14 -05:00
Michael Rosenberg
5190ad6df8
Impl VerifyingKey::is_weak (#277)
* Implemented VerifyingKey::is_weak

* Added unit test for VerifyingKey::is_weak
2023-01-31 16:23:38 -05:00
Tony Arcieri
b375b46d37
Fixed-based Montgomery scalar multiplication (#503)
* Fixed-based Montgomery scalar multiplication

Adds `MontgomeryPoint::mul_base` as an API for fixed-base scalar
multiplication which allows for potential future optimizations.

As a baseline implementation, it uses the variable base scalar
multiplication implementation.

This follows the existing `EdwardsPoint::mul_base` and
`RistrettoPoint::mul_base` APIs.

* Added Montgomery mul_base bench

* Switched MontgomeryPoint::mul_base to use EdwardsPoint::mul_base

---------

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2023-01-31 03:37:03 -05:00
Tony Arcieri
79bcbdc89b
Re-export commonly used types from toplevel (#502)
Re-exports the following commonly used types from their respective
modules to the toplevel of the crate, which makes them easier to access:

- `EdwardsPoint`
- `MontgomeryPoint`
- `RistrettoPoint`
- `Scalar`
2023-01-29 13:53:43 -05:00
Michael Rosenberg
e9fe4145fe
Merge pull request #95 from dignifiedquire/update-deps
Updates curve25519-dalek dep to use 4.0.0-rc.0
This includes several feature flag updates and some
minor API changes.
2023-01-29 04:35:12 -05:00
Michael Rosenberg
83300618ad
Attempt to fix CI 2023-01-29 04:29:44 -05:00
Michael Rosenberg
88cc32b687
Updated to curve25519-dalek rc0 2023-01-29 04:29:07 -05:00
Tony Arcieri
1b86ff1d3e
Bump curve25519-dalek to v4.0.0-rc.0 (#276)
Eliminates the `patch.crates-io` directive by using the latest RC
release of `curve25519-dalek` on crates.io
2023-01-28 18:56:35 -05:00
Michael Rosenberg
1a388f7135
Bump version to 4.0-rc.0 (#501) 2023-01-27 14:14:58 -05:00
pinkforest(she/her)
928d6d15f8
Docs.rs + README changes for 2.x (#241) 2023-01-27 01:06:24 -05:00
Tony Arcieri
861784f57e
Add Context type (#273)
* Add `Context` type

Adds a generic type which can be used with `SigningKey` and
`VerifyingKey` for storing a context string value along with the key for
use with `DigestSigner` and `DigestVerifier`.

* Added Context tests, docs, and re-exports

* Added docs about SHA-512 for prehashing; re-re-exported Sha512

Co-authored-by: Tony Arcieri <bascule@gmail.com>
Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2023-01-26 15:41:20 -05:00
Tony Arcieri
27ba9dd614
Bump ed25519 crate dependency to v2.1 (#272)
The original v2.0.0 release has been yanked.

This release includes a different infallible parsing API which can be
used to eliminate some usages of `unwrap()`.
2023-01-21 17:59:11 -05:00
Michael Rosenberg
c2b8978927
Do byte comparison in all verify_* functions (#269)
* Made all signature R comparisons byte-wise

* Use Scalar::from_bits_clamped rather than manually clamping

* Added clippy lints and comments for use of unwrap()

* Clarify use of unused
2023-01-21 01:05:54 -05:00
Tony Arcieri
7d255cd85a
CI: test cargo doc build (#271)
* CI: test `cargo doc` build

Ensure it's free of warnings

* Fix rustdoc build
2023-01-21 00:21:35 -05:00
Tony Arcieri
ba765a5988
Impl signature::Digest* traits for Ed25519ph (#270)
* Impl `signature::Digest*` traits for Ed25519ph

Adds the following trait impls:

- impl DigestSigner for SigningKey
- impl DigestVerifier for VerifyingKey

These traits can be used to create and verify Ed25519 signatures,
thunking to `SigningKey::sign_prehashed` and
`VerifyingKey::verify_prehashed` respectively.

* Add rustdoc comments for trait impls
2023-01-21 00:02:27 -05:00
Tony Arcieri
f61e9dcf9b
Add on-by-default fast crate feature for gating basepoint tables (#251)
* Add on-by-default `fast` crate feature

Disabling the feature reduces overall code size at the cost of
performance, which is useful for e.g. embedded users.

This feature transitively enables the `basepoint-tables` feature in
`curve25519-dalek` where the basepoint tables are actually defined.

* Consolidated a lot of verification code

* Bump `curve25519-dalek`; use `precomputed-tables` feature

The feature name changed in dalek-cryptography/curve25519-dalek#499

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2023-01-20 15:46:17 -05:00
Michael Rosenberg
3effd73307
Feature-gated more precomputed tables (#500)
Feature-gates `AFFINE_ODD_MULTIPLES_OF_BASEPOINT`

Feature-gated tables out of vector vartime aA + bB procedure
2023-01-20 10:55:32 -07:00
Tony Arcieri
bfacbe7ee4
Make from_slice methods fallible; add TryFrom<&[u8]> (#495)
The `from_slice` methods on `CompressedEdwardsY` and
`CompressedRistretto` both previously panicked if the slice was the
wrong length.

This changes them to be fallible, returning `TryFromSliceError` in the
event the slice is the wrong length.

It also adds a `TryFrom<&[u8]>` impl for each of these types which calls
the corresponding `from_slice` method.
2023-01-19 14:08:18 -05:00
Tony Arcieri
8d1bc31805
Rename basepoint-tables to precomputed-tables (#499)
This is the name we adopted for a similar feature in @RustCrypto.

It's a bit less jargony and also leaves the door open in the future to
other types of precomputed tables.
2023-01-19 14:04:22 -05:00
pinkforest(she/her)
431e69959d
Make digest optional (#268)
digest isn't yet stable but we have use it in the public API.

This makes the digest API optional to use in opt-in basis by
feature gating this via an optional digest feature.

API items now feature-gated:

- `pub use ed25519_dalek::Digest`
- `SigningKey::sign_prehashed(D: prehashed_message, ..)`
- `SigningKey::verify_prehashed(D: prehahed_message, ..)`
- `VerifyingKey::verify_prehashed(D: prehashed_message, ..)`
- `VerifyingKey::verify_prehashed_strict(D: prehashed_message, ..)`

Also no longer re-exporting `sha2::Sha512`
2023-01-19 02:59:43 -05:00
Linus Karl
e1d4ef313e
Implement Hash trait for VerifyingKey (#265)
* Added and cleaned up some verification docs

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2023-01-16 22:43:05 -05:00
Tony Arcieri
6d9bbd323e
Bump ed25519 dependency to v2 (#266)
Release notes: https://github.com/RustCrypto/signatures/pull/622
2023-01-16 21:38:57 -05:00
pinkforest(she/her)
8c455f58ae
Make rand_core optional (#262)
* Make rand_core optional
* Bench requires features rand_core
2023-01-15 19:13:33 -05:00
Michael Rosenberg
b5dc40bedf
Make verify_batch deterministic (#256)
Also removed `batch_deterministic` feature
2023-01-14 21:26:39 -05:00
SergeStrashko
fedb1450de
Add Scalar::from_bits_clamped (#498)
As discussed in #497, adds a function which "clamps" a 256-bit input into a
valid scalar by clearing and setting bits, as used by Ed25519 and X25519
2023-01-09 09:34:57 -07:00
pinkforest(she/her)
4f6b4b247f
Make zeroize optional (#263)
Defaults to on
2023-01-09 07:57:59 -07:00
Tony Arcieri
6ee4d1de5c
Use curve25519-dalek from git; check in Cargo.lock (#260)
Updates to the latest upstream changes in `curve25519-dalek`, including
using the new `EdwardsPoint::mul_base` API.

To keep the build deterministic, this also checks in Cargo.lock, which
pins `curve25519-dalek` to a particular git commit SHA which can be
updated using `cargo update -p curve25519-dalek`.

We can potentially remove `Cargo.lock` again after a crate release.
2023-01-09 04:44:10 -05:00
Tony Arcieri
83f6b149d3
Add basepoint-tables crate feature (#489)
* Add `basepoint-tables` crate feature

Feature-gates the inclusion of basepoint tables under a
`basepoint-tables` feature, with the goal of reducing code size for e.g.
embedded applications.

* Add `mul_base` method to `EdwardsPoint` and `RistrettoPoint`

Provides fixed-base scalar multiplication which optionally uses
precomputed basepoint tables when the `basepoint-tables` feature is
enabled, providing 4X better performance.

Falls back on variable-base scalar multiplication in the event the
feature is disabled.

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2023-01-08 03:51:51 -05:00
andrew lyon
4f218d8e67
Adding verify_prehashed_strict() (#212)
Combines `verify_prehashed` and `verify_strict` to allow strict
verification with prehashed values.
2023-01-07 09:21:54 -07:00
Tony Arcieri
461a2d7e05
Bump ed25519 crate to v2.0.0-rc.0 (#257) 2023-01-07 00:50:39 -05:00
Tony Arcieri
8c2f545d91
Expand const fn support (#494)
Does a pass on adding `const` to methods where it's possible.
2023-01-06 13:29:56 -05:00
Michael Rosenberg
f036eaf482
Validation criteria tests (#253) 2023-01-05 22:58:54 -05:00
Tony Arcieri
65aeda0867
Impl From<&SigningKey> for VerifyingKey (#252)
Calls the inherent `SigningKey::verifying_key` method using `From`
conversions.

This replaces vestigial impl for `SecretKey` which is now an alias for
`[u8; 32]`.
2023-01-05 05:31:58 -05:00
Michael Rosenberg
e2ed3133a6
Fix batch build (#220)
* Fixed bench when `batch` feature is not present

* Added bench build regression test to CI

* Fixed batch build more generally

* Simplified batch cfg gates in benches

* Updated criterion

* Made CI batch-nondeterministic test use nostd

* Fix batch_deterministic build

* Removed bad compile error when batch and batch_deterministic are selected
2023-01-02 00:59:19 -05:00
dlblv
d95e3bd536 impl AsRef for keys as well 2022-12-30 01:43:42 +05:00
Tony Arcieri
6a51f4fa40
Make basepoint table constants &'static references (#488)
* Make basepoint table constants static references

This ensures they have a fixed address and aren't duplicated across
compilation units.

Since they were already always borrowed, this changes the static values
to be `&'static` addresses to ensure they're always borrowed rather than
potentially copied.

* rustfmt
2022-12-28 03:24:46 -05:00