4 个版本

0.2.1 2024 年 8 月 1 日
0.2.0 2024 年 7 月 26 日
0.1.1 2023 年 9 月 25 日
0.1.0 2022 年 12 月 15 日

#1075密码学

Download history 746/week @ 2024-04-28 891/week @ 2024-05-05 674/week @ 2024-05-12 531/week @ 2024-05-19 398/week @ 2024-05-26 614/week @ 2024-06-02 427/week @ 2024-06-09 551/week @ 2024-06-16 604/week @ 2024-06-23 443/week @ 2024-06-30 558/week @ 2024-07-07 342/week @ 2024-07-14 365/week @ 2024-07-21 696/week @ 2024-07-28 496/week @ 2024-08-04 767/week @ 2024-08-11

2,337 每月下载量
用于 36 个 crate(直接使用 18 个)

Apache-2.0 和可能 GPL-3.0

280KB
6K SLoC

遵循 RFC 7515RFC 7797(未编码有效负载选项)的 JSON Web Signature (JWS) 实现。

用法

解码与验证

使用 CompactJWS::verify 解码 JWS。

use serde_json::json;
use ssi_jwk::JWK;
use ssi_jws::CompactJWSStr;

let jws = CompactJWSStr::new(b"eyJhbGciOiJFUzI1NiJ9.cGF5bG9hZA.LW6XkHmgfNnb2CA-2qdeMVGpekAoxRNsAHoeLpnton3QMaQ3dMj-5G9SlP8dHj7cHf2HtRPdy6-9LbxYKvumKw").unwrap();

let jwk: JWK = json!({
    "kty": "EC",
    "use": "sig",
    "crv": "P-256",
    "x": "dxdB360AJqJFYhdctoKZD_a_P6vLGAxtEVaCLnyraXQ",
    "y": "iH6o0l5AECsfRuEw2Eghbrp-6Fob3j98-1Cbe1YOmwM",
    "alg": "ES256"
}).try_into().unwrap();

assert!(jws.verify(&jwk).await.unwrap().is_ok());

内部,CompactJWS::verify 使用 CompactJWS::to_decoded 解码 JWS,然后使用 DecodedJWS::verify 验证签名。

let decoded_jws = jws.to_decoded().unwrap();
let verifiable_jws = decoded_jws.into_verifiable().await.unwrap();
assert_eq!(verifiable_jws.verify(&jwk).await.unwrap().is_ok());

您可以使用此方法在验证之前解码有效负载(例如使用 DecodedJWS::try_map)以便与签名一起验证。

签名

使用 JWSPayload::sign 方法将有效负载签名成一个紧凑的 JWS。

use serde_json::json;
use ssi_jwk::JWK;
use ssi_jws::JWSPayload;

let jwk: JWK = json!({
    "kty": "EC",
    "d": "3KSLs0_obYeQXfEI9I3BBH5y7aOm028bEx3rW6i5UN4",
    "use": "sig",
    "crv": "P-256",
    "x": "dxdB360AJqJFYhdctoKZD_a_P6vLGAxtEVaCLnyraXQ",
    "y": "iH6o0l5AECsfRuEw2Eghbrp-6Fob3j98-1Cbe1YOmwM",
    "alg": "ES256"
}).try_into().unwrap();

let jwt = "payload".sign(&jwk).await.unwrap();
assert_eq!(jwt, "eyJhbGciOiJFUzI1NiJ9.cGF5bG9hZA.LW6XkHmgfNnb2CA-2qdeMVGpekAoxRNsAHoeLpnton3QMaQ3dMj-5G9SlP8dHj7cHf2HtRPdy6-9LbxYKvumKw")

依赖项

~23–40MB
~666K SLoC