diff options
author | Joseph Birr-Pixton <jpixton@gmail.com> | 2016-09-03 16:07:02 +0100 |
---|---|---|
committer | Joseph Birr-Pixton <jpixton@gmail.com> | 2016-09-03 16:07:02 +0100 |
commit | 9fe63eb9cbc28da1e75e152b30b3e04dc5277ad6 (patch) | |
tree | 3f835e0b2b79a99beb737b517e9e747468ce15b5 | |
parent | c8d31c1e299222b92b0870e2ec84b62127ea2be1 (diff) |
Track upstream cratesv/0.1.2
-rw-r--r-- | Cargo.toml | 6 | ||||
-rw-r--r-- | src/sign.rs | 22 |
2 files changed, 18 insertions, 10 deletions
@@ -13,12 +13,12 @@ untrusted = "0.3.1" time = "0.1.35" base64 = "~0.2.0" log = "0.3.6" -ring = { version = "0.3", features = ["rsa_signing"] } -webpki = "0.2.1" +ring = { version = "0.4", features = ["rsa_signing"] } +webpki = "0.3.0" [dev-dependencies] env_logger = "0.3.3" mio = "0.5.1" docopt = "0.6" rustc-serialize = "0.3" -webpki-roots = "0.1.0" +webpki-roots = "0.2.0" diff --git a/src/sign.rs b/src/sign.rs index abf21377..d803643f 100644 --- a/src/sign.rs +++ b/src/sign.rs @@ -1,6 +1,8 @@ use msgs::enums::{HashAlgorithm, SignatureAlgorithm}; use untrusted; use ring; +use ring::signature; +use std::sync::Arc; /// A thing that can sign a message. pub trait Signer { @@ -13,14 +15,14 @@ pub trait Signer { /// A Signer for RSA-PKCS1 pub struct RSASigner { - key: ring::signature::RSAKeyPair + key: Arc<signature::RSAKeyPair> } impl RSASigner { pub fn new(der: &[u8]) -> Result<RSASigner, ()> { - let key = ring::signature::RSAKeyPair::from_der(untrusted::Input::from(der)); + let key = signature::RSAKeyPair::from_der(untrusted::Input::from(der)); key - .map(|k| RSASigner { key: k }) + .map(|s| RSASigner { key: Arc::new(s) }) .map_err(|_| ()) } } @@ -29,13 +31,19 @@ impl Signer for RSASigner { fn sign(&self, hash_alg: &HashAlgorithm, message: &[u8]) -> Result<Vec<u8>, ()> { let mut sig = vec![0; self.key.public_modulus_len()]; let pad = match hash_alg { - &HashAlgorithm::SHA256 => &ring::signature::RSA_PKCS1_SHA256, - &HashAlgorithm::SHA384 => &ring::signature::RSA_PKCS1_SHA384, - &HashAlgorithm::SHA512 => &ring::signature::RSA_PKCS1_SHA512, + &HashAlgorithm::SHA256 => &signature::RSA_PKCS1_SHA256, + &HashAlgorithm::SHA384 => &signature::RSA_PKCS1_SHA384, + &HashAlgorithm::SHA512 => &signature::RSA_PKCS1_SHA512, _ => unreachable!() }; + let rng = ring::rand::SystemRandom::new(); - self.key.sign(pad, &rng, message, &mut sig) + let mut signer = try!( + signature::RSASigningState::new(self.key.clone()) + .map_err(|_| ()) + ); + + signer.sign(pad, &rng, message, &mut sig) .map(|_| sig) .map_err(|_| ()) } |