2019-06-16 11:51:43 -04:00
|
|
|
use errors::{new_error, Error, ErrorKind, Result};
|
|
|
|
use std::str::FromStr;
|
|
|
|
|
|
|
|
/// The algorithms supported for signing/verifying
|
|
|
|
#[derive(Debug, PartialEq, Copy, Clone, Serialize, Deserialize)]
|
|
|
|
pub enum Algorithm {
|
|
|
|
/// HMAC using SHA-256
|
|
|
|
HS256,
|
|
|
|
/// HMAC using SHA-384
|
|
|
|
HS384,
|
|
|
|
/// HMAC using SHA-512
|
|
|
|
HS512,
|
|
|
|
|
|
|
|
/// ECDSA using SHA-256
|
|
|
|
ES256,
|
|
|
|
/// ECDSA using SHA-384
|
|
|
|
ES384,
|
|
|
|
|
|
|
|
/// RSASSA-PKCS1-v1_5 using SHA-256
|
|
|
|
RS256,
|
|
|
|
/// RSASSA-PKCS1-v1_5 using SHA-384
|
|
|
|
RS384,
|
|
|
|
/// RSASSA-PKCS1-v1_5 using SHA-512
|
|
|
|
RS512,
|
2019-06-16 12:00:00 -04:00
|
|
|
|
|
|
|
/// RSASSA-PSS using SHA-256
|
|
|
|
PS256,
|
|
|
|
/// RSASSA-PSS using SHA-384
|
|
|
|
PS384,
|
|
|
|
/// RSASSA-PSS using SHA-512
|
|
|
|
PS512,
|
2019-06-16 11:51:43 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Algorithm {
|
|
|
|
fn default() -> Self {
|
|
|
|
Algorithm::HS256
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl FromStr for Algorithm {
|
|
|
|
type Err = Error;
|
|
|
|
fn from_str(s: &str) -> Result<Self> {
|
|
|
|
match s {
|
|
|
|
"HS256" => Ok(Algorithm::HS256),
|
|
|
|
"HS384" => Ok(Algorithm::HS384),
|
|
|
|
"HS512" => Ok(Algorithm::HS512),
|
|
|
|
"ES256" => Ok(Algorithm::ES256),
|
|
|
|
"ES384" => Ok(Algorithm::ES384),
|
|
|
|
"RS256" => Ok(Algorithm::RS256),
|
|
|
|
"RS384" => Ok(Algorithm::RS384),
|
2019-06-16 12:00:00 -04:00
|
|
|
"PS256" => Ok(Algorithm::PS256),
|
|
|
|
"PS384" => Ok(Algorithm::PS384),
|
|
|
|
"PS512" => Ok(Algorithm::PS512),
|
2019-06-16 11:51:43 -04:00
|
|
|
"RS512" => Ok(Algorithm::RS512),
|
|
|
|
_ => Err(new_error(ErrorKind::InvalidAlgorithmName)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|