From 33ff29afab81dbdb239c294c0afda0f6a6c98fde Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Wed, 9 Sep 2020 17:09:52 -0700 Subject: [PATCH] ecdsa: SecretKey updates See: RustCrypto/traits#297 --- Cargo.lock | 6 +++--- ecdsa/src/lib.rs | 8 +++++++- ecdsa/src/sign.rs | 19 +++++++++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 28ea364b..200a98d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,9 +12,9 @@ dependencies = [ [[package]] name = "bitvec" -version = "0.18.1" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f0df4bb4c441080e98d6ea2dc3281fc19bb440e69ce03075e3d705894f1cb" +checksum = "64143ed23541fe0c6e2235905eaae37ceae1ca69e14dce4afcd6ec9643359d00" dependencies = [ "funty", "radium", @@ -90,7 +90,7 @@ dependencies = [ [[package]] name = "elliptic-curve" version = "0.5.0" -source = "git+https://github.com/RustCrypto/traits#24ce4e1bda977a7f41af203eb3cbd3fa0e906b93" +source = "git+https://github.com/RustCrypto/traits#7dd78e0097bcc9a5adb84acf043f6e11e33ceacc" dependencies = [ "bitvec", "digest", diff --git a/ecdsa/src/lib.rs b/ecdsa/src/lib.rs index 361c1119..d1f68f5b 100644 --- a/ecdsa/src/lib.rs +++ b/ecdsa/src/lib.rs @@ -53,17 +53,23 @@ pub mod sign; pub mod verify; // Re-export the `elliptic-curve` crate (and select types) -pub use elliptic_curve::{self, generic_array, sec1::EncodedPoint, weierstrass::Curve, SecretKey}; +pub use elliptic_curve::{self, generic_array, sec1::EncodedPoint, weierstrass::Curve}; // Re-export the `signature` crate (and select types) pub use signature::{self, Error}; #[cfg(feature = "sign")] +#[cfg_attr(docsrs, doc(cfg(feature = "sign")))] pub use sign::SigningKey; #[cfg(feature = "verify")] +#[cfg_attr(docsrs, doc(cfg(feature = "verify")))] pub use verify::VerifyKey; +#[cfg(feature = "zeroize")] +#[cfg_attr(docsrs, doc(cfg(feature = "zeroize")))] +pub use elliptic_curve::SecretKey; + use core::{ convert::{TryFrom, TryInto}, fmt::{self, Debug}, diff --git a/ecdsa/src/sign.rs b/ecdsa/src/sign.rs index 9296c681..9a7794ac 100644 --- a/ecdsa/src/sign.rs +++ b/ecdsa/src/sign.rs @@ -57,12 +57,6 @@ where .ok_or_else(Error::new) } - /// Create a new signing key from a [`SecretKey`]. - // TODO(tarcieri): infallible `From` conversion from a secret key - pub fn from_secret_key(secret_key: &SecretKey) -> Result { - Self::new(secret_key.as_bytes()) - } - /// Get the [`VerifyKey`] which corresponds to this [`SigningKey`] #[cfg(feature = "verify")] #[cfg_attr(docsrs, doc(cfg(feature = "verify")))] @@ -78,6 +72,19 @@ where } } +impl From<&SecretKey> for SigningKey +where + C: Curve + Arithmetic, + C::Scalar: FromDigest + Invert + SignPrimitive + Zeroize, + SignatureSize: ArrayLength, +{ + fn from(secret_key: &SecretKey) -> Self { + Self { + secret_scalar: *secret_key.secret_scalar(), + } + } +} + impl DigestSigner> for SigningKey where C: Curve + Arithmetic,