From 6075594240dbbc1e36fb159acae1391332b1e250 Mon Sep 17 00:00:00 2001 From: DaevMithran Date: Thu, 1 Dec 2022 12:32:09 +0530 Subject: [PATCH] feat: Update tests and utils --- src/signer.ts | 2 +- src/utils.ts | 46 ++++++++++++++++++---------------- tests/modules/did.test.ts | 4 +-- tests/modules/resource.test.ts | 4 ++- tests/signer.test.ts | 18 ++++++------- tests/testutils.test.ts | 32 ++++++++++++----------- 6 files changed, 58 insertions(+), 48 deletions(-) diff --git a/src/signer.ts b/src/signer.ts index f614a017..1cb92a2a 100644 --- a/src/signer.ts +++ b/src/signer.ts @@ -5,7 +5,7 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc" import { createDefaultCheqdRegistry } from "./registry" import { MsgCreateDidDocPayload, SignInfo, MsgUpdateDidDocPayload } from '@cheqd/ts-proto/cheqd/did/v2/tx'; import { DidStdFee, ISignInputs, TSignerAlgo, VerificationMethods } from './types'; -import { VerificationMethod } from '@cheqd/ts-proto/cheqd/did/v1/did' +import { VerificationMethod } from '@cheqd/ts-proto/cheqd/did/v2/diddoc' import { base64ToBytes, EdDSASigner, hexToBytes, Signer, ES256Signer, ES256KSigner } from 'did-jwt'; import { toString } from 'uint8arrays' import { assert, assertDefined } from '@cosmjs/utils' diff --git a/src/utils.ts b/src/utils.ts index 43ccea54..a8cc3482 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,8 +1,8 @@ -import { VerificationMethod } from "@cheqd/ts-proto/cheqd/did/v1/did" +import { VerificationMethod } from "@cheqd/ts-proto/cheqd/did/v2/diddoc" import { - MsgCreateDidPayload, - MsgUpdateDidPayload -} from "@cheqd/ts-proto/cheqd/did/v1/tx" + MsgCreateDidDocPayload, + MsgUpdateDidDocPayload +} from "@cheqd/ts-proto/cheqd/did/v2/tx" import { IKeyPair, IKeyValuePair, @@ -29,7 +29,7 @@ export type TImportableEd25519Key = { type: "Ed25519" } -export type IdentifierPayload = Partial | Partial +export type IdentifierPayload = Partial | Partial export function parseToKeyValuePair(object: { [key: string]: any }): IKeyValuePair[] { return Object.entries(object).map(([key, value]) => ({ key, value })) @@ -48,7 +48,7 @@ export function createSignInputsFromImportableEd25519Key(key: TImportableEd25519 switch (method?.type) { case VerificationMethods.Base58: const publicKeyMultibase = bases['base58btc'].encode(publicKey) - if (method.publicKeyMultibase === publicKeyMultibase) { + if ((JSON.parse(method.verificationMaterial)).publicKeyMultibase === publicKeyMultibase) { return { verificationMethodId: method.id, privateKeyHex: key.privateKeyHex @@ -61,7 +61,7 @@ export function createSignInputsFromImportableEd25519Key(key: TImportableEd25519 kty: 'OKP', x: toString( publicKey, 'base64url' ) }) - if (isEqualKeyValuePair(method.publicKeyJwk, publicKeyJWK)) { + if (isEqualKeyValuePair((JSON.parse(method.verificationMaterial)).publicKeyJwk, publicKeyJWK)) { return { verificationMethodId: method.id, privateKeyHex: key.privateKeyHex @@ -126,8 +126,10 @@ export function createDidVerificationMethod(verificationMethodTypes: Verificatio id: verificationKeys[_].keyId, type: type, controller: verificationKeys[_].didUrl, - publicKeyMultibase: verificationKeys[_].methodSpecificId, - publicKeyJwk: [] + verificationMaterial: JSON.stringify({ + publicKeyMultibase: verificationKeys[_].methodSpecificId, + publicKeyJwk: [] + }) } case VerificationMethods.JWK: @@ -135,27 +137,29 @@ export function createDidVerificationMethod(verificationMethodTypes: Verificatio id: verificationKeys[_].keyId, type: type, controller: verificationKeys[_].didUrl, - publicKeyJwk: parseToKeyValuePair( - { - crv: 'Ed25519', - kty: 'OKP', - x: toString( fromString( verificationKeys[_].publicKey, 'base64pad' ), 'base64url' ) - } - ), - publicKeyMultibase: '' + verificationMaterial: JSON.stringify({ + publicKeyJwk: parseToKeyValuePair( + { + crv: 'Ed25519', + kty: 'OKP', + x: toString( fromString( verificationKeys[_].publicKey, 'base64pad' ), 'base64url' ) + } + ), + publicKeyMultibase: '' + }) } } }) ?? [] } -export function createDidPayload(verificationMethods: VerificationMethod[], verificationKeys: IVerificationKeys[]): MsgCreateDidPayload { +export function createDidPayload(verificationMethods: VerificationMethod[], verificationKeys: IVerificationKeys[]): MsgCreateDidDocPayload { if (!verificationMethods || verificationMethods.length === 0) throw new Error('No verification methods provided') if (!verificationKeys || verificationKeys.length === 0) throw new Error('No verification keys provided') const did = verificationKeys[0].didUrl - return MsgCreateDidPayload.fromPartial( + return MsgCreateDidDocPayload.fromPartial( { id: did, controller: verificationKeys.map(key => key.didUrl), @@ -176,7 +180,7 @@ export function createDidPayloadWithSignInputs(seed?: string, keys?: IKeyPair[]) const verificationKeys = keys.map((key, i) => createVerificationKeys(key, key.algo || MethodSpecificIdAlgo.Base58, `key-${i}`)) const verificationMethod = createDidVerificationMethod(verificationMethodTypes, verificationKeys) - let payload : Partial = { + let payload : Partial = { id: verificationKeys[0].didUrl, controller: verificationKeys.map(key => key.didUrl), verificationMethod: verificationMethod, @@ -186,7 +190,7 @@ export function createDidPayloadWithSignInputs(seed?: string, keys?: IKeyPair[]) const keyHexs = keys.map((key)=>convertKeyPairtoTImportableEd25519Key(key)) const signInputs = keyHexs.map((key)=>createSignInputsFromImportableEd25519Key(key, verificationMethod)) - return { didPayload: MsgCreateDidPayload.fromPartial(payload), keys, signInputs } + return { didPayload: MsgCreateDidDocPayload.fromPartial(payload), keys, signInputs } } export function convertKeyPairtoTImportableEd25519Key(keyPair: IKeyPair) : TImportableEd25519Key { diff --git a/tests/modules/did.test.ts b/tests/modules/did.test.ts index 9df2ffbb..1d312f77 100644 --- a/tests/modules/did.test.ts +++ b/tests/modules/did.test.ts @@ -1,4 +1,4 @@ -import { MsgUpdateDidPayload } from "@cheqd/ts-proto/cheqd/did/v1/tx" +import { MsgUpdateDidDocPayload } from "@cheqd/ts-proto/cheqd/did/v2/tx" import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing" import { DeliverTxResponse } from "@cosmjs/stargate" import { fromString, toString } from 'uint8arrays' @@ -139,7 +139,7 @@ describe('DIDModule', () => { expect(didTx.code).toBe(0) // Update the DID - const updateDidPayload = MsgUpdateDidPayload.fromPartial({ + const updateDidPayload = MsgUpdateDidDocPayload.fromPartial({ context: didPayload.context, id: didPayload.id, controller: didPayload.controller, diff --git a/tests/modules/resource.test.ts b/tests/modules/resource.test.ts index ae4692eb..7dba4804 100644 --- a/tests/modules/resource.test.ts +++ b/tests/modules/resource.test.ts @@ -6,7 +6,7 @@ import { createDefaultCheqdRegistry } from "../../src/registry" import { CheqdSigningStargateClient } from "../../src/signer" import { DidStdFee, ISignInputs, MethodSpecificIdAlgo, VerificationMethods } from '../../src/types'; import { createDidPayload, createDidVerificationMethod, createKeyPairBase64, createVerificationKeys, exampleCheqdNetwork, faucet } from "../testutils.test" -import { MsgCreateResourcePayload } from '@cheqd/ts-proto/cheqd/resource/v1/tx'; +import { MsgCreateResourcePayload } from '@cheqd/ts-proto/cheqd/resource/v2/tx'; import { randomUUID } from "crypto" const defaultAsyncTxTimeout = 30000 @@ -74,6 +74,8 @@ describe('ResourceModule', () => { const resourcePayload: MsgCreateResourcePayload = { collectionId: didPayload.id.split(":").reverse()[0], id: randomUUID(), + version: "1.0", + alsoKnownAs: [], name: 'Test Resource', resourceType: 'test-resource-type', data: new TextEncoder().encode("{ \"message\": \"hello world\"}") diff --git a/tests/signer.test.ts b/tests/signer.test.ts index 24cbfa0b..b53b74e0 100644 --- a/tests/signer.test.ts +++ b/tests/signer.test.ts @@ -1,8 +1,8 @@ -import { VerificationMethod } from "@cheqd/ts-proto/cheqd/did/v1/did" -import { MsgCreateDid, MsgCreateDidPayload, SignInfo } from "@cheqd/ts-proto/cheqd/did/v1/tx" +import { VerificationMethod } from "@cheqd/ts-proto/cheqd/did/v2/diddoc" +import { MsgCreateDidDoc, MsgCreateDidDocPayload, SignInfo } from "@cheqd/ts-proto/cheqd/did/v2/tx" import { DirectSecp256k1HdWallet, Registry } from "@cosmjs/proto-signing" import { base64ToBytes, EdDSASigner } from "did-jwt" -import { typeUrlMsgCreateDid } from '../src/modules/did' +import { typeUrlMsgCreateDidDoc } from '../src/modules/did' import { CheqdSigningStargateClient } from "../src/signer" import { ISignInputs, MethodSpecificIdAlgo, VerificationMethods } from "../src/types" import { fromString, toString } from 'uint8arrays' @@ -42,9 +42,9 @@ describe('CheqdSigningStargateClient', () => { it('can be constructed with cheqd custom registry', async () => { const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic) const registry = new Registry() - registry.register(typeUrlMsgCreateDid, MsgCreateDid) + registry.register(typeUrlMsgCreateDidDoc, MsgCreateDidDoc) const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet, { registry }) - expect(signer.registry.lookupType(typeUrlMsgCreateDid)).toBe(MsgCreateDid) + expect(signer.registry.lookupType(typeUrlMsgCreateDidDoc)).toBe(MsgCreateDidDoc) }) }) @@ -116,7 +116,7 @@ describe('CheqdSigningStargateClient', () => { id: nonExistingKeyId, type: nonExistingVerificationMethod, controller: nonExistingDid, - publicKeyMultibase: nonExistingPublicKeyMultibase + verificationMaterial: JSON.stringify({publicKeyMultibase: nonExistingPublicKeyMultibase}) } await expect(signer.checkDidSigners([VerificationMethod.fromPartial(verificationMethod)])).rejects.toThrow() @@ -139,12 +139,12 @@ describe('CheqdSigningStargateClient', () => { ] const signInfos = await signer.signCreateDidTx(signInputs, didPayload) const publicKeyRaw = fromString(keyPair.publicKey, 'base64') - const messageRaw = MsgCreateDidPayload.encode(didPayload).finish() - const signatureRaw = base64ToBytes(signInfos[0].signature) + const messageRaw = MsgCreateDidDocPayload.encode(didPayload).finish() + const verified = verify( publicKeyRaw, messageRaw, - signatureRaw + signInfos[0].signature ) expect(verified).toBe(true) diff --git a/tests/testutils.test.ts b/tests/testutils.test.ts index f6788617..eb3ad801 100644 --- a/tests/testutils.test.ts +++ b/tests/testutils.test.ts @@ -1,4 +1,4 @@ -import { MsgCreateDidPayload } from "@cheqd/ts-proto/cheqd/did/v1/tx" +import { MsgCreateDidDocPayload } from "@cheqd/ts-proto/cheqd/did/v2/tx" import { CheqdNetwork, IKeyPair, IVerificationKeys, MethodSpecificIdAlgo, TMethodSpecificId, TVerificationKey, TVerificationKeyPrefix, VerificationMethods } from "../src/types" import { bases } from 'multiformats/basics' import { base64ToBytes } from "did-jwt" @@ -6,7 +6,7 @@ import { fromString, toString } from 'uint8arrays' import { generateKeyPair, KeyPair } from '@stablelib/ed25519' import { GasPrice } from "@cosmjs/stargate" import { v4 } from 'uuid' -import { VerificationMethod } from "@cheqd/ts-proto/cheqd/did/v1/did" +import { VerificationMethod } from "@cheqd/ts-proto/cheqd/did/v2/diddoc" import { parseToKeyValuePair } from '../src/utils' export const faucet = { @@ -100,8 +100,10 @@ export function createDidVerificationMethod(verificationMethodTypes: Verificatio id: verificationKeys[_].keyId, type: type, controller: verificationKeys[_].didUrl, - publicKeyMultibase: verificationKeys[_].methodSpecificId, - publicKeyJwk: [] + verificationMaterial: JSON.stringify({ + publicKeyMultibase: verificationKeys[_].methodSpecificId, + publicKeyJwk: [] + }) } case VerificationMethods.JWK: @@ -109,14 +111,16 @@ export function createDidVerificationMethod(verificationMethodTypes: Verificatio id: verificationKeys[_].keyId, type: type, controller: verificationKeys[_].didUrl, - publicKeyJwk: parseToKeyValuePair( - { - crv: 'Ed25519', - kty: 'OKP', - x: toString( fromString( verificationKeys[_].publicKey, 'base64pad' ), 'base64url' ) - } - ), - publicKeyMultibase: '' + verificationMaterial: JSON.stringify({ + publicKeyJwk: parseToKeyValuePair( + { + crv: 'Ed25519', + kty: 'OKP', + x: toString( fromString( verificationKeys[_].publicKey, 'base64pad' ), 'base64url' ) + } + ), + publicKeyMultibase: '' + }) } } }) ?? [] @@ -127,14 +131,14 @@ export function createDidVerificationMethod(verificationMethodTypes: Verificatio *? Used for testing purposes. ** NOTE: The following utils are stable but subject to change at any given moment. */ -export function createDidPayload(verificationMethods: VerificationMethod[], verificationKeys: IVerificationKeys[]): MsgCreateDidPayload { +export function createDidPayload(verificationMethods: VerificationMethod[], verificationKeys: IVerificationKeys[]): MsgCreateDidDocPayload { if (!verificationMethods || verificationMethods.length === 0) throw new Error('No verification methods provided') if (!verificationKeys || verificationKeys.length === 0) throw new Error('No verification keys provided') const did = verificationKeys[0].didUrl - return MsgCreateDidPayload.fromPartial( + return MsgCreateDidDocPayload.fromPartial( { id: did, controller: verificationKeys.map(key => key.didUrl),