did_crypto/
algorithms.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(PartialEq, Eq, Serialize, Deserialize, Copy, Clone)]
4pub enum Algorithm {
5    RS256,
6    RS384,
7    RS512,
8    PS256,
9    PS384,
10    PS512,
11    ES256,
12    ES384,
13    ES512,
14    ES256K,
15    // ES256KR,
16    EdDSA,
17}
18
19impl Algorithm {
20    pub fn to_str<'a>(&self) -> &'a str {
21        match self {
22            Algorithm::RS256 => "RS256",
23            Algorithm::RS384 => "RS384",
24            Algorithm::RS512 => "RS512",
25            Algorithm::PS256 => "PS256",
26            Algorithm::PS384 => "PS384",
27            Algorithm::PS512 => "PS512",
28            Algorithm::ES256 => "ES256",
29            Algorithm::ES384 => "ES384",
30            Algorithm::ES512 => "ES512",
31            Algorithm::ES256K => "ES256K",
32            // Algorithm::ES256KR => "ES256K-R",
33            Algorithm::EdDSA => "EdDSA",
34        }
35    }
36
37    pub fn from_str(alg: &str) -> Option<Self> {
38        match alg {
39            "RS256" => Some(Algorithm::RS256),
40            "RS384" => Some(Algorithm::RS384),
41            "RS512" => Some(Algorithm::RS512),
42            "PS256" => Some(Algorithm::PS256),
43            "PS384" => Some(Algorithm::PS384),
44            "PS512" => Some(Algorithm::PS512),
45            "ES256" => Some(Algorithm::ES256),
46            "ES384" => Some(Algorithm::ES384),
47            "ES512" => Some(Algorithm::ES512),
48            "ES256K" => Some(Algorithm::ES256K),
49            // "ES256K-R" => Some(Algorithm::ES256KR),
50            "EdDSA" => Some(Algorithm::EdDSA),
51            _ => None,
52        }
53    }
54
55    pub fn get_family(&self) -> AlgorithmFamily {
56        match self {
57            Algorithm::RS256 => AlgorithmFamily::RSA,
58            Algorithm::RS384 => AlgorithmFamily::RSA,
59            Algorithm::RS512 => AlgorithmFamily::RSA,
60            Algorithm::PS256 => AlgorithmFamily::RSA,
61            Algorithm::PS384 => AlgorithmFamily::RSA,
62            Algorithm::PS512 => AlgorithmFamily::RSA,
63            Algorithm::ES256 => AlgorithmFamily::EC,
64            Algorithm::ES384 => AlgorithmFamily::EC,
65            Algorithm::ES512 => AlgorithmFamily::EC,
66            Algorithm::ES256K => AlgorithmFamily::EC,
67            // Algorithm::ES256KR => AlgorithmFamily::Special,
68            Algorithm::EdDSA => AlgorithmFamily::OKP,
69        }
70    }
71}
72
73pub enum AlgorithmFamily {
74    EC,
75    RSA,
76    OKP,
77    Special,
78    None,
79}