aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorJethro Beekman <[email protected]>2015-06-30 22:37:49 -0700
committerJethro Beekman <[email protected]>2015-07-01 00:18:45 -0700
commite367567d00cdbd6b12906a424971146f6c3eea28 (patch)
tree2372305930aef7413c809220ec49d0d7391aa531 /openssl/src
parentAdd public generic extension interface to X509Generator (diff)
downloadrust-openssl-e367567d00cdbd6b12906a424971146f6c3eea28.tar.xz
rust-openssl-e367567d00cdbd6b12906a424971146f6c3eea28.zip
Add arbitrary X509 extensions by NID
Diffstat (limited to 'openssl/src')
-rw-r--r--openssl/src/x509/extension.rs5
-rw-r--r--openssl/src/x509/tests.rs5
2 files changed, 8 insertions, 2 deletions
diff --git a/openssl/src/x509/extension.rs b/openssl/src/x509/extension.rs
index 66b218ad..4576ad1a 100644
--- a/openssl/src/x509/extension.rs
+++ b/openssl/src/x509/extension.rs
@@ -5,12 +5,14 @@ use nid::Nid;
pub enum ExtensionType {
KeyUsage,
ExtKeyUsage,
+ OtherNid(Nid),
}
#[derive(Clone)]
pub enum Extension {
KeyUsage(Vec<KeyUsageOption>),
ExtKeyUsage(Vec<ExtKeyUsageOption>),
+ OtherNid(Nid,String),
}
impl Extension {
@@ -18,6 +20,7 @@ impl Extension {
match self {
&Extension::KeyUsage(_) => ExtensionType::KeyUsage,
&Extension::ExtKeyUsage(_) => ExtensionType::ExtKeyUsage,
+ &Extension::OtherNid(nid,_) => ExtensionType::OtherNid(nid),
}
}
@@ -25,6 +28,7 @@ impl Extension {
match self {
&Extension::KeyUsage(_) => Nid::KeyUsage,
&Extension::ExtKeyUsage(_) => Nid::ExtendedKeyUsage,
+ &Extension::OtherNid(nid,_) => nid,
}
}
}
@@ -44,6 +48,7 @@ impl ToString for Extension {
match self {
&Extension::KeyUsage(ref purposes) => join(purposes.iter(),","),
&Extension::ExtKeyUsage(ref purposes) => join(purposes.iter(),","),
+ &Extension::OtherNid(_,ref value) => value.clone(),
}
}
}
diff --git a/openssl/src/x509/tests.rs b/openssl/src/x509/tests.rs
index 806bc671..0061453c 100644
--- a/openssl/src/x509/tests.rs
+++ b/openssl/src/x509/tests.rs
@@ -5,7 +5,7 @@ use std::fs::File;
use crypto::hash::Type::{SHA256};
use x509::{X509, X509Generator};
-use x509::extension::Extension::{KeyUsage,ExtKeyUsage};
+use x509::extension::Extension::{KeyUsage,ExtKeyUsage,OtherNid};
use x509::extension::KeyUsageOption::{DigitalSignature, KeyEncipherment};
use x509::extension::ExtKeyUsageOption::{self, ClientAuth, ServerAuth};
use nid::Nid;
@@ -18,7 +18,8 @@ fn test_cert_gen() {
.set_CN("test_me")
.set_sign_hash(SHA256)
.add_extension(KeyUsage(vec![DigitalSignature, KeyEncipherment]))
- .add_extension(ExtKeyUsage(vec![ClientAuth, ServerAuth, ExtKeyUsageOption::Other("2.999".to_owned())]));
+ .add_extension(ExtKeyUsage(vec![ClientAuth, ServerAuth, ExtKeyUsageOption::Other("2.999".to_owned())]))
+ .add_extension(OtherNid(Nid::BasicConstraints,"critical,CA:TRUE".to_owned()));
let (cert, pkey) = gen.generate().unwrap();
cert.write_pem(&mut io::sink()).unwrap();