如何在后端通过 Aptos Typescript SDK 验证签名

问题描述 投票:0回答:1

我正在使用 Petra 钱包和 Aptos Typescript SDK 开发 dApp。 我可以在前端进行签名,但我不知道如何在 Nodejs 后端验证签名。我试图在他们的文档和 Github 上找到一种方法,但找不到。

环境: 前端:

    "@aptos-labs/ts-sdk": "^1.2.0",
    "@aptos-labs/wallet-adapter-react": "^2.1.2",

后端:

"@aptos-labs/ts-sdk": "^1.2.0",
node.js typescript signature aptos
1个回答
0
投票

简短回答,如果您确定目标钱包地址的身份验证方案

Ed25519

import { Ed25519PublicKey, Ed25519Signature } from "@aptos-labs/ts-sdk";

const verifySignature = (
  message: string, 
  signature: string,
  publicKey: string
): boolean => {
  return new Ed25519PublicKey(publicKey)
    .verifySignature({
      message: message,
      signature: new Ed25519Signature(signature),
    });
}

上下文

深入挖掘

@aptos-labs/ts-sdk
的源代码后,我发现Aptos SDK有一个
PublicKey
抽象类定义了
verifySignature
接口,就像这样

export interface VerifySignatureArgs {
  message: HexInput;
  signature: Signature;
}

export abstract class PublicKey extends Serializable {
  /**
   * Verifies that the private key associated with this public key signed the message with the given signature.
   * @param args.message The message that was signed
   * @param args.signature The signature to verify
   */
  abstract verifySignature(args: VerifySignatureArgs): boolean;
  ...
}

但问题是,如果你想创建

PublicKey
的实例,你需要知道该钱包地址使用什么 认证方案,没有辅助函数,所以你可能需要实现一些确定这一点的逻辑。

此外,

VerifySignatureArgs
signature
参数是
Signature
类型,并且这种类型也有多种实现,我假设您正在使用
aptos-labs/aptos-wallet-adapter
signMessage
函数来生成签名。在这种情况下,你将得到一个签名,该签名的类型是联合类型
string | string[] | Signature
,你得到的具体类型将由不同的钱包实现决定,对于Petra来说,它是一个
string
。因此,您将面临同样的问题
PublicKey

© www.soinside.com 2019 - 2024. All rights reserved.