Struct jsonprooftoken::jwk::key::Jwk
source · pub struct Jwk {
pub kid: Option<String>,
pub pk_use: Option<PKUse>,
pub key_ops: Option<Vec<KeyOps>>,
pub alg: Option<Algorithm>,
pub x5u: Option<String>,
pub x5c: Option<Vec<String>>,
pub x5t: Option<String>,
pub key_params: JwkAlgorithmParameters,
}Expand description
JWK parameters defined at https://datatracker.ietf.org/doc/html/rfc7517#section-4
Fields§
§kid: Option<String>ID of the key
pk_use: Option<PKUse>The intended use of the public key
key_ops: Option<Vec<KeyOps>>The “key_ops” (key operations) parameter identifies the operation(s) for which the key is intended to be used The “use” and “key_ops” JWK members SHOULD NOT be used together; however, if both are used, the information they convey MUST be consistent. Applications should specify which of these members they use, if either is to be used by the application.
alg: Option<Algorithm>The algorithm intended to be used
x5u: Option<String>X.509 Public key cerfificate URL.
x5c: Option<Vec<String>>X.509 public key certificate chain.
x5t: Option<String>X.509 Certificate thumbprint.
key_params: JwkAlgorithmParametersImplementations§
source§impl Jwk
impl Jwk
sourcepub fn generate(key_type: KeyPairSubtype) -> Result<Self, CustomError>
pub fn generate(key_type: KeyPairSubtype) -> Result<Self, CustomError>
Examples found in repository?
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
fn main() {
// let jpt_claims = JptClaims {
// sub: Some("user123".to_string()),
// exp: Some(1633756800),
// nbf: Some(1633670400),
// iat: Some(1633666800),
// jti: Some("123456".to_string()),
// custom: Some(serde_json::json!({
// "degree": {
// "type": "BachelorDegree",
// "name": "Bachelor of Science and Arts",
// "ciao": [
// {"u1": "value1"},
// {"u2": "value2"}
// ]
// },
// "name": "John Doe"
// })),
// };
let custom_claims = serde_json::json!({
"family_name": "Doe",
"given_name": "Jay",
"email": "jaydoe@example.org",
"age": 42
});
let mut jpt_claims = JptClaims::new();
// jpt_claims.add_claim("family_name", "Doe");
// jpt_claims.add_claim("given_name", "Jay");
// jpt_claims.add_claim("email", "jaydoe@example.org");
// jpt_claims.add_claim("age", 42);
jpt_claims.add_claim("", custom_claims, true);
println!("{:?}", jpt_claims);
let (claims, payloads) = jpt_claims.get_claims_and_payloads();
println!("Claims: {:?}", claims);
println!("Payloads: {:?}", payloads);
let issued_header = IssuerProtectedHeader{
typ: Some("JPT".to_owned()),
alg: ProofAlgorithm::BLS12381_SHA256,
iss: Some("https://issuer.example".to_owned()),
cid: None,
claims: Some(claims),
};
println!("Issued Header: {:?}", issued_header);
let issued_jwp = JwpIssued::new(issued_header, payloads);
println!("ISSUED JWP: \n{:?}", issued_jwp);
let bbs_jwk = Jwk::generate(KeyPairSubtype::BLS12381SHA256).unwrap();
println!("BBS Jwk: {:?}", bbs_jwk);
let compact_issued_jwp = issued_jwp.encode(SerializationType::COMPACT, &bbs_jwk).unwrap();
println!("Compact JWP: {}", compact_issued_jwp);
let decoded_issued_jwp = JwpIssued::decode(compact_issued_jwp, SerializationType::COMPACT, &bbs_jwk.to_public().unwrap()).unwrap();
println!("DECODED ISSUED JWP \n{:?}", decoded_issued_jwp);
let presentation_header = PresentationProtectedHeader{
alg: ProofAlgorithm::BLS12381_SHA256_PROOF,
aud: Some("https://recipient.example.com".to_owned()),
nonce: Some("wrmBRkKtXjQ".to_owned())
};
// This is an alternative
// let presentation_jwp = decoded_issued_jwp.present(SerializationType::COMPACT, &bbs_jwk.to_public().unwrap(), presentation_header);
let mut presentation_jwp = JwpPresented::new(decoded_issued_jwp.get_issuer_protected_header().clone(),presentation_header, decoded_issued_jwp.get_payloads().clone());
presentation_jwp.set_disclosed(1, false).unwrap();
presentation_jwp.set_disclosed(3, false).unwrap();
let compact_presented_jwp = presentation_jwp.encode(SerializationType::COMPACT, &bbs_jwk.to_public().unwrap(), decoded_issued_jwp.get_proof().unwrap()).unwrap();
println!("Compact Presented JWP: {}", compact_presented_jwp);
let decoded_presentation_jwp = JwpPresented::decode(compact_presented_jwp, SerializationType::COMPACT, &bbs_jwk.to_public().unwrap()).unwrap();
println!("DECODED PRESENTED JWP \n{:?}", decoded_presentation_jwp);
// let original = JptClaims::reconstruct_json_value(claims);
// println!("{:?}", original);
// let claims_map = jpt_claims.to_map();
// println!("{:?}", claims_map);
// let deserialized = JptClaims::from_map(claims_map);
// println!("{:?}", jpt_claims);
// println!("{:?}", deserialized);
}pub fn set_kid(&mut self, kid: &str)
pub fn set_pk_use(&mut self, pk_use: PKUse)
pub fn set_key_ops(&mut self, key_ops: Vec<KeyOps>)
pub fn set_alg(&mut self, alg: Algorithm)
pub fn set_x5u(&mut self, x5u: &str)
pub fn set_x5c(&mut self, x5c: Vec<&str>)
pub fn set_x5t(&mut self, x5t: &str)
sourcepub fn is_public(&self) -> bool
pub fn is_public(&self) -> bool
Returns true if all private key components of the key are unset, false otherwise.
sourcepub fn is_private(&self) -> bool
pub fn is_private(&self) -> bool
Returns true if all private key components of the key are set, false otherwise.
pub fn from_key_params(key_params: JwkAlgorithmParameters) -> Self
sourcepub fn to_public(&self) -> Option<Jwk>
pub fn to_public(&self) -> Option<Jwk>
Examples found in repository?
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
fn main() {
// let jpt_claims = JptClaims {
// sub: Some("user123".to_string()),
// exp: Some(1633756800),
// nbf: Some(1633670400),
// iat: Some(1633666800),
// jti: Some("123456".to_string()),
// custom: Some(serde_json::json!({
// "degree": {
// "type": "BachelorDegree",
// "name": "Bachelor of Science and Arts",
// "ciao": [
// {"u1": "value1"},
// {"u2": "value2"}
// ]
// },
// "name": "John Doe"
// })),
// };
let custom_claims = serde_json::json!({
"family_name": "Doe",
"given_name": "Jay",
"email": "jaydoe@example.org",
"age": 42
});
let mut jpt_claims = JptClaims::new();
// jpt_claims.add_claim("family_name", "Doe");
// jpt_claims.add_claim("given_name", "Jay");
// jpt_claims.add_claim("email", "jaydoe@example.org");
// jpt_claims.add_claim("age", 42);
jpt_claims.add_claim("", custom_claims, true);
println!("{:?}", jpt_claims);
let (claims, payloads) = jpt_claims.get_claims_and_payloads();
println!("Claims: {:?}", claims);
println!("Payloads: {:?}", payloads);
let issued_header = IssuerProtectedHeader{
typ: Some("JPT".to_owned()),
alg: ProofAlgorithm::BLS12381_SHA256,
iss: Some("https://issuer.example".to_owned()),
cid: None,
claims: Some(claims),
};
println!("Issued Header: {:?}", issued_header);
let issued_jwp = JwpIssued::new(issued_header, payloads);
println!("ISSUED JWP: \n{:?}", issued_jwp);
let bbs_jwk = Jwk::generate(KeyPairSubtype::BLS12381SHA256).unwrap();
println!("BBS Jwk: {:?}", bbs_jwk);
let compact_issued_jwp = issued_jwp.encode(SerializationType::COMPACT, &bbs_jwk).unwrap();
println!("Compact JWP: {}", compact_issued_jwp);
let decoded_issued_jwp = JwpIssued::decode(compact_issued_jwp, SerializationType::COMPACT, &bbs_jwk.to_public().unwrap()).unwrap();
println!("DECODED ISSUED JWP \n{:?}", decoded_issued_jwp);
let presentation_header = PresentationProtectedHeader{
alg: ProofAlgorithm::BLS12381_SHA256_PROOF,
aud: Some("https://recipient.example.com".to_owned()),
nonce: Some("wrmBRkKtXjQ".to_owned())
};
// This is an alternative
// let presentation_jwp = decoded_issued_jwp.present(SerializationType::COMPACT, &bbs_jwk.to_public().unwrap(), presentation_header);
let mut presentation_jwp = JwpPresented::new(decoded_issued_jwp.get_issuer_protected_header().clone(),presentation_header, decoded_issued_jwp.get_payloads().clone());
presentation_jwp.set_disclosed(1, false).unwrap();
presentation_jwp.set_disclosed(3, false).unwrap();
let compact_presented_jwp = presentation_jwp.encode(SerializationType::COMPACT, &bbs_jwk.to_public().unwrap(), decoded_issued_jwp.get_proof().unwrap()).unwrap();
println!("Compact Presented JWP: {}", compact_presented_jwp);
let decoded_presentation_jwp = JwpPresented::decode(compact_presented_jwp, SerializationType::COMPACT, &bbs_jwk.to_public().unwrap()).unwrap();
println!("DECODED PRESENTED JWP \n{:?}", decoded_presentation_jwp);
// let original = JptClaims::reconstruct_json_value(claims);
// println!("{:?}", original);
// let claims_map = jpt_claims.to_map();
// println!("{:?}", claims_map);
// let deserialized = JptClaims::from_map(claims_map);
// println!("{:?}", jpt_claims);
// println!("{:?}", deserialized);
}Trait Implementations§
source§impl<'de> Deserialize<'de> for Jwk
impl<'de> Deserialize<'de> for Jwk
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
impl Eq for Jwk
impl StructuralEq for Jwk
impl StructuralPartialEq for Jwk
Auto Trait Implementations§
impl RefUnwindSafe for Jwk
impl Send for Jwk
impl Sync for Jwk
impl Unpin for Jwk
impl UnwindSafe for Jwk
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where &'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_mut() into the pipe
function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
.tap_ref_mut() only in debug builds, and is erased in release
builds.