Skip to content

Commit cf29f50

Browse files
committed
Fixes
1 parent c01530d commit cf29f50

2 files changed

Lines changed: 45 additions & 12 deletions

File tree

src/hmac.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ use crate::{
1414
Error, SECItemBorrowed,
1515
err::IntoResult as _,
1616
hash::{self, HashAlgorithm},
17-
p11::{self, PK11_CreateContextBySymKey, PK11_DigestFinal, PK11_DigestOp, PK11_ImportSymKey, PK11Origin, SECOidTag, Slot},
17+
p11::{
18+
self, PK11_CreateContextBySymKey, PK11_DigestFinal, PK11_DigestOp, PK11_ImportSymKey,
19+
PK11Origin, SECOidTag, Slot,
20+
},
1821
};
1922

2023
//

src/pbkdf2.rs

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
use std::{os::raw::c_int, ptr::null_mut};
88

99
use crate::{
10-
Error, SECItemBorrowed, hmac::{HmacAlgorithm, hmac_alg_to_prf_oid}, p11::{
10+
Error, SECItemBorrowed,
11+
hmac::{HmacAlgorithm, hmac_alg_to_prf_oid},
12+
p11::{
1113
PK11_CreatePBEV2AlgorithmID, PK11_PBEKeyGen, PRBool, SECOID_DestroyAlgorithmID, SECOidTag,
1214
Slot, SymKey,
13-
}
15+
},
1416
};
1517

1618
/// Derive a key using PBKDF2.
@@ -34,6 +36,9 @@ pub fn pbkdf2(
3436

3537
let mut salt_item = SECItemBorrowed::wrap(salt)?;
3638

39+
let slot = Slot::internal()?;
40+
let mut pw_item = SECItemBorrowed::wrap(password)?;
41+
3742
let algid = unsafe {
3843
PK11_CreatePBEV2AlgorithmID(
3944
SECOidTag::SEC_OID_PKCS5_PBKDF2,
@@ -48,8 +53,6 @@ pub fn pbkdf2(
4853
return Err(Error::last_nss_error());
4954
}
5055

51-
let slot = Slot::internal()?;
52-
let mut pw_item = SECItemBorrowed::wrap(password)?;
5356
let key_ptr = unsafe {
5457
PK11_PBEKeyGen(
5558
*slot,
@@ -73,9 +76,8 @@ mod tests {
7376
use super::*;
7477

7578
#[test]
76-
fn rfc_6070_vector_1() {
77-
// RFC 6070 defines PBKDF2-HMAC-SHA1 test vectors; RFC 7914 §11 / many
78-
// references provide PBKDF2-HMAC-SHA256 vectors. Using a common one:
79+
fn rfc_7914_vector_1() {
80+
// RFC 7914 §11 provides PBKDF2-HMAC-SHA256 vectors. Using a common one:
7981
// password="password", salt="salt", iter=1, dkLen=32.
8082
let dk = pbkdf2(&HmacAlgorithm::HMAC_SHA2_256, b"password", b"salt", 1, 32).unwrap();
8183
let expected = [
@@ -99,15 +101,43 @@ mod tests {
99101

100102
#[test]
101103
fn deterministic_across_calls() {
102-
let a = pbkdf2(&HmacAlgorithm::HMAC_SHA2_256, b"hello", b"saltysalt0000000", 10_000, 32).unwrap();
103-
let b = pbkdf2(&HmacAlgorithm::HMAC_SHA2_256, b"hello", b"saltysalt0000000", 10_000, 32).unwrap();
104+
let a = pbkdf2(
105+
&HmacAlgorithm::HMAC_SHA2_256,
106+
b"hello",
107+
b"saltysalt0000000",
108+
10_000,
109+
32,
110+
)
111+
.unwrap();
112+
let b = pbkdf2(
113+
&HmacAlgorithm::HMAC_SHA2_256,
114+
b"hello",
115+
b"saltysalt0000000",
116+
10_000,
117+
32,
118+
)
119+
.unwrap();
104120
assert_eq!(a, b);
105121
}
106122

107123
#[test]
108124
fn different_salt_different_key() {
109-
let a = pbkdf2(&HmacAlgorithm::HMAC_SHA2_256, b"hello", b"saltysalt0000000", 10_000, 32).unwrap();
110-
let b = pbkdf2(&HmacAlgorithm::HMAC_SHA2_256, b"hello", b"saltysalt0000001", 10_000, 32).unwrap();
125+
let a = pbkdf2(
126+
&HmacAlgorithm::HMAC_SHA2_256,
127+
b"hello",
128+
b"saltysalt0000000",
129+
10_000,
130+
32,
131+
)
132+
.unwrap();
133+
let b = pbkdf2(
134+
&HmacAlgorithm::HMAC_SHA2_256,
135+
b"hello",
136+
b"saltysalt0000001",
137+
10_000,
138+
32,
139+
)
140+
.unwrap();
111141
assert_ne!(a, b);
112142
}
113143
}

0 commit comments

Comments
 (0)