[RustCrypto]: JOSE JWS

Crate Docs Build Status Apache2/MIT licensed Rust Version Project Chat

Pure Rust implementation of the JSON Web Signature ([JWS]) component of the Javascript Object Signing and Encryption ([JOSE]) specification as described in [RFC7515].

JSON Web Signatures are a way of sharing unencrypted data in a way that the sender can be verified. A JWS has the following contents:

A client can use the information provided in a JWS to verify the integrity of the data, meaning the client can be sure that the data did come from the intended sender.

```rust use jose_jws::{Jws, Signature};

let jwsjson = serdejson::json!({ "payload": "SGVsbG8gd29ybGQh", "signatures": [ { "protected": "eyJhbGciOiJSUzI1NiJ9", "header": { "kid": "2010-12-29" }, "signature": "cC4hiUPoj9Eetdgtv3hF80EGrhuB_dzERat0XF9g2VtQgr9PJbu3XOi\ Zj5RZmh7AAuHIm4Bh-0QclF5YKtO8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYN\ X4BAynRFdiuB--fnZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0Gar\ ZRmBeSN9383LcOLn6dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh\ 6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQ\ Ge77Rw" }, { "protected": "eyJhbGciOiJFUzI1NiJ9", "header": { "kid": "e9bc097a-ce51-4036-9562-d2ade882db0d" }, "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djx\ La8ISlSApmWQxfKTUJqPP3-Kg6NU1Q" } ] });

let Jws::General(jws) = serdejson::fromvalue(jws_json).unwrap() else { panic!("couldn't deserialize JWS"); };

assert_eq!(jws.signatures.len(), 2);

let payload = jws.payload.unwrap(); let payloadstr = core::str::fromutf8(&payload).unwrap();

asserteq!(payloadstr, "Hello world!") ```

Documentation

Minimum Supported Rust Version

This crate requires Rust 1.65 at a minimum.

We may change the MSRV in the future, but it will be accompanied by a minor version bump.

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.