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
fn main() {
let custom_claims = serde_json::json!({
"degree": {
"type": "BachelorDegree",
"name": "Bachelor of Science and Arts",
"ciao": [
{"u1": "value1"},
{"u2": "value2"}
]
},
"name": "John Doe"
});
let mut jpt_claims = JptClaims::new();
jpt_claims.set_iss("https://issuer.example".to_owned());
jpt_claims.set_claim(Some("vc"), custom_claims, true);
let issued_header = IssuerProtectedHeader::new(ProofAlgorithm::BLS12381_SHA256);
let bbs_jwk = Jwk::generate(KeyPairSubtype::BLS12381SHA256).unwrap();
println!("\nBBS Jwk:\n {:#}", serde_json::to_string_pretty(&bbs_jwk).unwrap());
let issued_jwp = JwpIssuedBuilder::new()
.issuer_protected_header(issued_header)
.jpt_claims(jpt_claims)
.build(&bbs_jwk)
.unwrap();
let compact_issued_jwp = issued_jwp.encode(SerializationType::COMPACT).unwrap();
println!("\nCompact Issued JWP: {}", compact_issued_jwp);
let decoded_issued_jwp = JwpIssuedDecoder::decode(&compact_issued_jwp, SerializationType::COMPACT).unwrap()
.verify(&bbs_jwk.to_public().unwrap())
.unwrap();
assert_eq!(issued_jwp, decoded_issued_jwp);
let mut presentation_header = PresentationProtectedHeader::new(ProofAlgorithm::BLS12381_SHA256_PROOF);
presentation_header.set_aud(Some("https://recipient.example.com".to_owned()));
presentation_header.set_nonce(Some("wrmBRkKtXjQ".to_owned()));
let presented_jwp = JwpPresentedBuilder::new(&decoded_issued_jwp)
.presentation_protected_header(presentation_header)
.set_undisclosed("vc.degree.name").unwrap()
.set_undisclosed("vc.degree.ciao[0].u1").unwrap()
.set_undisclosed("vc.name").unwrap()
.build(&bbs_jwk.to_public().unwrap())
.unwrap();
let compact_presented_jwp = presented_jwp.encode(SerializationType::COMPACT).unwrap();
println!("\nCompact Presented JWP: {}", compact_presented_jwp);
let _decoded_presented_jwp = JwpPresentedDecoder::decode(&compact_presented_jwp, SerializationType::COMPACT).unwrap()
.verify(&bbs_jwk.to_public().unwrap())
.unwrap();
}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
fn main() {
let custom_claims = serde_json::json!({
"degree": {
"type": "BachelorDegree",
"name": "Bachelor of Science and Arts",
"ciao": [
{"u1": "value1"},
{"u2": "value2"}
]
},
"name": "John Doe"
});
let mut jpt_claims = JptClaims::new();
jpt_claims.set_iss("https://issuer.example".to_owned());
jpt_claims.set_claim(Some("vc"), custom_claims, true);
let issued_header = IssuerProtectedHeader::new(ProofAlgorithm::BLS12381_SHA256);
let bbs_jwk = Jwk::generate(KeyPairSubtype::BLS12381SHA256).unwrap();
println!("\nBBS Jwk:\n {:#}", serde_json::to_string_pretty(&bbs_jwk).unwrap());
let issued_jwp = JwpIssuedBuilder::new()
.issuer_protected_header(issued_header)
.jpt_claims(jpt_claims)
.build(&bbs_jwk)
.unwrap();
let compact_issued_jwp = issued_jwp.encode(SerializationType::COMPACT).unwrap();
println!("\nCompact Issued JWP: {}", compact_issued_jwp);
let decoded_issued_jwp = JwpIssuedDecoder::decode(&compact_issued_jwp, SerializationType::COMPACT).unwrap()
.verify(&bbs_jwk.to_public().unwrap())
.unwrap();
assert_eq!(issued_jwp, decoded_issued_jwp);
let mut presentation_header = PresentationProtectedHeader::new(ProofAlgorithm::BLS12381_SHA256_PROOF);
presentation_header.set_aud(Some("https://recipient.example.com".to_owned()));
presentation_header.set_nonce(Some("wrmBRkKtXjQ".to_owned()));
let presented_jwp = JwpPresentedBuilder::new(&decoded_issued_jwp)
.presentation_protected_header(presentation_header)
.set_undisclosed("vc.degree.name").unwrap()
.set_undisclosed("vc.degree.ciao[0].u1").unwrap()
.set_undisclosed("vc.name").unwrap()
.build(&bbs_jwk.to_public().unwrap())
.unwrap();
let compact_presented_jwp = presented_jwp.encode(SerializationType::COMPACT).unwrap();
println!("\nCompact Presented JWP: {}", compact_presented_jwp);
let _decoded_presented_jwp = JwpPresentedDecoder::decode(&compact_presented_jwp, SerializationType::COMPACT).unwrap()
.verify(&bbs_jwk.to_public().unwrap())
.unwrap();
}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 Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§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) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
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)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.