Генерация детерминированного K — RFC 6979 — В прыжке

#c# #cryptography #bouncycastle

Вопрос:

Я пытаюсь скопировать некоторый код Python таким образом, чтобы он работал одинаково в BouncyCastle C#.

Я полагаю, что код генерирует K в соответствии со спецификацией RFC 6979.

 # get deterministic k
                sha_digest = hashlib.sha256(digest).digest()
            k = ecdsa.rfc6979.generate_k(self._sk.curve.generator.order(),
                                         self._sk.privkey.secret_multiplier,
                                         hashlib.sha256,
                                         sha_digest
                                         )
            # sign the message
            sigder = self._sk.sign_digest(digest, sigencode=ecdsa.util.sigencode_der, k=k)
 

Приведенный выше код находится в цикле, и sha_digest изменяется в каждом цикле.

Есть ли где-нибудь в Bouncycastle аналогичный метод generate_k, который я могу вызвать?

Комментарии:

1. k можно определить в C#/BouncyCastle с HMacDsaKCalculator#NextK() помощью .

2. Да, HmacDsaKCalculator, но, вероятно, не вызывает его напрямую, а создает с его помощью экземпляр ECDsaSigner. В зависимости от семантики кода python (которую я не знаю), сам ECDsaSigner может потребоваться обернуть DsaDigestSigner.