aboutsummaryrefslogtreecommitdiff
path: root/src/crypto/hmac.rs
diff options
context:
space:
mode:
authorErick Tryzelaar <[email protected]>2013-12-27 22:02:38 -0500
committerErick Tryzelaar <[email protected]>2013-12-27 22:02:38 -0500
commit85e6d1db12e63a24e9afc1d61c604597dc6c91d5 (patch)
treea75a30f41deba1b09966acd8df637ccfbfb533ce /src/crypto/hmac.rs
parentSwitch over to rustpkg (diff)
downloadrust-openssl-85e6d1db12e63a24e9afc1d61c604597dc6c91d5.tar.xz
rust-openssl-85e6d1db12e63a24e9afc1d61c604597dc6c91d5.zip
update to rust 0.9-pre (a5fa1d9)
Diffstat (limited to 'src/crypto/hmac.rs')
-rw-r--r--src/crypto/hmac.rs45
1 files changed, 20 insertions, 25 deletions
diff --git a/src/crypto/hmac.rs b/src/crypto/hmac.rs
index 5bc8b359..5cac7f50 100644
--- a/src/crypto/hmac.rs
+++ b/src/crypto/hmac.rs
@@ -14,26 +14,26 @@
* limitations under the License.
*/
-use hash::*;
-use std::{libc,ptr,vec};
+use std::libc::{c_uchar, c_int, c_uint};
+use std::ptr;
+use std::vec;
+use hash;
#[allow(non_camel_case_types)]
pub struct HMAC_CTX {
- md: EVP_MD,
- md_ctx: EVP_MD_CTX,
- i_ctx: EVP_MD_CTX,
- o_ctx: EVP_MD_CTX,
- key_length: libc::c_uint,
- key: [libc::c_uchar, ..128]
+ md: hash::EVP_MD,
+ md_ctx: hash::EVP_MD_CTX,
+ i_ctx: hash::EVP_MD_CTX,
+ o_ctx: hash::EVP_MD_CTX,
+ key_length: c_uint,
+ key: [c_uchar, ..128]
}
#[link(name = "crypto")]
extern {
- fn HMAC_CTX_init(ctx: *mut HMAC_CTX, key: *u8, keylen: libc::c_int, md: EVP_MD);
-
- fn HMAC_Update(ctx: *mut HMAC_CTX, input: *u8, len: libc::c_uint);
-
- fn HMAC_Final(ctx: *mut HMAC_CTX, output: *mut u8, len: *mut libc::c_uint);
+ fn HMAC_CTX_init(ctx: *mut HMAC_CTX, key: *u8, keylen: c_int, md: hash::EVP_MD);
+ fn HMAC_Update(ctx: *mut HMAC_CTX, input: *u8, len: c_uint);
+ fn HMAC_Final(ctx: *mut HMAC_CTX, output: *mut u8, len: *mut c_uint);
}
pub struct HMAC {
@@ -41,10 +41,9 @@ pub struct HMAC {
priv len: uint,
}
-pub fn HMAC(ht: HashType, key: ~[u8]) -> HMAC {
+pub fn HMAC(ht: hash::HashType, key: ~[u8]) -> HMAC {
unsafe {
-
- let (evp, mdlen) = evpmd(ht);
+ let (evp, mdlen) = hash::evpmd(ht);
let mut ctx : HMAC_CTX = HMAC_CTX {
md: ptr::null(),
@@ -57,7 +56,7 @@ pub fn HMAC(ht: HashType, key: ~[u8]) -> HMAC {
HMAC_CTX_init(&mut ctx,
key.as_ptr(),
- key.len() as libc::c_int,
+ key.len() as c_int,
evp);
HMAC { ctx: ctx, len: mdlen }
@@ -67,20 +66,16 @@ pub fn HMAC(ht: HashType, key: ~[u8]) -> HMAC {
impl HMAC {
pub fn update(&mut self, data: &[u8]) {
unsafe {
- data.as_imm_buf(|pdata, len| {
- HMAC_Update(&mut self.ctx, pdata, len as libc::c_uint)
- });
+ HMAC_Update(&mut self.ctx, data.as_ptr(), data.len() as c_uint)
}
}
pub fn final(&mut self) -> ~[u8] {
unsafe {
let mut res = vec::from_elem(self.len, 0u8);
- let mut outlen: libc::c_uint = 0;
- res.as_mut_buf(|pres, _len| {
- HMAC_Final(&mut self.ctx, pres, &mut outlen);
- assert!(self.len == outlen as uint)
- });
+ let mut outlen = 0;
+ HMAC_Final(&mut self.ctx, res.as_mut_ptr(), &mut outlen);
+ assert!(self.len == outlen as uint)
res
}
}