Commit be863198 authored by Steven Fackler's avatar Steven Fackler
Browse files

Merge pull request #76 from vhbit/bn-zero-int

BN_is_zero as a Rust function
parents 19eab0e7 59b84351
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@
name = "openssl"
version = "0.0.0"
authors = ["Steven Fackler <sfackler@gmail.com"]
build = "make"

[lib]

+0 −9
Original line number Diff line number Diff line
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
+14 −2
Original line number Diff line number Diff line
use libc::{c_int, c_ulong};
use libc::{c_int, c_ulong, c_void};
use std::{fmt, ptr};
use std::c_str::CString;
use std::num::{One, Zero};
@@ -6,6 +6,16 @@ use std::num::{One, Zero};
use ffi;
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);

#[repr(C)]
@@ -381,9 +391,11 @@ impl Zero for BigNum {
    fn zero() -> BigNum {
        BigNum::new_from(0).unwrap()
    }

    fn is_zero(&self) -> bool {
        unsafe {
            ffi::BN_is_zero(self.raw()) == 1
            // It is raw contents of BN_is_zero macro
            (*self.raw()).top == 0
        }
    }
}
+2 −19
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@
use libc::{c_void, c_int, c_char, c_ulong, c_long, c_uint, c_uchar, size_t};
use std::ptr;

pub use bn::BIGNUM;

pub type ASN1_INTEGER = c_void;
pub type ASN1_STRING = 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_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)]
pub struct EVP_MD_CTX {
    digest: *mut EVP_MD,
@@ -189,15 +181,6 @@ extern {}
#[link(name="wsock32")]
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
pub unsafe fn BIO_eof(b: *mut BIO) -> bool {
    BIO_ctrl(b, BIO_CTRL_EOF, 0, ptr::null_mut()) == 1
+0 −13
Original line number Diff line number Diff line
@@ -237,16 +237,3 @@ fn test_cert_gen() {
    // FIXME: check data in result to be correct, needs implementation
    // 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);
    }
}