From af6a607b39e18d34c51137226a7a9fc55e1ab0ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Klinec?= Date: Sun, 12 Jan 2020 22:24:18 +0100 Subject: [PATCH] common/xmr: message changes optimizing runtime and memory (#786) --- common/protob/messages-monero.proto | 4 ++++ core/src/trezor/messages/MoneroTransactionFinalAck.py | 3 +++ core/src/trezor/messages/MoneroTransactionInputViniRequest.py | 3 +++ core/src/trezor/messages/MoneroTransactionSignInputRequest.py | 3 +++ core/src/trezor/messages/MoneroTransactionSourceEntry.py | 3 +++ python/src/trezorlib/messages/MoneroTransactionFinalAck.py | 3 +++ .../trezorlib/messages/MoneroTransactionInputViniRequest.py | 3 +++ .../trezorlib/messages/MoneroTransactionSignInputRequest.py | 3 +++ python/src/trezorlib/messages/MoneroTransactionSourceEntry.py | 3 +++ 9 files changed, 28 insertions(+) diff --git a/common/protob/messages-monero.proto b/common/protob/messages-monero.proto index 7013d6390..9fb46b7b6 100644 --- a/common/protob/messages-monero.proto +++ b/common/protob/messages-monero.proto @@ -19,6 +19,7 @@ message MoneroTransactionSourceEntry { optional bool rct = 7; // is RingCT used (true for newer UTXOs) optional bytes mask = 8; optional MoneroMultisigKLRki multisig_kLRki = 9; + optional uint32 subaddr_minor = 10; // minor subaddr index UTXO was sent to message MoneroOutputEntry { optional uint64 idx = 1; optional MoneroRctKeyPublic key = 2; @@ -200,6 +201,7 @@ message MoneroTransactionInputViniRequest { optional bytes vini_hmac = 3; optional bytes pseudo_out = 4; optional bytes pseudo_out_hmac = 5; + optional uint32 orig_idx = 6; // original sort index, before sorting by key-images } /** @@ -289,6 +291,7 @@ message MoneroTransactionSignInputRequest { optional bytes pseudo_out_hmac = 5; optional bytes pseudo_out_alpha = 6; optional bytes spend_key = 7; + optional uint32 orig_idx = 8; // original sort index, before sorting by key-images } /** @@ -317,6 +320,7 @@ message MoneroTransactionFinalAck { optional bytes salt = 2; optional bytes rand_mult = 3; optional bytes tx_enc_keys = 4; + optional bytes opening_key = 5; // enc master key to decrypt MLSAGs after protocol finishes correctly } /** diff --git a/core/src/trezor/messages/MoneroTransactionFinalAck.py b/core/src/trezor/messages/MoneroTransactionFinalAck.py index 6fff413d7..b8f74853d 100644 --- a/core/src/trezor/messages/MoneroTransactionFinalAck.py +++ b/core/src/trezor/messages/MoneroTransactionFinalAck.py @@ -19,11 +19,13 @@ class MoneroTransactionFinalAck(p.MessageType): salt: bytes = None, rand_mult: bytes = None, tx_enc_keys: bytes = None, + opening_key: bytes = None, ) -> None: self.cout_key = cout_key self.salt = salt self.rand_mult = rand_mult self.tx_enc_keys = tx_enc_keys + self.opening_key = opening_key @classmethod def get_fields(cls) -> Dict: @@ -32,4 +34,5 @@ class MoneroTransactionFinalAck(p.MessageType): 2: ('salt', p.BytesType, 0), 3: ('rand_mult', p.BytesType, 0), 4: ('tx_enc_keys', p.BytesType, 0), + 5: ('opening_key', p.BytesType, 0), } diff --git a/core/src/trezor/messages/MoneroTransactionInputViniRequest.py b/core/src/trezor/messages/MoneroTransactionInputViniRequest.py index 080fc8f74..a00adbca4 100644 --- a/core/src/trezor/messages/MoneroTransactionInputViniRequest.py +++ b/core/src/trezor/messages/MoneroTransactionInputViniRequest.py @@ -22,12 +22,14 @@ class MoneroTransactionInputViniRequest(p.MessageType): vini_hmac: bytes = None, pseudo_out: bytes = None, pseudo_out_hmac: bytes = None, + orig_idx: int = None, ) -> None: self.src_entr = src_entr self.vini = vini self.vini_hmac = vini_hmac self.pseudo_out = pseudo_out self.pseudo_out_hmac = pseudo_out_hmac + self.orig_idx = orig_idx @classmethod def get_fields(cls) -> Dict: @@ -37,4 +39,5 @@ class MoneroTransactionInputViniRequest(p.MessageType): 3: ('vini_hmac', p.BytesType, 0), 4: ('pseudo_out', p.BytesType, 0), 5: ('pseudo_out_hmac', p.BytesType, 0), + 6: ('orig_idx', p.UVarintType, 0), } diff --git a/core/src/trezor/messages/MoneroTransactionSignInputRequest.py b/core/src/trezor/messages/MoneroTransactionSignInputRequest.py index 557d266e2..323983830 100644 --- a/core/src/trezor/messages/MoneroTransactionSignInputRequest.py +++ b/core/src/trezor/messages/MoneroTransactionSignInputRequest.py @@ -24,6 +24,7 @@ class MoneroTransactionSignInputRequest(p.MessageType): pseudo_out_hmac: bytes = None, pseudo_out_alpha: bytes = None, spend_key: bytes = None, + orig_idx: int = None, ) -> None: self.src_entr = src_entr self.vini = vini @@ -32,6 +33,7 @@ class MoneroTransactionSignInputRequest(p.MessageType): self.pseudo_out_hmac = pseudo_out_hmac self.pseudo_out_alpha = pseudo_out_alpha self.spend_key = spend_key + self.orig_idx = orig_idx @classmethod def get_fields(cls) -> Dict: @@ -43,4 +45,5 @@ class MoneroTransactionSignInputRequest(p.MessageType): 5: ('pseudo_out_hmac', p.BytesType, 0), 6: ('pseudo_out_alpha', p.BytesType, 0), 7: ('spend_key', p.BytesType, 0), + 8: ('orig_idx', p.UVarintType, 0), } diff --git a/core/src/trezor/messages/MoneroTransactionSourceEntry.py b/core/src/trezor/messages/MoneroTransactionSourceEntry.py index 0316dff90..27146916b 100644 --- a/core/src/trezor/messages/MoneroTransactionSourceEntry.py +++ b/core/src/trezor/messages/MoneroTransactionSourceEntry.py @@ -26,6 +26,7 @@ class MoneroTransactionSourceEntry(p.MessageType): rct: bool = None, mask: bytes = None, multisig_kLRki: MoneroMultisigKLRki = None, + subaddr_minor: int = None, ) -> None: self.outputs = outputs if outputs is not None else [] self.real_output = real_output @@ -36,6 +37,7 @@ class MoneroTransactionSourceEntry(p.MessageType): self.rct = rct self.mask = mask self.multisig_kLRki = multisig_kLRki + self.subaddr_minor = subaddr_minor @classmethod def get_fields(cls) -> Dict: @@ -49,4 +51,5 @@ class MoneroTransactionSourceEntry(p.MessageType): 7: ('rct', p.BoolType, 0), 8: ('mask', p.BytesType, 0), 9: ('multisig_kLRki', MoneroMultisigKLRki, 0), + 10: ('subaddr_minor', p.UVarintType, 0), } diff --git a/python/src/trezorlib/messages/MoneroTransactionFinalAck.py b/python/src/trezorlib/messages/MoneroTransactionFinalAck.py index 169bed0ec..f5f2fce1d 100644 --- a/python/src/trezorlib/messages/MoneroTransactionFinalAck.py +++ b/python/src/trezorlib/messages/MoneroTransactionFinalAck.py @@ -19,11 +19,13 @@ class MoneroTransactionFinalAck(p.MessageType): salt: bytes = None, rand_mult: bytes = None, tx_enc_keys: bytes = None, + opening_key: bytes = None, ) -> None: self.cout_key = cout_key self.salt = salt self.rand_mult = rand_mult self.tx_enc_keys = tx_enc_keys + self.opening_key = opening_key @classmethod def get_fields(cls) -> Dict: @@ -32,4 +34,5 @@ class MoneroTransactionFinalAck(p.MessageType): 2: ('salt', p.BytesType, 0), 3: ('rand_mult', p.BytesType, 0), 4: ('tx_enc_keys', p.BytesType, 0), + 5: ('opening_key', p.BytesType, 0), } diff --git a/python/src/trezorlib/messages/MoneroTransactionInputViniRequest.py b/python/src/trezorlib/messages/MoneroTransactionInputViniRequest.py index fea73bfe7..c62f29a52 100644 --- a/python/src/trezorlib/messages/MoneroTransactionInputViniRequest.py +++ b/python/src/trezorlib/messages/MoneroTransactionInputViniRequest.py @@ -22,12 +22,14 @@ class MoneroTransactionInputViniRequest(p.MessageType): vini_hmac: bytes = None, pseudo_out: bytes = None, pseudo_out_hmac: bytes = None, + orig_idx: int = None, ) -> None: self.src_entr = src_entr self.vini = vini self.vini_hmac = vini_hmac self.pseudo_out = pseudo_out self.pseudo_out_hmac = pseudo_out_hmac + self.orig_idx = orig_idx @classmethod def get_fields(cls) -> Dict: @@ -37,4 +39,5 @@ class MoneroTransactionInputViniRequest(p.MessageType): 3: ('vini_hmac', p.BytesType, 0), 4: ('pseudo_out', p.BytesType, 0), 5: ('pseudo_out_hmac', p.BytesType, 0), + 6: ('orig_idx', p.UVarintType, 0), } diff --git a/python/src/trezorlib/messages/MoneroTransactionSignInputRequest.py b/python/src/trezorlib/messages/MoneroTransactionSignInputRequest.py index 81a204a56..32f2e960f 100644 --- a/python/src/trezorlib/messages/MoneroTransactionSignInputRequest.py +++ b/python/src/trezorlib/messages/MoneroTransactionSignInputRequest.py @@ -24,6 +24,7 @@ class MoneroTransactionSignInputRequest(p.MessageType): pseudo_out_hmac: bytes = None, pseudo_out_alpha: bytes = None, spend_key: bytes = None, + orig_idx: int = None, ) -> None: self.src_entr = src_entr self.vini = vini @@ -32,6 +33,7 @@ class MoneroTransactionSignInputRequest(p.MessageType): self.pseudo_out_hmac = pseudo_out_hmac self.pseudo_out_alpha = pseudo_out_alpha self.spend_key = spend_key + self.orig_idx = orig_idx @classmethod def get_fields(cls) -> Dict: @@ -43,4 +45,5 @@ class MoneroTransactionSignInputRequest(p.MessageType): 5: ('pseudo_out_hmac', p.BytesType, 0), 6: ('pseudo_out_alpha', p.BytesType, 0), 7: ('spend_key', p.BytesType, 0), + 8: ('orig_idx', p.UVarintType, 0), } diff --git a/python/src/trezorlib/messages/MoneroTransactionSourceEntry.py b/python/src/trezorlib/messages/MoneroTransactionSourceEntry.py index 8da1203e3..c7c300ee9 100644 --- a/python/src/trezorlib/messages/MoneroTransactionSourceEntry.py +++ b/python/src/trezorlib/messages/MoneroTransactionSourceEntry.py @@ -26,6 +26,7 @@ class MoneroTransactionSourceEntry(p.MessageType): rct: bool = None, mask: bytes = None, multisig_kLRki: MoneroMultisigKLRki = None, + subaddr_minor: int = None, ) -> None: self.outputs = outputs if outputs is not None else [] self.real_output = real_output @@ -36,6 +37,7 @@ class MoneroTransactionSourceEntry(p.MessageType): self.rct = rct self.mask = mask self.multisig_kLRki = multisig_kLRki + self.subaddr_minor = subaddr_minor @classmethod def get_fields(cls) -> Dict: @@ -49,4 +51,5 @@ class MoneroTransactionSourceEntry(p.MessageType): 7: ('rct', p.BoolType, 0), 8: ('mask', p.BytesType, 0), 9: ('multisig_kLRki', MoneroMultisigKLRki, 0), + 10: ('subaddr_minor', p.UVarintType, 0), }