#json #jose #jws #encryption #javascript #object #data

jose-jws

根据RFC7515描述,纯Rust实现的JSON Web签名(JWS)组件,该组件属于JavaScript对象签名和加密(JOSE)规范。

4个版本

0.1.2 2023年8月21日
0.1.1 2023年8月19日
0.1.0 2023年5月21日
0.0.0 2022年9月5日

#2571 in 加密

Download history 53/week @ 2024-03-13 75/week @ 2024-03-20 26/week @ 2024-03-27 34/week @ 2024-04-03 24/week @ 2024-04-10 15/week @ 2024-04-17 12/week @ 2024-04-24 22/week @ 2024-05-01 31/week @ 2024-05-08 113/week @ 2024-05-15 263/week @ 2024-05-22 150/week @ 2024-05-29 127/week @ 2024-06-05 130/week @ 2024-06-12 133/week @ 2024-06-19 111/week @ 2024-06-26

每月507次下载
用于 jls

Apache-2.0 OR MIT

95KB
2K SLoC

RustCrypto: JOSE JWS

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

JSON Web签名是一种在不加密数据的情况下验证发送者身份的方式。一个JWS包含以下内容

可验证的有效载荷

  • 一个或多个签名,包括
  • 一个可选的非受保护的头(不可验证),包含有关算法的提示
    • 一个可选的保护头(使用签名进行验证)
    • 签名
    • 客户端可以使用JWS中提供的信息来验证数据的完整性,这意味着客户端可以确信数据确实来自预期的发送者。

文档

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!")

最小支持的Rust版本

此crate至少需要 Rust 1.65

我们可能会在未来更改MSRV,但会伴随小版本号的提升。

许可证

许可证类型

根据您的选择,许可协议为

贡献

除非您明确声明,否则任何有意提交给作品并由您包括的贡献,根据Apache-2.0许可证定义,将按照上述方式双重许可,而无需任何额外条款或条件。

依赖关系

~0.8–1.6MB
~35K SLoC