Merge pull request #76 from vhbit/bn-zero-int
BN_is_zero as a Rust function
This commit is contained in:
commit
be86319853
|
|
@ -3,7 +3,6 @@
|
||||||
name = "openssl"
|
name = "openssl"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
authors = ["Steven Fackler <sfackler@gmail.com"]
|
authors = ["Steven Fackler <sfackler@gmail.com"]
|
||||||
build = "make"
|
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|
||||||
|
|
|
||||||
9
Makefile
9
Makefile
|
|
@ -1,9 +0,0 @@
|
||||||
ifneq ($(findstring i686,$(TARGET)),)
|
|
||||||
CFLAGS += -m32
|
|
||||||
else
|
|
||||||
CFLAGS += -m64
|
|
||||||
endif
|
|
||||||
|
|
||||||
default:
|
|
||||||
$(CC) $(CFLAGS) -c native/bn_is_zero.c -o $(OUT_DIR)/bn_is_zero.o
|
|
||||||
$(AR) crus $(OUT_DIR)/libwrapped.a $(OUT_DIR)/bn_is_zero.o
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use libc::{c_int, c_ulong};
|
use libc::{c_int, c_ulong, c_void};
|
||||||
use std::{fmt, ptr};
|
use std::{fmt, ptr};
|
||||||
use std::c_str::CString;
|
use std::c_str::CString;
|
||||||
use std::num::{One, Zero};
|
use std::num::{One, Zero};
|
||||||
|
|
@ -6,6 +6,16 @@ use std::num::{One, Zero};
|
||||||
use ffi;
|
use ffi;
|
||||||
use ssl::error::SslError;
|
use ssl::error::SslError;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct BIGNUM {
|
||||||
|
d: *mut c_void,
|
||||||
|
top: c_int,
|
||||||
|
dmax: c_int,
|
||||||
|
neg: c_int,
|
||||||
|
flags: c_int,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct BigNum(*mut ffi::BIGNUM);
|
pub struct BigNum(*mut ffi::BIGNUM);
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
|
|
@ -381,9 +391,11 @@ impl Zero for BigNum {
|
||||||
fn zero() -> BigNum {
|
fn zero() -> BigNum {
|
||||||
BigNum::new_from(0).unwrap()
|
BigNum::new_from(0).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_zero(&self) -> bool {
|
fn is_zero(&self) -> bool {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::BN_is_zero(self.raw()) == 1
|
// It is raw contents of BN_is_zero macro
|
||||||
|
(*self.raw()).top == 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
21
src/ffi.rs
21
src/ffi.rs
|
|
@ -3,6 +3,8 @@
|
||||||
use libc::{c_void, c_int, c_char, c_ulong, c_long, c_uint, c_uchar, size_t};
|
use libc::{c_void, c_int, c_char, c_ulong, c_long, c_uint, c_uchar, size_t};
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
|
pub use bn::BIGNUM;
|
||||||
|
|
||||||
pub type ASN1_INTEGER = c_void;
|
pub type ASN1_INTEGER = c_void;
|
||||||
pub type ASN1_STRING = c_void;
|
pub type ASN1_STRING = c_void;
|
||||||
pub type ASN1_TIME = c_void;
|
pub type ASN1_TIME = c_void;
|
||||||
|
|
@ -28,16 +30,6 @@ pub type X509_NAME = c_void;
|
||||||
pub type X509_REQ = c_void;
|
pub type X509_REQ = c_void;
|
||||||
pub type X509_STORE_CTX = c_void;
|
pub type X509_STORE_CTX = c_void;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
#[repr(C)]
|
|
||||||
pub struct BIGNUM {
|
|
||||||
d: *mut c_void,
|
|
||||||
top: c_int,
|
|
||||||
dmax: c_int,
|
|
||||||
pub neg: c_int,
|
|
||||||
flags: c_int,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct EVP_MD_CTX {
|
pub struct EVP_MD_CTX {
|
||||||
digest: *mut EVP_MD,
|
digest: *mut EVP_MD,
|
||||||
|
|
@ -189,15 +181,6 @@ extern {}
|
||||||
#[link(name="wsock32")]
|
#[link(name="wsock32")]
|
||||||
extern { }
|
extern { }
|
||||||
|
|
||||||
/* Since the openssl BN_is_zero is sometimes a macro, this wrapper is necessary. */
|
|
||||||
pub unsafe fn BN_is_zero(a: *mut BIGNUM) -> c_int { bn_is_zero(a) }
|
|
||||||
|
|
||||||
/* Special import from native/bn_is_zero.c */
|
|
||||||
#[link(name = "wrapped", kind = "static")]
|
|
||||||
extern "C" {
|
|
||||||
pub fn bn_is_zero(a: *mut BIGNUM) -> c_int;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Functions converted from macros
|
// Functions converted from macros
|
||||||
pub unsafe fn BIO_eof(b: *mut BIO) -> bool {
|
pub unsafe fn BIO_eof(b: *mut BIO) -> bool {
|
||||||
BIO_ctrl(b, BIO_CTRL_EOF, 0, ptr::null_mut()) == 1
|
BIO_ctrl(b, BIO_CTRL_EOF, 0, ptr::null_mut()) == 1
|
||||||
|
|
|
||||||
|
|
@ -237,16 +237,3 @@ fn test_cert_gen() {
|
||||||
// FIXME: check data in result to be correct, needs implementation
|
// FIXME: check data in result to be correct, needs implementation
|
||||||
// of X509 getters
|
// of X509 getters
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_bn_is_zero() {
|
|
||||||
use ffi;
|
|
||||||
use std::ptr;
|
|
||||||
|
|
||||||
unsafe {
|
|
||||||
let bn = ffi::BN_new();
|
|
||||||
assert!(bn != ptr::null_mut());
|
|
||||||
// Just make sure it is linked and resolved correctly
|
|
||||||
ffi::BN_is_zero(bn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue