mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-20 02:24:20 +01:00
* first working version but some sats go missing * back at it * make format * restore to main * move mint database * fix some tests * make format * remove old _construct_outputs we reintroduced in merge with main * add type annotations * add wallet private key to tests * wallet: load proofs * fix tests * _generate_secrets with deterministic generation (temporary) * allow wallet initialization with custom private key * add pk to wallet api test * mint scope=module * remove private_key from test_wallet.py to see if it helps with the github tests * readd private keys to tests * workflow without env * add more private key! * readd env * ledger scope session * add default private key for testing * generate private keys if not available * testing * its working!!! * first iteration of bip32 working * get mint info and add many type annotations * tests * fix tests with bip32 * restore from multiple mints * disable profiler * make format * failed POST /mint do not increment secret counter * store derivation path in each token * fix tests * refactor migrations so private keys can be generated by the wallet with .with_db() classmethod * start fixing tests * all tests passing except those that need to set a specific private key * bip39 mnemonic to seed - with db but restore doesnt work yet with custom seed * mnemonic restore works * enter mnemonic in cli * fix tests to use different mnemonic * properly ask user for seed input * tests: dont ask for inputs * try to fix tests * fix cashu -d * fixing * bump version and add more text to mnemonic enter * add more comments * add many more comments and type annotations in the wallet * dont print generated mnemonic and dont wait for input * fix test * does this fix tests? * sigh.... * make format * do not restore from an initialized wallet * fix mnemonics * fix nitpicks * print wallet name if nonstandard wallet * fix merge error and remove comments * poetry lock and requirements * remove unused code * fix tests * mnemonic.lower() and add keyset id if not present for backwards compat * edit comment
112 lines
3.0 KiB
Python
112 lines
3.0 KiB
Python
import pytest
|
|
|
|
from cashu.core.crypto.b_dhke import hash_to_curve, step1_alice, step2_bob, step3_alice
|
|
from cashu.core.crypto.secp import PrivateKey, PublicKey
|
|
|
|
|
|
def test_hash_to_curve():
|
|
result = hash_to_curve(
|
|
bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000000"
|
|
)
|
|
)
|
|
assert (
|
|
result.serialize().hex()
|
|
== "0266687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925"
|
|
)
|
|
|
|
result = hash_to_curve(
|
|
bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000001"
|
|
)
|
|
)
|
|
assert (
|
|
result.serialize().hex()
|
|
== "02ec4916dd28fc4c10d78e287ca5d9cc51ee1ae73cbfde08c6b37324cbfaac8bc5"
|
|
)
|
|
|
|
|
|
def test_hash_to_curve_iteration():
|
|
"""This input causes multiple rounds of the hash_to_curve algorithm."""
|
|
result = hash_to_curve(
|
|
bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000002"
|
|
)
|
|
)
|
|
assert (
|
|
result.serialize().hex()
|
|
== "02076c988b353fcbb748178ecb286bc9d0b4acf474d4ba31ba62334e46c97c416a"
|
|
)
|
|
|
|
|
|
def test_step1():
|
|
""""""
|
|
B_, blinding_factor = step1_alice(
|
|
"test_message",
|
|
blinding_factor=PrivateKey(
|
|
privkey=bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000001"
|
|
) # 32 bytes
|
|
),
|
|
)
|
|
|
|
assert (
|
|
B_.serialize().hex()
|
|
== "02a9acc1e48c25eeeb9289b5031cc57da9fe72f3fe2861d264bdc074209b107ba2"
|
|
)
|
|
assert blinding_factor.private_key == bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000001"
|
|
)
|
|
|
|
|
|
def test_step2():
|
|
B_, _ = step1_alice(
|
|
"test_message",
|
|
blinding_factor=PrivateKey(
|
|
privkey=bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000001"
|
|
),
|
|
raw=True,
|
|
),
|
|
)
|
|
a = PrivateKey(
|
|
privkey=bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000001"
|
|
),
|
|
raw=True,
|
|
)
|
|
C_ = step2_bob(B_, a)
|
|
assert (
|
|
C_.serialize().hex()
|
|
== "02a9acc1e48c25eeeb9289b5031cc57da9fe72f3fe2861d264bdc074209b107ba2"
|
|
)
|
|
|
|
|
|
def test_step3():
|
|
# C = C_ - A.mult(r)
|
|
C_ = PublicKey(
|
|
bytes.fromhex(
|
|
"02a9acc1e48c25eeeb9289b5031cc57da9fe72f3fe2861d264bdc074209b107ba2"
|
|
),
|
|
raw=True,
|
|
)
|
|
r = PrivateKey(
|
|
privkey=bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000001"
|
|
)
|
|
)
|
|
|
|
A = PublicKey(
|
|
pubkey=b"\x02"
|
|
+ bytes.fromhex(
|
|
"0000000000000000000000000000000000000000000000000000000000000001",
|
|
),
|
|
raw=True,
|
|
)
|
|
C = step3_alice(C_, r, A)
|
|
|
|
assert (
|
|
C.serialize().hex()
|
|
== "03c724d7e6a5443b39ac8acf11f40420adc4f99a02e7cc1b57703d9391f6d129cd"
|
|
)
|