Skip to content

Commit

Permalink
Support for specification-compliant verification method type `JsonWeb…
Browse files Browse the repository at this point in the history
…Key2020` (#1367)

* deprecate `MethodType::JSON_WEB_KEY` in favor of `MethodType::JSON_WEB_KEY_2020`

* deprecate old method type in wasm bindings

* fix tests in wasm-bindings
  • Loading branch information
UMR1352 authored May 24, 2024
1 parent 9abdb38 commit b634ead
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 7 deletions.
12 changes: 9 additions & 3 deletions bindings/wasm/src/verification/wasm_method_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,19 @@ impl WasmMethodType {
WasmMethodType(MethodType::X25519_KEY_AGREEMENT_KEY_2019)
}

/// A verification method for use with JWT verification as prescribed by the {@link Jwk}
/// in the `publicKeyJwk` entry.
#[wasm_bindgen(js_name = JsonWebKey)]
/// @deprecated Use {@link JsonWebKey2020} instead.
#[wasm_bindgen(js_name = JsonWebKey, skip_jsdoc)]
pub fn json_web_key() -> WasmMethodType {
WasmMethodType(MethodType::JSON_WEB_KEY)
}

/// A verification method for use with JWT verification as prescribed by the {@link Jwk}
/// in the `publicKeyJwk` entry.
#[wasm_bindgen(js_name = JsonWebKey2020)]
pub fn json_web_key_2020() -> WasmMethodType {
WasmMethodType(MethodType::JSON_WEB_KEY_2020)
}

/// A custom method.
pub fn custom(type_: String) -> WasmMethodType {
WasmMethodType(MethodType::custom(type_))
Expand Down
2 changes: 1 addition & 1 deletion bindings/wasm/tests/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ describe("CoreDocument", function() {
// Resolve.
const resolved = doc.resolveMethod(fragment, scope)!;
assert.deepStrictEqual(resolved.id().fragment(), fragment);
assert.deepStrictEqual(resolved.type().toString(), MethodType.JsonWebKey().toString());
assert.deepStrictEqual(resolved.type().toString(), MethodType.JsonWebKey2020().toString());
assert.deepStrictEqual(resolved.controller().toString(), doc.id().toString());
assert.deepStrictEqual(resolved.data().tryPublicKeyJwk().toJSON(), JWK.toJSON());
assert.deepStrictEqual(resolved.toJSON(), method.toJSON());
Expand Down
2 changes: 1 addition & 1 deletion bindings/wasm/tests/iota.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ describe("IotaDocument", function() {
// Resolve.
const resolved = doc.resolveMethod(fragment, scope)!;
assert.deepStrictEqual(resolved.id().fragment(), fragment);
assert.deepStrictEqual(resolved.type().toString(), MethodType.JsonWebKey().toString());
assert.deepStrictEqual(resolved.type().toString(), MethodType.JsonWebKey2020().toString());
assert.deepStrictEqual(resolved.controller().toString(), doc.id().toString());
assert.deepStrictEqual(resolved.data().tryPublicKeyJwk().toJSON(), JWK.toJSON());
assert.deepStrictEqual(resolved.toJSON(), method.toJSON());
Expand Down
2 changes: 1 addition & 1 deletion identity_verification/src/verification_method/method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ impl VerificationMethod {
MethodBuilder::default()
.id(id)
.controller(did.into())
.type_(MethodType::JSON_WEB_KEY)
.type_(MethodType::JSON_WEB_KEY_2020)
.data(MethodData::PublicKeyJwk(key))
.build()
}
Expand Down
12 changes: 11 additions & 1 deletion identity_verification/src/verification_method/method_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use crate::error::Result;
const ED25519_VERIFICATION_KEY_2018_STR: &str = "Ed25519VerificationKey2018";
const X25519_KEY_AGREEMENT_KEY_2019_STR: &str = "X25519KeyAgreementKey2019";
const JSON_WEB_KEY_METHOD_TYPE: &str = "JsonWebKey";
const JSON_WEB_KEY_2020_STR: &str = "JsonWebKey2020";

/// verification method types.
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize)]
Expand All @@ -24,7 +25,11 @@ impl MethodType {
pub const X25519_KEY_AGREEMENT_KEY_2019: Self = Self(Cow::Borrowed(X25519_KEY_AGREEMENT_KEY_2019_STR));
/// A verification method for use with JWT verification as prescribed by the [`Jwk`](::identity_jose::jwk::Jwk)
/// in the [`publicKeyJwk`](crate::MethodData::PublicKeyJwk) entry.
#[deprecated(since = "1.3.0", note = "use JSON_WEB_KEY_2020 instead")]
pub const JSON_WEB_KEY: Self = Self(Cow::Borrowed(JSON_WEB_KEY_METHOD_TYPE));
/// A verification method for use with JWT verification as prescribed by the [`Jwk`](::identity_jose::jwk::Jwk)
/// in the [`publicKeyJwk`](crate::MethodData::PublicKeyJwk) entry.
pub const JSON_WEB_KEY_2020: Self = Self(Cow::Borrowed(JSON_WEB_KEY_2020_STR));
/// Construct a custom method type.
pub fn custom(type_: impl AsRef<str>) -> Self {
Self(Cow::Owned(type_.as_ref().to_owned()))
Expand Down Expand Up @@ -57,7 +62,11 @@ impl FromStr for MethodType {
match string {
ED25519_VERIFICATION_KEY_2018_STR => Ok(Self::ED25519_VERIFICATION_KEY_2018),
X25519_KEY_AGREEMENT_KEY_2019_STR => Ok(Self::X25519_KEY_AGREEMENT_KEY_2019),
JSON_WEB_KEY_METHOD_TYPE => Ok(Self::JSON_WEB_KEY),
JSON_WEB_KEY_METHOD_TYPE => Ok(
#[allow(deprecated)]
Self::JSON_WEB_KEY,
),
JSON_WEB_KEY_2020_STR => Ok(Self::JSON_WEB_KEY_2020),
_ => Ok(Self(Cow::Owned(string.to_owned()))),
}
}
Expand All @@ -74,6 +83,7 @@ mod tests {
for method_type in [
MethodType::ED25519_VERIFICATION_KEY_2018,
MethodType::X25519_KEY_AGREEMENT_KEY_2019,
MethodType::JSON_WEB_KEY_2020,
] {
let ser: Value = serde_json::to_value(method_type.clone()).unwrap();
assert_eq!(ser.as_str().unwrap(), method_type.as_str());
Expand Down

0 comments on commit b634ead

Please sign in to comment.