Внедрение secp256k1 (ECDSA) в PHP (для биткойнов)

Для сильных downvoters и / или докторов: Если вы считаете, что это оффтоп для SO, любезно укажите меня на другой сайт StackExchange, где этот вопрос будет более уместным.


Как реализовать кривую ECDSA secp256k1 в PHP?

Вернее: есть ли какие-либо решения – т.е. включая специализированные классы – уже сделано?

Я вижу, что существует множество библиотек, классов и материалов для открытых источников, доступных для других языков (JavaScript, Python, …), но я просто провел весь день по поисковому запросу для любого / любого PHP-решения и … ничего! ,

Это для моего проекта биткойнов, и мне нужен способ генерации открытого ключа из закрытого ключаа затем я хочу создать окончательный биткойн-адрес .

Я знаю, как генерировать секретный ключ (не беспокойтесь о том, что он случайный или нет – не проблема здесь), и у меня есть 256-битные шестнадцатеричные и WIF-обозначения . Но следующий шаг: придумать открытый ключ, а затем окончательный биткойн адрес , для меня как бы проблема, поскольку у меня буквально нулевой криптографический фон, и я знаю, что решение заключается в том, чтобы каким-то образом использовать secp256k1.

Это то, что у меня есть до сих пор:

// Random bytes // $private_key = bin2hex(openssl_random_pseudo_bytes(32)); // But using brainwallet.org style to have easy comparison $passphrase = "correct horse battery staple"; $private_key = hash('sha256', $passphrase); var_dump ("PrivKey: $private_key"); // Bitcoin::privKeyToWIF from github.com/mikegogulski/bitcoin-php $wif = Bitcoin::privKeyToWIF($private_key); var_dump ("WIF PrivKey: $wif"); // And now I don't know where to even start ... 

tl; dr Как реализовать это в PHP? (.. и privKey-> pubKey преобразование до этого)

http://img.ruphp.com/php/U2neg.png

Я знаю о …

  • http://github.com/mikegogulski/bitcoin-php .. Это довольно аккуратно и имеет множество полезных методов и способов управления bitcoind через RPC, но, к сожалению, отсутствует PHP-метод, который может обрабатывать механизм privKey-> pubKey .
  • http://bitcoinphp.com/ .. Я не мог найти его там.
  • openssl extension в PHP , но, к сожалению, единственный метод дайджеста OPENSSL-PHP – это «ecdsa-with-SHA1», и исправьте меня, если я ошибаюсь, но мне нужно «ecdsa-with-SHA256» или что-то еще как это (?)
  • Я даже пытался преобразовать алгоритм из bitcoinjs.js , но с моими крипто-знаниями я не смог извлечь суть всего. Я просто не понимаю эти кривые и их бит-операции и другие жутки.

Я ищу решение PURE PHP. Я не ищу использование оболочки, работающей на биткойне, а затем разбора JSON для пар ключей, а затем …

Почему нет кода, который мог бы полностью справиться с этим в PHP? ИЛИ ТАК ?! 🙂