use uselesskey::prelude::*;
#[cfg(all(feature = "rsa", feature = "jwk"))]
fn main() {
let fx = Factory::deterministic(Seed::new([0u8; 32]));
let rsa_key = fx.rsa("issuer", RsaSpec::rs256());
println!("=== RSA Key (RS256) ===");
println!("Key ID (kid): {}", rsa_key.kid());
println!("\nPublic JWK:");
println!("{}", rsa_key.public_jwk());
println!("\nJWKS for verification:");
println!("{}", rsa_key.public_jwks());
#[cfg(feature = "ecdsa")]
{
let ecdsa_key = fx.ecdsa("ecdsa-issuer", EcdsaSpec::es256());
println!("\n=== ECDSA Key (ES256) ===");
println!("Key ID (kid): {}", ecdsa_key.kid());
println!("\nPublic JWK:");
println!("{}", ecdsa_key.public_jwk());
}
#[cfg(feature = "hmac")]
{
let hmac_secret = fx.hmac("hmac-issuer", HmacSpec::hs256());
println!("\n=== HMAC Secret (HS256) ===");
println!("Key ID (kid): {}", hmac_secret.kid());
println!("\nJWK (symmetric):");
println!("{}", hmac_secret.jwk());
}
println!("\n=== Key formats available ===");
println!("Private Key PKCS#8 PEM:");
println!("{}", rsa_key.private_key_pkcs8_pem());
println!("\nPublic Key SPKI PEM:");
println!("{}", rsa_key.public_key_spki_pem());
}
#[cfg(not(all(feature = "rsa", feature = "jwk")))]
fn main() {
eprintln!("Enable 'rsa' and 'jwk' features to run this example:");
eprintln!(" cargo run -p uselesskey --example jwt_signing --features \"rsa,jwk\"");
eprintln!("\nFor optional ECDSA/HMAC variants:");
eprintln!(" cargo run -p uselesskey --example jwt_signing --features \"rsa,ecdsa,hmac,jwk\"");
}