Skip to content

Commit 7f5111d

Browse files
committed
fixup! fixup! feat(protocol): add THP encoding/decoding logic
1 parent 2fd41cb commit 7f5111d

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

packages/protocol/src/protocol-thp/encode.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import {
88
THP_READ_ACK_HEADER_BYTE,
99
} from './constants';
1010
import { crc32 } from './crypto/crc32';
11-
import { addAckBit, addSequenceBit, getControlBit } from './utils';
11+
import { addAckBit, addSequenceBit, getControlBit, isThpMessageName } from './utils';
1212

1313
// @trezor/protobuf encodeMessage without direct reference to protobuf root
1414
type ProtobufEncoder = (
15-
messageName: string | number,
15+
messageName: string,
1616
messageData: Record<string, unknown>,
1717
) => {
1818
messageType: number;
@@ -146,7 +146,7 @@ export const encodeAck = (bytesOrState: Buffer | ThpState) => {
146146

147147
// Encode protocol-v2 message
148148
export const encode = (options: {
149-
messageType: number | string;
149+
messageName: string;
150150
data: Record<string, unknown>;
151151
thpState?: ThpState;
152152
protobufEncoder: ProtobufEncoder;
@@ -157,15 +157,15 @@ export const encode = (options: {
157157
}
158158

159159
const channel = options.thpState.channel || THP_DEFAULT_CHANNEL;
160-
const { messageType, protobufEncoder, thpState } = options;
160+
const { messageName, data, protobufEncoder, thpState } = options;
161161

162162
let result: Buffer;
163-
if (typeof messageType === 'string') {
164-
const payload = encodePayload(messageType, options.data, thpState);
165-
result = encodeThpMessage(messageType, payload, channel, options.thpState);
163+
if (isThpMessageName(messageName)) {
164+
const payload = encodePayload(messageName, data, thpState);
165+
result = encodeThpMessage(messageName, payload, channel, options.thpState);
166166
} else {
167-
const { messageType: mt, message } = protobufEncoder(messageType, options.data);
168-
result = encodeProtobufMessage(mt, message, channel, options.thpState);
167+
const { messageType, message } = protobufEncoder(messageName, data);
168+
result = encodeProtobufMessage(messageType, message, channel, thpState);
169169
}
170170

171171
return result;

packages/protocol/src/protocol-thp/utils.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,11 @@ export const isExpectedResponse = (bytes: Buffer, state: ThpState) => {
107107

108108
return false;
109109
};
110+
111+
export const isThpMessageName = (name: string) =>
112+
[
113+
'ThpCreateChannelRequest',
114+
'ThpHandshakeInitRequest',
115+
'ThpHandshakeCompletionRequest',
116+
'ThpReadAck',
117+
].includes(name);

packages/protocol/tests/protocol-thp/protocol-thp.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('protocol-thp', () => {
3434
const nonce = Buffer.from('639ba57ff4e0c234', 'hex');
3535

3636
const encoded = encode({
37-
messageType: 'ThpCreateChannelRequest',
37+
messageName: 'ThpCreateChannelRequest',
3838
data: { nonce },
3939
protobufEncoder,
4040
thpState,

0 commit comments

Comments
 (0)