jwt_rustcrypto/
verifying_key.rs

1use crate::{Error, PemEncodedKey, SecretKey};
2use base64::Engine;
3
4/// A verification key used to verify the signature of a JWT.
5#[derive(Debug, Clone)]
6pub enum VerifyingKey {
7    Secret(SecretKey),
8    RsaKey(PemEncodedKey),
9    EcKey(PemEncodedKey),
10    EdKey(PemEncodedKey),
11}
12
13impl VerifyingKey {
14    pub fn from_secret(secret: &[u8]) -> Self {
15        let secret = SecretKey::new(secret.to_vec());
16        Self::Secret(secret)
17    }
18
19    pub fn from_base64_secret(secret: &str) -> Result<Self, Error> {
20        let secret = base64::engine::general_purpose::URL_SAFE_NO_PAD.decode(secret.as_bytes())?;
21        Ok(Self::from_secret(&secret))
22    }
23
24    pub fn from_rsa_pem(key: &[u8]) -> Result<Self, Error> {
25        let key = PemEncodedKey::new(key)?;
26        Ok(Self::RsaKey(key))
27    }
28
29    pub fn from_rsa_components(n: &[u8], e: &[u8]) -> Result<Self, Error> {
30        let key = PemEncodedKey::from_rsa_components(n, e)?;
31        Ok(Self::RsaKey(key))
32    }
33
34    pub fn from_rsa_der(key: &[u8]) -> Result<Self, Error> {
35        let key = PemEncodedKey::new(key)?;
36        Ok(Self::RsaKey(key))
37    }
38
39    pub fn from_ec_pem(key: &[u8]) -> Result<Self, Error> {
40        let key = PemEncodedKey::new(key)?;
41        Ok(Self::EcKey(key))
42    }
43
44    pub fn from_ec_der(key: &[u8]) -> Result<Self, Error> {
45        let key = PemEncodedKey::new(key)?;
46        Ok(Self::EcKey(key))
47    }
48
49    pub fn from_ed_pem(key: &[u8]) -> Result<Self, Error> {
50        let key = PemEncodedKey::new(key)?;
51        Ok(Self::EdKey(key))
52    }
53
54    pub fn from_ed_der(key: &[u8]) -> Result<Self, Error> {
55        let key = PemEncodedKey::new(key)?;
56        Ok(Self::EdKey(key))
57    }
58}