#!/usr/bin/env bash cd $(dirname $0)/.. PROTOB=common/protob CORE_PROTOBUF_SOURCES="\ $PROTOB/messages.proto \ $PROTOB/messages-binance.proto \ $PROTOB/messages-bitcoin.proto \ $PROTOB/messages-cardano.proto \ $PROTOB/messages-common.proto \ $PROTOB/messages-crypto.proto \ $PROTOB/messages-debug.proto \ $PROTOB/messages-eos.proto \ $PROTOB/messages-ethereum.proto \ $PROTOB/messages-lisk.proto \ $PROTOB/messages-management.proto \ $PROTOB/messages-monero.proto \ $PROTOB/messages-nem.proto \ $PROTOB/messages-ripple.proto \ $PROTOB/messages-stellar.proto \ $PROTOB/messages-tezos.proto \ " PYTHON_PROTOBUF_SOURCES=$PROTOB/*.proto CORE_MESSAGES_IGNORE="\ CosiCommit \ CosiCommitment \ CosiSign \ CosiSignature \ DebugLinkFlashErase \ DebugLinkLog \ DebugLinkMemory \ DebugLinkMemoryRead \ DebugLinkMemoryWrite \ DebugLinkStop \ NEMDecryptMessage \ NEMDecryptedMessage \ PinMatrixAck \ PinMatrixRequest \ PinMatrixRequestType \ WordAck \ WordRequest \ WordRequestType \ " PYTHON_MESSAGES_IGNORE="" RETURN=0 do_rebuild() { # rebuild protobuf in specified directory local DESTDIR="$1" shift local SOURCES="$1" shift local IGNORE="$1" shift local APPLY_BITCOIN_ONLY="$1" shift mkdir -p "$DESTDIR" rm -f "$DESTDIR"/[A-Z]*.py # note $SOURCES is unquoted - we want wildcard expansion and multiple args $PROTOB/pb2py "$@" -o "$DESTDIR" $SOURCES # TODO: make this less hackish # maybe introduce attribute "altcoin" in protobuf? if [ "$APPLY_BITCOIN_ONLY" == "TRUE" ]; then sed -i "3ifrom trezor import utils\n" "$DESTDIR"/Capability.py sed -i "3ifrom trezor import utils\n" "$DESTDIR"/MessageType.py sed -i "/^EthereumGetPublicKey/iif not utils.BITCOIN_ONLY:" "$DESTDIR"/MessageType.py for altcoin in Ethereum NEM Lisk Tezos Stellar Cardano Ripple Monero DebugMonero Eos Binance; do sed -i "s:^$altcoin: $altcoin:" "$DESTDIR"/Capability.py sed -i "s:^$altcoin: $altcoin:" "$DESTDIR"/MessageType.py done sed -i "/^Bitcoin_like/iif not utils.BITCOIN_ONLY:" "$DESTDIR"/Capability.py sed -i "/^EOS/iif not utils.BITCOIN_ONLY:" "$DESTDIR"/Capability.py for feature in Bitcoin_like EOS U2F; do sed -i "s:^$feature: $feature:" "$DESTDIR"/Capability.py done fi # ENDTODO # delete unused messages for F in $IGNORE; do rm -f "$DESTDIR"/"$F".py done } do_check() { # rebuild protobuf in tmpdir and check result against specified directory local TMPDIR=$(mktemp -d proto-check.XXXXXX) local DESTDIR="$1" shift cp -rT "$DESTDIR" "$TMPDIR" do_rebuild "$TMPDIR" "$@" DIFF=$(diff -ur "$DESTDIR" "$TMPDIR") rm -r "$TMPDIR" if [ -n "$DIFF" ]; then echo "$DIFF" RETURN=1 fi } if [ "$1" == "--check" ]; then func=do_check else func=do_rebuild fi $func core/src/trezor/messages "$CORE_PROTOBUF_SOURCES" "$CORE_MESSAGES_IGNORE" TRUE --no-init-py $func python/src/trezorlib/messages "$PYTHON_PROTOBUF_SOURCES" "$PYTHON_MESSAGES_IGNORE" FALSE -P ..protobuf exit $RETURN