co_didcomm/messages/headers/
jwm.rs1#[cfg(feature = "raw-crypto")]
2use crate::crypto::{CryptoAlgorithm, SignatureAlgorithm};
3use crate::{Jwk, MessageType};
4
5#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
13pub struct JwmHeader {
14 pub typ: MessageType,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
18 pub enc: Option<String>,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub kid: Option<String>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub skid: Option<String>,
26
27 #[serde(skip_serializing_if = "Option::is_none")]
30 pub alg: Option<String>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
35 pub jku: Option<String>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
40 pub jwk: Option<Jwk>,
41
42 #[serde(skip_serializing_if = "Option::is_none")]
46 pub epk: Option<Jwk>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
51 pub cty: Option<String>,
52}
53
54impl JwmHeader {
55 #[cfg(feature = "raw-crypto")]
58 pub fn as_signed(&mut self, alg: &SignatureAlgorithm) {
59 self.typ = MessageType::DidCommJws;
60 match alg {
61 SignatureAlgorithm::EdDsa => {
62 self.alg = Some(String::from("EdDSA"));
63 }
64 SignatureAlgorithm::Es256 => {
65 self.alg = Some(String::from("ES256"));
66 }
67 SignatureAlgorithm::Es256k => {
68 self.alg = Some(String::from("ES256K"));
69 }
70 }
71 }
72
73 #[cfg(feature = "raw-crypto")]
76 pub fn as_encrypted(&mut self, alg: &CryptoAlgorithm) {
77 self.typ = MessageType::DidCommJwe;
78 match alg {
79 CryptoAlgorithm::A256GCM => {
80 self.enc = Some("A256GCM".into());
81 self.alg = Some("ECDH-1PU+A256KW".into());
82 }
83 CryptoAlgorithm::XC20P => {
84 self.enc = Some("XC20P".into());
85 self.alg = Some("ECDH-1PU+XC20PKW".into());
86 }
87 CryptoAlgorithm::A256CBC => {
88 self.alg = Some("A256CBC".into());
89 self.enc = Some("ECDH-1PU+A256KW".into())
90 }
91 }
92 }
93
94 pub fn kid(&mut self, kid: Option<String>) {
95 self.kid = kid;
96 }
97}
98
99impl Default for JwmHeader {
100 fn default() -> Self {
102 JwmHeader {
103 typ: MessageType::DidCommRaw,
104 enc: None,
105 kid: None,
106 skid: None,
107 epk: None,
108 alg: None,
109 cty: None,
110 jku: None,
111 jwk: None,
112 }
113 }
114}