Skip to content

Commit f85034e

Browse files
committed
fix: update api signature of get_alg_key_ids
1 parent ea8a07e commit f85034e

3 files changed

Lines changed: 15 additions & 17 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ async fn verifier<B>(res: &Response<B>, sent_req: &Request<B>) -> HttpSigResult<
127127
// specify algorithm name since we cannot always infer it from key info
128128
let alg = AlgorithmName::Ed25519; // directly use Ed25519 algorithm
129129
// or else infer it from the response. Find your public key from IndexMap with alg and key_id pairs
130-
// let alg_key_id_map = res.get_alg_key_ids().unwrap
130+
// let alg_key_id_map = res.get_alg_key_ids().unwrap()
131131
let public_key = PublicKey::from_pem(&alg, PUBLIC_KEY_STRING).unwrap();
132132
let key_id = public_key.key_id();
133133

httpsig-hyper/src/hyper_http.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub trait MessageSignature {
2424
fn has_message_signature(&self) -> bool;
2525

2626
/// Extract all key ids for signature bases contained in the request headers
27-
fn get_alg_key_ids(&self) -> Result<IndexMap<SignatureName, (AlgorithmName, KeyId)>, Self::Error>;
27+
fn get_alg_key_ids(&self) -> Result<IndexMap<SignatureName, (Option<AlgorithmName>, Option<KeyId>)>, Self::Error>;
2828

2929
/// Extract all signature params used to generate signature bases contained in the request headers
3030
fn get_signature_params(&self) -> Result<IndexMap<SignatureName, HttpSignatureParams>, Self::Error>;
@@ -243,7 +243,7 @@ where
243243
}
244244

245245
/// Extract all signature bases contained in the request headers
246-
fn get_alg_key_ids(&self) -> HyperSigResult<IndexMap<SignatureName, (AlgorithmName, KeyId)>> {
246+
fn get_alg_key_ids(&self) -> HyperSigResult<IndexMap<SignatureName, (Option<AlgorithmName>, Option<KeyId>)>> {
247247
let req_or_res = RequestOrResponse::Request(self);
248248
get_alg_key_ids_inner(&req_or_res)
249249
}
@@ -358,7 +358,7 @@ where
358358
}
359359

360360
/// Extract all key ids for signature bases contained in the response headers
361-
fn get_alg_key_ids(&self) -> Result<IndexMap<SignatureName, (AlgorithmName, KeyId)>, Self::Error> {
361+
fn get_alg_key_ids(&self) -> Result<IndexMap<SignatureName, (Option<AlgorithmName>, Option<KeyId>)>, Self::Error> {
362362
let req_or_res = RequestOrResponse::Response(self);
363363
get_alg_key_ids_inner(&req_or_res)
364364
}
@@ -596,7 +596,7 @@ fn has_message_signature_inner(headers: &HeaderMap) -> bool {
596596
/// get key ids inner function
597597
fn get_alg_key_ids_inner<B>(
598598
req_or_res: &RequestOrResponse<B>,
599-
) -> HyperSigResult<IndexMap<SignatureName, (AlgorithmName, KeyId)>> {
599+
) -> HyperSigResult<IndexMap<SignatureName, (Option<AlgorithmName>, Option<KeyId>)>> {
600600
let signature_headers_map = extract_signature_headers_with_name(req_or_res)?;
601601
let res = signature_headers_map
602602
.iter()
@@ -610,11 +610,7 @@ fn get_alg_key_ids_inner<B>(
610610
.ok()
611611
.flatten();
612612
let key_id = headers.signature_params().keyid.clone();
613-
if let (Some(alg), Some(key_id)) = (alg, key_id) {
614-
Some((name.clone(), (alg, key_id)))
615-
} else {
616-
None
617-
}
613+
Some((name.clone(), (alg, key_id)))
618614
})
619615
.collect();
620616
Ok(res)
@@ -1185,7 +1181,9 @@ MCowBQYDK2VwAyEA1ixMQcxO46PLlgQfYS46ivFd+n0CcDHSKUnuhm3i1O0=
11851181

11861182
let org_key_id = VerifyingKey::key_id(&secret_key);
11871183
let (alg, key_id) = req.get_alg_key_ids().unwrap().into_iter().next().unwrap().1;
1188-
assert_eq!(org_key_id, *key_id);
1184+
let alg = alg.unwrap();
1185+
let key_id = key_id.unwrap();
1186+
assert_eq!(org_key_id, key_id);
11891187
let verification_key = SharedKey::from_base64(&alg, HMACSHA256_SECRET_KEY).unwrap();
11901188
let verification_res = req.verify_message_signature(&verification_key, Some(&key_id)).await;
11911189
assert!(verification_res.is_ok());
@@ -1204,8 +1202,8 @@ MCowBQYDK2VwAyEA1ixMQcxO46PLlgQfYS46ivFd+n0CcDHSKUnuhm3i1O0=
12041202
req.set_message_signature(&signature_params, &secret_key, None).await.unwrap();
12051203
let key_ids = req.get_alg_key_ids().unwrap();
12061204
assert_eq!(key_ids.len(), 1);
1207-
assert_eq!(key_ids[0].0, AlgorithmName::Ed25519);
1208-
assert_eq!(key_ids[0].1, "gjrE7ACMxgzYfFHgabgf4kLTg1eKIdsJ94AiFTFj1is=");
1205+
assert_eq!(key_ids[0].0.as_ref().unwrap(), &AlgorithmName::Ed25519);
1206+
assert_eq!(key_ids[0].1.as_ref().unwrap(), "gjrE7ACMxgzYfFHgabgf4kLTg1eKIdsJ94AiFTFj1is=");
12091207
}
12101208

12111209
const P256_SECERT_KEY: &str = r##"-----BEGIN PRIVATE KEY-----

httpsig-hyper/src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ MCowBQYDK2VwAyEA1ixMQcxO46PLlgQfYS46ivFd+n0CcDHSKUnuhm3i1O0=
147147
// verify without checking key_id
148148
// get algorithm from signature params
149149
let (alg, _key_id) = req.get_alg_key_ids().unwrap().into_iter().next().unwrap().1;
150-
let public_key = PublicKey::from_pem(&alg, EDDSA_PUBLIC_KEY).unwrap();
150+
let public_key = PublicKey::from_pem(&alg.unwrap(), EDDSA_PUBLIC_KEY).unwrap();
151151
let verification_res = req.verify_message_signature(&public_key, None).await;
152152
assert!(verification_res.is_ok());
153153

@@ -192,7 +192,7 @@ MCowBQYDK2VwAyEA1ixMQcxO46PLlgQfYS46ivFd+n0CcDHSKUnuhm3i1O0=
192192
// verify without checking key_id, request must be provided if `req` field param is included in signature params
193193
// get algorithm from signature params
194194
let (alg, _key_id) = res.get_alg_key_ids().unwrap().into_iter().next().unwrap().1;
195-
let public_key = PublicKey::from_pem(&alg, EDDSA_PUBLIC_KEY).unwrap();
195+
let public_key = PublicKey::from_pem(&alg.unwrap(), EDDSA_PUBLIC_KEY).unwrap();
196196
let verification_res = res.verify_message_signature(&public_key, None, Some(&req)).await;
197197
assert!(verification_res.is_ok());
198198
let verification_res = res
@@ -230,7 +230,7 @@ MCowBQYDK2VwAyEA1ixMQcxO46PLlgQfYS46ivFd+n0CcDHSKUnuhm3i1O0=
230230
req.set_message_signature_sync(&signature_params, &secret_key, None).unwrap();
231231

232232
let (alg, _key_id) = req.get_alg_key_ids().unwrap().into_iter().next().unwrap().1;
233-
let public_key = PublicKey::from_pem(&alg, EDDSA_PUBLIC_KEY).unwrap();
233+
let public_key = PublicKey::from_pem(&alg.unwrap(), EDDSA_PUBLIC_KEY).unwrap();
234234
let verification_res = req.verify_message_signature_sync(&public_key, None);
235235
assert!(verification_res.is_ok());
236236
}
@@ -256,7 +256,7 @@ MCowBQYDK2VwAyEA1ixMQcxO46PLlgQfYS46ivFd+n0CcDHSKUnuhm3i1O0=
256256
.unwrap();
257257

258258
let (alg, _key_id) = res.get_alg_key_ids().unwrap().into_iter().next().unwrap().1;
259-
let public_key = PublicKey::from_pem(&alg, EDDSA_PUBLIC_KEY).unwrap();
259+
let public_key = PublicKey::from_pem(&alg.unwrap(), EDDSA_PUBLIC_KEY).unwrap();
260260
let verification_res = res.verify_message_signature_sync(&public_key, None, Some(&req));
261261
assert!(verification_res.is_ok());
262262
}

0 commit comments

Comments
 (0)