We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
The Trezor uses a binary message format consisting of a header and detail section defined as:
Bytes=##cclllldddddd... ## = Literal '##' for message alignment cc = Unsigned short (2 bytes) for message type code (e.g. 0 = Initialize) llll = Unsigned long (4 bytes) for detail message length ddddd... = Detail (protocol buffer message)
Numerical values are Big-endian following the Python Byte Ordering and Alignment specification of ">HL".
In Java, you would use code similar to this to read a message:
private AbstractMessage readMessage(DataInputStream in) throws IOException { // Read and throw away the magic header markers in.readByte(); in.readByte(); // Read the header code and select a suitable parser Short headerCode = in.readShort(); Parser parser = MessageType.getParserByHeaderCode(headerCode); // Read the detail length int detailLength = in.readInt(); // Read the remaining bytes byte[] detail = new byte[detailLength]; int actualLength = in.read(detail, 0, detailLength); // Verify the read Preconditions.checkState(actualLength == detailLength,"Detail not read fully. Expected="+detailLength+" actual="+actualLength); // Parse the detail into a message return (AbstractMessage) parser.parseFrom(detail); }