Encoding, decoding, signing and verification (Detached JWS)
Signing and verifying is done through the [Sign
] and [Verify
] traits.
```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" ); ```
```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" ); ```