Cómo convertir clave pública (64 bytes) a clave pública comprimida (33 bytes)

Actualmente tengo una clave pública de 64 bytes generada que se recuperó de una transacción de Ethereum.

¿Cómo convierto esta clave en una clave pública comprimida de 33 bytes? ¡El problema que tengo parece bastante trivial, pero por mi vida no puedo encontrar una solución! Actualmente estoy trabajando con javascript.

Cualquier ayuda sería muy apreciada.

Respuestas (1)

Hay un paquete que contiene funciones adecuadas, aquí ->pubkey/eth-crypto

Ver:

El código de compresión está debajo. (Copiar + pegar de este archivo).

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));
}
Richard, belleza, gracias hermano, este es exactamente el comportamiento que necesito.
Encantado de ayudar :-)