diff --git a/Cargo.toml b/Cargo.toml index 6f33fd10..3a8c073e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ base64 = "0.4.0" minidom = "0.2.0" jid = "0.2.0" sasl = "0.3.0" +sha-1 = "0.3.2" [features] insecure = [] diff --git a/src/component.rs b/src/component.rs index 530a2e30..bd5b9ccd 100644 --- a/src/component.rs +++ b/src/component.rs @@ -5,12 +5,13 @@ use ns; use plugin::{Plugin, PluginProxyBinding}; use event::AbstractEvent; use connection::{Connection, Component2S}; -use openssl::hash::{hash, MessageDigest}; +use sha_1::{Sha1, Digest}; use minidom::Element; use xml::reader::XmlEvent as ReaderEvent; +use std::fmt::Write; use std::sync::mpsc::{Receiver, channel}; /// A builder for `Component`s. @@ -147,11 +148,11 @@ impl Component { } } let concatenated = format!("{}{}", sid, secret); - let hash = hash(MessageDigest::sha1(), concatenated.as_bytes())?; + let mut hasher = Sha1::default(); + hasher.input(concatenated.as_bytes()); let mut handshake = String::new(); - for byte in hash { - // TODO: probably terrible perfs! - handshake = format!("{}{:x}", handshake, byte); + for byte in hasher.result() { + write!(handshake, "{:02x}", byte)?; } let mut elem = Element::builder("handshake") .ns(ns::COMPONENT_ACCEPT) diff --git a/src/lib.rs b/src/lib.rs index 9f96d034..6a2715fa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ extern crate xml; extern crate openssl; extern crate minidom; extern crate base64; +extern crate sha_1; pub extern crate jid; pub extern crate sasl;