aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChris Cole <[email protected]>2015-01-02 18:47:29 -0500
committerChris Cole <[email protected]>2015-01-02 18:47:29 -0500
commit2e2fde4b1a868050245b185b26a12187c379ec0d (patch)
tree2bd3de872d40f66dbd8b3d9489a5ec1f3c65da7b /src
parentMerge remote-tracking branch 'upstream/master' (diff)
downloadrust-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.rs61
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);