eccrypto.getPublic () не работает с настраиваемыми закрытыми ключами

Я пытаюсь создать пару ключей Ethereum в JavaScript.

Для этого я тестирую несколько алгоритмов ECDSA / Keccak256 для получения открытого ключа из закрытого ключа. Самый многообещающий, который я нашел (зная ограничение, которое я хочу избежать псевдослучайным только для закрытого ключа), это: https://github.com/bitchan/eccrypto

Мне удалось сгенерировать закрытый ключ и получить открытый ключ, используя две функции библиотеки:

const privateKey2 = eccrypto.generatePrivate();
        console.log(privateKey2);
        const publicKey = eccrypto.getPublic(privateKey2);
        console.log(publicKey);

Однако всякий раз, когда я пытаюсь использовать getPublic для privateKey, который не был сгенерирован eccrypto непосредственно ранее, eccrypto.getPublic не будет работать и будет отклонен с ошибкой Bad private key.

Самое странное, что даже когда я копирую сгенерированный закрытый ключ с помощью eccrypto и пытаюсь передать его eccrypto.getPublic() (жестко запрограммированный), я получаю ту же ошибку:

const TypedTable = new Uint8Array([
            235,
            78,
            133,
            244,
            5,
            163,
            18,
            32,
            218,
            162,
            173,
            132,
            214,
            16,
            57,
            100,
            122,
            48,
            167,
            30,
            203,
            69,
            52,
            48,
            30,
            99,
            20,
            32,
            249,
            210,
            140,
            48
        ]);

const publicKey = eccrypto.getPublic(TypedTable);

Это очень специфическая проблема, но если у кого-то есть решение, оно мне действительно поможет!


person Thanh-Quy Nguyen    schedule 03.12.2019    source источник


Ответы (1)


Я думаю, вам просто нужно преобразовать свой закрытый ключ в Buffer перед его передачей, там есть метод isScalar, который использует isBuffer и ожидает фактический объект Buffer.

Вы должны иметь возможность создать его из своего массива с помощью Buffer.from(array).

person Maarten Bodewes    schedule 03.12.2019
comment
Привет, я на самом деле пошел в другую библиотеку, и действительно, ожидался формат Buffer, и он работал нормально. Библиотека, которую я использовал, - secp256k1, на случай, если у людей возникнет такая же проблема. Спасибо за Ваш ответ! - person Thanh-Quy Nguyen; 04.12.2019