Move X509 extensions to seperate module, implement ToString instead of custom AsStr
This commit is contained in:
parent
2a4d7165f4
commit
14a2f5c5e9
|
|
@ -0,0 +1,69 @@
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub enum Extension {
|
||||||
|
KeyUsage(Vec<KeyUsageOption>),
|
||||||
|
ExtKeyUsage(Vec<ExtKeyUsageOption>),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone,Copy)]
|
||||||
|
pub enum KeyUsageOption {
|
||||||
|
DigitalSignature,
|
||||||
|
NonRepudiation,
|
||||||
|
KeyEncipherment,
|
||||||
|
DataEncipherment,
|
||||||
|
KeyAgreement,
|
||||||
|
KeyCertSign,
|
||||||
|
CRLSign,
|
||||||
|
EncipherOnly,
|
||||||
|
DecipherOnly,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for KeyUsageOption {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||||
|
f.pad(match self {
|
||||||
|
&KeyUsageOption::DigitalSignature => "digitalSignature",
|
||||||
|
&KeyUsageOption::NonRepudiation => "nonRepudiation",
|
||||||
|
&KeyUsageOption::KeyEncipherment => "keyEncipherment",
|
||||||
|
&KeyUsageOption::DataEncipherment => "dataEncipherment",
|
||||||
|
&KeyUsageOption::KeyAgreement => "keyAgreement",
|
||||||
|
&KeyUsageOption::KeyCertSign => "keyCertSign",
|
||||||
|
&KeyUsageOption::CRLSign => "cRLSign",
|
||||||
|
&KeyUsageOption::EncipherOnly => "encipherOnly",
|
||||||
|
&KeyUsageOption::DecipherOnly => "decipherOnly",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone,Copy)]
|
||||||
|
pub enum ExtKeyUsageOption {
|
||||||
|
ServerAuth,
|
||||||
|
ClientAuth,
|
||||||
|
CodeSigning,
|
||||||
|
EmailProtection,
|
||||||
|
TimeStamping,
|
||||||
|
MsCodeInd,
|
||||||
|
MsCodeCom,
|
||||||
|
MsCtlSign,
|
||||||
|
MsSgc,
|
||||||
|
MsEfs,
|
||||||
|
NsSgc,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for ExtKeyUsageOption {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||||
|
f.pad(match self {
|
||||||
|
&ExtKeyUsageOption::ServerAuth => "serverAuth",
|
||||||
|
&ExtKeyUsageOption::ClientAuth => "clientAuth",
|
||||||
|
&ExtKeyUsageOption::CodeSigning => "codeSigning",
|
||||||
|
&ExtKeyUsageOption::EmailProtection => "emailProtection",
|
||||||
|
&ExtKeyUsageOption::TimeStamping => "timeStamping",
|
||||||
|
&ExtKeyUsageOption::MsCodeInd => "msCodeInd",
|
||||||
|
&ExtKeyUsageOption::MsCodeCom => "msCodeCom",
|
||||||
|
&ExtKeyUsageOption::MsCtlSign => "msCTLSign",
|
||||||
|
&ExtKeyUsageOption::MsSgc => "msSGC",
|
||||||
|
&ExtKeyUsageOption::MsEfs => "msEFS",
|
||||||
|
&ExtKeyUsageOption::NsSgc =>"nsSGC",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -20,6 +20,7 @@ use ffi;
|
||||||
use ssl::error::{SslError, StreamError};
|
use ssl::error::{SslError, StreamError};
|
||||||
use nid;
|
use nid;
|
||||||
|
|
||||||
|
mod extension;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
@ -98,74 +99,9 @@ impl X509StoreContext {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
// Backwards-compatibility
|
||||||
trait AsStr<'a> {
|
pub use self::extension::KeyUsageOption as KeyUsage;
|
||||||
fn as_str(&self) -> &'a str;
|
pub use self::extension::ExtKeyUsageOption as ExtKeyUsage;
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub enum KeyUsage {
|
|
||||||
DigitalSignature,
|
|
||||||
NonRepudiation,
|
|
||||||
KeyEncipherment,
|
|
||||||
DataEncipherment,
|
|
||||||
KeyAgreement,
|
|
||||||
KeyCertSign,
|
|
||||||
CRLSign,
|
|
||||||
EncipherOnly,
|
|
||||||
DecipherOnly
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AsStr<'static> for KeyUsage {
|
|
||||||
fn as_str(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
&KeyUsage::DigitalSignature => "digitalSignature",
|
|
||||||
&KeyUsage::NonRepudiation => "nonRepudiation",
|
|
||||||
&KeyUsage::KeyEncipherment => "keyEncipherment",
|
|
||||||
&KeyUsage::DataEncipherment => "dataEncipherment",
|
|
||||||
&KeyUsage::KeyAgreement => "keyAgreement",
|
|
||||||
&KeyUsage::KeyCertSign => "keyCertSign",
|
|
||||||
&KeyUsage::CRLSign => "cRLSign",
|
|
||||||
&KeyUsage::EncipherOnly => "encipherOnly",
|
|
||||||
&KeyUsage::DecipherOnly => "decipherOnly"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub enum ExtKeyUsage {
|
|
||||||
ServerAuth,
|
|
||||||
ClientAuth,
|
|
||||||
CodeSigning,
|
|
||||||
EmailProtection,
|
|
||||||
TimeStamping,
|
|
||||||
MsCodeInd,
|
|
||||||
MsCodeCom,
|
|
||||||
MsCtlSign,
|
|
||||||
MsSgc,
|
|
||||||
MsEfs,
|
|
||||||
NsSgc
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AsStr<'static> for ExtKeyUsage {
|
|
||||||
fn as_str(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
&ExtKeyUsage::ServerAuth => "serverAuth",
|
|
||||||
&ExtKeyUsage::ClientAuth => "clientAuth",
|
|
||||||
&ExtKeyUsage::CodeSigning => "codeSigning",
|
|
||||||
&ExtKeyUsage::EmailProtection => "emailProtection",
|
|
||||||
&ExtKeyUsage::TimeStamping => "timeStamping",
|
|
||||||
&ExtKeyUsage::MsCodeInd => "msCodeInd",
|
|
||||||
&ExtKeyUsage::MsCodeCom => "msCodeCom",
|
|
||||||
&ExtKeyUsage::MsCtlSign => "msCTLSign",
|
|
||||||
&ExtKeyUsage::MsSgc => "msSGC",
|
|
||||||
&ExtKeyUsage::MsEfs => "msEFS",
|
|
||||||
&ExtKeyUsage::NsSgc =>"nsSGC"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// FIXME: a dirty hack as there is no way to
|
// FIXME: a dirty hack as there is no way to
|
||||||
// implement ToString for Vec as both are defined
|
// implement ToString for Vec as both are defined
|
||||||
|
|
@ -175,11 +111,11 @@ trait ToStr {
|
||||||
fn to_str(&self) -> String;
|
fn to_str(&self) -> String;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T: AsStr<'a>> ToStr for Vec<T> {
|
impl<T: ToString> ToStr for Vec<T> {
|
||||||
fn to_str(&self) -> String {
|
fn to_str(&self) -> String {
|
||||||
self.iter().enumerate().fold(String::new(), |mut acc, (idx, v)| {
|
self.iter().enumerate().fold(String::new(), |mut acc, (idx, v)| {
|
||||||
if idx > 0 { acc.push(',') };
|
if idx > 0 { acc.push(',') };
|
||||||
acc.push_str(v.as_str());
|
acc.push_str(&v.to_string());
|
||||||
acc
|
acc
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue