this repo has no description
at main 1.3 kB view raw
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}