PubKey দ্বারা একটি স্বাক্ষর স্বাক্ষরিত হয়েছে তা কীভাবে যাচাই করবেন? প্রধান মূল এবং BIP0322

XVerse-এর মতো একটি ওয়ালেট ব্যবহার করে, ব্যবহারকারীরা তাদের সিরিয়ালকৃত btc ঠিকানা ব্যবহার করে একটি বার্তা স্বাক্ষর করতে পারেন, ধরা যাক bc1XXX, বার্তাটি BIP0322-এর উপর ভিত্তি করে হ্যাশ করা হয়েছে।

তাই আমার আছে:

  • ব্যবহারকারীর ওয়ালেট: bc1XXX
  • বার্তা হ্যাশ: YYY
  • BC1XXX স্বাক্ষর দ্বারা স্বাক্ষরিত: ZZZ

তাই এই ডেটা আমার ব্যাকএন্ড সার্ভারে পাঠানো হয়েছে, এবং আমি যাচাই করতে চাই যে ZZZ প্রকৃতপক্ষে bc1XXX দ্বারা স্বাক্ষরিত ছিল (এবং একটি বার্তা হিসাবে YYY রয়েছে)৷

আমি এখন পর্যন্ত এটি ব্যবহার করছি:

    const msgHash = bip0322Hash(message);
    const signatureBuffer = Buffer.from(signatureStr, 'base64');

    const decodedSignature = signatureBuffer.slice(2, 66);
    const recoveryId = signatureBuffer[0];

    // Extract public key from the signature
    const recoveredPublicKeyBuffer = secp.recoverPublicKey(
        msgHash,
        decodedSignature,
        recoveryId, // Recovery ID (0 or 1)
        false
    );
    console.log(publicKeyToTaprootAddress(recoveredPublicKeyBuffer)); //no match with my original pubkey that signed the message

কিন্তু সঠিক ঠিকানা পেতে আমার অসুবিধা হচ্ছে recoveredPublicKeyBuffer যা আমি আমার পরীক্ষার সেটের সর্বজনীন কী ঠিকানার সাথে মেলাতে পারি না।

আমি এই ফাংশনটি ব্যবহার করার চেষ্টা করছি, কিন্তু আউটপুট আমার পাবকির সাথে মেলে না:

    function publicKeyToTaprootAddress(publicKey: Uint8Array) {
        // Compute the SHA-256 hash of the public key
        const hash = sha256(Buffer.from(publicKey));

        // Construct the human-readable part and the data part of the Bech32m string
        const hrp = 'bc';
        const data = sha256(Buffer.from([0x01].concat(Array.from(hash))));
        const data2 = bech32m.toWords(Buffer.from(data));

        // Encode the Bech32m string
        return bech32m.encode(hrp, data2);
    } 

Source link

Leave a Comment