Но мы не должны быть все 100% RFC 6979 совместимый, если это возможно?
Вот некоторые из репозиториев я убирал.
https://github.com/bitpay/bitcore/pull/884
котировка
Я добавил аналогичную функцию Badrs Питон-ECDSA и сравнил результаты.
1 Badrs (иначе заставляя его цикл один раз) дала мне другое значение. Оказывается, вы пропустили один из у = hmac_k (V) шагов во время цикла.
Добавление одного дополнительного v = hmac_k (v) в каждом цикле делает совпасть с питона-ECDSA отлично (я даже пытался до Badrs = 30, и это было прекрасно.
https://tools.ietf.org/html/rfc6979#section-3.2
Если вы будете следовать шаг Н от после к = bits2int (T) вниз, а затем обратно до начала стадии ч к петле.
В том числе это обязательство сделает поведение быть 100% гк 6979 совместимый.
1 Badrs (иначе заставляя его цикл один раз) дала мне другое значение. Оказывается, вы пропустили один из у = hmac_k (V) шагов во время цикла.
Добавление одного дополнительного v = hmac_k (v) в каждом цикле делает совпасть с питона-ECDSA отлично (я даже пытался до Badrs = 30, и это было прекрасно.
https://tools.ietf.org/html/rfc6979#section-3.2
Если вы будете следовать шаг Н от после к = bits2int (T) вниз, а затем обратно до начала стадии ч к петле.
Код:
К = HMAC_K (V || 0x00)
V = HMAC_K (V),
Пустой T
V = HMAC_K (V),
Т = V (так как мы знаем TLEN == qlen)
к = bits2int (Т)
Как можно видеть, исходный код в Bitcore отсутствовал один V = HMAC_K (V), тогда как Python-ECDSA включает его в петлю.V = HMAC_K (V),
Пустой T
V = HMAC_K (V),
Т = V (так как мы знаем TLEN == qlen)
к = bits2int (Т)
В том числе это обязательство сделает поведение быть 100% гк 6979 совместимый.
https://github.com/blockchain/My-Wallet/pull/115
котировка
RFC определяет, что если значение K находится вне границ ИЛИ если г или ы равно 0 вы должны цикл через стадии ч, пока не будет найдено надлежащее значение.
Способ bitcore реализует это, в том числе целого под названием "Badrs" что заставит входа в цикл повторного хеширования на стадии ч. Инкрементацию Badrs выполняется в то время как сделай петлю вокруг поколения к и г и вычисления с.
Способ bitcore реализует это, в том числе целого под названием "Badrs" что заставит входа в цикл повторного хеширования на стадии ч. Инкрементацию Badrs выполняется в то время как сделай петлю вокруг поколения к и г и вычисления с.
котировка
Единственный способ это может быть проблемой безопасности, если кто-то транзакции + privkey пару, что только что произошло, чтобы произвести из пределов к (или в случае bitcore, в плохой г или с) ... И они решили подписать эту сделку используя как bitcore / blockchain.info и Electrum (использует питон-ECDSA), а затем по какой-то причине размещены эти два подписанных сделок в публичном пространстве каким-то образом.
Edit: Просто поместите в PR в bitcoinjs Пб:
https://github.com/bitcoinjs/bitcoinjs-lib/pull/336