Skip to main content

uselesskey_core_jwk/
lib.rs

1#![forbid(unsafe_code)]
2
3//! Re-export of JWK model types and helpers.
4//!
5//! This crate is a thin compatibility façade over
6//! `uselesskey-core-jwk-shape` for API stability.
7//!
8//! # Examples
9//!
10//! Build an Ed25519 public JWK:
11//!
12//! ```
13//! use uselesskey_core_jwk::{OkpPublicJwk, PublicJwk};
14//!
15//! let jwk = OkpPublicJwk {
16//!     kty: "OKP",
17//!     use_: "sig",
18//!     alg: "EdDSA",
19//!     crv: "Ed25519",
20//!     kid: "my-key-1".into(),
21//!     x: "dGVzdC1wdWJsaWMta2V5".into(),
22//! };
23//! let public = PublicJwk::Okp(jwk);
24//! assert_eq!(public.to_value()["kty"], "OKP");
25//! ```
26//!
27//! Assemble a JWKS with deterministic ordering via [`JwksBuilder`]:
28//!
29//! ```
30//! use uselesskey_core_jwk::{JwksBuilder, RsaPublicJwk, PublicJwk};
31//!
32//! let jwks = JwksBuilder::new()
33//!     .add_public(PublicJwk::Rsa(RsaPublicJwk {
34//!         kty: "RSA", use_: "sig", alg: "RS256",
35//!         kid: "b-key".into(), n: "modulus".into(), e: "AQAB".into(),
36//!     }))
37//!     .add_public(PublicJwk::Rsa(RsaPublicJwk {
38//!         kty: "RSA", use_: "sig", alg: "RS256",
39//!         kid: "a-key".into(), n: "modulus".into(), e: "AQAB".into(),
40//!     }))
41//!     .build();
42//!
43//! // Keys are sorted by kid
44//! assert_eq!(jwks.keys[0].kid(), "a-key");
45//! assert_eq!(jwks.keys[1].kid(), "b-key");
46//! ```
47
48pub use uselesskey_core_jwk_builder::JwksBuilder;
49pub use uselesskey_core_jwk_shape::*;