Loading openssl/src/asn1.rs +36 −31 Original line number Diff line number Diff line Loading @@ -2,19 +2,48 @@ use libc::c_long; use std::{ptr, fmt}; use std::marker::PhantomData; use std::ops::Deref; use ffi; use opaque::Opaque; use {cvt, cvt_p}; use bio::MemBio; use error::ErrorStack; /// A borrowed Asn1Time pub struct Asn1TimeRef(Opaque); impl Asn1TimeRef { /// Creates a new `Asn1TimeRef` wrapping the provided handle. pub unsafe fn from_ptr<'a>(handle: *mut ffi::ASN1_TIME) -> &'a Asn1TimeRef { &*(handle as *mut _) } /// Returns the raw handle pub fn as_ptr(&self) -> *mut ffi::ASN1_TIME { self as *const _ as *mut _ } } impl fmt::Display for Asn1TimeRef { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let mem_bio = try!(MemBio::new()); let as_str = unsafe { try!(cvt(ffi::ASN1_TIME_print(mem_bio.as_ptr(), self.as_ptr()))); String::from_utf8_unchecked(mem_bio.get_buf().to_owned()) }; write!(f, "{}", as_str) } } /// Corresponds to the ASN.1 structure Time defined in RFC5280 pub struct Asn1Time(Asn1TimeRef<'static>); pub struct Asn1Time(*mut ffi::ASN1_TIME); impl Asn1Time { /// Wraps existing ASN1_TIME and takes ownership pub unsafe fn from_ptr(handle: *mut ffi::ASN1_TIME) -> Asn1Time { Asn1Time(Asn1TimeRef::from_ptr(handle)) Asn1Time(handle) } fn from_period(period: c_long) -> Result<Asn1Time, ErrorStack> { Loading @@ -33,36 +62,12 @@ impl Asn1Time { } impl Deref for Asn1Time { type Target = Asn1TimeRef<'static>; fn deref(&self) -> &Asn1TimeRef<'static> { &self.0 } } /// A borrowed Asn1Time pub struct Asn1TimeRef<'a>(*mut ffi::ASN1_TIME, PhantomData<&'a ()>); type Target = Asn1TimeRef; impl<'a> Asn1TimeRef<'a> { /// Creates a new `Asn1TimeRef` wrapping the provided handle. pub unsafe fn from_ptr(handle: *mut ffi::ASN1_TIME) -> Asn1TimeRef<'a> { Asn1TimeRef(handle, PhantomData) } /// Returns the raw handle pub fn as_ptr(&self) -> *mut ffi::ASN1_TIME { self.0 } fn deref(&self) -> &Asn1TimeRef { unsafe { Asn1TimeRef::from_ptr(self.0) } impl<'a> fmt::Display for Asn1TimeRef<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let mem_bio = try!(MemBio::new()); let as_str = unsafe { try!(cvt(ffi::ASN1_TIME_print(mem_bio.as_ptr(), self.0))); String::from_utf8_unchecked(mem_bio.get_buf().to_owned()) }; write!(f, "{}", as_str) } } Loading openssl/src/x509/mod.rs +2 −2 Original line number Diff line number Diff line Loading @@ -446,7 +446,7 @@ impl X509Ref { } /// Returns certificate Not After validity period. pub fn not_after<'a>(&'a self) -> Asn1TimeRef<'a> { pub fn not_after<'a>(&'a self) -> &'a Asn1TimeRef { unsafe { let date = compat::X509_get_notAfter(self.as_ptr()); assert!(!date.is_null()); Loading @@ -455,7 +455,7 @@ impl X509Ref { } /// Returns certificate Not Before validity period. pub fn not_before<'a>(&'a self) -> Asn1TimeRef<'a> { pub fn not_before<'a>(&'a self) -> &'a Asn1TimeRef { unsafe { let date = compat::X509_get_notBefore(self.as_ptr()); assert!(!date.is_null()); Loading Loading
openssl/src/asn1.rs +36 −31 Original line number Diff line number Diff line Loading @@ -2,19 +2,48 @@ use libc::c_long; use std::{ptr, fmt}; use std::marker::PhantomData; use std::ops::Deref; use ffi; use opaque::Opaque; use {cvt, cvt_p}; use bio::MemBio; use error::ErrorStack; /// A borrowed Asn1Time pub struct Asn1TimeRef(Opaque); impl Asn1TimeRef { /// Creates a new `Asn1TimeRef` wrapping the provided handle. pub unsafe fn from_ptr<'a>(handle: *mut ffi::ASN1_TIME) -> &'a Asn1TimeRef { &*(handle as *mut _) } /// Returns the raw handle pub fn as_ptr(&self) -> *mut ffi::ASN1_TIME { self as *const _ as *mut _ } } impl fmt::Display for Asn1TimeRef { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let mem_bio = try!(MemBio::new()); let as_str = unsafe { try!(cvt(ffi::ASN1_TIME_print(mem_bio.as_ptr(), self.as_ptr()))); String::from_utf8_unchecked(mem_bio.get_buf().to_owned()) }; write!(f, "{}", as_str) } } /// Corresponds to the ASN.1 structure Time defined in RFC5280 pub struct Asn1Time(Asn1TimeRef<'static>); pub struct Asn1Time(*mut ffi::ASN1_TIME); impl Asn1Time { /// Wraps existing ASN1_TIME and takes ownership pub unsafe fn from_ptr(handle: *mut ffi::ASN1_TIME) -> Asn1Time { Asn1Time(Asn1TimeRef::from_ptr(handle)) Asn1Time(handle) } fn from_period(period: c_long) -> Result<Asn1Time, ErrorStack> { Loading @@ -33,36 +62,12 @@ impl Asn1Time { } impl Deref for Asn1Time { type Target = Asn1TimeRef<'static>; fn deref(&self) -> &Asn1TimeRef<'static> { &self.0 } } /// A borrowed Asn1Time pub struct Asn1TimeRef<'a>(*mut ffi::ASN1_TIME, PhantomData<&'a ()>); type Target = Asn1TimeRef; impl<'a> Asn1TimeRef<'a> { /// Creates a new `Asn1TimeRef` wrapping the provided handle. pub unsafe fn from_ptr(handle: *mut ffi::ASN1_TIME) -> Asn1TimeRef<'a> { Asn1TimeRef(handle, PhantomData) } /// Returns the raw handle pub fn as_ptr(&self) -> *mut ffi::ASN1_TIME { self.0 } fn deref(&self) -> &Asn1TimeRef { unsafe { Asn1TimeRef::from_ptr(self.0) } impl<'a> fmt::Display for Asn1TimeRef<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let mem_bio = try!(MemBio::new()); let as_str = unsafe { try!(cvt(ffi::ASN1_TIME_print(mem_bio.as_ptr(), self.0))); String::from_utf8_unchecked(mem_bio.get_buf().to_owned()) }; write!(f, "{}", as_str) } } Loading
openssl/src/x509/mod.rs +2 −2 Original line number Diff line number Diff line Loading @@ -446,7 +446,7 @@ impl X509Ref { } /// Returns certificate Not After validity period. pub fn not_after<'a>(&'a self) -> Asn1TimeRef<'a> { pub fn not_after<'a>(&'a self) -> &'a Asn1TimeRef { unsafe { let date = compat::X509_get_notAfter(self.as_ptr()); assert!(!date.is_null()); Loading @@ -455,7 +455,7 @@ impl X509Ref { } /// Returns certificate Not Before validity period. pub fn not_before<'a>(&'a self) -> Asn1TimeRef<'a> { pub fn not_before<'a>(&'a self) -> &'a Asn1TimeRef { unsafe { let date = compat::X509_get_notBefore(self.as_ptr()); assert!(!date.is_null()); Loading