aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-03-28 20:48:28 +0200
committerSteven Fackler <[email protected]>2018-03-28 20:48:28 +0200
commitc82a87a18e418d3748aa6203d4669d091df426ea (patch)
tree0c2a598e935280291f2ebb4208a0aac81f147b66 /openssl/src
parentAdd X509Ref::serial_number (diff)
downloadrust-openssl-c82a87a18e418d3748aa6203d4669d091df426ea.tar.xz
rust-openssl-c82a87a18e418d3748aa6203d4669d091df426ea.zip
Add Asn1IntegerRef::to_bn
Also deprecate Asn1IntegerRef since it's just asking for trouble.
Diffstat (limited to 'openssl/src')
-rw-r--r--openssl/src/asn1.rs23
-rw-r--r--openssl/src/x509/tests.rs1
2 files changed, 18 insertions, 6 deletions
diff --git a/openssl/src/asn1.rs b/openssl/src/asn1.rs
index d129235a..f6917aae 100644
--- a/openssl/src/asn1.rs
+++ b/openssl/src/asn1.rs
@@ -26,7 +26,7 @@
//! ```
use ffi;
use foreign_types::{ForeignType, ForeignTypeRef};
-use libc::{c_long, c_char, c_int};
+use libc::{c_char, c_int, c_long};
use std::fmt;
use std::ptr;
use std::slice;
@@ -34,6 +34,7 @@ use std::str;
use {cvt, cvt_p};
use bio::MemBio;
+use bn::BigNum;
use error::ErrorStack;
use nid::Nid;
use string::OpensslString;
@@ -191,14 +192,24 @@ foreign_type_and_impl_send_sync! {
}
impl Asn1IntegerRef {
- /// Returns value of ASN.1 integer, or -1 if there is an error, and 0 if the integer is Null.
- ///
- /// OpenSSL documentation at [`ASN1_INTEGER_get`].
- ///
- /// [`ASN1_INTEGER_get`]: https://www.openssl.org/docs/man1.1.0/crypto/ASN1_INTEGER_get.html
+ #[allow(missing_docs)]
+ #[deprecated(since = "0.10.6", note = "use to_bn instead")]
pub fn get(&self) -> i64 {
unsafe { ::ffi::ASN1_INTEGER_get(self.as_ptr()) as i64 }
}
+
+ /// Converts the integer to a `BigNum`.
+ ///
+ /// This corresponds to [`ASN1_INTEGER_to_BN`].
+ ///
+ /// [`ASN1_INTEGER_to_BN`]: https://www.openssl.org/docs/man1.1.0/crypto/ASN1_INTEGER_get.html
+ pub fn to_bn(&self) -> Result<BigNum, ErrorStack> {
+ unsafe {
+ cvt_p(::ffi::ASN1_INTEGER_to_BN(self.as_ptr(), ptr::null_mut()))
+ .map(|p| BigNum::from_ptr(p))
+ }
+ }
+
/// Sets the ASN.1 value to the value of a signed 32-bit integer, for larger numbers
/// see [`bn`].
///
diff --git a/openssl/src/x509/tests.rs b/openssl/src/x509/tests.rs
index ecc7f7de..fa8056ad 100644
--- a/openssl/src/x509/tests.rs
+++ b/openssl/src/x509/tests.rs
@@ -202,6 +202,7 @@ fn x509_builder() {
.next()
.unwrap();
assert_eq!("foobar.com".as_bytes(), cn.data().as_slice());
+ assert_eq!(serial, x509.serial_number().to_bn().unwrap());
}
#[test]