Documentation crates.io

detached-jws

Encoding, decoding, signing and verification (Detached JWS)

Signing and verifying is done through the [Sign] and [Verify] traits.

Example with writer:

```rust use openssl::pkey::PKey; use openssl::rsa::Rsa; use openssl::{hash::MessageDigest}; use openssl::{ rsa::Padding, sign::{Signer, Verifier}, }; use serdejson::{json, Map, Value}; use std::io::{Write}; use detachedjws::{SerializeJwsWriter, DeserializeJwsWriter};

let keypair = PKey::from_rsa(Rsa::generate(2048).unwrap()).unwrap();

let mut signer = Signer::new(MessageDigest::sha256(), &keypair).unwrap(); signer.setrsapadding(Padding::PKCS1_PSS).unwrap();

let mut header = Map::new(); header.insert("custom".toowned(), json!("customvalue"));

let mut writer = SerializeJwsWriter::new(Vec::new(), "PS256".toowned(), header, signer).unwrap(); writer.writeall(&[0, 1, 2, 3]); writer.write_all(&[4, 5, 6]);

let jws = writer.finish().unwrap();

let mut verifier = Verifier::new(MessageDigest::sha256(), &keypair).unwrap(); verifier.setrsapadding(Padding::PKCS1_PSS).unwrap();

let mut writer = DeserializeJwsWriter::new(&jws, |h| Some(verifier) ).unwrap(); writer.writeall(&[0, 1, 2, 3]); writer.writeall(&[4, 5, 6]);

let verified_headers = writer.finish().unwrap();

asserteq!( verifiedheaders.get("custom").unwrap().asstr().unwrap(), "customvalue" ); ```

Simple example:

```rust use openssl::pkey::PKey; use openssl::rsa::Rsa; use openssl::{hash::MessageDigest}; use openssl::{ rsa::Padding, sign::{Signer, Verifier}, }; use serde_json::{json, Map, Value};

let keypair = PKey::from_rsa(Rsa::generate(2048).unwrap()).unwrap();

let mut signer = Signer::new(MessageDigest::sha256(), &keypair).unwrap(); signer.setrsapadding(Padding::PKCS1_PSS).unwrap();

let mut header = Map::new(); header.insert("custom".toowned(), json!("customvalue"));

let payload = vec![0, 1, 2, 3, 4, 5, 6];

let jws = detachedjws::serialize( "PS256".toowned(), header, &mut payload.as_slice(), signer, ) .unwrap();

let mut verifier = Verifier::new(MessageDigest::sha256(), &keypair).unwrap(); verifier.setrsapadding(Padding::PKCS1_PSS).unwrap();

let verifiedheaders = detachedjws::deserialize(&jws, &mut payload.as_slice(), verifier).unwrap();

asserteq!( verifiedheaders.get("custom").unwrap().asstr().unwrap(), "customvalue" ); ```