mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-20 10:34:20 +01:00
129 lines
3.7 KiB
Python
129 lines
3.7 KiB
Python
from typing import List
|
|
|
|
import pytest
|
|
|
|
from cashu.core.base import Proof
|
|
from cashu.core.crypto.aes import AESCipher
|
|
from cashu.core.db import Database
|
|
from cashu.core.settings import settings
|
|
from cashu.mint.crud import LedgerCrudSqlite
|
|
from cashu.mint.ledger import Ledger
|
|
|
|
SEED = "TEST_PRIVATE_KEY"
|
|
DERIVATION_PATH = "m/0'/0'/0'"
|
|
DECRYPTON_KEY = "testdecryptionkey"
|
|
ENCRYPTED_SEED = "U2FsdGVkX1_7UU_-nVBMBWDy_9yDu4KeYb7MH8cJTYQGD4RWl82PALH8j-HKzTrI"
|
|
|
|
|
|
async def assert_err(f, msg):
|
|
"""Compute f() and expect an error message 'msg'."""
|
|
try:
|
|
await f
|
|
except Exception as exc:
|
|
assert exc.args[0] == msg, Exception(
|
|
f"Expected error: {msg}, got: {exc.args[0]}"
|
|
)
|
|
|
|
|
|
def assert_amt(proofs: List[Proof], expected: int):
|
|
"""Assert amounts the proofs contain."""
|
|
assert [p.amount for p in proofs] == expected
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_init_keysets_with_duplicates(ledger: Ledger):
|
|
ledger.keysets = {}
|
|
await ledger.init_keysets(duplicate_keysets=True)
|
|
assert len(ledger.keysets) == 2
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_init_keysets_with_duplicates_via_settings(ledger: Ledger):
|
|
ledger.keysets = {}
|
|
settings.mint_duplicate_keysets = True
|
|
await ledger.init_keysets()
|
|
assert len(ledger.keysets) == 2
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_init_keysets_without_duplicates(ledger: Ledger):
|
|
ledger.keysets = {}
|
|
await ledger.init_keysets(duplicate_keysets=False)
|
|
assert len(ledger.keysets) == 1
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_init_keysets_without_duplicates_via_settings(ledger: Ledger):
|
|
ledger.keysets = {}
|
|
settings.mint_duplicate_keysets = False
|
|
await ledger.init_keysets()
|
|
assert len(ledger.keysets) == 1
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_ledger_encrypt():
|
|
aes = AESCipher(DECRYPTON_KEY)
|
|
encrypted = aes.encrypt(SEED.encode())
|
|
assert aes.decrypt(encrypted) == SEED
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_ledger_decrypt():
|
|
aes = AESCipher(DECRYPTON_KEY)
|
|
assert aes.decrypt(ENCRYPTED_SEED) == SEED
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_decrypt_seed():
|
|
ledger = Ledger(
|
|
db=Database("mint", settings.mint_database),
|
|
seed=SEED,
|
|
seed_decryption_key=None,
|
|
derivation_path=DERIVATION_PATH,
|
|
backends={},
|
|
crud=LedgerCrudSqlite(),
|
|
)
|
|
await ledger.init_keysets()
|
|
assert ledger.keyset.seed == SEED
|
|
private_key_1 = (
|
|
ledger.keysets[list(ledger.keysets.keys())[0]].private_keys[1].serialize()
|
|
)
|
|
assert (
|
|
private_key_1
|
|
== "8300050453f08e6ead1296bb864e905bd46761beed22b81110fae0751d84604d"
|
|
)
|
|
pubkeys = ledger.keysets[list(ledger.keysets.keys())[0]].public_keys
|
|
assert pubkeys
|
|
assert (
|
|
pubkeys[1].serialize().hex()
|
|
== "02194603ffa36356f4a56b7df9371fc3192472351453ec7398b8da8117e7c3e104"
|
|
)
|
|
|
|
ledger_encrypted = Ledger(
|
|
db=Database("mint", settings.mint_database),
|
|
seed=ENCRYPTED_SEED,
|
|
seed_decryption_key=DECRYPTON_KEY,
|
|
derivation_path=DERIVATION_PATH,
|
|
backends={},
|
|
crud=LedgerCrudSqlite(),
|
|
)
|
|
await ledger_encrypted.init_keysets()
|
|
assert ledger_encrypted.keyset.seed == SEED
|
|
private_key_1 = (
|
|
ledger_encrypted.keysets[list(ledger_encrypted.keysets.keys())[0]]
|
|
.private_keys[1]
|
|
.serialize()
|
|
)
|
|
assert (
|
|
private_key_1
|
|
== "8300050453f08e6ead1296bb864e905bd46761beed22b81110fae0751d84604d"
|
|
)
|
|
pubkeys_encrypted = ledger_encrypted.keysets[
|
|
list(ledger_encrypted.keysets.keys())[0]
|
|
].public_keys
|
|
assert pubkeys_encrypted
|
|
assert (
|
|
pubkeys_encrypted[1].serialize().hex()
|
|
== "02194603ffa36356f4a56b7df9371fc3192472351453ec7398b8da8117e7c3e104"
|
|
)
|