From 19a2ae5d1b314770fd900e0a2f980eb6e695ed33 Mon Sep 17 00:00:00 2001 From: Hanssen0 Date: Thu, 1 Aug 2024 14:35:25 +0800 Subject: [PATCH] feat(core): verifyMessageJoyId CKB SDK JS has fixed commonjs support. --- packages/core/package.json | 1 + packages/core/src/signer/ckb/index.ts | 1 + packages/core/src/signer/ckb/verifyJoyId.ts | 20 +++++++++++ packages/core/src/signer/signer/index.ts | 7 +++- packages/faucet/package.json | 1 - pnpm-lock.yaml | 38 ++++++--------------- 6 files changed, 39 insertions(+), 29 deletions(-) create mode 100644 packages/core/src/signer/ckb/verifyJoyId.ts diff --git a/packages/core/package.json b/packages/core/package.json index d5f00075..a7501ebc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -58,6 +58,7 @@ }, "dependencies": { "@ckb-lumos/helpers": "^0.22.2", + "@joyid/ckb": "^1.0.1", "@noble/ciphers": "^0.5.3", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", diff --git a/packages/core/src/signer/ckb/index.ts b/packages/core/src/signer/ckb/index.ts index 0ba5974e..61cec4a3 100644 --- a/packages/core/src/signer/ckb/index.ts +++ b/packages/core/src/signer/ckb/index.ts @@ -2,3 +2,4 @@ export * from "./signerCkbPrivateKey.js"; export * from "./signerCkbPublicKey.js"; export * from "./signerCkbScriptReadonly.js"; export * from "./verifyCkbSecp256k1.js"; +export * from "./verifyJoyId.js"; diff --git a/packages/core/src/signer/ckb/verifyJoyId.ts b/packages/core/src/signer/ckb/verifyJoyId.ts new file mode 100644 index 00000000..649c6868 --- /dev/null +++ b/packages/core/src/signer/ckb/verifyJoyId.ts @@ -0,0 +1,20 @@ +import { verifySignature } from "@joyid/ckb"; +import { BytesLike } from "../../bytes/index.js"; +import { hexFrom } from "../../hex/index.js"; + +export function verifyMessageJoyId( + message: string | BytesLike, + signature: string, + identity: string, +): Promise { + const challenge = + typeof message === "string" ? message : hexFrom(message).slice(2); + const { publicKey, keyType } = JSON.parse(identity); + + return verifySignature({ + challenge, + pubkey: publicKey, + keyType, + ...JSON.parse(signature), + }); +} diff --git a/packages/core/src/signer/signer/index.ts b/packages/core/src/signer/signer/index.ts index d2bbea91..6ac0ce28 100644 --- a/packages/core/src/signer/signer/index.ts +++ b/packages/core/src/signer/signer/index.ts @@ -6,6 +6,7 @@ import { Hex } from "../../hex/index.js"; import { Num } from "../../num/index.js"; import { verifyMessageBtcEcdsa } from "../btc/index.js"; import { verifyMessageCkbSecp256k1 } from "../ckb/verifyCkbSecp256k1.js"; +import { verifyMessageJoyId } from "../ckb/verifyJoyId.js"; import { verifyMessageEvmPersonal } from "../evm/verify.js"; import { verifyMessageNostrEvent } from "../nostr/verify.js"; @@ -106,7 +107,11 @@ export abstract class Signer { signature.identity, ); case SignerSignType.JoyId: - throw new Error("Not supported yet"); + return verifyMessageJoyId( + message, + signature.signature, + signature.identity, + ); case SignerSignType.NostrEvent: return verifyMessageNostrEvent( message, diff --git a/packages/faucet/package.json b/packages/faucet/package.json index 5e4d5eab..f676a754 100644 --- a/packages/faucet/package.json +++ b/packages/faucet/package.json @@ -23,7 +23,6 @@ }, "dependencies": { "@ckb-ccc/core": "workspace:*", - "@nervosnetwork/ckb-sdk-utils": "0.109.0", "@nestjs/common": "^10.0.0", "@nestjs/config": "^3.2.3", "@nestjs/core": "^10.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d43d8e3..7ea9f700 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -201,6 +201,9 @@ importers: '@ckb-lumos/helpers': specifier: ^0.22.2 version: 0.22.2(encoding@0.1.13) + '@joyid/ckb': + specifier: ^1.0.1 + version: 1.0.1(encoding@0.1.13)(typescript@5.4.5) '@noble/ciphers': specifier: ^0.5.3 version: 0.5.3 @@ -396,9 +399,6 @@ importers: '@ckb-ccc/core': specifier: workspace:* version: link:../core - '@nervosnetwork/ckb-sdk-utils': - specifier: 0.109.0 - version: 0.109.0 '@nestjs/common': specifier: ^10.0.0 version: 10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -1235,17 +1235,11 @@ packages: resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} - '@nervosnetwork/ckb-sdk-utils@0.109.0': - resolution: {integrity: sha512-/lqq9qU2COhQZx6chfTzASbB+v9dFxX5WfdKpvMNvRT6tOHRGTVRgjBBS++GXLKpmn1934EJOlYOc6Peeo7g6g==} + '@nervosnetwork/ckb-sdk-utils@0.109.3': + resolution: {integrity: sha512-sV3WXlZmd765qtFsXpwl0Bl3hOgGev15Og810acO6iC0cVHEVvv/Uiabd8a2xkqyfziRDI0tfWC0DewOJB28rg==} - '@nervosnetwork/ckb-sdk-utils@0.109.2': - resolution: {integrity: sha512-pXgQvQQA2TuXiAmKGvL9kWjXdCsX+qP8HqHSLt6kwrjFe846d4dZxZ5AunpP+xsQNst+L5V7xcvunaBOkTdD6g==} - - '@nervosnetwork/ckb-types@0.109.0': - resolution: {integrity: sha512-ZB3zpotHP8KDTex9Jxv7vi3sxVEqWijQjDmNA9laIEk01aoKVMyBZ09ByKuU46/88qgjmDsu3Ob7HqGaoFVtKQ==} - - '@nervosnetwork/ckb-types@0.109.2': - resolution: {integrity: sha512-NAQbUi+j6tWlUYijvHqWIUwrbawIeAeSlxUQm0wkqSKbtAEoiR4L6RZS7cgn7uH+SMsp78mciXP8gixrfH3rEQ==} + '@nervosnetwork/ckb-types@0.109.3': + resolution: {integrity: sha512-i9EVTXCT0bTLpAQXAoF5zHGLWYCXNE5AP4Zl0Niwl3ZplaVAZHNU6ygsh2O3EGmCFv5qlkoY2DuLmsjysEaNLA==} '@nestjs/cli@10.4.2': resolution: {integrity: sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==} @@ -6685,7 +6679,7 @@ snapshots: '@joyid/ckb@1.0.1(encoding@0.1.13)(typescript@5.4.5)': dependencies: '@joyid/common': 0.2.0(typescript@5.4.5) - '@nervosnetwork/ckb-sdk-utils': 0.109.2 + '@nervosnetwork/ckb-sdk-utils': 0.109.3 cross-fetch: 4.0.0(encoding@0.1.13) uncrypto: 0.1.3 transitivePeerDependencies: @@ -6827,25 +6821,15 @@ snapshots: '@lukeed/csprng@1.1.0': {} - '@nervosnetwork/ckb-sdk-utils@0.109.0': - dependencies: - '@nervosnetwork/ckb-types': 0.109.0 - bech32: 2.0.0 - elliptic: 6.5.4 - jsbi: 3.1.3 - tslib: 2.3.1 - - '@nervosnetwork/ckb-sdk-utils@0.109.2': + '@nervosnetwork/ckb-sdk-utils@0.109.3': dependencies: - '@nervosnetwork/ckb-types': 0.109.2 + '@nervosnetwork/ckb-types': 0.109.3 bech32: 2.0.0 elliptic: 6.5.4 jsbi: 3.1.3 tslib: 2.3.1 - '@nervosnetwork/ckb-types@0.109.0': {} - - '@nervosnetwork/ckb-types@0.109.2': {} + '@nervosnetwork/ckb-types@0.109.3': {} '@nestjs/cli@10.4.2': dependencies: