summaryrefslogtreecommitdiff
path: root/openssl/src/asn1.rs
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2016-10-31 22:43:05 -0700
committerSteven Fackler <sfackler@gmail.com>2016-10-31 22:43:05 -0700
commitdc4098bdd83e23703b2490741ee7461caea83375 (patch)
treee0f1fd86bd2fc67e51fe744b09762f89f04d46e3 /openssl/src/asn1.rs
parent50d8cca640d4919474605810179f2800f7242722 (diff)
downloadrust-openssl-dc4098bdd83e23703b2490741ee7461caea83375.zip
Clean up x509 name entries
Diffstat (limited to 'openssl/src/asn1.rs')
-rw-r--r--openssl/src/asn1.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/openssl/src/asn1.rs b/openssl/src/asn1.rs
index a089b41b..d0704693 100644
--- a/openssl/src/asn1.rs
+++ b/openssl/src/asn1.rs
@@ -1,9 +1,11 @@
use libc::c_long;
use std::{ptr, fmt};
+use std::slice;
use ffi;
use {cvt, cvt_p};
use bio::MemBio;
+use crypto::CryptoString;
use error::ErrorStack;
use types::{OpenSslType, Ref};
@@ -35,3 +37,29 @@ impl Asn1Time {
Asn1Time::from_period(days as c_long * 60 * 60 * 24)
}
}
+
+type_!(Asn1String, ffi::ASN1_STRING, ffi::ASN1_STRING_free);
+
+impl Ref<Asn1String> {
+ pub fn as_utf8(&self) -> Result<CryptoString, ErrorStack> {
+ unsafe {
+ let mut ptr = ptr::null_mut();
+ let len = ffi::ASN1_STRING_to_UTF8(&mut ptr, self.as_ptr());
+ if len < 0 {
+ return Err(ErrorStack::get());
+ }
+
+ Ok(CryptoString::from_raw_parts(ptr, len as usize))
+ }
+ }
+
+ pub fn as_slice(&self) -> &[u8] {
+ unsafe { slice::from_raw_parts(ffi::ASN1_STRING_data(self.as_ptr()), self.len()) }
+ }
+
+ pub fn len(&self) -> usize {
+ unsafe {
+ ffi::ASN1_STRING_length(self.as_ptr()) as usize
+ }
+ }
+}