SD-JWT Rust Reference Implementation
This is the reference implementation of the IETF SD-JWT specification written in Rust. Supported version: 6.
Note: while the project is started as a reference implementation, it is intended to be evolved to a production-ready, high-performance implementations in the long-run.
API
Note: the current version of the crate is 0.0.x, so the API should be considered as experimental. Proposals about API improvements are highly appreciated.
fn demo() {
let mut issuer = SDJWTIssuer::new(issuer_key, None);
let sd_jwt = issuer.issue_sd_jwt(claims, SDJWTClaimsStrategy::Full, holder_key, add_decoy, "compact".to_owned()).unwrap();
let mut holder = SDJWTHolder::new(sd_jwt, "compact".to_owned()).unwrap();
let presentation = holder.create_presentation(claims_to_disclosure, None, None, None, None).unwrap();
let verified_claims = SDJWTVerifier::new(presentation, cb_to_resolve_issuer_key, None, None, "compact".to_owned()).unwrap()
.verified_claims;
}
See tests/demos.rs
for more details;
Repository structure
SD-JWT Rust crate
SD-JWT crate is the root of the repository.
To build the project simply perform:
cargo build
To run tests:
cargo test
Interoperability testing tool
Coming soon (planned for v0.0.4)
External Dependencies
Dual license (MIT/Apache 2.0) dependencies: base64, lazy_static log, serde, serde_json, sha2, rand, hmac, thiserror. MIT license dependencies: jsonwebtoken, strum
Note: the list of dependencies may be changed in the future.