Skip to content

Commit

Permalink
feat: Update tests and utils
Browse files Browse the repository at this point in the history
  • Loading branch information
DaevMithran committed Dec 1, 2022
1 parent 66a9db4 commit 6075594
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 48 deletions.
2 changes: 1 addition & 1 deletion src/signer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
46 changes: 25 additions & 21 deletions src/utils.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -29,7 +29,7 @@ export type TImportableEd25519Key = {
type: "Ed25519"
}

export type IdentifierPayload = Partial<MsgCreateDidPayload> | Partial<MsgUpdateDidPayload>
export type IdentifierPayload = Partial<MsgCreateDidDocPayload> | Partial<MsgUpdateDidDocPayload>

export function parseToKeyValuePair(object: { [key: string]: any }): IKeyValuePair[] {
return Object.entries(object).map(([key, value]) => ({ key, value }))
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -126,36 +126,40 @@ 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:
return {
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),
Expand All @@ -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<MsgCreateDidPayload> = {
let payload : Partial<MsgCreateDidDocPayload> = {
id: verificationKeys[0].didUrl,
controller: verificationKeys.map(key => key.didUrl),
verificationMethod: verificationMethod,
Expand All @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions tests/modules/did.test.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion tests/modules/resource.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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\"}")
Expand Down
18 changes: 9 additions & 9 deletions tests/signer.test.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -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)
})
})

Expand Down Expand Up @@ -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()
Expand All @@ -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)
Expand Down
32 changes: 18 additions & 14 deletions tests/testutils.test.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
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"
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 = {
Expand Down Expand Up @@ -100,23 +100,27 @@ 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:
return {
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: ''
})
}
}
}) ?? []
Expand All @@ -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),
Expand Down

0 comments on commit 6075594

Please sign in to comment.