diff options
| author | Jethro Beekman <[email protected]> | 2015-06-14 17:25:05 -0700 |
|---|---|---|
| committer | Jethro Beekman <[email protected]> | 2015-07-08 10:06:52 -0700 |
| commit | 11bcac01ecd1b7ba8d758b814ff65dc1dc3ac7e6 (patch) | |
| tree | 258d7ea17d6f3df2f9edde018fb0baf5faa82818 | |
| parent | Merge pull request #233 from jethrogb/topic/x509_extension (diff) | |
| download | rust-openssl-11bcac01ecd1b7ba8d758b814ff65dc1dc3ac7e6.tar.xz rust-openssl-11bcac01ecd1b7ba8d758b814ff65dc1dc3ac7e6.zip | |
Replace CN field by names vector
| -rw-r--r-- | openssl/src/x509/mod.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/openssl/src/x509/mod.rs b/openssl/src/x509/mod.rs index 423a258f..b8114384 100644 --- a/openssl/src/x509/mod.rs +++ b/openssl/src/x509/mod.rs @@ -145,7 +145,7 @@ pub use self::extension::ExtKeyUsageOption as ExtKeyUsage; pub struct X509Generator { bits: u32, days: u32, - CN: String, + names: Vec<(String,String)>, // RFC 3280 ยง4.2: A certificate MUST NOT include more than one instance of a particular extension. extensions: HashMap<ExtensionType,Extension>, hash_type: HashType, @@ -165,7 +165,7 @@ impl X509Generator { X509Generator { bits: 1024, days: 365, - CN: "rust-openssl".to_string(), + names: vec![], extensions: HashMap::new(), hash_type: HashType::SHA1 } @@ -186,7 +186,13 @@ impl X509Generator { #[allow(non_snake_case)] /// Sets Common Name of certificate pub fn set_CN(mut self, CN: &str) -> X509Generator { - self.CN = CN.to_string(); + match self.names.get_mut(0) { + Some(&mut(_,ref mut val)) => *val=CN.to_string(), + _ => {} /* would move push here, but borrow checker won't let me */ + } + if self.names.len()==0 { + self.names.push(("CN".to_string(),CN.to_string())); + } self } @@ -333,7 +339,15 @@ impl X509Generator { let name = ffi::X509_get_subject_name(x509.handle); try_ssl_null!(name); - try!(X509Generator::add_name(name, "CN", &self.CN)); + let default=[("CN","rust-openssl")]; + let default_iter=&mut default.iter().map(|&(k,v)|(k,v)); + let arg_iter=&mut self.names.iter().map(|&(ref k,ref v)|(&k[..],&v[..])); + let iter: &mut Iterator<Item=(&str,&str)> = + if self.names.len()==0 { default_iter } else { arg_iter }; + + for (key,val) in iter { + try!(X509Generator::add_name(name, &key, &val)); + } ffi::X509_set_issuer_name(x509.handle, name); for (exttype,ext) in self.extensions.iter() { |