Не удается проверить подпись, подписанную Nano Ledger S

Я использую Nano Ledger S для генерации звездной пары ключей, затем использую закрытый ключ для подписи случайной строки (например, "test") и хочу получить открытый ключ и проверить подпись с помощью звездного SDK

Я использую Nodejs SDK, предоставленный Nano Ledger ( https://github.com/LedgerHQ/ledgerjs/tree/master/packages/hw-app-str), чтобы сгенерировать пару ключей, подписать строку, используя signTransaction функция.

Но, в конце концов, я попытался проверить подпись с помощью открытого ключа, он просто возвращает false:(

const Transport = require("@ledgerhq/hw-transport-node-hid");
const Str = require("@ledgerhq/hw-app-str");
const StellarSdk = require("stellar-sdk"); 

// retrieve the public key from the nano ledger
const getStrPublicKey = async(path) => {
  try {
    const transport = await Transport.default.open();
    const str = new Str.default(transport);
    const result = await str.getPublicKey(path);
    transport.close()
    return result.publicKey;

  } catch (error) {
    console.log(error)
  }
}

// sign the raw string using the keypair we created(using path to specify which address to sign)
const signStrTransaction = async (path, raw) => {
  try{
    console.log("signing message: "+raw)
  const transport = await Transport.default.open();
  const str = new Str.default(transport);

  let buf = new Buffer(raw);

  const result = await str.signTransaction(path, buf);
  transport.close()

    return result

  } catch (error){
    console.log(error)
  }
}

// entry point
async function main(){

  let publicKey;
  let raw = "test"  // raw message waited to be signed
  const path = "44'/148'/1'"  // the BIP 32 path of the stellar address

  getStrPublicKey(path).then(pk => {
      console.log(pk);
      publicKey = pk;
      signStrTransaction(path, raw).then(result =>{ 

        // load the public key retrieved from nano ledger to the keypair 
        const keypair = StellarSdk.Keypair.fromPublicKey(publicKey)
        let buf = new Buffer(raw);
        // verify the signature is correct
        const valid = keypair.verify(buf, result.signature)
        //expected to be true, but got false
        console.log(valid)
      });
  });

}

Ожидаемый результат должен быть истинным, так как я использую правильную подпись и открытый ключ для проверки, но он просто продолжает показывать false. Будет ли это связано с кодировкой буфера?(Я не указывал кодировку при создании буфера)

Большое спасибо за просмотр моего вопроса, приветствуются любые предложения и мнения!

0 ответов

Другие вопросы по тегам