From 2caa8735aff2161aa721777c23cb7013da1eef21 Mon Sep 17 00:00:00 2001 From: Zhichao Zhang Date: Thu, 23 Feb 2023 14:52:57 +0800 Subject: [PATCH 1/2] encodeDidUrl: the identifier as HexString, and prefix is `did:zk`. --- .changeset/wild-foxes-serve.md | 5 +++++ packages/did/src/did/details.ts | 6 ++++++ packages/did/src/index.ts | 1 + packages/did/src/utils.spec.ts | 36 +++++++++++++++++++++++++++++++++ packages/did/src/utils.ts | 23 +++++++++++++++++++++ 5 files changed, 71 insertions(+) create mode 100644 .changeset/wild-foxes-serve.md create mode 100644 packages/did/src/utils.spec.ts diff --git a/.changeset/wild-foxes-serve.md b/.changeset/wild-foxes-serve.md new file mode 100644 index 0000000..89bcbb3 --- /dev/null +++ b/.changeset/wild-foxes-serve.md @@ -0,0 +1,5 @@ +--- +'@zcloak/did': minor +--- + +encodeDidUrl: the identifier as HexString, and prefix is `did:zk`. diff --git a/packages/did/src/did/details.ts b/packages/did/src/did/details.ts index a0e17d7..45d5a1f 100644 --- a/packages/did/src/did/details.ts +++ b/packages/did/src/did/details.ts @@ -8,6 +8,8 @@ import { assert } from '@polkadot/util'; import { parseDid } from '@zcloak/did-resolver/parseDid'; +import { encodeDidUrl } from '../utils'; + export abstract class DidDetails implements IDidDetails { public id: DidUrl; public identifier: string; @@ -64,4 +66,8 @@ export abstract class DidDetails implements IDidDetails { return method; } + + public encodeDidUrl(): Uint8Array { + return encodeDidUrl(this.id); + } } diff --git a/packages/did/src/index.ts b/packages/did/src/index.ts index 9426efb..2e11a83 100644 --- a/packages/did/src/index.ts +++ b/packages/did/src/index.ts @@ -7,3 +7,4 @@ export * as helpers from './did/helpers'; export * as keys from './keys'; export * from './hasher'; +export * from './utils'; diff --git a/packages/did/src/utils.spec.ts b/packages/did/src/utils.spec.ts new file mode 100644 index 0000000..99e531b --- /dev/null +++ b/packages/did/src/utils.spec.ts @@ -0,0 +1,36 @@ +// Copyright 2021-2023 zcloak authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { alice } from 'test-support'; + +import { initCrypto } from '@zcloak/crypto'; + +import { encodeDidUrl } from './utils'; + +describe('Did utils', (): void => { + beforeAll(async () => { + await initCrypto(); + }); + + it('encode did url', () => { + const encoded = encodeDidUrl(alice.id); + + expect(encoded).toEqual( + new Uint8Array([ + 100, 105, 100, 58, 122, 107, 58, 17, 248, 183, 127, 52, 252, 241, 75, 112, 149, 191, 82, 40, + 172, 6, 6, 50, 78, 130, 209 + ]) + ); + }); + + it('encode did has fragment', () => { + const encoded = encodeDidUrl(alice.getKeyUrl('authentication')); + + expect(encoded).toEqual( + new Uint8Array([ + 100, 105, 100, 58, 122, 107, 58, 17, 248, 183, 127, 52, 252, 241, 75, 112, 149, 191, 82, 40, + 172, 6, 6, 50, 78, 130, 209 + ]) + ); + }); +}); diff --git a/packages/did/src/utils.ts b/packages/did/src/utils.ts index a9283db..1600974 100644 --- a/packages/did/src/utils.ts +++ b/packages/did/src/utils.ts @@ -4,6 +4,8 @@ import type { DidUrl, VerificationMethodType } from '@zcloak/did-resolver/types'; import type { KeypairType } from '@zcloak/keyring/types'; +import { stringToU8a, u8aConcat } from '@polkadot/util'; + import { parseDid } from '@zcloak/did-resolver/parseDid'; /** @@ -48,3 +50,24 @@ export function typeTransform(type: KeypairType): VerificationMethodType { throw new Error(`Can not transform type: ${type}`); } } + +/** + * @name encodeDidUrl + * @summary + * encode `didUrl` to a bytes. + * @description + * encode `didUrl` to bytes with the identifier as HexString, and the prefix is `did:zk:'. Returns `Uint8Array`. + * @example + * ```typescript + * import { encodeDidUrl } from '@zcloak/did' + * + * encodeDidUrl('did:zk:0x11f8b77F34FCF14B7095BF5228Ac0606324E82D1'); // [...] + * ``` + */ +export function encodeDidUrl(didUrl: DidUrl): Uint8Array { + const { identifier, method } = parseDid(didUrl); + + const prefix = stringToU8a(`did:${method}:`); + + return u8aConcat(prefix, identifier); +} From c7f280349590732443095934fa0e011ffe2bc224 Mon Sep 17 00:00:00 2001 From: Zhichao Zhang Date: Thu, 23 Feb 2023 14:58:41 +0800 Subject: [PATCH 2/2] encode did when calc digest hash --- .changeset/angry-coins-shake.md | 5 +++++ packages/did/src/utils.ts | 2 +- packages/vc/src/digest.ts | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/angry-coins-shake.md diff --git a/.changeset/angry-coins-shake.md b/.changeset/angry-coins-shake.md new file mode 100644 index 0000000..11ea73b --- /dev/null +++ b/.changeset/angry-coins-shake.md @@ -0,0 +1,5 @@ +--- +'@zcloak/vc': minor +--- + +encode did when calc digest diff --git a/packages/did/src/utils.ts b/packages/did/src/utils.ts index 1600974..542a5bc 100644 --- a/packages/did/src/utils.ts +++ b/packages/did/src/utils.ts @@ -56,7 +56,7 @@ export function typeTransform(type: KeypairType): VerificationMethodType { * @summary * encode `didUrl` to a bytes. * @description - * encode `didUrl` to bytes with the identifier as HexString, and the prefix is `did:zk:'. Returns `Uint8Array`. + * encode `didUrl` to bytes with the identifier as HexString, and the prefix is `did:zk:`. Returns `Uint8Array`. * @example * ```typescript * import { encodeDidUrl } from '@zcloak/did' diff --git a/packages/vc/src/digest.ts b/packages/vc/src/digest.ts index ff26f0c..5a20d2f 100644 --- a/packages/vc/src/digest.ts +++ b/packages/vc/src/digest.ts @@ -7,6 +7,8 @@ import type { HashType, VerifiableCredentialVersion } from './types'; import { numberToU8a, stringToU8a, u8aConcat, u8aToHex } from '@polkadot/util'; +import { encodeDidUrl } from '@zcloak/did'; + import { DEFAULT_DIGEST_HASH_TYPE } from './defaults'; import { HASHER } from './hasher'; @@ -73,7 +75,7 @@ export function calcDigest( } else { encoded = u8aConcat( payload.rootHash, - stringToU8a(payload.holder), + encodeDidUrl(payload.holder), numberToU8a((payload as DigestPayload<'1'>).issuanceDate), numberToU8a(payload.expirationDate || 0), payload.ctype