mirror of https://github.com/ctz/rustls
Use *ring* 0.12.1's Eq implementation for digest::Algorithm.
This commit is contained in:
parent
3e6204df34
commit
d464f7d9dd
|
@ -13,7 +13,7 @@ categories = ["network-programming", "cryptography"]
|
||||||
untrusted = "0.5.1"
|
untrusted = "0.5.1"
|
||||||
base64 = "0.6"
|
base64 = "0.6"
|
||||||
log = { version = "0.3.6", optional = true }
|
log = { version = "0.3.6", optional = true }
|
||||||
ring = { version = "0.12", features = ["rsa_signing"] }
|
ring = { version = "0.12.1", features = ["rsa_signing"] }
|
||||||
webpki = { git = "https://github.com/briansmith/webpki" }
|
webpki = { git = "https://github.com/briansmith/webpki" }
|
||||||
sct = "0.2"
|
sct = "0.2"
|
||||||
|
|
||||||
|
|
|
@ -24,15 +24,6 @@ pub struct HandshakeHash {
|
||||||
buffer: Vec<u8>,
|
buffer: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// This hack is needed because rust doesn't provide reference
|
|
||||||
// equality: in other words given a and b of type &T, are
|
|
||||||
// the references for the same object?
|
|
||||||
fn hash_eq(ha: &'static digest::Algorithm, hb: &'static digest::Algorithm) -> bool {
|
|
||||||
let a = digest::digest(ha, &[]);
|
|
||||||
let b = digest::digest(hb, &[]);
|
|
||||||
a.as_ref() == b.as_ref()
|
|
||||||
}
|
|
||||||
|
|
||||||
impl HandshakeHash {
|
impl HandshakeHash {
|
||||||
pub fn new() -> HandshakeHash {
|
pub fn new() -> HandshakeHash {
|
||||||
HandshakeHash {
|
HandshakeHash {
|
||||||
|
@ -62,7 +53,7 @@ impl HandshakeHash {
|
||||||
match self.alg {
|
match self.alg {
|
||||||
None => {},
|
None => {},
|
||||||
Some(started) => {
|
Some(started) => {
|
||||||
if !hash_eq(started, alg) {
|
if started != alg {
|
||||||
// hash type is changing
|
// hash type is changing
|
||||||
warn!("altered hash to HandshakeHash::start_hash");
|
warn!("altered hash to HandshakeHash::start_hash");
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue