gpt4 book ai didi

ecdsa - 无法验证由 sol-wallet-adapter 签名的消息

转载 作者:行者123 更新时间:2023-12-04 16:24:24 28 4
gpt4 key购买 nike

created a signed message我不确定如何使用生成的签名来验证使用 publicKey 的消息。
我的用例是,我想使用 Solana 钱包以如下模式登录 API 服务器:

  • GET message: String (from API server)
  • sign message with privateKey
  • POST signature (to API server)
  • verify signature with stored publicKey

  • 我尝试使用 nodeJS crypto.verify在 API 端解码已签名的消息,但有点超出我对缓冲区和椭圆曲线的深入研究:
    // Front-end code
    const toHexString = (buffer: Buffer) =>
    buffer.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), "");

    const data = new TextEncoder().encode('message to verify');
    const signed = await wallet.sign(data, "hex");
    await setLogin({ // sends API post call to backend
    variables: {
    publicAddress: walletPublicKey,
    signature: toHexString(signed.signature),
    },
    });

    // Current WIP for backend code
    const ALGORITHM = "ed25519";
    const fromHexString = (hexString) =>
    new Uint8Array(hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
    const signature = fromHexString(args.signature);
    const nonceUint8 = new TextEncoder().encode('message to verify');
    const verified = crypto.verify(
    ALGORITHM,
    nonceUint8,
    `-----BEGIN PUBLIC KEY-----\n${user.publicAddress}\n-----END PUBLIC KEY-----`,
    signature
    );
    console.log("isVerified: ", verified);
    我很确定我会以错误的方式解决这个问题,并且必须有一个明显的方法我错过了。
    随着空间的成熟,我预计验证函数或库会消耗 const signed = await wallet.sign(data, "hex"); 的输出。
    就像是:
    import { VerifyMessage } from '@solana/web3.js';

    const verified = VerifyMessage(message, publicKey, signature, 'hex');
    但是经过 3 天的努力,我开始达到我的极限并且我的大脑正在衰竭。任何帮助或方向在哪里看起来非常感谢🙏

    最佳答案

    我建议留在 solana-labs trail 并使用 tweetnacl
    spl-token-wallet (sollet.io) 用nacl.sign.detached(message, this.account.secretKey) https://github.com/project-serum/spl-token-wallet/blob/9c9f1d48a589218ffe0f54b7d2f3fb29d84f7b78/src/utils/walletProvider/localStorage.js#L65-L67
    另一方面,验证完成nacl.sign.detached.verify在@solana/web3.js
    https://github.com/solana-labs/solana/blob/master/web3.js/src/transaction.ts#L560
    使用 nacl.sign.detached.verify在你的后端,你应该很好。我还建议避免任何数据格式操作,我不确定您要做什么,但如果您确实验证了每个步骤是否正确。

    关于ecdsa - 无法验证由 sol-wallet-adapter 签名的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68294363/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com