summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Birr-Pixton <jpixton@gmail.com>2016-09-03 16:07:02 +0100
committerJoseph Birr-Pixton <jpixton@gmail.com>2016-09-03 16:07:02 +0100
commit9fe63eb9cbc28da1e75e152b30b3e04dc5277ad6 (patch)
tree3f835e0b2b79a99beb737b517e9e747468ce15b5
parentc8d31c1e299222b92b0870e2ec84b62127ea2be1 (diff)
Track upstream cratesv/0.1.2
-rw-r--r--Cargo.toml6
-rw-r--r--src/sign.rs22
2 files changed, 18 insertions, 10 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 09cecfd8..5189cc34 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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(|_| ())
}