Как преобразовать открытый ключ (64 байта) в сжатый открытый ключ (33 байта)

В настоящее время у меня есть сгенерированный 64-байтовый открытый ключ, который был восстановлен из транзакции Ethereum.

Как преобразовать этот ключ в 33-байтовый сжатый открытый ключ? Проблема, с которой я сталкиваюсь, кажется довольно тривиальной, но я не могу найти решение! В настоящее время я работаю с javascript.

Любая помощь будет принята с благодарностью.

Ответы (1)

Есть пакет с подходящими функциями, здесь ->pubkey/eth-crypto

Видеть:

Код сжатия ниже. (Скопировать + вставить из этого файла.)

var _secp256k = require('secp256k1');

function compress(startsWith04) {

    // add trailing 04 if not done before
    var testBuffer = Buffer.from(startsWith04, 'hex');
    if (testBuffer.length === 64) startsWith04 = '04' + startsWith04;

    return (0, _util.uint8ArrayToHex)((0, _secp256k.publicKeyConvert)((0, _util.hexToUnit8Array)(startsWith04), true));
}
Ричард, ты красавчик, спасибо, брат, это именно то поведение, которое мне нужно.
Рад помочь :-)