josekit/jwt/alg/
unsecured.rs1use std::ops::Deref;
2
3use anyhow::bail;
4
5use crate::jws::{JwsAlgorithm, JwsSigner, JwsVerifier};
6use crate::JoseError;
7
8#[derive(Debug, Eq, PartialEq, Copy, Clone)]
9pub enum UnsecuredJwsAlgorithm {
10 None,
11}
12
13impl UnsecuredJwsAlgorithm {
14 pub fn signer(&self) -> UnsecuredJwsSigner {
15 UnsecuredJwsSigner {
16 algorithm: self.clone(),
17 }
18 }
19
20 pub fn verifier(&self) -> UnsecuredJwsVerifier {
21 UnsecuredJwsVerifier {
22 algorithm: self.clone(),
23 }
24 }
25}
26
27impl JwsAlgorithm for UnsecuredJwsAlgorithm {
28 fn name(&self) -> &str {
29 "none"
30 }
31
32 fn box_clone(&self) -> Box<dyn JwsAlgorithm> {
33 Box::new(self.clone())
34 }
35}
36
37impl Deref for UnsecuredJwsAlgorithm {
38 type Target = dyn JwsAlgorithm;
39
40 fn deref(&self) -> &Self::Target {
41 self
42 }
43}
44
45#[derive(Debug, Clone)]
46pub struct UnsecuredJwsSigner {
47 algorithm: UnsecuredJwsAlgorithm,
48}
49
50impl JwsSigner for UnsecuredJwsSigner {
51 fn algorithm(&self) -> &dyn JwsAlgorithm {
52 &self.algorithm
53 }
54
55 fn key_id(&self) -> Option<&str> {
56 None
57 }
58
59 fn signature_len(&self) -> usize {
60 0
61 }
62
63 fn sign(&self, _message: &[u8]) -> Result<Vec<u8>, JoseError> {
64 Ok(vec![])
65 }
66
67 fn box_clone(&self) -> Box<dyn JwsSigner> {
68 Box::new(self.clone())
69 }
70}
71
72impl Deref for UnsecuredJwsSigner {
73 type Target = dyn JwsSigner;
74
75 fn deref(&self) -> &Self::Target {
76 self
77 }
78}
79
80#[derive(Debug, Clone)]
81pub struct UnsecuredJwsVerifier {
82 algorithm: UnsecuredJwsAlgorithm,
83}
84
85impl JwsVerifier for UnsecuredJwsVerifier {
86 fn algorithm(&self) -> &dyn JwsAlgorithm {
87 &self.algorithm
88 }
89
90 fn key_id(&self) -> Option<&str> {
91 None
92 }
93
94 fn verify(&self, _message: &[u8], signature: &[u8]) -> Result<(), JoseError> {
95 (|| -> anyhow::Result<()> {
96 if signature.len() != 0 {
97 bail!(
98 "The length of none algorithm signature must be 0: {}",
99 signature.len()
100 );
101 }
102
103 Ok(())
104 })()
105 .map_err(|err| JoseError::InvalidSignature(err))
106 }
107
108 fn box_clone(&self) -> Box<dyn JwsVerifier> {
109 Box::new(self.clone())
110 }
111}
112
113impl Deref for UnsecuredJwsVerifier {
114 type Target = dyn JwsVerifier;
115
116 fn deref(&self) -> &Self::Target {
117 self
118 }
119}