ECDSA(secp256k1) с javascript и python

#javascript #python #python-3.x

Вопрос:

Мой вопрос заключается в том, почему python и javascript генерируют разные ключи и почему я не могу проверить подписанное сообщение из javascript в python и наоборот? Python и javascript выдают ошибку. Я был бы очень признателен вам за помощь. Спасибо.

Использование python и пакета «ecdsa»:

 from ecdsa import SigningKey, SECP256k1
from hashlib import sha256

password = b'mykeyisveryscure!yesqwertyuiopas'

privateKey = SigningKey.from_string(password, curve=SECP256k1)
publicKey = privateKey.get_verifying_key()

print(f'Private key: {privateKey.to_string().hex()} Public key: {publicKey.to_string().hex()}')

msg = b'simple msg'
signed = privateKey.sign(msg, hashfunc=sha256)

print(f'Signed msg: {signed.hex()}')

print(f'Verification: {publicKey.verify(signed, msg, hashfunc=sha256)}')
 

вывод на python:

 Private key: 6d796b657969737665727973637572652179657371776572747975696f706173 Public key: e9a6ea4caaf624c6fccf1adf8ef005af7e99ebf29cf1d9588a99a61d81e7eb19e5c990ea3bcc0c566b5f94fef172bc1cbbc8356b7d1a45c8ea172a1ceaaf4531
Signed msg: d720e972d50773e7b5064544cde6becca737ce09e41741106ef6e7c01092ab9c8a6aedc03d02f19e39ee283583062e726025ddbf5c89dca4753a52688229c5b4
Verification: True
 

Использование javascript(узел) с «эллиптическим» пакетом:

 const EC = require("elliptic").ec;

module.exports = () => {
  const ec = new EC("secp256k1");

  const key = ec.keyFromPrivate("mykeyisveryscure!yesqwertyuiopas");
  const privateKey = key.getPrivate("hex");
  const publicKey = key.getPublic("hex");

  console.log(`Private key: ${privateKey} , Public key: ${publicKey}`);

  let msg = "simple msg";
  let signed = key.sign(msg).toDER("hex");

  console.log("Signed msg: "   signed);
  console.log("Verification: "   key.verify(msg, signed));
};
 

вывод javascript:

 Private key: d9be9936e293c52e19e317e24959f0a3 , Public key: 0495526d3a60e6ef5371ebe2f5ba3a02443577b898a16dd07b52dc7f236746244c7c4c876de063e1a783689ecacc7e154c308085b7bb1687544b8003c5ddebc544
Signed msg: 3045022100e3cb8c2abc8b1973c79ebd19a9bba6a4f04efbcefde0f1561a3fe85184aef2b9022008320e35f2d274fbf1bc48a9344412b589396ea86ce0e0b4dcc904650c51c320
Verification: true