mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-21 19:14:19 +01:00
[Wallet/Mint] DLEQ proofs (#175)
* produce dleq * start working on verification * wip dleq * Use C_ instead of C in verify DLEQ! (#176) * Fix comments (DLEQ sign error) * Fix alice_verify_dleq in d_dhke.py * Fix_generate_promise in ledger.py * Fix verify_proofs_dleq in wallet.py * Fix: invalid public key (#182) * Use C_ instead of C in verify DLEQ! * Fix comments (DLEQ sign error) * Fix alice_verify_dleq in d_dhke.py * Fix_generate_promise in ledger.py * Fix verify_proofs_dleq in wallet.py * Fix: invalid public key * Exception: Mint Error: invalid public key * Update cashu/wallet/wallet.py --------- Co-authored-by: calle <93376500+callebtc@users.noreply.github.com> * Update cashu/core/b_dhke.py * Update tests/test_cli.py * verify all constructed proofs * dleq upon receive * serialize without dleq * all tests passing * make format * remove print * remove debug * option to send with dleq * add tests * fix test * deterministic p in step2_dleq and fix mypy error for hash_to_curve * test crypto/hash_e and crypto/step2_bob_dleq * rename A to K in b_dhke.py and test_alice_verify_dleq * rename tests * make format * store dleq in mint db (and readd balance view) * remove `r` from dleq in tests * add pending output * make format * works with pre-dleq mints * fix comments * make format * fix some tests * fix last test * test serialize dleq fix * flake * flake * keyset.id must be str * fix test decorators * start removing the duplicate fields from the dleq * format * remove print * cleanup * add type anotations to dleq functions * remove unnecessary fields from BlindedSignature * tests not working yet * spelling mistakes * spelling mistakes * fix more spelling mistakes * revert to normal * add comments * bdhke: generalize hash_e * remove P2PKSecret changes * revert tests for P2PKSecret * revert tests * revert test fully * revert p2pksecret changes * refactor proof invalidation * store dleq proofs in wallet db * make mypy happy --------- Co-authored-by: moonsettler <moonsettler@protonmail.com>
This commit is contained in:
@@ -7,6 +7,7 @@ from loguru import logger
|
||||
|
||||
from ..core import bolt11
|
||||
from ..core.base import (
|
||||
DLEQ,
|
||||
BlindedMessage,
|
||||
BlindedSignature,
|
||||
Invoice,
|
||||
@@ -117,8 +118,7 @@ class Ledger:
|
||||
logger.trace(f"crud: stored new keyset {keyset.id}.")
|
||||
|
||||
# store the new keyset in the current keysets
|
||||
if keyset.id:
|
||||
self.keysets.keysets[keyset.id] = keyset
|
||||
self.keysets.keysets[keyset.id] = keyset
|
||||
logger.debug(f"Loaded keyset {keyset.id}.")
|
||||
return keyset
|
||||
|
||||
@@ -188,17 +188,24 @@ class Ledger:
|
||||
keyset = keyset if keyset else self.keyset
|
||||
logger.trace(f"Generating promise with keyset {keyset.id}.")
|
||||
private_key_amount = keyset.private_keys[amount]
|
||||
C_ = b_dhke.step2_bob(B_, private_key_amount)
|
||||
C_, e, s = b_dhke.step2_bob(B_, private_key_amount)
|
||||
logger.trace(f"crud: _generate_promise storing promise for {amount}")
|
||||
await self.crud.store_promise(
|
||||
amount=amount,
|
||||
B_=B_.serialize().hex(),
|
||||
C_=C_.serialize().hex(),
|
||||
id=keyset.id,
|
||||
e=e.serialize(),
|
||||
s=s.serialize(),
|
||||
db=self.db,
|
||||
id=keyset.id,
|
||||
)
|
||||
logger.trace(f"crud: _generate_promise stored promise for {amount}")
|
||||
return BlindedSignature(id=keyset.id, amount=amount, C_=C_.serialize().hex())
|
||||
return BlindedSignature(
|
||||
id=keyset.id,
|
||||
amount=amount,
|
||||
C_=C_.serialize().hex(),
|
||||
dleq=DLEQ(e=e.serialize(), s=s.serialize()),
|
||||
)
|
||||
|
||||
def _check_spendable(self, proof: Proof):
|
||||
"""Checks whether the proof was already spent."""
|
||||
|
||||
Reference in New Issue
Block a user