|
|
|
@ -2,72 +2,75 @@ import utest
|
|
|
|
|
from common import *
|
|
|
|
|
from trezor import log, loop, utils
|
|
|
|
|
|
|
|
|
|
from apps.monero.xmr.serialize.int_serialize import (
|
|
|
|
|
dump_uint,
|
|
|
|
|
dump_uvarint,
|
|
|
|
|
load_uint,
|
|
|
|
|
load_uvarint,
|
|
|
|
|
)
|
|
|
|
|
from apps.monero.xmr.serialize.readwriter import MemoryReaderWriter
|
|
|
|
|
from apps.monero.xmr.serialize_messages.base import ECPoint
|
|
|
|
|
from apps.monero.xmr.serialize_messages.tx_prefix import (
|
|
|
|
|
TxinGen,
|
|
|
|
|
TxinToKey,
|
|
|
|
|
TxInV,
|
|
|
|
|
TxOut,
|
|
|
|
|
TxoutToKey,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XmrTstData(object):
|
|
|
|
|
"""Simple tests data generator"""
|
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
super(XmrTstData, self).__init__()
|
|
|
|
|
self.ec_offset = 0
|
|
|
|
|
|
|
|
|
|
def reset(self):
|
|
|
|
|
self.ec_offset = 0
|
|
|
|
|
|
|
|
|
|
def generate_ec_key(self, use_offset=True):
|
|
|
|
|
"""
|
|
|
|
|
Returns test EC key, 32 element byte array
|
|
|
|
|
:param use_offset:
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
offset = 0
|
|
|
|
|
if use_offset:
|
|
|
|
|
offset = self.ec_offset
|
|
|
|
|
self.ec_offset += 1
|
|
|
|
|
|
|
|
|
|
return bytearray(range(offset, offset + 32))
|
|
|
|
|
|
|
|
|
|
def gen_transaction_prefix(self):
|
|
|
|
|
"""
|
|
|
|
|
Returns test transaction prefix
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
vin = [
|
|
|
|
|
TxinToKey(
|
|
|
|
|
amount=123, key_offsets=[1, 2, 3, 2 ** 76], k_image=bytearray(range(32))
|
|
|
|
|
),
|
|
|
|
|
TxinToKey(
|
|
|
|
|
amount=456, key_offsets=[9, 8, 7, 6], k_image=bytearray(range(32, 64))
|
|
|
|
|
),
|
|
|
|
|
TxinGen(height=99),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
vout = [
|
|
|
|
|
TxOut(amount=11, target=TxoutToKey(key=bytearray(range(32)))),
|
|
|
|
|
TxOut(amount=34, target=TxoutToKey(key=bytearray(range(64, 96)))),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
msg = TransactionPrefix(
|
|
|
|
|
version=2, unlock_time=10, vin=vin, vout=vout, extra=list(range(31))
|
|
|
|
|
)
|
|
|
|
|
return msg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not utils.BITCOIN_ONLY:
|
|
|
|
|
from apps.monero.xmr.serialize.int_serialize import (
|
|
|
|
|
dump_uint,
|
|
|
|
|
dump_uvarint,
|
|
|
|
|
load_uint,
|
|
|
|
|
load_uvarint,
|
|
|
|
|
)
|
|
|
|
|
from apps.monero.xmr.serialize.readwriter import MemoryReaderWriter
|
|
|
|
|
from apps.monero.xmr.serialize_messages.base import ECPoint
|
|
|
|
|
from apps.monero.xmr.serialize_messages.tx_prefix import (
|
|
|
|
|
TxinGen,
|
|
|
|
|
TxinToKey,
|
|
|
|
|
TxInV,
|
|
|
|
|
TxOut,
|
|
|
|
|
TxoutToKey,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not utils.BITCOIN_ONLY:
|
|
|
|
|
class XmrTstData(object):
|
|
|
|
|
"""Simple tests data generator"""
|
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
super(XmrTstData, self).__init__()
|
|
|
|
|
self.ec_offset = 0
|
|
|
|
|
|
|
|
|
|
def reset(self):
|
|
|
|
|
self.ec_offset = 0
|
|
|
|
|
|
|
|
|
|
def generate_ec_key(self, use_offset=True):
|
|
|
|
|
"""
|
|
|
|
|
Returns test EC key, 32 element byte array
|
|
|
|
|
:param use_offset:
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
offset = 0
|
|
|
|
|
if use_offset:
|
|
|
|
|
offset = self.ec_offset
|
|
|
|
|
self.ec_offset += 1
|
|
|
|
|
|
|
|
|
|
return bytearray(range(offset, offset + 32))
|
|
|
|
|
|
|
|
|
|
def gen_transaction_prefix(self):
|
|
|
|
|
"""
|
|
|
|
|
Returns test transaction prefix
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
vin = [
|
|
|
|
|
TxinToKey(
|
|
|
|
|
amount=123, key_offsets=[1, 2, 3, 2 ** 76], k_image=bytearray(range(32))
|
|
|
|
|
),
|
|
|
|
|
TxinToKey(
|
|
|
|
|
amount=456, key_offsets=[9, 8, 7, 6], k_image=bytearray(range(32, 64))
|
|
|
|
|
),
|
|
|
|
|
TxinGen(height=99),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
vout = [
|
|
|
|
|
TxOut(amount=11, target=TxoutToKey(key=bytearray(range(32)))),
|
|
|
|
|
TxOut(amount=34, target=TxoutToKey(key=bytearray(range(64, 96)))),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
msg = TransactionPrefix(
|
|
|
|
|
version=2, unlock_time=10, vin=vin, vout=vout, extra=list(range(31))
|
|
|
|
|
)
|
|
|
|
|
return msg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
|
|
|
|
|
class TestMoneroSerializer(unittest.TestCase):
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
super(TestMoneroSerializer, self).__init__(*args, **kwargs)
|
|
|
|
|