From 38682821ade69780e5c125fa00f1f71a3b161ffd Mon Sep 17 00:00:00 2001 From: Chris Cole Date: Sun, 14 Dec 2014 10:02:18 -0500 Subject: Added BigNum::{from_dec_str,from_hex_str}, BN_dec2bn, and BN_hex2bn. --- src/bn/mod.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/bn/mod.rs b/src/bn/mod.rs index 7f33e9ed..7605fee0 100644 --- a/src/bn/mod.rs +++ b/src/bn/mod.rs @@ -84,8 +84,22 @@ impl BigNum { }) } - pub fn one() -> BigNum { - BigNum::new_from(1).unwrap() + pub fn from_dec_str(s: &str) -> Result { + 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())); + Ok(v) + }) + } + + pub fn from_hex_str(s: &str) -> Result { + 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())); + Ok(v) + }) } pub fn new_from_slice(n: &[u8]) -> Result { @@ -362,6 +376,17 @@ impl BigNum { str } } + + pub fn to_hex_str(&self) -> String { + unsafe { + let buf = ffi::BN_bn2hex(self.raw()); + assert!(!buf.is_null()); + let c_str = CString::new(buf, false); + let str = c_str.as_str().unwrap().to_string(); + ffi::CRYPTO_free(buf as *mut c_void); + str + } + } } impl fmt::Show for BigNum { -- cgit v1.2.3