Skip to content

Commit cae5093

Browse files
committed
Test salts
1 parent b512c50 commit cae5093

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

Diff for: src/algorithms/hmac.rs

+56
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,34 @@ pub trait MACLike {
8282
fn attach_metadata(&mut self, metadata: KeyMetadata) -> Result<(), Error>;
8383
fn authentication_tag(&self, authenticated: &[u8]) -> Vec<u8>;
8484

85+
fn salt(&self) -> Salt {
86+
self.metadata()
87+
.as_ref()
88+
.map(|metadata| metadata.salt.clone())
89+
.unwrap_or(Salt::None)
90+
}
91+
92+
fn verifier_salt(&self) -> Salt {
93+
match self.metadata().as_ref().map(|metadata| &metadata.salt) {
94+
None => Salt::None,
95+
Some(Salt::Signer(salt)) => {
96+
let authenticated_salt = self.authentication_tag(salt);
97+
Salt::Verifier(authenticated_salt)
98+
}
99+
Some(x @ Salt::Verifier(_)) => x.clone(),
100+
Some(Salt::None) => Salt::None,
101+
}
102+
}
103+
104+
fn attach_salt(&mut self, salt: Salt) -> Result<(), Error> {
105+
let metadata = KeyMetadata {
106+
salt,
107+
..Default::default()
108+
};
109+
self.attach_metadata(metadata).unwrap();
110+
Ok(())
111+
}
112+
85113
fn authenticate<CustomClaims: Serialize + DeserializeOwned>(
86114
&self,
87115
claims: JWTClaims<CustomClaims>,
@@ -221,6 +249,13 @@ impl HS256Key {
221249
}
222250
}
223251

252+
pub fn generate_with_salt() -> Self {
253+
HS256Key {
254+
key: HMACKey::generate_with_salt(),
255+
key_id: None,
256+
}
257+
}
258+
224259
pub fn with_key_id(mut self, key_id: &str) -> Self {
225260
self.key_id = Some(key_id.to_string());
226261
self
@@ -283,6 +318,13 @@ impl HS512Key {
283318
}
284319
}
285320

321+
pub fn generate_with_salt() -> Self {
322+
HS512Key {
323+
key: HMACKey::generate_with_salt(),
324+
key_id: None,
325+
}
326+
}
327+
286328
pub fn with_key_id(mut self, key_id: &str) -> Self {
287329
self.key_id = Some(key_id.to_string());
288330
self
@@ -345,6 +387,13 @@ impl HS384Key {
345387
}
346388
}
347389

390+
pub fn generate_with_salt() -> Self {
391+
HS384Key {
392+
key: HMACKey::generate_with_salt(),
393+
key_id: None,
394+
}
395+
}
396+
348397
pub fn with_key_id(mut self, key_id: &str) -> Self {
349398
self.key_id = Some(key_id.to_string());
350399
self
@@ -416,6 +465,13 @@ impl Blake2bKey {
416465
}
417466
}
418467

468+
pub fn generate_with_salt() -> Self {
469+
Blake2bKey {
470+
key: HMACKey::generate_with_salt(),
471+
key_id: None,
472+
}
473+
}
474+
419475
pub fn with_key_id(mut self, key_id: &str) -> Self {
420476
self.key_id = Some(key_id.to_string());
421477
self

Diff for: src/lib.rs

+19
Original file line numberDiff line numberDiff line change
@@ -593,4 +593,23 @@ MCowBQYDK2VwAyEAyrRjJfTnhMcW5igzYvPirFW5eUgMdKeClGzQhd4qw+Y=
593593
let claims = key.verify_token::<NoCustomClaims>(&token, Some(options));
594594
assert!(claims.is_err());
595595
}
596+
597+
#[test]
598+
fn salt() {
599+
let mut key = HS256Key::generate_with_salt();
600+
let claims = Claims::create(Duration::from_secs(86400));
601+
let token = key.authenticate(claims).unwrap();
602+
603+
let options = VerificationOptions {
604+
..Default::default()
605+
};
606+
607+
let res = key.verify_token::<NoCustomClaims>(&token, Some(options.clone()));
608+
assert!(res.is_err());
609+
610+
let verifier_salt = key.verifier_salt();
611+
key.attach_salt(verifier_salt).unwrap();
612+
key.verify_token::<NoCustomClaims>(&token, Some(options))
613+
.unwrap();
614+
}
596615
}

0 commit comments

Comments
 (0)