Skip to content

Commit 83697b7

Browse files
committed
feat(core): generate SLIP-21 node for Evolu
1 parent bd31cc4 commit 83697b7

File tree

20 files changed

+571
-6
lines changed

20 files changed

+571
-6
lines changed

common/protob/messages-evolu.proto

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
2+
syntax = "proto2";
3+
package hw.trezor.messages.evolu;
4+
5+
// Sugar for easier handling in Java
6+
option java_package = "com.satoshilabs.trezor.lib.protobuf";
7+
option java_outer_classname = "TrezorMessageEvolu";
8+
9+
/**
10+
* Request: Ask the device for the SLIP-21 node for Evolu, a local first storage
11+
* framework. See https://github.com/evoluhq/evolu
12+
* @start
13+
* @next EvoluNode
14+
*/
15+
message EvoluGetNode {
16+
}
17+
18+
/**
19+
* Response: Evolu SLIP-21 node
20+
* @end
21+
*/
22+
message EvoluNode {
23+
required bytes data = 1;
24+
}

common/protob/messages.proto

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,10 @@ enum MessageType {
333333
MessageType_NostrSignEvent = 2003 [(wire_in) = true];
334334
MessageType_NostrEventSignature = 2004 [(wire_out) = true];
335335

336+
// Evolu
337+
MessageType_EvoluGetNode = 2100 [(wire_in) = true];
338+
MessageType_EvoluNode = 2101 [(wire_out) = true];
339+
336340
// Benchmark
337341
MessageType_BenchmarkListNames = 9100 [(bitcoin_only) = true];
338342
MessageType_BenchmarkNames = 9101 [(bitcoin_only) = true];

core/.changelog.d/5220.added

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Generation of SLIP-21 node for a new way of storing labels (using Evolu).

core/embed/upymod/qstrdefsport.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ Q(apps.misc)
153153
Q(apps.misc.cipher_key_value)
154154
Q(apps.misc.get_ecdh_session_key)
155155
Q(apps.misc.get_entropy)
156+
Q(apps.misc.get_evolu_node)
156157
Q(apps.misc.get_firmware_hash)
157158
Q(apps.misc.payment_notification)
158159
Q(apps.misc.sign_identity)
@@ -218,6 +219,7 @@ Q(fido2)
218219
Q(get_address)
219220
Q(get_ecdh_session_key)
220221
Q(get_entropy)
222+
Q(get_evolu_node)
221223
Q(get_firmware_hash)
222224
Q(get_next_u2f_counter)
223225
Q(get_nonce)

core/src/apps/misc/get_evolu_node.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from typing import TYPE_CHECKING
2+
3+
if TYPE_CHECKING:
4+
from trezor.messages import EvoluGetNode, EvoluNode
5+
6+
_EVOLU_KEY_PATH_PREFIX = [b"TREZOR", b"Evolu"]
7+
8+
9+
async def get_evolu_node(_msg: EvoluGetNode) -> EvoluNode:
10+
from storage.device import is_initialized
11+
from trezor.messages import EvoluNode
12+
from trezor.ui.layouts import confirm_action
13+
from trezor.wire import NotInitialized
14+
15+
from apps.common.seed import Slip21Node, get_seed
16+
17+
if not is_initialized():
18+
raise NotInitialized("Device is not initialized")
19+
20+
# TODO: use translated strings when exposing this to production
21+
await confirm_action(
22+
"get_evolu_keys",
23+
"Evolu node",
24+
action="Derive SLIP-21 node for Evolu?",
25+
prompt_screen=True,
26+
)
27+
seed = await get_seed()
28+
node = Slip21Node(seed)
29+
node.derive_path(_EVOLU_KEY_PATH_PREFIX)
30+
31+
return EvoluNode(data=node.data)

core/src/apps/workflow_handlers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ def _find_message_handler_module(msg_type: int) -> str:
104104
return "apps.misc.cipher_key_value"
105105
if msg_type == MessageType.GetFirmwareHash:
106106
return "apps.misc.get_firmware_hash"
107+
if msg_type == MessageType.EvoluGetNode:
108+
return "apps.misc.get_evolu_node"
107109

108110
if not utils.BITCOIN_ONLY:
109111
# When promoting the Nostr app to production-level

core/src/trezor/enums/MessageType.py

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/src/trezor/enums/__init__.py

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/src/trezor/messages.py

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

legacy/firmware/protob/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ SKIPPED_MESSAGES := Cardano DebugMonero Eos Monero Ontology Ripple SdProtect Tez
1515
SetBrightness DebugLinkOptigaSetSecMax \
1616
BenchmarkListNames BenchmarkRun BenchmarkNames BenchmarkResult \
1717
NostrGetPubkey NostrPubkey NostrSignEvent NostrEventSignature \
18-
BleUnpair PaymentNotification
18+
BleUnpair PaymentNotification EvoluGetNode EvoluNode
1919

2020
ifeq ($(BITCOIN_ONLY), 1)
2121
SKIPPED_MESSAGES += Ethereum NEM Stellar

0 commit comments

Comments
 (0)