use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JWEHeader {
#[serde(rename = "alg")]
pub algorithm: String,
#[serde(rename = "enc")]
pub encryption: String,
#[serde(rename = "kid", default, skip_serializing_if = "Option::is_none")]
pub key_id: Option<String>,
#[serde(rename = "typ", default, skip_serializing_if = "Option::is_none")]
pub token_type: Option<String>,
#[serde(rename = "cty", default, skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(rename = "epk", default, skip_serializing_if = "Option::is_none")]
pub ephemeral_public_key: Option<serde_json::Value>,
#[serde(rename = "apu", default, skip_serializing_if = "Option::is_none")]
pub apu: Option<String>,
#[serde(rename = "apv", default, skip_serializing_if = "Option::is_none")]
pub apv: Option<String>,
#[serde(rename = "iv", default, skip_serializing_if = "Option::is_none")]
pub iv: Option<String>,
#[serde(rename = "tag", default, skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(rename = "p2s", default, skip_serializing_if = "Option::is_none")]
pub p2s: Option<String>,
#[serde(rename = "p2c", default, skip_serializing_if = "Option::is_none")]
pub p2c: Option<u32>,
#[serde(rename = "crit", default, skip_serializing_if = "Option::is_none")]
pub critical: Option<Vec<String>>,
#[serde(rename = "x5c", default, skip_serializing_if = "Option::is_none")]
pub certificate_chain: Option<Vec<String>>,
#[serde(rename = "x5u", default, skip_serializing_if = "Option::is_none")]
pub certificate_url: Option<String>,
#[serde(rename = "x5t", default, skip_serializing_if = "Option::is_none")]
pub certificate_sha1_thumbprint: Option<String>,
#[serde(rename = "x5t#S256", default, skip_serializing_if = "Option::is_none")]
pub certificate_sha256_thumbprint: Option<String>,
#[serde(rename = "jku", default, skip_serializing_if = "Option::is_none")]
pub key_set_url: Option<String>,
#[serde(rename = "jwk", default, skip_serializing_if = "Option::is_none")]
pub public_key: Option<serde_json::Value>,
}
impl JWEHeader {
pub fn new(algorithm: impl Into<String>, encryption: impl Into<String>) -> Self {
JWEHeader {
algorithm: algorithm.into(),
encryption: encryption.into(),
key_id: None,
token_type: None,
content_type: None,
ephemeral_public_key: None,
apu: None,
apv: None,
iv: None,
tag: None,
p2s: None,
p2c: None,
critical: None,
certificate_chain: None,
certificate_url: None,
certificate_sha1_thumbprint: None,
certificate_sha256_thumbprint: None,
key_set_url: None,
public_key: None,
}
}
pub fn with_key_id(mut self, key_id: impl Into<String>) -> Self {
self.key_id = Some(key_id.into());
self
}
pub fn with_content_type(mut self, content_type: impl Into<String>) -> Self {
self.content_type = Some(content_type.into());
self
}
pub fn with_ephemeral_public_key(mut self, epk: serde_json::Value) -> Self {
self.ephemeral_public_key = Some(epk);
self
}
}
impl Default for JWEHeader {
fn default() -> Self {
JWEHeader::new("RSA-OAEP", "A256GCM")
}
}