1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-02 12:52:34 +00:00
trezor-firmware/core/src/apps/monero/xmr/range_signatures.py
matejcik edc2add85e style(core): apply isort 5
[no changelog]
2023-08-16 13:29:51 +02:00

57 lines
1.5 KiB
Python

"""
Computes range signature
Can compute Bulletproof. Borromean support was discontinued.
Also can verify Bulletproof, in case the computation was offloaded.
Mostly ported from official Monero client, but also inspired by Mininero.
Author: Dusan Klinec, ph4r05, 2018
"""
import gc
from typing import TYPE_CHECKING
from apps.monero.xmr import crypto
if TYPE_CHECKING:
from apps.monero.xmr.serialize_messages.tx_rsig_bulletproof import BulletproofPlus
def prove_range_bp_batch(
amounts: list[int], masks: list[crypto.Scalar]
) -> BulletproofPlus:
"""Calculates Bulletproof in batches"""
from apps.monero.xmr import bulletproof as bp
bpi = bp.BulletProofPlusBuilder()
bp_proof = bpi.prove_batch([crypto.Scalar(a) for a in amounts], masks)
del (bpi, bp)
gc.collect()
return bp_proof
def verify_bp(
bp_proof: BulletproofPlus,
amounts: list[int],
masks: list[crypto.Scalar],
) -> bool:
"""Verifies Bulletproof"""
from apps.monero.xmr import bulletproof as bp
from apps.monero.xmr import crypto_helpers
if amounts:
bp_proof.V = []
for i in range(len(amounts)):
C = crypto.gen_commitment_into(None, masks[i], amounts[i])
crypto.scalarmult_into(C, C, crypto_helpers.INV_EIGHT_SC)
bp_proof.V.append(crypto_helpers.encodepoint(C))
from apps.monero.xmr.serialize_messages.tx_rsig_bulletproof import BulletproofPlus
assert isinstance(bp_proof, BulletproofPlus)
bpi = bp.BulletProofPlusBuilder()
res = bpi.verify(bp_proof)
gc.collect()
return res