aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2017-02-10 19:38:51 -0800
committerSteven Fackler <[email protected]>2017-02-10 19:38:51 -0800
commita1d7956f828a5208f16d49871b7c1965d21a6893 (patch)
tree651058ce347498105dfa9e3add8059c2318cc548
parentMerge pull request #574 from stephanbuys/macos_readme (diff)
downloadrust-openssl-a1d7956f828a5208f16d49871b7c1965d21a6893.tar.xz
rust-openssl-a1d7956f828a5208f16d49871b7c1965d21a6893.zip
Add Asn1BitString
-rw-r--r--openssl-sys/src/lib.rs2
-rw-r--r--openssl/src/asn1.rs18
2 files changed, 20 insertions, 0 deletions
diff --git a/openssl-sys/src/lib.rs b/openssl-sys/src/lib.rs
index d18fa5ad..37921021 100644
--- a/openssl-sys/src/lib.rs
+++ b/openssl-sys/src/lib.rs
@@ -26,6 +26,7 @@ pub use libressl::*;
pub enum ASN1_INTEGER {}
pub enum ASN1_GENERALIZEDTIME {}
pub enum ASN1_STRING {}
+pub enum ASN1_BIT_STRING {}
pub enum ASN1_TIME {}
pub enum ASN1_TYPE {}
pub enum BN_CTX {}
@@ -1408,6 +1409,7 @@ extern {
pub fn ASN1_STRING_type_new(ty: c_int) -> *mut ASN1_STRING;
pub fn ASN1_TIME_free(tm: *mut ASN1_TIME);
pub fn ASN1_TIME_print(b: *mut BIO, tm: *const ASN1_TIME) -> c_int;
+ pub fn ASN1_BIT_STRING_free(x: *mut ASN1_BIT_STRING);
pub fn BIO_ctrl(b: *mut BIO, cmd: c_int, larg: c_long, parg: *mut c_void) -> c_long;
pub fn BIO_free_all(b: *mut BIO);
diff --git a/openssl/src/asn1.rs b/openssl/src/asn1.rs
index fd932723..0ba54440 100644
--- a/openssl/src/asn1.rs
+++ b/openssl/src/asn1.rs
@@ -93,6 +93,24 @@ impl Asn1StringRef {
}
}
+foreign_type! {
+ type CType = ffi::ASN1_BIT_STRING;
+ fn drop = ffi::ASN1_BIT_STRING_free;
+
+ pub struct Asn1BitString;
+ pub struct Asn1BitStringRef;
+}
+
+impl Asn1BitStringRef {
+ pub fn as_slice(&self) -> &[u8] {
+ unsafe { slice::from_raw_parts(ASN1_STRING_data(self.as_ptr() as *mut _), self.len()) }
+ }
+
+ pub fn len(&self) -> usize {
+ unsafe { ffi::ASN1_STRING_length(self.as_ptr() as *mut _) as usize }
+ }
+}
+
#[cfg(any(ossl101, ossl102))]
use ffi::ASN1_STRING_data;