mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-03 20:21:34 +02:00
Merge bitcoin/bitcoin#30048: crypto: add NUMS_H
const
9408a04e42
tests, fuzz: use new NUMS_H const (josibake)b946f8a4c5
crypto: add NUMS_H const (josibake) Pull request description: Broken out from #28122 --- [BIP341](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#constructing-and-spending-taproot-outputs) defines a NUMS point `H` as *H = lift_x(0x50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0)* which is [constructed](11af7015de/src/modules/rangeproof/main_impl.h (L16)
) by taking the hash of the standard uncompressed encoding of the [secp256k1](https://www.secg.org/sec2-v2.pdf) base point G as X coordinate." Add this as a constant so it can be used in our codebase. My primary motivation is BIP352 specifies a special case for when taproot spends use `H` as the internal key, but outside of BIP352 it seems generally useful to have `H` in the codebase, for testing or other use cases. ACKs for top commit: paplorinc: re-ACK9408a04e42
achow101: ACK9408a04e42
theStack: Code-review ACK9408a04e42
Tree-SHA512: ad84492f5d635c0cb05bd82546079ded7e5138e95361f20d8285a9ad6e69c10ee2cc3fe46e16b46ef03c4253c8bee1051911c6b91264c90c3b1ad33a824bff4b
This commit is contained in:
@ -15,6 +15,8 @@ Exports:
|
||||
* G: the secp256k1 generator point
|
||||
"""
|
||||
|
||||
import unittest
|
||||
from hashlib import sha256
|
||||
|
||||
class FE:
|
||||
"""Objects of this class represent elements of the field GF(2**256 - 2**32 - 977).
|
||||
@ -344,3 +346,9 @@ class FastGEMul:
|
||||
|
||||
# Precomputed table with multiples of G for fast multiplication
|
||||
FAST_G = FastGEMul(G)
|
||||
|
||||
class TestFrameworkSecp256k1(unittest.TestCase):
|
||||
def test_H(self):
|
||||
H = sha256(G.to_bytes_uncompressed()).digest()
|
||||
assert GE.lift_x(FE.from_bytes(H)) is not None
|
||||
self.assertEqual(H.hex(), "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0")
|
||||
|
Reference in New Issue
Block a user