Не удается проверить подпись, подписанную Nano Ledger S - PullRequest
0 голосов
/ 07 мая 2019

Я использую 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. Будет ли этосвязано с кодировкой буфера? (Я не указывал кодировку при создании буфера)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...