#json #jose #key #public-key #jwk #encryption #signing

jose-jwk

纯Rust实现,符合RFC7517描述的JSON Web Key (JWK)组件,用于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日

#2592 in 加密学

Download history 139/week @ 2024-04-17 236/week @ 2024-04-24 358/week @ 2024-05-01 203/week @ 2024-05-08 372/week @ 2024-05-15 455/week @ 2024-05-22 252/week @ 2024-05-29 279/week @ 2024-06-05 327/week @ 2024-06-12 304/week @ 2024-06-19 429/week @ 2024-06-26 196/week @ 2024-07-03 190/week @ 2024-07-10 144/week @ 2024-07-17 206/week @ 2024-07-24 187/week @ 2024-07-31

740 每月下载量
2 crates 中使用

Apache-2.0 OR MIT

75KB
1.5K SLoC

RustCrypto: JOSE JWK

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

纯Rust实现,符合RFC7517描述的JSON Web Key (JWK)组件,用于JavaScript对象签名和加密 (JOSE)规范。

JWK是一种在JSON中表示加密密钥的方式,通常用于表示公钥。此格式包含有关如何使用密钥的信息,以便子节点可以验证父节点发送的内容(例如,使用JWT)或使用此密钥加密消息以供父节点使用(例如,使用JWE)。此crate提供了与该格式接口的数据结构。

use jose_jwk::{Jwk, JwkSet, Key};
use jose_jwk::jose_jwa::{Algorithm, Signing};

let keys = serde_json::json!({
    "keys": [
        {
            "kty": "EC",
            "crv": "P-256",
            "x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
            "y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
            "use": "enc",
            "kid": "some-ec-kid"
        },
        {
            "kty": "RSA",
            "n": "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtV\
            T86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5\
            JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMic\
            AtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bF\
            TWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-\
            kEgU8awapJzKnqDKgw",
            "e": "AQAB",
            "alg": "RS256",
            "kid": "some-rsa-kid"
        }
    ]
});

let jwkset: JwkSet = serde_json::from_value(keys).unwrap();
let ec_jwk: &Jwk = &jwkset.keys[0];
let rsa_jwk: &Jwk = &jwkset.keys[1];

assert!(matches!(ec_jwk.key, Key::Ec(_)));
assert!(matches!(rsa_jwk.key, Key::Rsa(_)));

assert_eq!(ec_jwk.prm.kid, Some(String::from("some-ec-kid")));
assert_eq!(rsa_jwk.prm.kid, Some(String::from("some-rsa-kid")));

assert_eq!(rsa_jwk.prm.alg, Some(Algorithm::Signing(Signing::Rs256)));

文档

最低支持的Rust版本

此crate至少需要 Rust 1.65

我们可能会在未来更改MSRV,但将伴随次要版本号的增加。

许可证

在以下任一许可证下授权

任选其一。

贡献

除非你明确声明,否则,你提交的任何有意提交给作品以包含在内的贡献,根据Apache-2.0许可证的定义,应如上所述双重授权,不附加任何额外条款或条件。

依赖关系

~0.5–2.3MB
~51K SLoC