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