Function detached_jws::decode::deserialize_selector[][src]

pub fn deserialize_selector<F>(
    jws: &impl AsRef<[u8]>,
    payload: &mut impl Read,
    selector: F
) -> Result<Map<String, Value>> where
    F: Fn(&Map<String, Value>) -> Option<Box<dyn Verify>>, 

Deserialize and verify detached jws

Examples

extern crate detached_jws;
extern crate anyhow;
extern crate serde_json;

use std::io::{Write};
use anyhow::Result;
use serde_json::{Map, Value};
use detached_jws::{Verify};

#[derive(Default)]
pub struct DummyVerifier;

impl Verify for DummyVerifier {
    fn verify(&self, signature: &[u8]) -> Result<bool> {
        Ok(true)
    }
}

impl Write for DummyVerifier {
    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
        Ok(buf.len())
    }
    fn flush(&mut self) -> std::io::Result<()> {
       Ok(())
    }
}

let detached_jws =  "eyJhbGciOiJ0ZXN0X2FsZ29yaXRobSIsImN1c3RvbSI6ImN1c3RvbV92YWx1ZSJ9..ZXlKaGJHY2lPaUowWlhOMFgyRnNaMjl5YVhSb2JTSXNJbU4xYzNSdmJTSTZJbU4xYzNSdmJWOTJZV3gxWlNKOS5BQUVDQXdRRkJn".as_bytes();

let verified_headers = detached_jws::deserialize_selector(
    &detached_jws,
    &mut vec![0, 1, 2, 3, 4, 5, 6].as_slice(),
    |h| {
        match h.get("alg").unwrap() {
            Value::String(ref v) if v == "test_algorithm" => Some(Box::new(DummyVerifier::default())),
            _ => None,
        }
}).unwrap();

assert_eq!(
    verified_headers.get("custom").unwrap().as_str().unwrap(),
    "custom_value"
);