Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build_pb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ CURDIR=$(pwd)
cd "device-protocol"

echo "Building with protoc version: $(protoc --version)"
for i in messages messages-ethereum messages-eos messages-nano messages-cosmos messages-ripple messages-binance messages-tendermint messages-thorchain messages-osmosis messages-mayachain types ; do
for i in messages messages-ethereum messages-eos messages-nano messages-cosmos messages-ripple messages-binance messages-tendermint messages-thorchain messages-osmosis messages-mayachain messages-solana messages-zcash types ; do
protoc --python_out=$CURDIR/keepkeylib/ -I/usr/include -I. $i.proto
i=${i/-/_}
sed -i -Ee 's/^import ([^.]+_pb2)/from . import \1/' $CURDIR/keepkeylib/"$i"_pb2.py
Expand Down
2 changes: 1 addition & 1 deletion device-protocol
75 changes: 75 additions & 0 deletions keepkeylib/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
from . import messages_tendermint_pb2 as tendermint_proto
from . import messages_thorchain_pb2 as thorchain_proto
from . import messages_mayachain_pb2 as mayachain_proto
from . import messages_solana_pb2 as solana_proto
from . import messages_zcash_pb2 as zcash_proto
from . import types_pb2 as types
from . import eos
from . import nano
Expand Down Expand Up @@ -1138,6 +1140,79 @@ def mayachain_sign_tx(

return resp

# ── Solana ──────────────────────────────────────────────────────

@field('address')
@expect(solana_proto.SolanaAddress)
def solana_get_address(self, address_n, show_display=False):
return self.call(
solana_proto.SolanaGetAddress(address_n=address_n, show_display=show_display)
)

@session
@expect(solana_proto.SolanaSignedTx)
def solana_sign_tx(self, address_n, raw_tx):
return self.call(
solana_proto.SolanaSignTx(address_n=address_n, raw_tx=raw_tx)
)

@session
@expect(solana_proto.SolanaMessageSignature)
def solana_sign_message(self, address_n, message):
return self.call(
solana_proto.SolanaSignMessage(address_n=address_n, message=message)
)

# ── Zcash Orchard (shielded) ─────────────────────────────────────
# See messages-zcash.proto for full message definitions.

@session
@expect(zcash_proto.ZcashOrchardFVK)
def zcash_get_orchard_fvk(self, address_n, account=0, show_display=False):
return self.call(
zcash_proto.ZcashGetOrchardFVK(
address_n=address_n,
account=account,
show_display=show_display,
)
)

@session
def zcash_sign_pczt(self, address_n, n_actions, total_amount, fee,
branch_id, header_digest, transparent_digest,
sapling_digest, orchard_digest, actions,
account=0, orchard_flags=None,
orchard_value_balance=None, orchard_anchor=None):
"""Sign a Zcash Orchard PCZT.

*actions* is a list of dicts, each passed to ZcashPCZTAction.
Returns ZcashSignedPCZT with .signatures and .txid.
"""
resp = self.call(
zcash_proto.ZcashSignPCZT(
address_n=address_n,
account=account,
n_actions=n_actions,
total_amount=total_amount,
fee=fee,
branch_id=branch_id,
header_digest=header_digest,
transparent_digest=transparent_digest,
sapling_digest=sapling_digest,
orchard_digest=orchard_digest,
orchard_flags=orchard_flags,
orchard_value_balance=orchard_value_balance,
orchard_anchor=orchard_anchor,
)
)
# Stream actions in response to ZcashPCZTActionAck
for action in actions:
if isinstance(resp, zcash_proto.ZcashPCZTActionAck):
resp = self.call(zcash_proto.ZcashPCZTAction(**action))
else:
break
return resp

@field('address')
@expect(ripple_proto.RippleAddress)
def ripple_get_address(self, address_n, show_display=False):
Expand Down
3 changes: 3 additions & 0 deletions keepkeylib/mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from . import messages_tendermint_pb2 as tendermint_proto
from . import messages_thorchain_pb2 as thorchain_proto
from . import messages_mayachain_pb2 as mayachain_proto
from . import messages_solana_pb2 as solana_proto

map_type_to_class = {}
map_class_to_type = {}
Expand Down Expand Up @@ -36,6 +37,8 @@ def build_map():
msg_class = getattr(thorchain_proto, msg_name)
elif msg_type.startswith('MessageType_Mayachain'):
msg_class = getattr(mayachain_proto, msg_name)
elif msg_type.startswith('MessageType_Solana'):
msg_class = getattr(solana_proto, msg_name)
else:
msg_class = getattr(proto, msg_name)

Expand Down
200 changes: 142 additions & 58 deletions keepkeylib/messages_pb2.py

Large diffs are not rendered by default.

Loading