2013-08-31 22:00:49 +00:00
|
|
|
import trezor_pb2 as proto
|
2012-11-13 14:09:39 +00:00
|
|
|
|
|
|
|
map_type_to_class = {
|
2013-08-31 22:00:49 +00:00
|
|
|
0: proto.Initialize,
|
|
|
|
1: proto.Ping,
|
|
|
|
2: proto.Success,
|
|
|
|
3: proto.Failure,
|
2013-09-12 22:17:06 +00:00
|
|
|
#4: proto.GetUID,
|
|
|
|
#5: proto.UUID,
|
2013-08-31 22:00:49 +00:00
|
|
|
9: proto.GetEntropy,
|
|
|
|
10: proto.Entropy,
|
|
|
|
11: proto.GetMasterPublicKey,
|
|
|
|
12: proto.MasterPublicKey,
|
|
|
|
13: proto.LoadDevice,
|
|
|
|
14: proto.ResetDevice,
|
|
|
|
15: proto.SignTx,
|
2013-09-12 22:17:06 +00:00
|
|
|
16: proto.SimpleSignTx,
|
2013-08-31 22:00:49 +00:00
|
|
|
17: proto.Features,
|
|
|
|
18: proto.PinMatrixRequest,
|
|
|
|
19: proto.PinMatrixAck,
|
|
|
|
20: proto.PinMatrixCancel,
|
|
|
|
21: proto.TxRequest,
|
|
|
|
# 22: proto.OutputRequest,
|
|
|
|
23: proto.TxInput,
|
|
|
|
24: proto.TxOutput,
|
2013-09-12 22:17:06 +00:00
|
|
|
25: proto.ApplySettings,
|
2013-08-31 22:00:49 +00:00
|
|
|
26: proto.ButtonRequest,
|
|
|
|
27: proto.ButtonAck,
|
|
|
|
28: proto.ButtonCancel,
|
|
|
|
29: proto.GetAddress,
|
|
|
|
30: proto.Address,
|
2013-09-12 22:17:06 +00:00
|
|
|
31: proto.SettingsType,
|
|
|
|
32: proto.XprvType,
|
|
|
|
33: proto.CoinType,
|
2013-08-31 22:00:49 +00:00
|
|
|
100: proto.DebugLinkDecision,
|
|
|
|
101: proto.DebugLinkGetState,
|
|
|
|
102: proto.DebugLinkState,
|
|
|
|
103: proto.DebugLinkStop,
|
2012-11-13 14:09:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
map_class_to_type = {}
|
|
|
|
|
2013-08-31 22:00:49 +00:00
|
|
|
|
2012-11-13 14:09:39 +00:00
|
|
|
def get_type(msg):
|
|
|
|
return map_class_to_type[msg.__class__]
|
|
|
|
|
2013-08-31 22:00:49 +00:00
|
|
|
|
2012-11-13 14:09:39 +00:00
|
|
|
def get_class(t):
|
|
|
|
return map_type_to_class[t]
|
|
|
|
|
2013-08-31 22:00:49 +00:00
|
|
|
|
2012-11-13 14:09:39 +00:00
|
|
|
def build_index():
|
|
|
|
for k, v in map_type_to_class.items():
|
|
|
|
map_class_to_type[v] = k
|
2013-08-31 22:00:49 +00:00
|
|
|
|
|
|
|
|
2012-11-13 14:09:39 +00:00
|
|
|
def check_missing():
|
|
|
|
from google.protobuf import reflection
|
2013-08-31 22:00:49 +00:00
|
|
|
|
|
|
|
types = [proto.__dict__[item] for item in dir(proto)
|
|
|
|
if issubclass(proto.__dict__[item].__class__, reflection.GeneratedProtocolMessageType)]
|
|
|
|
|
2012-11-13 14:09:39 +00:00
|
|
|
missing = list(set(types) - set(map_type_to_class.values()))
|
|
|
|
|
|
|
|
if len(missing):
|
|
|
|
raise Exception("Following protobuf messages are not defined in mapping: %s" % missing)
|
|
|
|
|
2013-08-31 22:00:49 +00:00
|
|
|
|
2012-11-13 14:09:39 +00:00
|
|
|
check_missing()
|
|
|
|
build_index()
|