use crate::error::*;
use crate::keys::*;
pub(crate) mod ossh_privkey;
pub(crate) mod ossh_pubkey;
pub(crate) mod pem;
pub(crate) mod pkcs8;
pub fn parse_keystr(pem: &[u8], passphrase: Option<&str>) -> OsshResult<KeyPair> {
let pemdata = ::pem::parse(pem)?;
match pemdata.tag() {
"OPENSSH PRIVATE KEY" => {
ossh_privkey::decode_ossh_priv(pemdata.contents(), passphrase)
}
"PRIVATE KEY" => {
pem::parse_pem_privkey(pem, passphrase)
}
"ENCRYPTED PRIVATE KEY" => {
pem::parse_pem_privkey(pem, passphrase)
}
"DSA PRIVATE KEY" => {
pem::parse_pem_privkey(pem, passphrase)
}
"RSA PRIVATE KEY" => {
pem::parse_pem_privkey(pem, passphrase)
}
"EC PRIVATE KEY" => {
pem::parse_pem_privkey(pem, passphrase)
}
"BEGIN PRIVATE KEY" => {
pem::parse_pem_privkey(pem, passphrase)
}
_ => Err(ErrorKind::UnsupportType.into()),
}
}