diff options
| author | Steven Fackler <[email protected]> | 2014-10-14 13:59:52 -0700 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2014-10-14 13:59:52 -0700 |
| commit | fa951b438418c90d68fdf687a4e636f0cade7fc0 (patch) | |
| tree | f8be7b12c3b0abc2d2a040af1a9f2f63a4fad96d /src | |
| parent | Merge pull request #87 from vhbit/removed-native (diff) | |
| parent | Cleaned up BigNum constructors (diff) | |
| download | rust-openssl-fa951b438418c90d68fdf687a4e636f0cade7fc0.tar.xz rust-openssl-fa951b438418c90d68fdf687a4e636f0cade7fc0.zip | |
Merge pull request #86 from vhbit/bn-squash-init
Cleaned up BigNum constructors
Diffstat (limited to 'src')
| -rw-r--r-- | src/bn/mod.rs | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/src/bn/mod.rs b/src/bn/mod.rs index 510c9269..6311e89c 100644 --- a/src/bn/mod.rs +++ b/src/bn/mod.rs @@ -79,41 +79,27 @@ macro_rules! with_bn_in_ctx( ) impl BigNum { - // FIXME: squash 3 constructors into one pub fn new() -> Result<BigNum, SslError> { unsafe { ffi::init(); - let v = ffi::BN_new(); - if v.is_null() { - Err(SslError::get()) - } else { - Ok(BigNum(v)) - } + + let v = try_ssl_null!(ffi::BN_new()); + Ok(BigNum(v)) } } pub fn new_from(n: u64) -> Result<BigNum, SslError> { - unsafe { - ffi::init(); - let bn = ffi::BN_new(); - if bn.is_null() || ffi::BN_set_word(bn, n as c_ulong) == 0 { - Err(SslError::get()) - } else { - Ok(BigNum(bn)) - } - } + BigNum::new().and_then(|v| unsafe { + try_ssl!(ffi::BN_set_word(v.raw(), n as c_ulong)); + Ok(v) + }) } pub fn new_from_slice(n: &[u8]) -> Result<BigNum, SslError> { - unsafe { - ffi::init(); - let bn = ffi::BN_new(); - if bn.is_null() || ffi::BN_bin2bn(n.as_ptr(), n.len() as c_int, bn).is_null() { - Err(SslError::get()) - } else { - Ok(BigNum(bn)) - } - } + BigNum::new().and_then(|v| unsafe { + try_ssl_null!(ffi::BN_bin2bn(n.as_ptr(), n.len() as c_int, v.raw())); + Ok(v) + }) } pub fn checked_sqr(&self) -> Result<BigNum, SslError> { |