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 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::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 "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::EdDSA => AlgorithmFamily::OKP,
69 }
70 }
71}
72
73pub enum AlgorithmFamily {
74 EC,
75 RSA,
76 OKP,
77 Special,
78 None,
79}