Loading openssl-sys/src/lib.rs +1 −0 Original line number Diff line number Diff line Loading @@ -1655,6 +1655,7 @@ extern "C" { pub fn ASN1_INTEGER_get(dest: *const ASN1_INTEGER) -> c_long; pub fn ASN1_INTEGER_set(dest: *mut ASN1_INTEGER, value: c_long) -> c_int; pub fn ASN1_INTEGER_to_BN(ai: *const ASN1_INTEGER, bn: *mut BIGNUM) -> *mut BIGNUM; pub fn ASN1_GENERALIZEDTIME_free(tm: *mut ASN1_GENERALIZEDTIME); pub fn ASN1_GENERALIZEDTIME_print(b: *mut BIO, tm: *const ASN1_GENERALIZEDTIME) -> c_int; pub fn ASN1_STRING_type_new(ty: c_int) -> *mut ASN1_STRING; Loading openssl/src/asn1.rs +17 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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`]. /// Loading openssl/src/x509/mod.rs +13 −0 Original line number Diff line number Diff line Loading @@ -523,6 +523,19 @@ impl X509Ref { } } /// Returns this certificate's serial number. /// /// This corresponds to [`X509_get_serialNumber`]. /// /// [`X509_get_serialNumber`]: https://www.openssl.org/docs/man1.1.0/crypto/X509_get_serialNumber.html pub fn serial_number(&self) -> &Asn1IntegerRef { unsafe { let r = ffi::X509_get_serialNumber(self.as_ptr()); assert!(!r.is_null()); Asn1IntegerRef::from_ptr(r) } } to_pem! { /// Serializes the certificate into a PEM-encoded X509 structure. /// Loading openssl/src/x509/tests.rs +1 −0 Original line number Diff line number Diff line Loading @@ -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] Loading Loading
openssl-sys/src/lib.rs +1 −0 Original line number Diff line number Diff line Loading @@ -1655,6 +1655,7 @@ extern "C" { pub fn ASN1_INTEGER_get(dest: *const ASN1_INTEGER) -> c_long; pub fn ASN1_INTEGER_set(dest: *mut ASN1_INTEGER, value: c_long) -> c_int; pub fn ASN1_INTEGER_to_BN(ai: *const ASN1_INTEGER, bn: *mut BIGNUM) -> *mut BIGNUM; pub fn ASN1_GENERALIZEDTIME_free(tm: *mut ASN1_GENERALIZEDTIME); pub fn ASN1_GENERALIZEDTIME_print(b: *mut BIO, tm: *const ASN1_GENERALIZEDTIME) -> c_int; pub fn ASN1_STRING_type_new(ty: c_int) -> *mut ASN1_STRING; Loading
openssl/src/asn1.rs +17 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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`]. /// Loading
openssl/src/x509/mod.rs +13 −0 Original line number Diff line number Diff line Loading @@ -523,6 +523,19 @@ impl X509Ref { } } /// Returns this certificate's serial number. /// /// This corresponds to [`X509_get_serialNumber`]. /// /// [`X509_get_serialNumber`]: https://www.openssl.org/docs/man1.1.0/crypto/X509_get_serialNumber.html pub fn serial_number(&self) -> &Asn1IntegerRef { unsafe { let r = ffi::X509_get_serialNumber(self.as_ptr()); assert!(!r.is_null()); Asn1IntegerRef::from_ptr(r) } } to_pem! { /// Serializes the certificate into a PEM-encoded X509 structure. /// Loading
openssl/src/x509/tests.rs +1 −0 Original line number Diff line number Diff line Loading @@ -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] Loading