mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-05-14 20:19:51 +00:00
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
'''
|
|
This module provides classes and functions for handling APDU (Application
|
|
Protocol Data Unit) responses and encoding data in LV (Length-Value) format.
|
|
'''
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class APDUResponse:
|
|
'''
|
|
Represents a response to an APDU (Application Protocol Data Unit) command.
|
|
|
|
Attributes:
|
|
data (bytes): The response data returned from the APDU command.
|
|
status_word (int): The status word indicating the result of the APDU
|
|
command.
|
|
'''
|
|
data: bytes
|
|
status_word: int
|
|
|
|
def __str__(self) -> str:
|
|
return (
|
|
f'APDUResponse(data={bytes(self.data).hex()}, '
|
|
f'status_word={hex(self.status_word)})'
|
|
)
|
|
|
|
|
|
def encode_lv(value: bytes) -> bytes:
|
|
'''
|
|
Encodes the given bytes using LV (Length-Value) encoding.
|
|
|
|
The function prepends the length of the input bytes as a single byte,
|
|
followed by the value itself. The maximum supported length is 255 bytes.
|
|
|
|
Args:
|
|
value (bytes): The data to encode.
|
|
|
|
Returns:
|
|
bytes: The LV-encoded bytes.
|
|
|
|
Raises:
|
|
ValueError: If the input exceeds 255 bytes in length.
|
|
'''
|
|
if len(value) > 255:
|
|
raise ValueError('LV encoding supports up to 255 bytes')
|
|
|
|
return bytes([len(value)]) + value
|