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::*;