this repo has no description
1use anyhow::{anyhow, Result};
2use serde::Deserialize;
3
4#[derive(Deserialize)]
5pub struct JwtClaims {
6 pub iss: String,
7 pub aud: String,
8 pub iat: i32,
9 pub exp: i32,
10 pub lxm: String,
11}
12
13#[derive(Deserialize)]
14pub struct JwtHeader {
15 pub typ: String,
16 pub alg: String,
17}
18
19pub(crate) fn validate(multibase_key: &str, signature: &[u8], content: &str) -> Result<()> {
20 let (_, decoded_multibase_key) = multibase::decode(multibase_key)?;
21 match &decoded_multibase_key[..2] {
22 // secp256k1
23 [0xe7, 0x01] => {
24 let signature = ecdsa::Signature::from_slice(signature)?;
25 let verifying_key =
26 k256::ecdsa::VerifyingKey::from_sec1_bytes(&decoded_multibase_key[2..])?;
27 ecdsa::signature::Verifier::verify(&verifying_key, content.as_bytes(), &signature)?;
28 Ok(())
29 }
30 // p256
31 [0x80, 0x24] => {
32 let signature = ecdsa::Signature::from_slice(signature)?;
33 let verifying_key =
34 p256::ecdsa::VerifyingKey::from_sec1_bytes(&decoded_multibase_key[2..])?;
35 ecdsa::signature::Verifier::verify(&verifying_key, content.as_bytes(), &signature)?;
36 Ok(())
37 }
38 _ => Err(anyhow!(
39 "invalid multibase: {:?}",
40 &decoded_multibase_key[..2]
41 )),
42 }
43}