Update to rust master

This commit is contained in:
Alex Crichton 2015-01-09 08:07:39 -08:00
parent 8b67adfc90
commit 9dfeea6ca9
14 changed files with 102 additions and 98 deletions

View File

@ -1,3 +1,5 @@
#![allow(unstable)]
extern crate "pkg-config" as pkg_config; extern crate "pkg-config" as pkg_config;
use std::os; use std::os;

View File

@ -1,5 +1,5 @@
#![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)] #![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
#![allow(dead_code)] #![allow(dead_code, unstable)]
extern crate libc; extern crate libc;
@ -197,12 +197,12 @@ static mut GUARDS: *mut Vec<Option<MutexGuard<'static, ()>>> = 0 as *mut Vec<Opt
extern fn locking_function(mode: c_int, n: c_int, _file: *const c_char, extern fn locking_function(mode: c_int, n: c_int, _file: *const c_char,
_line: c_int) { _line: c_int) {
unsafe { unsafe {
let mutex = &(*MUTEXES)[n as uint]; let mutex = &(*MUTEXES)[n as usize];
if mode & CRYPTO_LOCK != 0 { if mode & CRYPTO_LOCK != 0 {
(*GUARDS)[n as uint] = Some(mutex.lock().unwrap()); (*GUARDS)[n as usize] = Some(mutex.lock().unwrap());
} else { } else {
&(*GUARDS)[n as uint].take(); &(*GUARDS)[n as usize].take();
} }
} }
} }
@ -216,10 +216,10 @@ pub fn init() {
SSL_load_error_strings(); SSL_load_error_strings();
let num_locks = CRYPTO_num_locks(); let num_locks = CRYPTO_num_locks();
let mutexes = box range(0, num_locks).map(|_| MUTEX_INIT).collect::<Vec<_>>(); let mutexes = Box::new(range(0, num_locks).map(|_| MUTEX_INIT).collect::<Vec<_>>());
MUTEXES = mem::transmute(mutexes); MUTEXES = mem::transmute(mutexes);
let guards: Box<Vec<Option<MutexGuard<()>>>> = let guards: Box<Vec<Option<MutexGuard<()>>>> =
box range(0, num_locks).map(|_| None).collect(); Box::new(range(0, num_locks).map(|_| None).collect());
GUARDS = mem::transmute(guards); GUARDS = mem::transmute(guards);
CRYPTO_set_locking_callback(locking_function); CRYPTO_set_locking_callback(locking_function);

View File

@ -30,7 +30,7 @@ impl Asn1Time {
} }
/// Creates a new time on specified interval in days from now /// Creates a new time on specified interval in days from now
pub fn days_from_now(days: uint) -> Result<Asn1Time, SslError> { pub fn days_from_now(days: u32) -> Result<Asn1Time, SslError> {
Asn1Time::new_with_period(days as u64 * 60 * 60 * 24) Asn1Time::new_with_period(days as u64 * 60 * 60 * 24)
} }

View File

@ -58,7 +58,7 @@ impl MemBio {
} }
impl Reader for MemBio { impl Reader for MemBio {
fn read(&mut self, buf: &mut [u8]) -> IoResult<uint> { fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> {
let ret = unsafe { let ret = unsafe {
ffi::BIO_read(self.bio, buf.as_ptr() as *mut c_void, ffi::BIO_read(self.bio, buf.as_ptr() as *mut c_void,
buf.len() as c_int) buf.len() as c_int)
@ -81,7 +81,7 @@ impl Reader for MemBio {
}; };
Err(err) Err(err)
} else { } else {
Ok(ret as uint) Ok(ret as usize)
} }
} }
} }
@ -92,7 +92,7 @@ impl Writer for MemBio {
ffi::BIO_write(self.bio, buf.as_ptr() as *const c_void, ffi::BIO_write(self.bio, buf.as_ptr() as *const c_void,
buf.len() as c_int) buf.len() as c_int)
}; };
if buf.len() != ret as uint { if buf.len() != ret as usize {
Err(IoError { Err(IoError {
kind: OtherIoError, kind: OtherIoError,
desc: "MemBio write error", desc: "MemBio write error",

View File

@ -408,7 +408,7 @@ impl BigNum {
} }
pub fn to_vec(&self) -> Vec<u8> { pub fn to_vec(&self) -> Vec<u8> {
let size = self.num_bytes() as uint; let size = self.num_bytes() as usize;
let mut v = Vec::with_capacity(size); let mut v = Vec::with_capacity(size);
unsafe { unsafe {
ffi::BN_bn2bin(self.raw(), v.as_mut_ptr()); ffi::BN_bn2bin(self.raw(), v.as_mut_ptr());

View File

@ -16,16 +16,16 @@ pub enum HashType {
RIPEMD160 RIPEMD160
} }
pub fn evpmd(t: HashType) -> (*const ffi::EVP_MD, uint) { pub fn evpmd(t: HashType) -> (*const ffi::EVP_MD, u32) {
unsafe { unsafe {
match t { match t {
HashType::MD5 => (ffi::EVP_md5(), 16u), HashType::MD5 => (ffi::EVP_md5(), 16),
HashType::SHA1 => (ffi::EVP_sha1(), 20u), HashType::SHA1 => (ffi::EVP_sha1(), 20),
HashType::SHA224 => (ffi::EVP_sha224(), 28u), HashType::SHA224 => (ffi::EVP_sha224(), 28),
HashType::SHA256 => (ffi::EVP_sha256(), 32u), HashType::SHA256 => (ffi::EVP_sha256(), 32),
HashType::SHA384 => (ffi::EVP_sha384(), 48u), HashType::SHA384 => (ffi::EVP_sha384(), 48),
HashType::SHA512 => (ffi::EVP_sha512(), 64u), HashType::SHA512 => (ffi::EVP_sha512(), 64),
HashType::RIPEMD160 => (ffi::EVP_ripemd160(), 20u), HashType::RIPEMD160 => (ffi::EVP_ripemd160(), 20),
} }
} }
} }
@ -56,7 +56,7 @@ impl Drop for HasherContext {
pub struct Hasher { pub struct Hasher {
evp: *const ffi::EVP_MD, evp: *const ffi::EVP_MD,
ctx: HasherContext, ctx: HasherContext,
len: uint, len: u32,
} }
impl io::Writer for Hasher { impl io::Writer for Hasher {
@ -102,7 +102,7 @@ impl Hasher {
* initialization and its context for reuse * initialization and its context for reuse
*/ */
pub fn finalize_reuse(self) -> (Vec<u8>, HasherContext) { pub fn finalize_reuse(self) -> (Vec<u8>, HasherContext) {
let mut res = repeat(0u8).take(self.len).collect::<Vec<_>>(); let mut res = repeat(0u8).take(self.len as usize).collect::<Vec<_>>();
unsafe { unsafe {
ffi::EVP_DigestFinal_ex(self.ctx.ptr, res.as_mut_ptr(), ptr::null_mut()) ffi::EVP_DigestFinal_ex(self.ctx.ptr, res.as_mut_ptr(), ptr::null_mut())
}; };

View File

@ -22,7 +22,7 @@ use ffi;
pub struct HMAC { pub struct HMAC {
ctx: ffi::HMAC_CTX, ctx: ffi::HMAC_CTX,
len: uint, len: u32,
} }
#[allow(non_snake_case)] #[allow(non_snake_case)]
@ -53,10 +53,10 @@ impl HMAC {
pub fn finalize(&mut self) -> Vec<u8> { pub fn finalize(&mut self) -> Vec<u8> {
unsafe { unsafe {
let mut res: Vec<u8> = repeat(0).take(self.len).collect(); let mut res: Vec<u8> = repeat(0).take(self.len as usize).collect();
let mut outlen = 0; let mut outlen = 0;
ffi::HMAC_Final(&mut self.ctx, res.as_mut_ptr(), &mut outlen); ffi::HMAC_Final(&mut self.ctx, res.as_mut_ptr(), &mut outlen);
assert!(self.len == outlen as uint); assert!(self.len == outlen as u32);
res res
} }
} }

View File

@ -2,7 +2,7 @@ use libc::c_int;
use ffi; use ffi;
/// Derives a key from a password and salt using the PBKDF2-HMAC-SHA1 algorithm. /// Derives a key from a password and salt using the PBKDF2-HMAC-SHA1 algorithm.
pub fn pbkdf2_hmac_sha1(pass: &str, salt: &[u8], iter: uint, keylen: uint) -> Vec<u8> { pub fn pbkdf2_hmac_sha1(pass: &str, salt: &[u8], iter: usize, keylen: usize) -> Vec<u8> {
unsafe { unsafe {
assert!(iter >= 1); assert!(iter >= 1);
assert!(keylen >= 1); assert!(keylen >= 1);
@ -35,8 +35,8 @@ mod tests {
super::pbkdf2_hmac_sha1( super::pbkdf2_hmac_sha1(
"password", "password",
"salt".as_bytes(), "salt".as_bytes(),
1u, 1,
20u 20
), ),
vec!( vec!(
0x0c_u8, 0x60_u8, 0xc8_u8, 0x0f_u8, 0x96_u8, 0x1f_u8, 0x0e_u8, 0x0c_u8, 0x60_u8, 0xc8_u8, 0x0f_u8, 0x96_u8, 0x1f_u8, 0x0e_u8,
@ -49,8 +49,8 @@ mod tests {
super::pbkdf2_hmac_sha1( super::pbkdf2_hmac_sha1(
"password", "password",
"salt".as_bytes(), "salt".as_bytes(),
2u, 2,
20u 20
), ),
vec!( vec!(
0xea_u8, 0x6c_u8, 0x01_u8, 0x4d_u8, 0xc7_u8, 0x2d_u8, 0x6f_u8, 0xea_u8, 0x6c_u8, 0x01_u8, 0x4d_u8, 0xc7_u8, 0x2d_u8, 0x6f_u8,
@ -63,8 +63,8 @@ mod tests {
super::pbkdf2_hmac_sha1( super::pbkdf2_hmac_sha1(
"password", "password",
"salt".as_bytes(), "salt".as_bytes(),
4096u, 4096,
20u 20
), ),
vec!( vec!(
0x4b_u8, 0x00_u8, 0x79_u8, 0x01_u8, 0xb7_u8, 0x65_u8, 0x48_u8, 0x4b_u8, 0x00_u8, 0x79_u8, 0x01_u8, 0xb7_u8, 0x65_u8, 0x48_u8,
@ -77,8 +77,8 @@ mod tests {
super::pbkdf2_hmac_sha1( super::pbkdf2_hmac_sha1(
"password", "password",
"salt".as_bytes(), "salt".as_bytes(),
16777216u, 16777216,
20u 20
), ),
vec!( vec!(
0xee_u8, 0xfe_u8, 0x3d_u8, 0x61_u8, 0xcd_u8, 0x4d_u8, 0xa4_u8, 0xee_u8, 0xfe_u8, 0x3d_u8, 0x61_u8, 0xcd_u8, 0x4d_u8, 0xa4_u8,
@ -91,8 +91,8 @@ mod tests {
super::pbkdf2_hmac_sha1( super::pbkdf2_hmac_sha1(
"passwordPASSWORDpassword", "passwordPASSWORDpassword",
"saltSALTsaltSALTsaltSALTsaltSALTsalt".as_bytes(), "saltSALTsaltSALTsaltSALTsaltSALTsalt".as_bytes(),
4096u, 4096,
25u 25
), ),
vec!( vec!(
0x3d_u8, 0x2e_u8, 0xec_u8, 0x4f_u8, 0xe4_u8, 0x1c_u8, 0x84_u8, 0x3d_u8, 0x2e_u8, 0xec_u8, 0x4f_u8, 0xe4_u8, 0x1c_u8, 0x84_u8,
@ -106,8 +106,8 @@ mod tests {
super::pbkdf2_hmac_sha1( super::pbkdf2_hmac_sha1(
"pass\x00word", "pass\x00word",
"sa\x00lt".as_bytes(), "sa\x00lt".as_bytes(),
4096u, 4096,
16u 16
), ),
vec!( vec!(
0x56_u8, 0xfa_u8, 0x6a_u8, 0xa7_u8, 0x55_u8, 0x48_u8, 0x09_u8, 0x56_u8, 0xfa_u8, 0x6a_u8, 0xa7_u8, 0x55_u8, 0x48_u8, 0x09_u8,

View File

@ -72,11 +72,11 @@ impl PKey {
let rsa = ffi::EVP_PKEY_get1_RSA(self.evp); let rsa = ffi::EVP_PKEY_get1_RSA(self.evp);
let len = f(rsa, ptr::null()); let len = f(rsa, ptr::null());
if len < 0 as c_int { return vec!(); } if len < 0 as c_int { return vec!(); }
let mut s = repeat(0u8).take(len as uint).collect::<Vec<_>>(); let mut s = repeat(0u8).take(len as usize).collect::<Vec<_>>();
let r = f(rsa, &s.as_mut_ptr()); let r = f(rsa, &s.as_mut_ptr());
s.truncate(r as uint); s.truncate(r as usize);
s s
} }
} }
@ -89,11 +89,11 @@ impl PKey {
} }
} }
pub fn gen(&mut self, keysz: uint) { pub fn gen(&mut self, keysz: usize) {
unsafe { unsafe {
let rsa = ffi::RSA_generate_key( let rsa = ffi::RSA_generate_key(
keysz as c_uint, keysz as c_uint,
65537u as c_uint, 65537 as c_uint,
ptr::null(), ptr::null(),
ptr::null() ptr::null()
); );
@ -155,9 +155,9 @@ impl PKey {
/** /**
* Returns the size of the public key modulus. * Returns the size of the public key modulus.
*/ */
pub fn size(&self) -> uint { pub fn size(&self) -> usize {
unsafe { unsafe {
ffi::RSA_size(ffi::EVP_PKEY_get1_RSA(self.evp)) as uint ffi::RSA_size(ffi::EVP_PKEY_get1_RSA(self.evp)) as usize
} }
} }
@ -193,13 +193,13 @@ impl PKey {
* Returns the maximum amount of data that can be encrypted by an encrypt() * Returns the maximum amount of data that can be encrypted by an encrypt()
* call. * call.
*/ */
pub fn max_data(&self) -> uint { pub fn max_data(&self) -> usize {
unsafe { unsafe {
let rsa = ffi::EVP_PKEY_get1_RSA(self.evp); let rsa = ffi::EVP_PKEY_get1_RSA(self.evp);
let len = ffi::RSA_size(rsa); let len = ffi::RSA_size(rsa);
// 41 comes from RSA_public_encrypt(3) for OAEP // 41 comes from RSA_public_encrypt(3) for OAEP
len as uint - 41u len as usize - 41
} }
} }
@ -210,7 +210,7 @@ impl PKey {
assert!(s.len() < self.max_data()); assert!(s.len() < self.max_data());
let mut r = repeat(0u8).take(len as uint + 1).collect::<Vec<_>>(); let mut r = repeat(0u8).take(len as usize + 1).collect::<Vec<_>>();
let rv = ffi::RSA_public_encrypt( let rv = ffi::RSA_public_encrypt(
s.len() as c_uint, s.len() as c_uint,
@ -222,7 +222,7 @@ impl PKey {
if rv < 0 as c_int { if rv < 0 as c_int {
vec!() vec!()
} else { } else {
r.truncate(rv as uint); r.truncate(rv as usize);
r r
} }
} }
@ -235,7 +235,7 @@ impl PKey {
assert_eq!(s.len() as c_uint, ffi::RSA_size(rsa)); assert_eq!(s.len() as c_uint, ffi::RSA_size(rsa));
let mut r = repeat(0u8).take(len as uint + 1).collect::<Vec<_>>(); let mut r = repeat(0u8).take(len as usize + 1).collect::<Vec<_>>();
let rv = ffi::RSA_private_decrypt( let rv = ffi::RSA_private_decrypt(
s.len() as c_uint, s.len() as c_uint,
@ -247,7 +247,7 @@ impl PKey {
if rv < 0 as c_int { if rv < 0 as c_int {
vec!() vec!()
} else { } else {
r.truncate(rv as uint); r.truncate(rv as usize);
r r
} }
} }
@ -280,7 +280,7 @@ impl PKey {
unsafe { unsafe {
let rsa = ffi::EVP_PKEY_get1_RSA(self.evp); let rsa = ffi::EVP_PKEY_get1_RSA(self.evp);
let mut len = ffi::RSA_size(rsa); let mut len = ffi::RSA_size(rsa);
let mut r = repeat(0u8).take(len as uint + 1).collect::<Vec<_>>(); let mut r = repeat(0u8).take(len as usize + 1).collect::<Vec<_>>();
let rv = ffi::RSA_sign( let rv = ffi::RSA_sign(
openssl_hash_nid(hash), openssl_hash_nid(hash),
@ -293,7 +293,7 @@ impl PKey {
if rv < 0 as c_int { if rv < 0 as c_int {
vec!() vec!()
} else { } else {
r.truncate(len as uint); r.truncate(len as usize);
r r
} }
} }
@ -337,7 +337,7 @@ mod tests {
fn test_gen_pub() { fn test_gen_pub() {
let mut k0 = super::PKey::new(); let mut k0 = super::PKey::new();
let mut k1 = super::PKey::new(); let mut k1 = super::PKey::new();
k0.gen(512u); k0.gen(512);
k1.load_pub(k0.save_pub().as_slice()); k1.load_pub(k0.save_pub().as_slice());
assert_eq!(k0.save_pub(), k1.save_pub()); assert_eq!(k0.save_pub(), k1.save_pub());
assert_eq!(k0.size(), k1.size()); assert_eq!(k0.size(), k1.size());
@ -355,7 +355,7 @@ mod tests {
fn test_gen_priv() { fn test_gen_priv() {
let mut k0 = super::PKey::new(); let mut k0 = super::PKey::new();
let mut k1 = super::PKey::new(); let mut k1 = super::PKey::new();
k0.gen(512u); k0.gen(512);
k1.load_priv(k0.save_priv().as_slice()); k1.load_priv(k0.save_priv().as_slice());
assert_eq!(k0.save_priv(), k1.save_priv()); assert_eq!(k0.save_priv(), k1.save_priv());
assert_eq!(k0.size(), k1.size()); assert_eq!(k0.size(), k1.size());
@ -374,7 +374,7 @@ mod tests {
let mut k0 = super::PKey::new(); let mut k0 = super::PKey::new();
let mut k1 = super::PKey::new(); let mut k1 = super::PKey::new();
let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8); let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8);
k0.gen(512u); k0.gen(512);
k1.load_pub(k0.save_pub().as_slice()); k1.load_pub(k0.save_pub().as_slice());
let emsg = k1.encrypt(msg.as_slice()); let emsg = k1.encrypt(msg.as_slice());
let dmsg = k0.decrypt(emsg.as_slice()); let dmsg = k0.decrypt(emsg.as_slice());
@ -386,7 +386,7 @@ mod tests {
let mut k0 = super::PKey::new(); let mut k0 = super::PKey::new();
let mut k1 = super::PKey::new(); let mut k1 = super::PKey::new();
let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8); let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8);
k0.gen(512u); k0.gen(512);
k1.load_pub(k0.save_pub().as_slice()); k1.load_pub(k0.save_pub().as_slice());
let emsg = k1.encrypt_with_padding(msg.as_slice(), super::EncryptionPadding::PKCS1v15); let emsg = k1.encrypt_with_padding(msg.as_slice(), super::EncryptionPadding::PKCS1v15);
let dmsg = k0.decrypt_with_padding(emsg.as_slice(), super::EncryptionPadding::PKCS1v15); let dmsg = k0.decrypt_with_padding(emsg.as_slice(), super::EncryptionPadding::PKCS1v15);
@ -398,7 +398,7 @@ mod tests {
let mut k0 = super::PKey::new(); let mut k0 = super::PKey::new();
let mut k1 = super::PKey::new(); let mut k1 = super::PKey::new();
let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8); let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8);
k0.gen(512u); k0.gen(512);
k1.load_pub(k0.save_pub().as_slice()); k1.load_pub(k0.save_pub().as_slice());
let sig = k0.sign(msg.as_slice()); let sig = k0.sign(msg.as_slice());
let rv = k1.verify(msg.as_slice(), sig.as_slice()); let rv = k1.verify(msg.as_slice(), sig.as_slice());
@ -410,7 +410,7 @@ mod tests {
let mut k0 = super::PKey::new(); let mut k0 = super::PKey::new();
let mut k1 = super::PKey::new(); let mut k1 = super::PKey::new();
let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8); let msg = vec!(0xdeu8, 0xadu8, 0xd0u8, 0x0du8);
k0.gen(512u); k0.gen(512);
k1.load_pub(k0.save_pub().as_slice()); k1.load_pub(k0.save_pub().as_slice());
let sig = k0.sign_with_hash(msg.as_slice(), MD5); let sig = k0.sign_with_hash(msg.as_slice(), MD5);

View File

@ -1,7 +1,7 @@
use libc::c_int; use libc::c_int;
use ffi; use ffi;
pub fn rand_bytes(len: uint) -> Vec<u8> { pub fn rand_bytes(len: usize) -> Vec<u8> {
unsafe { unsafe {
let mut out = Vec::with_capacity(len); let mut out = Vec::with_capacity(len);
@ -21,7 +21,7 @@ mod tests {
#[test] #[test]
fn test_rand_bytes() { fn test_rand_bytes() {
let bytes = rand_bytes(32u); let bytes = rand_bytes(32);
println!("{}", bytes); println!("{:?}", bytes);
} }
} }

View File

@ -31,24 +31,24 @@ pub enum Type {
RC4_128, RC4_128,
} }
fn evpc(t: Type) -> (*const ffi::EVP_CIPHER, uint, uint) { fn evpc(t: Type) -> (*const ffi::EVP_CIPHER, u32, u32) {
unsafe { unsafe {
match t { match t {
Type::AES_128_ECB => (ffi::EVP_aes_128_ecb(), 16u, 16u), Type::AES_128_ECB => (ffi::EVP_aes_128_ecb(), 16, 16),
Type::AES_128_CBC => (ffi::EVP_aes_128_cbc(), 16u, 16u), Type::AES_128_CBC => (ffi::EVP_aes_128_cbc(), 16, 16),
#[cfg(feature = "aes_xts")] #[cfg(feature = "aes_xts")]
Type::AES_128_XTS => (ffi::EVP_aes_128_xts(), 32u, 16u), Type::AES_128_XTS => (ffi::EVP_aes_128_xts(), 32, 16),
// AES_128_CTR => (EVP_aes_128_ctr(), 16u, 0u), // AES_128_CTR => (EVP_aes_128_ctr(), 16, 0),
//AES_128_GCM => (EVP_aes_128_gcm(), 16u, 16u), //AES_128_GCM => (EVP_aes_128_gcm(), 16, 16),
Type::AES_256_ECB => (ffi::EVP_aes_256_ecb(), 32u, 16u), Type::AES_256_ECB => (ffi::EVP_aes_256_ecb(), 32, 16),
Type::AES_256_CBC => (ffi::EVP_aes_256_cbc(), 32u, 16u), Type::AES_256_CBC => (ffi::EVP_aes_256_cbc(), 32, 16),
#[cfg(feature = "aes_xts")] #[cfg(feature = "aes_xts")]
Type::AES_256_XTS => (ffi::EVP_aes_256_xts(), 64u, 16u), Type::AES_256_XTS => (ffi::EVP_aes_256_xts(), 64, 16),
// AES_256_CTR => (EVP_aes_256_ctr(), 32u, 0u), // AES_256_CTR => (EVP_aes_256_ctr(), 32, 0),
//AES_256_GCM => (EVP_aes_256_gcm(), 32u, 16u), //AES_256_GCM => (EVP_aes_256_gcm(), 32, 16),
Type::RC4_128 => (ffi::EVP_rc4(), 16u, 0u), Type::RC4_128 => (ffi::EVP_rc4(), 16, 0),
} }
} }
} }
@ -57,8 +57,8 @@ fn evpc(t: Type) -> (*const ffi::EVP_CIPHER, uint, uint) {
pub struct Crypter { pub struct Crypter {
evp: *const ffi::EVP_CIPHER, evp: *const ffi::EVP_CIPHER,
ctx: *mut ffi::EVP_CIPHER_CTX, ctx: *mut ffi::EVP_CIPHER_CTX,
keylen: uint, keylen: u32,
blocksize: uint blocksize: u32,
} }
impl Crypter { impl Crypter {
@ -92,7 +92,7 @@ impl Crypter {
Mode::Encrypt => 1 as c_int, Mode::Encrypt => 1 as c_int,
Mode::Decrypt => 0 as c_int, Mode::Decrypt => 0 as c_int,
}; };
assert_eq!(key.len(), self.keylen); assert_eq!(key.len(), self.keylen as usize);
ffi::EVP_CipherInit( ffi::EVP_CipherInit(
self.ctx, self.ctx,
@ -110,8 +110,9 @@ impl Crypter {
*/ */
pub fn update(&self, data: &[u8]) -> Vec<u8> { pub fn update(&self, data: &[u8]) -> Vec<u8> {
unsafe { unsafe {
let mut res = repeat(0u8).take(data.len() + self.blocksize).collect::<Vec<_>>(); let sum = data.len() + (self.blocksize as usize);
let mut reslen = (data.len() + self.blocksize) as u32; let mut res = repeat(0u8).take(sum).collect::<Vec<_>>();
let mut reslen = sum as u32;
ffi::EVP_CipherUpdate( ffi::EVP_CipherUpdate(
self.ctx, self.ctx,
@ -121,7 +122,7 @@ impl Crypter {
data.len() as c_int data.len() as c_int
); );
res.truncate(reslen as uint); res.truncate(reslen as usize);
res res
} }
} }
@ -131,14 +132,14 @@ impl Crypter {
*/ */
pub fn finalize(&self) -> Vec<u8> { pub fn finalize(&self) -> Vec<u8> {
unsafe { unsafe {
let mut res = repeat(0u8).take(self.blocksize).collect::<Vec<_>>(); let mut res = repeat(0u8).take(self.blocksize as usize).collect::<Vec<_>>();
let mut reslen = self.blocksize as c_int; let mut reslen = self.blocksize as c_int;
ffi::EVP_CipherFinal(self.ctx, ffi::EVP_CipherFinal(self.ctx,
res.as_mut_ptr(), res.as_mut_ptr(),
&mut reslen); &mut reslen);
res.truncate(reslen as uint); res.truncate(reslen as usize);
res res
} }
} }

View File

@ -1,4 +1,5 @@
#![feature(unsafe_destructor, old_orphan_check)] #![feature(unsafe_destructor)]
#![allow(unstable)]
#![crate_name="openssl"] #![crate_name="openssl"]
#![crate_type="rlib"] #![crate_type="rlib"]
#![crate_type="dylib"] #![crate_type="dylib"]

View File

@ -215,7 +215,7 @@ impl SslContext {
pub fn set_verify_with_data<T>(&mut self, mode: SslVerifyMode, pub fn set_verify_with_data<T>(&mut self, mode: SslVerifyMode,
verify: VerifyCallbackData<T>, verify: VerifyCallbackData<T>,
data: T) { data: T) {
let data = box data; let data = Box::new(data);
unsafe { unsafe {
ffi::SSL_CTX_set_ex_data(self.ctx.0, VERIFY_IDX, ffi::SSL_CTX_set_ex_data(self.ctx.0, VERIFY_IDX,
mem::transmute(Some(verify))); mem::transmute(Some(verify)));
@ -228,7 +228,7 @@ impl SslContext {
} }
/// Sets verification depth /// Sets verification depth
pub fn set_verify_depth(&mut self, depth: uint) { pub fn set_verify_depth(&mut self, depth: u32) {
unsafe { unsafe {
ffi::SSL_CTX_set_verify_depth(self.ctx.0, depth as c_int); ffi::SSL_CTX_set_verify_depth(self.ctx.0, depth as c_int);
} }
@ -280,7 +280,7 @@ struct MemBioRef<'ssl> {
} }
impl<'ssl> MemBioRef<'ssl> { impl<'ssl> MemBioRef<'ssl> {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> { fn read(&mut self, buf: &mut [u8]) -> Option<usize> {
(&mut self.bio as &mut Reader).read(buf).ok() (&mut self.bio as &mut Reader).read(buf).ok()
} }
@ -350,7 +350,7 @@ impl Ssl {
fn get_error(&self, ret: c_int) -> LibSslError { fn get_error(&self, ret: c_int) -> LibSslError {
let err = unsafe { ffi::SSL_get_error(self.ssl.0, ret) }; let err = unsafe { ffi::SSL_get_error(self.ssl.0, ret) };
match FromPrimitive::from_int(err as int) { match FromPrimitive::from_int(err as isize) {
Some(err) => err, Some(err) => err,
None => unreachable!() None => unreachable!()
} }
@ -421,7 +421,7 @@ impl<S: Stream> SslStream<S> {
// We're just using this as a buffer, so there's no reason to pay // We're just using this as a buffer, so there's no reason to pay
// to memset it // to memset it
buf: { buf: {
const CAP: uint = 16 * 1024; const CAP: usize = 16 * 1024;
let mut v = Vec::with_capacity(CAP); let mut v = Vec::with_capacity(CAP);
unsafe { v.set_len(CAP); } unsafe { v.set_len(CAP); }
v v
@ -529,9 +529,9 @@ impl<S: Stream> SslStream<S> {
} }
impl<S: Stream> Reader for SslStream<S> { impl<S: Stream> Reader for SslStream<S> {
fn read(&mut self, buf: &mut [u8]) -> IoResult<uint> { fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> {
match self.in_retry_wrapper(|ssl| { ssl.read(buf) }) { match self.in_retry_wrapper(|ssl| { ssl.read(buf) }) {
Ok(len) => Ok(len as uint), Ok(len) => Ok(len as usize),
Err(SslSessionClosed) => Err(SslSessionClosed) =>
Err(IoError { Err(IoError {
kind: EndOfFile, kind: EndOfFile,
@ -552,7 +552,7 @@ impl<S: Stream> Writer for SslStream<S> {
ssl.write(buf.split_at(start).1) ssl.write(buf.split_at(start).1)
}); });
match ret { match ret {
Ok(len) => start += len as uint, Ok(len) => start += len as usize,
_ => unreachable!() _ => unreachable!()
} }
try!(self.write_through()); try!(self.write_through());
@ -575,7 +575,7 @@ pub enum MaybeSslStream<S> where S: Stream {
} }
impl<S> Reader for MaybeSslStream<S> where S: Stream { impl<S> Reader for MaybeSslStream<S> where S: Stream {
fn read(&mut self, buf: &mut [u8]) -> IoResult<uint> { fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> {
match *self { match *self {
MaybeSslStream::Ssl(ref mut s) => s.read(buf), MaybeSslStream::Ssl(ref mut s) => s.read(buf),
MaybeSslStream::Normal(ref mut s) => s.read(buf), MaybeSslStream::Normal(ref mut s) => s.read(buf),

View File

@ -173,8 +173,8 @@ impl<'a, T: AsStr<'a>> ToStr for Vec<T> {
/// # let _ = fs::unlink(&pkey_path); /// # let _ = fs::unlink(&pkey_path);
/// ``` /// ```
pub struct X509Generator { pub struct X509Generator {
bits: uint, bits: u32,
days: uint, days: u32,
CN: String, CN: String,
key_usage: Vec<KeyUsage>, key_usage: Vec<KeyUsage>,
ext_key_usage: Vec<ExtKeyUsage>, ext_key_usage: Vec<ExtKeyUsage>,
@ -203,13 +203,13 @@ impl X509Generator {
} }
/// Sets desired bit length /// Sets desired bit length
pub fn set_bitlength(mut self, bits: uint) -> X509Generator { pub fn set_bitlength(mut self, bits: u32) -> X509Generator {
self.bits = bits; self.bits = bits;
self self
} }
/// Sets certificate validity period in days since today /// Sets certificate validity period in days since today
pub fn set_valid_period(mut self, days: uint) -> X509Generator { pub fn set_valid_period(mut self, days: u32) -> X509Generator {
self.days = days; self.days = days;
self self
} }
@ -288,7 +288,7 @@ impl X509Generator {
ffi::init(); ffi::init();
let mut p_key = PKey::new(); let mut p_key = PKey::new();
p_key.gen(self.bits); p_key.gen(self.bits as usize);
unsafe { unsafe {
let x509 = ffi::X509_new(); let x509 = ffi::X509_new();
@ -386,7 +386,7 @@ impl<'ctx> X509<'ctx> {
/// Returns certificate fingerprint calculated using provided hash /// Returns certificate fingerprint calculated using provided hash
pub fn fingerprint(&self, hash_type: HashType) -> Option<Vec<u8>> { pub fn fingerprint(&self, hash_type: HashType) -> Option<Vec<u8>> {
let (evp, len) = evpmd(hash_type); let (evp, len) = evpmd(hash_type);
let v: Vec<u8> = repeat(0).take(len).collect(); let v: Vec<u8> = repeat(0).take(len as usize).collect();
let act_len: c_uint = 0; let act_len: c_uint = 0;
let res = unsafe { let res = unsafe {
ffi::X509_digest(self.handle, evp, mem::transmute(v.as_ptr()), ffi::X509_digest(self.handle, evp, mem::transmute(v.as_ptr()),
@ -396,7 +396,7 @@ impl<'ctx> X509<'ctx> {
match res { match res {
0 => None, 0 => None,
_ => { _ => {
let act_len = act_len as uint; let act_len = act_len as u32;
match len.cmp(&act_len) { match len.cmp(&act_len) {
Ordering::Greater => None, Ordering::Greater => None,
Ordering::Equal => Some(v), Ordering::Equal => Some(v),
@ -514,7 +514,7 @@ make_validation_error!(X509_V_OK,
#[test] #[test]
fn test_negative_serial() { fn test_negative_serial() {
// I guess that's enough to get a random negative number // I guess that's enough to get a random negative number
for _ in range(0u, 1000) { for _ in range(0, 1000) {
assert!(X509Generator::random_serial() > 0, "All serials should be positive"); assert!(X509Generator::random_serial() > 0, "All serials should be positive");
} }
} }