diff options
| author | Chris Cole <[email protected]> | 2015-01-02 18:47:29 -0500 |
|---|---|---|
| committer | Chris Cole <[email protected]> | 2015-01-02 18:47:29 -0500 |
| commit | 2e2fde4b1a868050245b185b26a12187c379ec0d (patch) | |
| tree | 2bd3de872d40f66dbd8b3d9489a5ec1f3c65da7b /src | |
| parent | Merge remote-tracking branch 'upstream/master' (diff) | |
| download | rust-openssl-2e2fde4b1a868050245b185b26a12187c379ec0d.tar.xz rust-openssl-2e2fde4b1a868050245b185b26a12187c379ec0d.zip | |
Added BN_add_word, BN_sub_word, BN_mul_word, BN_div_word.
Removed BIGNUM_PTR struct.
Diffstat (limited to 'src')
| -rw-r--r-- | src/bn/mod.rs | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/src/bn/mod.rs b/src/bn/mod.rs index a4d23302..137adc43 100644 --- a/src/bn/mod.rs +++ b/src/bn/mod.rs @@ -87,18 +87,16 @@ impl BigNum { pub fn from_dec_str(s: &str) -> Result<BigNum, SslError> { BigNum::new().and_then(|v| unsafe { - let ref mut bn_ptr = ffi::BIGNUM_PTR { ptr: v.raw(), }; let c_str = s.to_c_str(); - try_ssl!(ffi::BN_dec2bn(bn_ptr, c_str.as_ptr())); + try_ssl!(ffi::BN_dec2bn(v.raw_ptr(), c_str.as_ptr())); Ok(v) }) } pub fn from_hex_str(s: &str) -> Result<BigNum, SslError> { BigNum::new().and_then(|v| unsafe { - let ref mut bn_ptr = ffi::BIGNUM_PTR { ptr: v.raw(), }; let c_str = s.to_c_str(); - try_ssl!(ffi::BN_hex2bn(bn_ptr, c_str.as_ptr())); + try_ssl!(ffi::BN_hex2bn(v.raw_ptr(), c_str.as_ptr())); Ok(v) }) } @@ -164,9 +162,55 @@ impl BigNum { } } - pub fn mod_word(&self, w: c_ulong) -> c_ulong { + pub fn add_word(&mut self, w: c_ulong) -> Result<(), SslError> { unsafe { - ffi::BN_mod_word(self.raw(), w) + if ffi::BN_add_word(self.raw(), w) == 1 { + Ok(()) + } else { + Err(SslError::get()) + } + } + } + + pub fn sub_word(&mut self, w: c_ulong) -> Result<(), SslError> { + unsafe { + if ffi::BN_sub_word(self.raw(), w) == 1 { + Ok(()) + } else { + Err(SslError::get()) + } + } + } + + pub fn mul_word(&mut self, w: c_ulong) -> Result<(), SslError> { + unsafe { + if ffi::BN_mul_word(self.raw(), w) == 1 { + Ok(()) + } else { + Err(SslError::get()) + } + } + } + + pub fn div_word(&mut self, w: c_ulong) -> Result<c_ulong, SslError> { + unsafe { + let result = ffi::BN_div_word(self.raw(), w); + if result != -1 as c_ulong { + Ok(result) + } else { + Err(SslError::get()) + } + } + } + + pub fn mod_word(&self, w: c_ulong) -> Result<c_ulong, SslError> { + unsafe { + let result = ffi::BN_mod_word(self.raw(), w); + if result != -1 as c_ulong { + Ok(result) + } else { + Err(SslError::get()) + } } } @@ -357,6 +401,11 @@ impl BigNum { n } + unsafe fn raw_ptr(&self) -> *const *mut ffi::BIGNUM { + let BigNum(ref n) = *self; + n + } + pub fn to_vec(&self) -> Vec<u8> { let size = self.num_bytes() as uint; let mut v = Vec::with_capacity(size); |