Skip to content

Commit 7904bb1

Browse files
author
andrew
committed
Automated testing
1 parent b6ef547 commit 7904bb1

File tree

3 files changed

+61
-7
lines changed

3 files changed

+61
-7
lines changed

src/jwk.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -423,12 +423,25 @@ impl Jwk {
423423
self.common.key_algorithm.unwrap().to_algorithm().is_ok()
424424
}
425425

426-
pub fn from_encoding_key(
427-
key: &EncodingKey,
428-
algorithm: Algorithm,
429-
) -> crate::errors::Result<Self> {
426+
pub fn from_encoding_key(key: &EncodingKey, alg: Algorithm) -> crate::errors::Result<Self> {
430427
Ok(Self {
431-
common: CommonParameters::default(),
428+
common: CommonParameters {
429+
key_algorithm: Some(match alg {
430+
Algorithm::HS256 => KeyAlgorithm::HS256,
431+
Algorithm::HS384 => KeyAlgorithm::HS384,
432+
Algorithm::HS512 => KeyAlgorithm::HS512,
433+
Algorithm::ES256 => KeyAlgorithm::ES256,
434+
Algorithm::ES384 => KeyAlgorithm::ES384,
435+
Algorithm::RS256 => KeyAlgorithm::RS256,
436+
Algorithm::RS384 => KeyAlgorithm::RS384,
437+
Algorithm::RS512 => KeyAlgorithm::RS512,
438+
Algorithm::PS256 => KeyAlgorithm::PS256,
439+
Algorithm::PS384 => KeyAlgorithm::PS384,
440+
Algorithm::PS512 => KeyAlgorithm::PS512,
441+
Algorithm::EdDSA => KeyAlgorithm::EdDSA,
442+
}),
443+
..Default::default()
444+
},
432445
algorithm: match key.family {
433446
crate::algorithms::AlgorithmFamily::Hmac => {
434447
AlgorithmParameters::OctetKey(OctetKeyParameters {
@@ -451,15 +464,15 @@ impl Jwk {
451464
crate::algorithms::AlgorithmFamily::Ec => {
452465
let rng = rand::SystemRandom::new();
453466
let key_pair = signature::EcdsaKeyPair::from_pkcs8(
454-
alg_to_ec_signing(algorithm),
467+
alg_to_ec_signing(alg),
455468
&key.content,
456469
&rng,
457470
)?;
458471
// Ring has this as `ring::ec::suite_b::curve::P384.elem_scalar_seed_len` but
459472
// it's private and not exposed via any methods AFAICT.
460473
let pub_elem_bytes;
461474
let curve;
462-
match algorithm {
475+
match alg {
463476
Algorithm::ES256 => {
464477
pub_elem_bytes = 32;
465478
curve = EllipticCurve::P256;

tests/ecdsa/mod.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,29 @@ fn ec_x_y() {
103103
assert!(res.is_ok());
104104
}
105105

106+
#[cfg(feature = "use_pem")]
107+
#[test]
108+
#[wasm_bindgen_test]
109+
fn ec_jwk_from_key() {
110+
use jsonwebtoken::jwk::Jwk;
111+
use serde_json::json;
112+
113+
let privkey = include_str!("private_ecdsa_key.pem");
114+
let encoding_key = EncodingKey::from_ec_pem(privkey.as_ref()).unwrap();
115+
let jwk = Jwk::from_encoding_key(&encoding_key, Algorithm::ES256).unwrap();
116+
assert_eq!(
117+
jwk,
118+
serde_json::from_value(json!({
119+
"kty": "EC",
120+
"crv": "P-256",
121+
"x": "w7JAoU_gJbZJvV-zCOvU9yFJq0FNC_edCMRM78P8eQQ",
122+
"y": "wQg1EytcsEmGrM70Gb53oluoDbVhCZ3Uq3hHMslHVb4",
123+
"alg": "ES256",
124+
}))
125+
.unwrap()
126+
);
127+
}
128+
106129
#[cfg(feature = "use_pem")]
107130
#[test]
108131
#[wasm_bindgen_test]

tests/rsa/mod.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,24 @@ fn rsa_modulus_exponent() {
169169
assert!(res.is_ok());
170170
}
171171

172+
#[cfg(feature = "use_pem")]
173+
#[test]
174+
#[wasm_bindgen_test]
175+
fn rsa_jwk_from_key() {
176+
use jsonwebtoken::jwk::Jwk;
177+
use serde_json::json;
178+
179+
let privkey = include_str!("private_rsa_key_pkcs8.pem");
180+
let encoding_key = EncodingKey::from_rsa_pem(privkey.as_ref()).unwrap();
181+
let jwk = Jwk::from_encoding_key(&encoding_key, Algorithm::RS256).unwrap();
182+
assert_eq!(jwk, serde_json::from_value(json!({
183+
"kty": "RSA",
184+
"n": "yRE6rHuNR0QbHO3H3Kt2pOKGVhQqGZXInOduQNxXzuKlvQTLUTv4l4sggh5_CYYi_cvI-SXVT9kPWSKXxJXBXd_4LkvcPuUakBoAkfh-eiFVMh2VrUyWyj3MFl0HTVF9KwRXLAcwkREiS3npThHRyIxuy0ZMeZfxVL5arMhw1SRELB8HoGfG_AtH89BIE9jDBHZ9dLelK9a184zAf8LwoPLxvJb3Il5nncqPcSfKDDodMFBIMc4lQzDKL5gvmiXLXB1AGLm8KBjfE8s3L5xqi-yUod-j8MtvIj812dkS4QMiRVN_by2h3ZY8LYVGrqZXZTcgn2ujn8uKjXLZVD5TdQ",
185+
"e": "AQAB",
186+
"alg": "RS256",
187+
})).unwrap());
188+
}
189+
172190
#[cfg(feature = "use_pem")]
173191
#[test]
174192
#[wasm_bindgen_test]

0 commit comments

Comments
 (0)