jose-jws

Crates.iojose-jws
lib.rsjose-jws
version0.1.2
sourcesrc
created_at2022-09-05 16:20:54.946554
updated_at2023-08-21 12:29:55.481513
descriptionPure Rust implementation of the JSON Web Signature (JWS) component of the Javascript Object Signing and Encryption (JOSE) specification as described in RFC7515
homepage
repositoryhttps://github.com/RustCrypto/JOSE/tree/master/jose-jws
max_upload_size
id658933
size32,110
semver-owners (github:rust-lang-nursery:semver-owners)

documentation

https://docs.rs/jose-jws

README

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 verifyable payload
  • One or more signatures including:
    • An optional unprotected header (nonverifyable) containing hints about the algorithm
    • An optional protected header (verifyable using the signature)
    • A signature

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.

use jose_jws::{Jws, Signature};

let jws_json = serde_json::json!({
    "payload": "SGVsbG8gd29ybGQh",
    "signatures": [
        {
            "protected": "eyJhbGciOiJSUzI1NiJ9",
            "header": {
                "kid": "2010-12-29"
            },
            "signature": "cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOi\
            Zj5RZmh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYN\
            X4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0Gar\
            ZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh\
            6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQ\
            Ge77Rw"
        },
        {
            "protected": "eyJhbGciOiJFUzI1NiJ9",
            "header": {
                "kid": "e9bc097a-ce51-4036-9562-d2ade882db0d"
            },
            "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djx\
            La8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"
        }
    ]
});

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

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

let payload = jws.payload.unwrap();
let payload_str = core::str::from_utf8(&payload).unwrap();

assert_eq!(payload_str, "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.

Commit count: 0

cargo fmt