Remove a bunch of use of core feature

This commit is contained in:
Steven Fackler 2015-03-30 23:09:15 -07:00
parent c101abac6b
commit 121a667f9b
3 changed files with 37 additions and 24 deletions

View File

@ -3,7 +3,6 @@ use std::io;
use std::io::prelude::*; use std::io::prelude::*;
use std::ptr; use std::ptr;
use std::cmp; use std::cmp;
use std::num::Int;
use ffi; use ffi;
use ssl::error::{SslError}; use ssl::error::{SslError};
@ -61,7 +60,7 @@ impl MemBio {
impl Read for MemBio { impl Read for MemBio {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
let len = cmp::min(<c_int as Int>::max_value() as usize, buf.len()) as c_int; let len = cmp::min(c_int::max_value() as usize, buf.len()) as c_int;
let ret = unsafe { let ret = unsafe {
ffi::BIO_read(self.bio, buf.as_ptr() as *mut c_void, len) ffi::BIO_read(self.bio, buf.as_ptr() as *mut c_void, len)
}; };
@ -83,7 +82,7 @@ impl Read for MemBio {
impl Write for MemBio { impl Write for MemBio {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> { fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
let len = cmp::min(<c_int as Int>::max_value() as usize, buf.len()) as c_int; let len = cmp::min(c_int::max_value() as usize, buf.len()) as c_int;
let ret = unsafe { let ret = unsafe {
ffi::BIO_write(self.bio, buf.as_ptr() as *const c_void, len) ffi::BIO_write(self.bio, buf.as_ptr() as *const c_void, len)
}; };

View File

@ -8,8 +8,6 @@ use std::io::prelude::*;
use std::ffi::AsOsStr; use std::ffi::AsOsStr;
use std::mem; use std::mem;
use std::net; use std::net;
use std::num::FromPrimitive;
use std::num::Int;
use std::path::Path; use std::path::Path;
use std::ptr; use std::ptr;
use std::sync::{Once, ONCE_INIT, Arc, Mutex}; use std::sync::{Once, ONCE_INIT, Arc, Mutex};
@ -549,18 +547,18 @@ impl Ssl {
} }
fn read(&self, buf: &mut [u8]) -> c_int { fn read(&self, buf: &mut [u8]) -> c_int {
let len = cmp::min(<c_int as Int>::max_value() as usize, buf.len()) as c_int; let len = cmp::min(c_int::max_value() as usize, buf.len()) as c_int;
unsafe { ffi::SSL_read(*self.ssl, buf.as_ptr() as *mut c_void, len) } unsafe { ffi::SSL_read(*self.ssl, buf.as_ptr() as *mut c_void, len) }
} }
fn write(&self, buf: &[u8]) -> c_int { fn write(&self, buf: &[u8]) -> c_int {
let len = cmp::min(<c_int as Int>::max_value() as usize, buf.len()) as c_int; let len = cmp::min(c_int::max_value() as usize, buf.len()) as c_int;
unsafe { ffi::SSL_write(*self.ssl, buf.as_ptr() as *const c_void, len) } unsafe { ffi::SSL_write(*self.ssl, buf.as_ptr() as *const c_void, len) }
} }
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, ret) }; let err = unsafe { ffi::SSL_get_error(*self.ssl, ret) };
match FromPrimitive::from_isize(err as isize) { match LibSslError::from_i32(err as i32) {
Some(err) => err, Some(err) => err,
None => unreachable!() None => unreachable!()
} }
@ -622,18 +620,35 @@ impl Ssl {
} }
} }
#[derive(FromPrimitive, Debug)] macro_rules! make_LibSslError {
($($variant:ident = $value:ident),+) => {
#[derive(Debug)]
#[repr(i32)] #[repr(i32)]
enum LibSslError { enum LibSslError {
ErrorNone = ffi::SSL_ERROR_NONE, $($variant = ffi::$value),+
ErrorSsl = ffi::SSL_ERROR_SSL, }
ErrorWantRead = ffi::SSL_ERROR_WANT_READ,
ErrorWantWrite = ffi::SSL_ERROR_WANT_WRITE, impl LibSslError {
ErrorWantX509Lookup = ffi::SSL_ERROR_WANT_X509_LOOKUP, fn from_i32(val: i32) -> Option<LibSslError> {
ErrorSyscall = ffi::SSL_ERROR_SYSCALL, match val {
ErrorZeroReturn = ffi::SSL_ERROR_ZERO_RETURN, $(ffi::$value => Some(LibSslError::$variant),)+
ErrorWantConnect = ffi::SSL_ERROR_WANT_CONNECT, _ => None
ErrorWantAccept = ffi::SSL_ERROR_WANT_ACCEPT, }
}
}
}
}
make_LibSslError! {
ErrorNone = SSL_ERROR_NONE,
ErrorSsl = SSL_ERROR_SSL,
ErrorWantRead = SSL_ERROR_WANT_READ,
ErrorWantWrite = SSL_ERROR_WANT_WRITE,
ErrorWantX509Lookup = SSL_ERROR_WANT_X509_LOOKUP,
ErrorSyscall = SSL_ERROR_SYSCALL,
ErrorZeroReturn = SSL_ERROR_ZERO_RETURN,
ErrorWantConnect = SSL_ERROR_WANT_CONNECT,
ErrorWantAccept = SSL_ERROR_WANT_ACCEPT
} }
/// A stream wrapper which handles SSL encryption for an underlying stream. /// A stream wrapper which handles SSL encryption for an underlying stream.

View File

@ -1,11 +1,10 @@
use libc::{c_char, c_int, c_long, c_uint}; use libc::{c_char, c_int, c_long, c_ulong, c_uint};
use std::io; use std::io;
use std::io::prelude::*; use std::io::prelude::*;
use std::cmp::Ordering; use std::cmp::Ordering;
use std::ffi::CString; use std::ffi::CString;
use std::iter::repeat; use std::iter::repeat;
use std::mem; use std::mem;
use std::num::SignedInt;
use std::ptr; use std::ptr;
use asn1::{Asn1Time}; use asn1::{Asn1Time};
@ -287,8 +286,8 @@ impl X509Generator {
// While OpenSSL is actually OK to have negative serials // While OpenSSL is actually OK to have negative serials
// other libraries (for example, Go crypto) can drop // other libraries (for example, Go crypto) can drop
// such certificates as invalid // such certificates as invalid, so we clear the high bit
res.abs() ((res as c_ulong) >> 1) as c_long
} }
/// Generates a private key and a signed certificate and returns them /// Generates a private key and a signed certificate and returns them