From ae216fb9be1f6862e15c6e8f96612616769bdbb9 Mon Sep 17 00:00:00 2001 From: "artem.ivanov" Date: Wed, 4 May 2022 17:08:19 +0300 Subject: [PATCH 1/4] Serde raises error: `Unable deserialize DIDDoc from JsValue: can only flatten structs and maps` in case of using Base58 key representation --- src/did/did_doc.rs | 26 ++---- src/secrets/mod.rs | 26 ++---- src/utils/did.rs | 33 ++++++- wasm/demo/src/test-vectors.ts | 93 ++++++++++++------- wasm/src/did/did_doc.rs | 19 ++-- wasm/src/secrets/secret.rs | 19 ++-- .../src/test-vectors/did_doc/alice.ts | 21 +++-- wasm/tests-js/src/test-vectors/did_doc/bob.ts | 27 ++++-- .../src/test-vectors/did_doc/charlie.ts | 6 +- .../src/test-vectors/secrets/alice.ts | 18 ++-- wasm/tests-js/src/test-vectors/secrets/bob.ts | 27 ++++-- .../src/test-vectors/secrets/charlie.ts | 6 +- .../secrets/charlie_rotated_to_alice.ts | 24 +++-- 13 files changed, 208 insertions(+), 137 deletions(-) diff --git a/src/did/did_doc.rs b/src/did/did_doc.rs index 6ada163..50277c0 100644 --- a/src/did/did_doc.rs +++ b/src/did/did_doc.rs @@ -50,27 +50,13 @@ pub enum VerificationMethodType { /// Represents verification material (https://www.w3.org/TR/did-core/#verification-material) #[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(tag = "format")] pub enum VerificationMaterial { - JWK { - #[serde(flatten)] - value: Value, - }, - Multibase { - #[serde(flatten)] - value: String, - }, - Base58 { - #[serde(flatten)] - value: String, - }, - Hex { - #[serde(flatten)] - value: String, - }, - Other { - #[serde(flatten)] - value: Value, - }, + JWK { value: Value }, + Multibase { value: String }, + Base58 { value: String }, + Hex { value: String }, + Other { value: Value }, } /// Represents service record in DID Document (https://www.w3.org/TR/did-core/#services). diff --git a/src/secrets/mod.rs b/src/secrets/mod.rs index a47fa70..f4a112d 100644 --- a/src/secrets/mod.rs +++ b/src/secrets/mod.rs @@ -94,25 +94,11 @@ pub enum SecretType { /// Represents secret crypto material. #[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(tag = "format")] pub enum SecretMaterial { - JWK { - #[serde(flatten)] - value: Value, - }, - Multibase { - #[serde(flatten)] - value: String, - }, - Base58 { - #[serde(flatten)] - value: String, - }, - Hex { - #[serde(flatten)] - value: String, - }, - Other { - #[serde(flatten)] - value: Value, - }, + JWK { value: Value }, + Multibase { value: String }, + Base58 { value: String }, + Hex { value: String }, + Other { value: Value }, } diff --git a/src/utils/did.rs b/src/utils/did.rs index 300f1ab..cefbcc2 100644 --- a/src/utils/did.rs +++ b/src/utils/did.rs @@ -473,8 +473,8 @@ mod tests { let actual_key = Secret { id: "did:example:eve#key-x25519-1".to_string(), type_: SecretType::X25519KeyAgreementKey2019, - secret_material: (SecretMaterial::Base58{ - value:"2b5J8uecvwAo9HUGge5NKQ7HoRNKUKCjZ7Fr4mDgWkwqFyjLPWt7rv5kL3UPeG3e4B9Sy4H2Q2zAuWcP2RNtgJ4t".to_string() + secret_material: (SecretMaterial::Base58 { + value: "2b5J8uecvwAo9HUGge5NKQ7HoRNKUKCjZ7Fr4mDgWkwqFyjLPWt7rv5kL3UPeG3e4B9Sy4H2Q2zAuWcP2RNtgJ4t".to_string() }), }.as_key_pair().unwrap(); @@ -494,7 +494,7 @@ mod tests { let actual_key = Secret { id: "did:example:eve#key-ed25519-1".to_string(), type_: SecretType::Ed25519VerificationKey2018, - secret_material: (SecretMaterial::Base58{ + secret_material: (SecretMaterial::Base58 { value: "2b5J8uecvwAo9HUGge5NKQ7HoRNKUKCjZ7Fr4mDgWkwqATnLmZDx7Seu6NqTuFKkxuHNT27GcoxVZQCkWJhNvaUQ".to_string() }), }.as_key_pair().unwrap(); @@ -515,7 +515,7 @@ mod tests { let actual_key = Secret { id: "did:example:eve#key-x25519-1".to_string(), type_: SecretType::X25519KeyAgreementKey2020, - secret_material: (SecretMaterial::Multibase{ + secret_material: (SecretMaterial::Multibase { value: "zshCmpUZKtFrAfudMf7NzD3oR6yhWe6i2434FDktk9CYZfkndn7suDrqnRWvrVDHk95Z7vBRJChFxTgBF9qzq7D3xPe".to_string() }), }.as_key_pair().unwrap(); @@ -536,7 +536,7 @@ mod tests { let actual_key = Secret { id: "did:example:eve#key-ed25519-1".to_string(), type_: SecretType::Ed25519VerificationKey2020, - secret_material: (SecretMaterial::Multibase{ + secret_material: (SecretMaterial::Multibase { value: "zrv2DyJwnoQWzS74nPkHHdM7NYH27BRNFBG9To7Fca9YzWhfBVa9Mek52H9bJexjdNqxML1F3TGCpjLNkCwwgQDvd5J".to_string() }), }.as_key_pair().unwrap(); @@ -667,4 +667,27 @@ mod tests { assert_eq!(is_did("example:example:alice"), false); assert_eq!(is_did("example:alice"), false); } + + #[test] + fn deserialization_for_base58_key_representation_works() { + let expected_serialzied = r#"{"id":"did:example:eve#key-x25519-1","secret_material":{"format":"Base58","value":"2b5J8uecvwAo9HUGge5NKQ7HoRNKUKCjZ7Fr4mDgWkwqFyjLPWt7rv5kL3UPeG3e4B9Sy4H2Q2zAuWcP2RNtgJ4t"},"type":"X25519KeyAgreementKey2019"}"#; + let base58key = "2b5J8uecvwAo9HUGge5NKQ7HoRNKUKCjZ7Fr4mDgWkwqFyjLPWt7rv5kL3UPeG3e4B9Sy4H2Q2zAuWcP2RNtgJ4t"; + let actual_key = Secret { + id: "did:example:eve#key-x25519-1".to_string(), + type_: SecretType::X25519KeyAgreementKey2019, + secret_material: SecretMaterial::Base58 { + value: base58key.to_string(), + }, + }; + + let serialized = json!(actual_key).to_string(); + assert_eq!(expected_serialzied, serialized); + + let deserialized: Secret = serde_json::from_str(&serialized).unwrap(); + assert_eq!(format!("{:?}", deserialized), format!("{:?}", actual_key)); + match deserialized.secret_material { + SecretMaterial::Base58 { value } => assert_eq!(value, base58key), + _ => assert!(false), + } + } } diff --git a/wasm/demo/src/test-vectors.ts b/wasm/demo/src/test-vectors.ts index 324c4f7..96cf8a7 100644 --- a/wasm/demo/src/test-vectors.ts +++ b/wasm/demo/src/test-vectors.ts @@ -19,7 +19,8 @@ export const ALICE_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:alice#key-x25519-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "avH0O2Y4tqLAq8y9zpianr8ajii5m4F_mICrzNlatXs", @@ -31,7 +32,8 @@ export const ALICE_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:alice#key-p256-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "L0crjMN1g0Ih4sYAJ_nGoHUck2cloltUpUVQDhF2nHE", @@ -44,7 +46,8 @@ export const ALICE_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:alice#key-p521-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", kty: "EC", x: "AHBEVPRhAv-WHDEvxVM9S0px9WxxwHL641Pemgk9sDdxvli9VpKCBdra5gg_4kupBDhz__AlaBgKOC_15J2Byptz", @@ -57,7 +60,8 @@ export const ALICE_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:alice#key-not-in-secrets-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", kty: "OKP", x: "G-boxFB6vOZBu-wXkm-9Lh79I8nf9Z50cILaOgKKGww", @@ -69,7 +73,8 @@ export const ALICE_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:alice#key-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", kty: "OKP", x: "G-boxFB6vOZBu-wXkm-9Lh79I8nf9Z50cILaOgKKGww", @@ -81,7 +86,8 @@ export const ALICE_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:alice#key-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "2syLh57B-dGpa0F8p1JrO6JU7UUSF6j7qL-vfk1eOoY", @@ -94,7 +100,8 @@ export const ALICE_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:alice#key-3", verification_material: { - JWK: { + format: "JWK", + value: { crv: "secp256k1", kty: "EC", x: "aToW5EaTq5mlAf8C5ECYDSkqsJycrW-e1SQ6_GJcAOk", @@ -111,7 +118,8 @@ export const ALICE_SECRETS = [ id: "did:example:alice#key-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", d: "pFRUKkyzx4kHdJtFSnlPA9WzqkDT1HWV0xZ5OYZd2SY", kty: "OKP", @@ -123,7 +131,8 @@ export const ALICE_SECRETS = [ id: "did:example:alice#key-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "7TCIdt1rhThFtWcEiLnk_COEjh1ZfQhM4bW2wz-dp4A", kty: "EC", @@ -136,7 +145,8 @@ export const ALICE_SECRETS = [ id: "did:example:alice#key-3", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "secp256k1", d: "N3Hm1LXA210YVGGsXw_GklMwcLu_bMgnzDese6YQIyA", kty: "EC", @@ -149,7 +159,8 @@ export const ALICE_SECRETS = [ id: "did:example:alice#key-x25519-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "r-jK2cO3taR8LQnJB1_ikLBTAnOtShJOsHXRUWT-aZA", kty: "OKP", @@ -161,7 +172,8 @@ export const ALICE_SECRETS = [ id: "did:example:alice#key-p256-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "sB0bYtpaXyp-h17dDpMx91N3Du1AdN4z1FUq02GbmLw", kty: "EC", @@ -174,7 +186,8 @@ export const ALICE_SECRETS = [ id: "did:example:alice#key-p521-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", d: "AQCQKE7rZpxPnX9RgjXxeywrAMp1fJsyFe4cir1gWj-8t8xWaM_E2qBkTTzyjbRBu-JPXHe_auT850iYmE34SkWi", kty: "EC", @@ -207,7 +220,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-x25519-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "GDTrI66K0pFfO54tlCSvfjjNapIs44dzpneBgyx0S3E", @@ -219,7 +233,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-x25519-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "UT9S3F5ep16KSNBBShU2wh3qSfqYjlasZimn0mB8_VM", @@ -231,7 +246,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-x25519-3", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "82k2BTUiywKv49fKLZa-WwDi8RBf0tB0M8bvSAUQ3yY", @@ -243,7 +259,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-p256-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "FQVaTOksf-XsCUrt4J1L2UGvtWaDwpboVlqbKBY2AIo", @@ -256,7 +273,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-p256-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "n0yBsGrwGZup9ywKhzD4KoORGicilzIUyfcXb1CSwe0", @@ -269,7 +287,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-p384-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", kty: "EC", x: "MvnE_OwKoTcJVfHyTX-DLSRhhNwlu5LNoQ5UWD9Jmgtdxp_kpjsMuTTBnxg5RF_Y", @@ -282,7 +301,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-p384-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", kty: "EC", x: "2x3HOTvR8e-Tu6U4UqMd1wUWsNXMD0RgIunZTMcZsS-zWOwDgsrhYVHmv3k_DjV3", @@ -295,7 +315,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-p521-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", kty: "EC", x: "Af9O5THFENlqQbh2Ehipt1Yf4gAd9RCa3QzPktfcgUIFADMc4kAaYVViTaDOuvVS2vMS1KZe0D5kXedSXPQ3QbHi", @@ -308,7 +329,8 @@ export const BOB_DID_DOC = { type: "JsonWebKey2020", controller: "did:example:bob#key-p521-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", kty: "EC", x: "ATp_WxCfIK_SriBoStmA0QrJc2pUR1djpen0VdpmogtnKxJbitiPq-HJXYXDKriXfVnkrl2i952MsIOMfD2j0Ots", @@ -325,7 +347,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-x25519-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "b9NnuOCB0hm7YGNvaE9DMhwH_wjZA1-gWD6dA0JWdL0", kty: "OKP", @@ -337,7 +360,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-x25519-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "p-vteoF1gopny1HXywt76xz_uC83UUmrgszsI-ThBKk", kty: "OKP", @@ -349,7 +373,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-x25519-3", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "f9WJeuQXEItkGM8shN4dqFr5fLQLBasHnWZ-8dPaSo0", kty: "OKP", @@ -361,7 +386,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-p256-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "PgwHnlXxt8pwR6OCTUwwWx-P51BiLkFZyqHzquKddXQ", kty: "EC", @@ -374,7 +400,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-p256-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "agKz7HS8mIwqO40Q2dwm_Zi70IdYFtonN5sZecQoxYU", kty: "EC", @@ -387,7 +414,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-p384-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", d: "ajqcWbYA0UDBKfAhkSkeiVjMMt8l-5rcknvEv9t_Os6M8s-HisdywvNCX4CGd_xY", kty: "EC", @@ -400,7 +428,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-p384-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", d: "OiwhRotK188BtbQy0XBO8PljSKYI6CCD-nE_ZUzK7o81tk3imDOuQ-jrSWaIkI-T", kty: "EC", @@ -413,7 +442,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-p521-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", d: "AV5ocjvy7PkPgNrSuvCxtG70NMj6iTabvvjSLbsdd8OdI9HlXYlFR7RdBbgLUTruvaIRhjEAE9gNTH6rWUIdfuj6", kty: "EC", @@ -426,7 +456,8 @@ export const BOB_SECRETS = [ id: "did:example:bob#key-p521-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", d: "ABixMEZHsyT7SRw-lY5HxdNOofTZLlwBHwPEJ3spEMC2sWN1RZQylZuvoyOBGJnPxg4-H_iVhNWf_OtgYODrYhCk", kty: "EC", diff --git a/wasm/src/did/did_doc.rs b/wasm/src/did/did_doc.rs index a2c8833..dd0e82e 100644 --- a/wasm/src/did/did_doc.rs +++ b/wasm/src/did/did_doc.rs @@ -57,21 +57,22 @@ type VerificationMethodType = "JsonWebKey2020" | "X25519KeyAgreementKey2019" | "Ed25519VerificationKey2018" | "EcdsaSecp256k1VerificationKey2019" | string "#; +#[wasm_bindgen(typescript_custom_section)] +const VERIFICATION_MATERIAL_FORMAT_TS: &'static str = r#" +/** + * The representation format of secret material + */ +type VerificationMaterialFormat = "JWK" | "Multibase" | "Base58" | "Hex" | "Other" | string +"#; + #[wasm_bindgen(typescript_custom_section)] const VERIFICATION_MATERIAL_TYPE_TS: &'static str = r#" /** * Represents verification material (https://www.w3.org/TR/did-core/#verification-material) */ type VerificationMaterial = { - "JWK": any, -} | { - "Multibase": string, -} | { - "Base58": string, -} | { - "Hex": string, -} | { - "Other": any, + format: string, + value: any, } "#; diff --git a/wasm/src/secrets/secret.rs b/wasm/src/secrets/secret.rs index 7b8ea50..2a94fd6 100644 --- a/wasm/src/secrets/secret.rs +++ b/wasm/src/secrets/secret.rs @@ -33,20 +33,21 @@ type SecretType = | "Ed25519VerificationKey2018" | "EcdsaSecp256k1VerificationKey2019" | string "#; +#[wasm_bindgen(typescript_custom_section)] +const SECRET_MATERIAL_FORMAT_TS: &'static str = r#" +/** + * The representation format of secret material + */ +type SecretMaterialFormat = "JWK" | "Multibase" | "Base58" | "Hex" | "Other" | string +"#; + #[wasm_bindgen(typescript_custom_section)] const SECRET_MATERIAL_TS: &'static str = r#" /** * Represents secret crypto material. */ type SecretMaterial = { - "JWK": any, -} | { - "Multibase": string, -} | { - "Base58": string, -} | { - "Hex": string, -} | { - "Other": any, + format: SecretMaterialFormat, + value: any, } "#; diff --git a/wasm/tests-js/src/test-vectors/did_doc/alice.ts b/wasm/tests-js/src/test-vectors/did_doc/alice.ts index 1e5f5c7..4363ed0 100644 --- a/wasm/tests-js/src/test-vectors/did_doc/alice.ts +++ b/wasm/tests-js/src/test-vectors/did_doc/alice.ts @@ -6,7 +6,8 @@ export const ALICE_VERIFICATION_METHOD_KEY_AGREEM_X25519_NOT_IN_SECRET: Verifica type: "JsonWebKey2020", controller: "did:example:alice#key-x25519-not-in-secrets-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "avH0O2Y4tqLAq8y9zpianr8ajii5m4F_mICrzNlatXs", @@ -19,7 +20,8 @@ export const ALICE_VERIFICATION_METHOD_KEY_AGREEM_X25519: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:alice#key-x25519-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "avH0O2Y4tqLAq8y9zpianr8ajii5m4F_mICrzNlatXs", @@ -32,7 +34,8 @@ export const ALICE_VERIFICATION_METHOD_KEY_AGREEM_P256: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:alice#key-p256-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "L0crjMN1g0Ih4sYAJ_nGoHUck2cloltUpUVQDhF2nHE", @@ -46,7 +49,8 @@ export const ALICE_VERIFICATION_METHOD_KEY_AGREEM_P521: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:alice#key-p521-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", kty: "EC", x: "AHBEVPRhAv-WHDEvxVM9S0px9WxxwHL641Pemgk9sDdxvli9VpKCBdra5gg_4kupBDhz__AlaBgKOC_15J2Byptz", @@ -60,7 +64,8 @@ export const ALICE_AUTH_METHOD_25519: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:alice#key-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", kty: "OKP", x: "G-boxFB6vOZBu-wXkm-9Lh79I8nf9Z50cILaOgKKGww", @@ -73,7 +78,8 @@ export const ALICE_AUTH_METHOD_P256: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:alice#key-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "2syLh57B-dGpa0F8p1JrO6JU7UUSF6j7qL-vfk1eOoY", @@ -87,7 +93,8 @@ export const ALICE_AUTH_METHOD_SECP256K1: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:alice#key-3", verification_material: { - JWK: { + format: "JWK", + value: { crv: "secp256k1", kty: "EC", x: "aToW5EaTq5mlAf8C5ECYDSkqsJycrW-e1SQ6_GJcAOk", diff --git a/wasm/tests-js/src/test-vectors/did_doc/bob.ts b/wasm/tests-js/src/test-vectors/did_doc/bob.ts index 8810ba0..c1122f4 100644 --- a/wasm/tests-js/src/test-vectors/did_doc/bob.ts +++ b/wasm/tests-js/src/test-vectors/did_doc/bob.ts @@ -5,7 +5,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_X25519_1: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-x25519-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "GDTrI66K0pFfO54tlCSvfjjNapIs44dzpneBgyx0S3E", @@ -18,7 +19,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_X25519_2: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-x25519-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "UT9S3F5ep16KSNBBShU2wh3qSfqYjlasZimn0mB8_VM", @@ -31,7 +33,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_X25519_3: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-x25519-3", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "82k2BTUiywKv49fKLZa-WwDi8RBf0tB0M8bvSAUQ3yY", @@ -44,7 +47,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_P256_1: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-p256-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "FQVaTOksf-XsCUrt4J1L2UGvtWaDwpboVlqbKBY2AIo", @@ -57,7 +61,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_P256_2: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-p256-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", kty: "EC", x: "n0yBsGrwGZup9ywKhzD4KoORGicilzIUyfcXb1CSwe0", @@ -70,7 +75,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_P384_1: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-p384-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", kty: "EC", x: "MvnE_OwKoTcJVfHyTX-DLSRhhNwlu5LNoQ5UWD9Jmgtdxp_kpjsMuTTBnxg5RF_Y", @@ -83,7 +89,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_P384_2: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-p384-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", kty: "EC", x: "2x3HOTvR8e-Tu6U4UqMd1wUWsNXMD0RgIunZTMcZsS-zWOwDgsrhYVHmv3k_DjV3", @@ -96,7 +103,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_P521_1: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-p521-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", kty: "EC", x: "Af9O5THFENlqQbh2Ehipt1Yf4gAd9RCa3QzPktfcgUIFADMc4kAaYVViTaDOuvVS2vMS1KZe0D5kXedSXPQ3QbHi", @@ -109,7 +117,8 @@ export const BOB_VERIFICATION_METHOD_KEY_AGREEM_P521_2: VerificationMethod = { type: "JsonWebKey2020", controller: "did:example:bob#key-p521-2", verification_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", kty: "EC", x: "ATp_WxCfIK_SriBoStmA0QrJc2pUR1djpen0VdpmogtnKxJbitiPq-HJXYXDKriXfVnkrl2i952MsIOMfD2j0Ots", diff --git a/wasm/tests-js/src/test-vectors/did_doc/charlie.ts b/wasm/tests-js/src/test-vectors/did_doc/charlie.ts index 4e9ba4e..83ac865 100644 --- a/wasm/tests-js/src/test-vectors/did_doc/charlie.ts +++ b/wasm/tests-js/src/test-vectors/did_doc/charlie.ts @@ -10,7 +10,8 @@ export const CHARLIE_DID_DOC: DIDDoc = { type: "JsonWebKey2020", controller: "did:example:charlie#key-x25519-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", kty: "OKP", x: "nTiVFj7DChMsETDdxd5dIzLAJbSQ4j4UG6ZU1ogLNlw", @@ -22,7 +23,8 @@ export const CHARLIE_DID_DOC: DIDDoc = { type: "JsonWebKey2020", controller: "did:example:charlie#key-1", verification_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", kty: "OKP", x: "VDXDwuGKVq91zxU6q7__jLDUq8_C5cuxECgd-1feFTE", diff --git a/wasm/tests-js/src/test-vectors/secrets/alice.ts b/wasm/tests-js/src/test-vectors/secrets/alice.ts index f332525..3a15397 100644 --- a/wasm/tests-js/src/test-vectors/secrets/alice.ts +++ b/wasm/tests-js/src/test-vectors/secrets/alice.ts @@ -5,7 +5,8 @@ export const ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", d: "pFRUKkyzx4kHdJtFSnlPA9WzqkDT1HWV0xZ5OYZd2SY", kty: "OKP", @@ -17,7 +18,8 @@ export const ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "7TCIdt1rhThFtWcEiLnk_COEjh1ZfQhM4bW2wz-dp4A", kty: "EC", @@ -30,7 +32,8 @@ export const ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-3", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "secp256k1", d: "N3Hm1LXA210YVGGsXw_GklMwcLu_bMgnzDese6YQIyA", kty: "EC", @@ -43,7 +46,8 @@ export const ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-x25519-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "r-jK2cO3taR8LQnJB1_ikLBTAnOtShJOsHXRUWT-aZA", kty: "OKP", @@ -55,7 +59,8 @@ export const ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-p256-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "sB0bYtpaXyp-h17dDpMx91N3Du1AdN4z1FUq02GbmLw", kty: "EC", @@ -68,7 +73,8 @@ export const ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-p521-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", d: "AQCQKE7rZpxPnX9RgjXxeywrAMp1fJsyFe4cir1gWj-8t8xWaM_E2qBkTTzyjbRBu-JPXHe_auT850iYmE34SkWi", kty: "EC", diff --git a/wasm/tests-js/src/test-vectors/secrets/bob.ts b/wasm/tests-js/src/test-vectors/secrets/bob.ts index 9806535..574cf16 100644 --- a/wasm/tests-js/src/test-vectors/secrets/bob.ts +++ b/wasm/tests-js/src/test-vectors/secrets/bob.ts @@ -4,7 +4,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_X25519_1: Secret = { id: "did:example:bob#key-x25519-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "b9NnuOCB0hm7YGNvaE9DMhwH_wjZA1-gWD6dA0JWdL0", kty: "OKP", @@ -16,7 +17,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_X25519_2: Secret = { id: "did:example:bob#key-x25519-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "p-vteoF1gopny1HXywt76xz_uC83UUmrgszsI-ThBKk", kty: "OKP", @@ -28,7 +30,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_X25519_3: Secret = { id: "did:example:bob#key-x25519-3", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "f9WJeuQXEItkGM8shN4dqFr5fLQLBasHnWZ-8dPaSo0", kty: "OKP", @@ -40,7 +43,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_P256_1: Secret = { id: "did:example:bob#key-p256-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "PgwHnlXxt8pwR6OCTUwwWx-P51BiLkFZyqHzquKddXQ", kty: "EC", @@ -53,7 +57,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_P256_2: Secret = { id: "did:example:bob#key-p256-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "agKz7HS8mIwqO40Q2dwm_Zi70IdYFtonN5sZecQoxYU", kty: "EC", @@ -66,7 +71,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_P384_1: Secret = { id: "did:example:bob#key-p384-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", d: "ajqcWbYA0UDBKfAhkSkeiVjMMt8l-5rcknvEv9t_Os6M8s-HisdywvNCX4CGd_xY", kty: "EC", @@ -79,7 +85,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_P384_2: Secret = { id: "did:example:bob#key-p384-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-384", d: "OiwhRotK188BtbQy0XBO8PljSKYI6CCD-nE_ZUzK7o81tk3imDOuQ-jrSWaIkI-T", kty: "EC", @@ -92,7 +99,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_P521_1: Secret = { id: "did:example:bob#key-p521-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", d: "AV5ocjvy7PkPgNrSuvCxtG70NMj6iTabvvjSLbsdd8OdI9HlXYlFR7RdBbgLUTruvaIRhjEAE9gNTH6rWUIdfuj6", kty: "EC", @@ -105,7 +113,8 @@ export const BOB_SECRET_KEY_AGREEMENT_KEY_P521_2: Secret = { id: "did:example:bob#key-p521-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", d: "ABixMEZHsyT7SRw-lY5HxdNOofTZLlwBHwPEJ3spEMC2sWN1RZQylZuvoyOBGJnPxg4-H_iVhNWf_OtgYODrYhCk", kty: "EC", diff --git a/wasm/tests-js/src/test-vectors/secrets/charlie.ts b/wasm/tests-js/src/test-vectors/secrets/charlie.ts index 3cc9656..69a317c 100644 --- a/wasm/tests-js/src/test-vectors/secrets/charlie.ts +++ b/wasm/tests-js/src/test-vectors/secrets/charlie.ts @@ -4,7 +4,8 @@ export const CHARLIE_SECRET_KEY_AGREEMENT_KEY_X25519: Secret = { id: "did:example:charlie#key-x25519-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "Z-BsgFe-eCvhuZlCBX5BV2XiDE2M92gkaORCe68YdZI", kty: "OKP", @@ -17,7 +18,8 @@ export const CHARLIE_SECRET_AUTH_KEY_ED25519: Secret = { id: "did:example:charlie#key-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", d: "T2azVap7CYD_kB8ilbnFYqwwYb5N-GcD6yjGEvquZXg", kty: "OKP", diff --git a/wasm/tests-js/src/test-vectors/secrets/charlie_rotated_to_alice.ts b/wasm/tests-js/src/test-vectors/secrets/charlie_rotated_to_alice.ts index 9000b64..ddf9474 100644 --- a/wasm/tests-js/src/test-vectors/secrets/charlie_rotated_to_alice.ts +++ b/wasm/tests-js/src/test-vectors/secrets/charlie_rotated_to_alice.ts @@ -5,7 +5,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:charlie#key-x25519-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "Z-BsgFe-eCvhuZlCBX5BV2XiDE2M92gkaORCe68YdZI", kty: "OKP", @@ -17,7 +18,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:charlie#key-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", d: "T2azVap7CYD_kB8ilbnFYqwwYb5N-GcD6yjGEvquZXg", kty: "OKP", @@ -29,7 +31,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "Ed25519", d: "pFRUKkyzx4kHdJtFSnlPA9WzqkDT1HWV0xZ5OYZd2SY", kty: "OKP", @@ -41,7 +44,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-2", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "7TCIdt1rhThFtWcEiLnk_COEjh1ZfQhM4bW2wz-dp4A", kty: "EC", @@ -54,7 +58,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-3", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "secp256k1", d: "N3Hm1LXA210YVGGsXw_GklMwcLu_bMgnzDese6YQIyA", kty: "EC", @@ -67,7 +72,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-x25519-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "X25519", d: "r-jK2cO3taR8LQnJB1_ikLBTAnOtShJOsHXRUWT-aZA", kty: "OKP", @@ -79,7 +85,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-p256-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-256", d: "sB0bYtpaXyp-h17dDpMx91N3Du1AdN4z1FUq02GbmLw", kty: "EC", @@ -92,7 +99,8 @@ export const CHARLIE_ROTATED_TO_ALICE_SECRETS: Secret[] = [ id: "did:example:alice#key-p521-1", type: "JsonWebKey2020", secret_material: { - JWK: { + format: "JWK", + value: { crv: "P-521", d: "AQCQKE7rZpxPnX9RgjXxeywrAMp1fJsyFe4cir1gWj-8t8xWaM_E2qBkTTzyjbRBu-JPXHe_auT850iYmE34SkWi", kty: "EC", From 6e9454ddf37467f547a8d66c006f594653020b84 Mon Sep 17 00:00:00 2001 From: "artem.ivanov" Date: Thu, 5 May 2022 09:13:37 +0300 Subject: [PATCH 2/4] Solve CI issue with installing wasm-pack --- .github/workflows/verify.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index fad0af7..100d40e 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -164,9 +164,14 @@ jobs: with: node-version: ${{ matrix.node }} - - name: Install wasm-pack + - name: Install wasm-pack Windows + if: runner.os != 'Windows' run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + - name: Install wasm-pack + if: runner.os == 'Windows' + run: npm install -g wasm-pack@0.10.1 + - name: Build pkg (bundler) run: make From 5e581d458ed2061b95aaaaa77a1fda49c5a59e6e Mon Sep 17 00:00:00 2001 From: "artem.ivanov" Date: Fri, 6 May 2022 12:15:58 +0300 Subject: [PATCH 3/4] Corrected conversion of X25519 secret key into JWK --- src/utils/did.rs | 71 +++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/src/utils/did.rs b/src/utils/did.rs index cefbcc2..3b1cec9 100644 --- a/src/utils/did.rs +++ b/src/utils/did.rs @@ -1,7 +1,8 @@ use askar_crypto::alg::{ ed25519::Ed25519KeyPair, k256::K256KeyPair, p256::P256KeyPair, x25519::X25519KeyPair, }; -use serde_json::json; +use askar_crypto::repr::{KeyPublicBytes, KeySecretBytes}; +use serde_json::{json, Value}; use std::io::Cursor; use varint::{VarintRead, VarintWrite}; @@ -298,16 +299,22 @@ impl AsKnownKeyPair for Secret { .into_vec() .to_didcomm("Wrong base58 value in secret material")?; - let curve25519_point_size = 32; - let (d_value, x_value) = decoded_value.split_at(curve25519_point_size); - let base64_url_d_value = base64::encode_config(&d_value, base64::URL_SAFE_NO_PAD); - let base64_url_x_value = base64::encode_config(&x_value, base64::URL_SAFE_NO_PAD); + let key_pair = X25519KeyPair::from_secret_bytes(&decoded_value) + .kind(ErrorKind::Malformed, "Unable parse x25519 secret material")?; - let jwk = json!({ + let mut jwk = json!({ "kty": "OKP", "crv": "X25519", - "x": base64_url_x_value, - "d": base64_url_d_value + }); + + key_pair.with_public_bytes(|buf| { + jwk["x"] = Value::String(base64::encode_config(buf, base64::URL_SAFE_NO_PAD)) + }); + + key_pair.with_secret_bytes(|buf| { + if let Some(sk) = buf { + jwk["d"] = Value::String(base64::encode_config(sk, base64::URL_SAFE_NO_PAD)) + } }); X25519KeyPair::from_jwk_value(&jwk) @@ -355,16 +362,22 @@ impl AsKnownKeyPair for Secret { ))? } - let curve25519_point_size = 32; - let (d_value, x_value) = decoded_value.split_at(curve25519_point_size); - let base64_url_d_value = base64::encode_config(&d_value, base64::URL_SAFE_NO_PAD); - let base64_url_x_value = base64::encode_config(&x_value, base64::URL_SAFE_NO_PAD); + let key_pair = X25519KeyPair::from_secret_bytes(&decoded_value) + .kind(ErrorKind::Malformed, "Unable parse x25519 secret material")?; - let jwk = json!({ + let mut jwk = json!({ "kty": "OKP", "crv": "X25519", - "x": base64_url_x_value, - "d": base64_url_d_value + }); + + key_pair.with_public_bytes(|buf| { + jwk["x"] = Value::String(base64::encode_config(buf, base64::URL_SAFE_NO_PAD)) + }); + + key_pair.with_secret_bytes(|buf| { + if let Some(sk) = buf { + jwk["d"] = Value::String(base64::encode_config(sk, base64::URL_SAFE_NO_PAD)) + } }); X25519KeyPair::from_jwk_value(&jwk) @@ -474,15 +487,17 @@ mod tests { id: "did:example:eve#key-x25519-1".to_string(), type_: SecretType::X25519KeyAgreementKey2019, secret_material: (SecretMaterial::Base58 { - value: "2b5J8uecvwAo9HUGge5NKQ7HoRNKUKCjZ7Fr4mDgWkwqFyjLPWt7rv5kL3UPeG3e4B9Sy4H2Q2zAuWcP2RNtgJ4t".to_string() + value: "CMhHdN419VCSfbGxt6PEAEy72tJxYHTGHuCSH6BW9oi3".to_string(), }), - }.as_key_pair().unwrap(); + } + .as_key_pair() + .unwrap(); let expected_key = X25519KeyPair::from_jwk_value(&json!({ "kty": "OKP", "crv": "X25519", - "x": "piw5XSMkceDeklaHQZXPBLQySyAwF8eZ-vddihdURS0", - "d": "T2azVap7CYD_kB8ilbnFYqwwYb5N-GcD6yjGEvquZXg" + "x": "tGskN_ae61DP4DLY31_fjkbvnKqf-ze7kA6Cj2vyQxU", + "d": "qL25gw-HkNJC9m4EsRzCoUx1KntjwHPzxo6a2xUcyFQ" })) .map(KnownKeyPair::X25519) .unwrap(); @@ -497,7 +512,9 @@ mod tests { secret_material: (SecretMaterial::Base58 { value: "2b5J8uecvwAo9HUGge5NKQ7HoRNKUKCjZ7Fr4mDgWkwqATnLmZDx7Seu6NqTuFKkxuHNT27GcoxVZQCkWJhNvaUQ".to_string() }), - }.as_key_pair().unwrap(); + } + .as_key_pair() + .unwrap(); let expected_key = Ed25519KeyPair::from_jwk_value(&json!({ "kty": "OKP", @@ -516,15 +533,17 @@ mod tests { id: "did:example:eve#key-x25519-1".to_string(), type_: SecretType::X25519KeyAgreementKey2020, secret_material: (SecretMaterial::Multibase { - value: "zshCmpUZKtFrAfudMf7NzD3oR6yhWe6i2434FDktk9CYZfkndn7suDrqnRWvrVDHk95Z7vBRJChFxTgBF9qzq7D3xPe".to_string() + value: "z3wei8fqKMwJsyTpqDQDWZ9ytPC716YyNDZL6kewQ9qtKrTD".to_string(), }), - }.as_key_pair().unwrap(); + } + .as_key_pair() + .unwrap(); let expected_key = X25519KeyPair::from_jwk_value(&json!({ "kty": "OKP", "crv": "X25519", - "x": "piw5XSMkceDeklaHQZXPBLQySyAwF8eZ-vddihdURS0", - "d": "T2azVap7CYD_kB8ilbnFYqwwYb5N-GcD6yjGEvquZXg" + "x": "tGskN_ae61DP4DLY31_fjkbvnKqf-ze7kA6Cj2vyQxU", + "d": "qL25gw-HkNJC9m4EsRzCoUx1KntjwHPzxo6a2xUcyFQ" })) .map(KnownKeyPair::X25519) .unwrap(); @@ -539,7 +558,9 @@ mod tests { secret_material: (SecretMaterial::Multibase { value: "zrv2DyJwnoQWzS74nPkHHdM7NYH27BRNFBG9To7Fca9YzWhfBVa9Mek52H9bJexjdNqxML1F3TGCpjLNkCwwgQDvd5J".to_string() }), - }.as_key_pair().unwrap(); + } + .as_key_pair() + .unwrap(); let expected_key = Ed25519KeyPair::from_jwk_value(&json!({ "kty": "OKP", From 251d92628a094e21f4900e199513bb1f7288d3b8 Mon Sep 17 00:00:00 2001 From: "artem.ivanov" Date: Thu, 5 May 2022 10:28:00 +0300 Subject: [PATCH 4/4] 0.3.1 release --- .github/workflows/verify.yml | 4 ++-- Cargo.toml | 2 +- wasm/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 100d40e..e0110b8 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -164,11 +164,11 @@ jobs: with: node-version: ${{ matrix.node }} - - name: Install wasm-pack Windows + - name: Install wasm-pack if: runner.os != 'Windows' run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - - name: Install wasm-pack + - name: Install wasm-pack Windows if: runner.os == 'Windows' run: npm install -g wasm-pack@0.10.1 diff --git a/Cargo.toml b/Cargo.toml index 99f3025..00c4e14 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ name = 'routing' [package] name = 'didcomm' -version = '0.3.0' +version = '0.3.1' authors = ['Vyacheslav Gudkov '] edition = '2018' description = 'DIDComm for Rust' diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index f84c1f4..ad48d1f 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = 'didcomm-js' -version = '0.3.0' +version = '0.3.1' authors = ['Vyacheslav Gudkov '] edition = '2018' description = 'WASM based javascript wrapper for DIDComm'