in tough/src/schema/key.rs [184:219]
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
if let Ok(public) = serde_plain::from_str::<Decoded<RsaPem>>(s) {
Ok(Key::Rsa {
keyval: RsaKey {
public,
_extra: HashMap::new(),
},
scheme: RsaScheme::RsassaPssSha256,
_extra: HashMap::new(),
})
} else if let Ok(public) = serde_plain::from_str::<Decoded<Hex>>(s) {
if public.len() == ring::signature::ED25519_PUBLIC_KEY_LEN {
Ok(Key::Ed25519 {
keyval: Ed25519Key {
public,
_extra: HashMap::new(),
},
scheme: Ed25519Scheme::Ed25519,
_extra: HashMap::new(),
})
} else {
Err(KeyParseError(()))
}
} else if let Ok(public) = serde_plain::from_str::<Decoded<EcdsaFlex>>(s) {
Ok(Key::Ecdsa {
keyval: EcdsaKey {
public,
_extra: HashMap::new(),
},
scheme: EcdsaScheme::EcdsaSha2Nistp256,
_extra: HashMap::new(),
})
} else {
Err(KeyParseError(()))
}
}