Skip to content

Commit

Permalink
More TLV encoding fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
tannewt committed Sep 20, 2024
1 parent 2fe5fac commit 05745b1
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 46 deletions.
12 changes: 11 additions & 1 deletion circuitmatter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1023,7 +1023,7 @@ def invoke(self, cluster, path, fields, command_ref):
cstatus.CommandRef = command_ref
response.Status = cstatus
cdata = interaction_model.CommandDataIB()
cdata.Path = path
cdata.CommandPath = path
cdata.CommandFields = cluster.invoke(path, fields)
if command_ref is not None:
cdata.CommandRef = command_ref
Expand Down Expand Up @@ -1261,5 +1261,15 @@ def process_packet(self, address, data):
)
else:
print(f"Cluster 0x{path.Cluster:02x} not found")
for r in invoke_responses:
print(r)
response = interaction_model.InvokeResponseMessage()
response.SuppressResponse = False
response.InvokeResponses = invoke_responses
exchange.send(
ProtocolId.INTERACTION_MODEL,
InteractionModelOpcode.INVOKE_RESPONSE,
response,
)
elif protocol_opcode == InteractionModelOpcode.INVOKE_RESPONSE:
print("Received Invoke Response")
19 changes: 11 additions & 8 deletions circuitmatter/data_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,16 @@ def encode_number(value, *, signed=True) -> bytes:
type = tlv.ElementType.UNSIGNED_INT
length = 0 # in power of two
if bit_length <= 8:
format_string = "Bb" if signed else "BB"
format_string = "<Bb" if signed else "<BB"
length = 0
elif bit_length <= 16:
format_string = "Bh" if signed else "BH"
format_string = "<Bh" if signed else "<BH"
length = 1
elif bit_length <= 32:
format_string = "Bi" if signed else "BI"
format_string = "<Bi" if signed else "<BI"
length = 2
else:
format_string = "Bq" if signed else "BQ"
format_string = "<Bq" if signed else "<BQ"
length = 3

return struct.pack(format_string, type | length, value)
Expand Down Expand Up @@ -177,15 +177,16 @@ def _commands(cls) -> Iterable[tuple[str, Command]]:
if not field_name.startswith("_") and isinstance(descriptor, Command):
yield field_name, descriptor

def invoke(self, path, fields):
def invoke(self, path, fields) -> bytes:
print("invoke", path.Command)
found = False
for field_name, descriptor in self._commands():
if descriptor.command_id != path.Command:
continue
arg = descriptor.request_type.from_value(fields)
print("invoke", field_name, descriptor, arg)
return getattr(self, field_name)(arg)
result = getattr(self, field_name)(arg)
return descriptor.response_type.encode(result)
if not found:
print("not found", path.Attribute)
return None
Expand Down Expand Up @@ -299,8 +300,10 @@ class ArmFailSafe(tlv.Structure):
Breadcrumb = tlv.IntMember(1, signed=False, octets=8)

class ArmFailSafeResponse(tlv.Structure):
ErrorCode = tlv.EnumMember(0, CommissioningErrorEnum)
DebugText = tlv.UTF8StringMember(1, max_length=128)
ErrorCode = tlv.EnumMember(
0, CommissioningErrorEnum, default=CommissioningErrorEnum.OK
)
DebugText = tlv.UTF8StringMember(1, max_length=128, default="")

arm_fail_safe = Command(0x00, ArmFailSafe, 0x01, ArmFailSafeResponse)

Expand Down
4 changes: 2 additions & 2 deletions circuitmatter/interaction_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ class StatusIB(tlv.Structure):

class AttributeDataIB(tlv.Structure):
DataVersion = tlv.IntMember(0, signed=False, octets=4)
Path = tlv.StructMember(1, AttributePathIB)
Path = tlv.ListMember(1, AttributePathIB)
Data = tlv.AnythingMember(2)


class AttributeStatusIB(tlv.Structure):
Path = tlv.StructMember(0, AttributePathIB)
Path = tlv.ListMember(0, AttributePathIB)
Status = tlv.StructMember(1, StatusIB)


Expand Down
28 changes: 22 additions & 6 deletions circuitmatter/tlv.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ def __init__(
else:
self.tag_length = 8
self._max_length = None
self._default = None
self._default = default
self._name = None

def __set_name__(self, owner, name):
Expand Down Expand Up @@ -264,7 +264,9 @@ def __set__(self, obj, value):
raise ValueError("Not nullable")
obj.values[self.tag] = value

def encode_into(self, obj: Container, buffer: bytearray, offset: int) -> int:
def encode_into(
self, obj: Container, buffer: bytearray, offset: int, anonymous_ok=False
) -> int:
value = self.__get__(obj) # type: ignore # self inference issues
element_type = ElementType.NULL
if value is not None:
Expand All @@ -282,10 +284,12 @@ def encode_into(self, obj: Container, buffer: bytearray, offset: int) -> int:
tag_control = 0b110
if self.tag[2] >= 65536:
tag_control = 0b111
elif not anonymous_ok:
raise ValueError("Anonymous tag not allowed")

buffer[offset] = tag_control << 5 | element_type
offset += 1
if self.tag:
if self.tag is not None:
if isinstance(self.tag, int):
buffer[offset] = self.tag
offset += 1
Expand Down Expand Up @@ -669,7 +673,13 @@ def encode_element_type(self, value):

def encode_value_into(self, value, buffer: bytearray, offset: int) -> int:
for v in value:
offset = v.encode_into(buffer, offset)
if isinstance(v, Structure):
buffer[offset] = ElementType.STRUCTURE
elif isinstance(v, List):
buffer[offset] = ElementType.LIST
offset = v.encode_into(buffer, offset + 1)
buffer[offset] = ElementType.END_OF_CONTAINER
offset += 1
buffer[offset] = ElementType.END_OF_CONTAINER
return offset + 1

Expand Down Expand Up @@ -728,7 +738,7 @@ def encode_into(self, buffer: bytearray, offset: int = 0) -> int:
name, member = member_by_tag[tag]
else:
raise NotImplementedError("Unknown tag")
offset = member.encode_into(self, buffer, offset)
offset = member.encode_into(self, buffer, offset, anonymous_ok=True)
else:
raise NotImplementedError("Anonymous list member")
return offset
Expand Down Expand Up @@ -806,10 +816,16 @@ def decode(self, control_octet, buffer, offset=0):
return None

def print(self, value):
if isinstance(value, bytes):
return value.hex(" ")
if isinstance(value, memoryview):
return "memoryview" + value.hex(" ")
return str(value)

def encode_element_type(self, value):
return value[0]

def encode_value_into(self, value, buffer: bytearray, offset: int) -> int:
return offset
value_length = len(value) - 1
buffer[offset : offset + value_length] = memoryview(value)[1:]
return offset + value_length
45 changes: 17 additions & 28 deletions test_data/recorded_packets.jsonl
Original file line number Diff line number Diff line change
@@ -1,28 +1,17 @@
["urandom", 160614526879484, 8, "8YsmPKFtlz4="]
["receive", 160618295172071, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "BAAAAEiWhgLtobv+k7S8oAUgwOUAABUwASDACCVgi6wHtD02m6EwComQdn2IFjOtafHq7o3J35TokSUCWBUkAwAoBDUFJQH0ASUCLAElA6APJAQRJAULJgYAAAMBJAcBGBg="]
["urandom", 160618321366957, 32, "es6TR37V0Vs3gU1qjRIv7FpG/HE/v7vaePV733fuYEk="]
["send", 160618321501802, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AQAAAMvRYA7tobv+k7S8oAIhwOUAAEiWhgIVMAEgwAglYIusB7Q9NpuhMAqJkHZ9iBYzrWnx6u6Nyd+U6JEwAiB6zpNHftXRWzeBTWqNEi/sWkb8cT+/u9p49Xvfd+5gSSUDAQA1BCYBECcAADACIObgj9CEx2MyPagRHuoX1OB32N8u1aKUpNKjb4b854YkGBg="]
["receive", 160618328400875, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "BAAAAEmWhgLtobv+k7S8oAUiwOUAABUwAUEEyh96+016RRlMo2cltQnM5jj/5oWQNd3GH7996DLCOLcN+pXEuJZVwIbk5g6FNhAp5/59hkvEvXmR1/+HSkISKBg="]
["randbelow", 160618328500723, 115792089210356248762697446949407573529996955224135760342422259061068512044369, 36493665673707781682760077969958150174565691242371595029269024942496324546290]
["send", 160618343816534, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AQAAAMzRYA7tobv+k7S8oAIjwOUAAEmWhgIVMAFBBFTaW9UkewH4kdP99RTkZ9xiXyVlkkJ8bs3tnCkVx/rU2Itl7wM8XmTIIgOXn+kKf1Z0Fr/LrCocxhCOPfNvlQkwAiDpIXysLp1OXkFoP6drRa6SYqEhyXtF0xAPrDdz8F1ZOxg="]
["receive", 160618344275711, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "BAAAAEqWhgLtobv+k7S8oAUkwOUAABUwASATSI2pTtC+AOxP4yCirp6kEj9Q9begb0tq3w3u4yZyPBg="]
["send", 160618344358517, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AQAAAM3RYA7tobv+k7S8oAJAwOUAAEqWhgIAAAAAAAAAAA=="]
["receive", 160618344531223, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEgYiwIK5lkiVUIKtC0izVHThMjdXagA6dzzfTXmQ+v4qFv7FUIB6GgxuPeemnaeoxmRYWjh623cnnbdHdQCV3xU1+5t7Fs9AGaqklrhuyteB3iw/EKHo/6LewBW937y7G4TM8MHeAw1cEJRamYJ6BEwAhwlxCiufDTdNMXSx3o="]
["send", 160618345504430, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AFgVAPFi8wgJ0GpSMNPuib58Gf5jbw0EsxOqAZ0BO6Xe+2LZhhCHQoauhXDvuqI6/wviLJs6rYy6pYH8//V/vmCeQrm5aabgg3kp2/wDSqHKlFpQ1d5v8ZwVQOKGTrVcjUpzjTiBegcCe2ImAqB2rOXEL79w8TWI3ksg5LUQHFK4sil9OTuurhj2gQmv6rp/c2dZMzL7wbVRfFfNB7REq8S+QEfuAWiEfnJG3nMxvOFKS1/55fhkxXmjwteTrR3VgN/Dl4Ov2i40QRvSO7eSA3KoQsg7ZOozXomaEbtZgmuaDU1rUG0lt/jqgkK+T3CwMp651gAhEsXUrAiU45LmjPaX2FYjc643mBwkIArLfAjIQMpB6nJ31fEtv3tnM4W3SpBKksqLIzq/4HLasW2gtvKEAOkiPMXoITaghkdDcfzaaY22yoVPqg6Z/pD51PoLqznH6UDLWTdFsixJxt9rutVHvJYXMSqmOPcOUk4OwiU4Y0WWYFrGaY5+a5R7AKSwSIvVidtD7+RNAt57hzbMRuuPxzhCTSPNRBWn6UVgVzUgds5eTLzget1dO7XBCGvFHF93hqqkDZkofHeUrxXMhEwDjnRZqs0TTvGbZoXWtfe/OFSw7FyY0BpGwMR9cXsLAmFEeQAIYjhXQ7ifpwqZ"]
["receive", 160618345613566, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
["receive", 160618345708054, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEoYiwLICJ1qK0KIOVY4fZhkDFM1br8s2AIMnuB3LlNNOtpx06Px1NU1LITijZmuwfuKd+s55lfeHUN4Eq7VaZ3TaMm/YMZcOugVztZfPD8Z6g=="]
["send", 160618346064587, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AFgVAPJi8whT/1rJ8+/PmPLtfJU+gfqvKxRqoxXHVrVNwSQRtT8KNcHG7AUB4GXmqQNkIespcsaB5YdJ0vx5pZRlPdat/hgnL7IMHs5oQpILupXH0Mk0wemG9cpxYoHU"]
["receive", 160618346162823, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
["receive", 160618346248334, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
["receive", 160618706956191, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
["receive", 160618736081048, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
["receive", 160618745189903, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
["receive", 160619063600537, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
["receive", 160619108728162, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
["receive", 160619143844829, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
["receive", 160619645443106, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
["receive", 160619729615633, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
["receive", 160619772725940, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
["receive", 160620573635719, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEwYiwJOXgbJhUfASZelDvyYFl81ZlpiirdsKSFhwvOLGVe621V88HpP5DMT9fDJDu+9uNahj3yrLZqBw44="]
["receive", 160620635781868, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEsYiwIEbVnLlyzaGClk4HiarUKr2gOzdREtt061v4dxrWU="]
["receive", 160620722965760, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 43382, 0, 0], "AAEAAEkYiwJ4b6vh+FvbVDqyiHBT68yOoi8m24rlNj6/pc61Ji4="]
["urandom", 350585853607419, 8, "xA4yE5YTpkA="]
["receive", 350587096075493, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "BAAAAMa1vQPUSbbPrqLtJgUggP8AABUwASD2zxwaK72yIGXgGo6eoto/w+n5f2yRavZXWHgi+PXapiUC7d0kAwAoBDUFJQH0ASUCLAElA6APJAQRJAULJgYAAAMBJAcBGBg="]
["urandom", 350587128879760, 32, "xzGpsJxnxQou/EF15WCv/oi7aedtmlZU4Q6aV6MxybA="]
["send", 350587129006309, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AQAAANcK+wHUSbbPrqLtJgIhgP8AAMa1vQMVMAEg9s8cGiu9siBl4BqOnqLaP8Pp+X9skWr2V1h4Ivj12qYwAiDHMamwnGfFCi78QXXlYK/+iLtp522aVlThDppXozHJsCUDAQA1BCYBECcAADACIObgj9CEx2MyPagRHuoX1OB32N8u1aKUpNKjb4b854YkGBg="]
["receive", 350587135507153, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "BAAAAMe1vQPUSbbPrqLtJgUigP8AABUwAUEEFc1AB41Tr1tAfC+PmT/xEy1cglver2gjGxbxKQqOEwQwtzj5tIZk1CFEUZv5VhlQEO8FK9E+Zf1vn34PckFIURg="]
["randbelow", 350587135613023, 115792089210356248762697446949407573529996955224135760342422259061068512044369, 115473339479673884280104370450166017066816674872314297419471759872926838745841]
["send", 350587151156721, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AQAAANgK+wHUSbbPrqLtJgIjgP8AAMe1vQMVMAFBBAcGjqic2zu9I/CWQ37MQ5Cq/uQwGTiRZZ6x43FGUqrqb23/8yKqDH97/lXjZhuvNkEXdJyYekesbJRmDoSx9GIwAiAhyUXSRm/Nx/uuT0x/rFn4daOLfydl7fB9o3ri4KTsThg="]
["receive", 350587151563108, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "BAAAAMi1vQPUSbbPrqLtJgUkgP8AABUwASAOyxB90IQ4pXVTkJGMAzxfshniG0vsE4vJxJUXpJgDOxg="]
["send", 350587151661434, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AQAAANkK+wHUSbbPrqLtJgJAgP8AAMi1vQMAAAAAAAAAAA=="]
["receive", 350587151843067, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAMvQfgqe1+b0ErOxGZUF3l4lhUVdlt+wCpTEaf28uQeGD6X2KPek1H52Uj2ePzDcnG28EM3DR7goMhI9+quoNZNEUASzCTDWppnMtUNZCeKOXYkadV1xURswla3q2PBBbFMclILwJRat6AB4G0oD6n9ciGcYMGdL9mwXuJR0hKE="]
["send", 350587152774505, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AO3dAFApww0GutoB/WkZhRK+lHoiYxg7UjxXqyc0Vo4IvBw35itUf36ndZZ8qEjcqq3ukqUkAUcW3bs27R6Gg47aG1tgP4BNalazU8GZWxsDE36+VQSjQvF+NcipaAJT8Y4gbX98B41duYkP6GQI4M9v7Id9rlyC2AImwnGiRlTTDkkPsibLxXgVHAVzR2+BezIxPz5i+Q6wSg0tyn2R5gablGAC1NE2OzLqZkqY0lRz6khr2WNHRjf3Da6hbzdc+UPk1uI7kFZ9A9ZGYddIqBiENkUK2m5s8CDPcOeFOtsqlKxArldwMmPcUxKfklwdbCvHDyk3BR6G/DTmbS5OYWLEApSQfkIYGyc0263HwVDWvszaREkPiQw5nFoGa/cnjTt04gPyBl+SVkUJgGtq+UTszBm0t8401Jn04/rf7ekzaIlYYnjIAdBQkn6Hhg6ERrOMWN5K5WQG5vJbo4LX4r9L5SkeCsB9MLbq8KLvc/quWFPwNHYF2sHUKnT2za/rJUiRiZo+TIbwMIb9LrobUrKVSzo4Gj4SCElJCHv9z1Gdzs5pa7QOetjyZJ6817Gane0P639wm5C0fWOnu9obXha2FVB/oNIxuuiMqNA/Yi+CkQ8g3geK0D07LfL+RTcQrTIyFnCK/nCE0qCiNe+oi1rlQKo+zGCu9/fOX2ObqlO24xcYJ4ds8e+GC+eu4U6YztcqORp9hweYzHdui8J93w=="]
["receive", 350587159372072, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAMzQfgptUG7fZgN3ppDYyBO7CiMe3ENiO7eXLyCv+YWjYv4="]
["receive", 350587159472783, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAM3Qfgrgg3jWjNGgrTnf6GrhD/hniSA4j+7sRWnSu649VdCgKoz0ie0mLC2wunbfPDriu3ZzaQ/5H0ILqB4kVgIr2wQniwuEW1kFraee9/Asyw=="]
["send", 350587159756658, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AO3dAFEpww07UbyghW+JBq253x+tXYUe/KjdCdeEUVy1HIUJ6FEQOiNSFRwVtS5+ZWpGcGGud/Yr02ZmhLtzHiH3KapX332etipkfIEbG2t84fFKJ17C9pUddLjUwEzsNiiNyX/U"]
["receive", 350587161059829, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAM7QfgpRsOL0plLx7IwHLDLy/owyMK2cA8FWoBOmDf0eEVE="]
["receive", 350587161149769, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AAEAAM/QfgqOO+MnXhNDVBSV19QiDStKc+ubq3myHXfyvduZdu29jZw93Lp0Kb+6kSU6OcpYqs+uubMBipiCo0w="]
["send", 350587161501002, ["fd98:bbab:bd61:8040:642:1aff:fe0c:9f2a", 49091, 0, 0], "AO3dAFIpww03V0tvzqO+Gcb4kRjJ9bhHZsZ7MR/oLOE6EakbF5ftcueaktUx+ccNFQYJUnu4YozpT7Y7p2Zs2bxa9jnZ6er12+ekgInHNq3eca5Du0e8Pyvq+h1cUJqBH1SoFhA7UnY="]
2 changes: 1 addition & 1 deletion tests/test_tlv.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ def test_inner_struct_encode(self):
s.s = inner
assert (
s.encode().tobytes()
== b"\x15\x22\x2a\x00\x00\x00\x22\x01\xef\xff\xff\xff\x18"
== b"\x15\x22\x00\x2a\x00\x00\x00\x22\x01\xef\xff\xff\xff\x18"
)

def test_inner_struct_encode_empty(self):
Expand Down

0 comments on commit 05745b1

Please sign in to comment.