コード例 #1
0
ファイル: rlp.py プロジェクト: vdovhanych/trezor-firmware
def write_header(
    w: Writer,
    length: int,
    header_byte: int,
    data_start: bytes | None = None,
) -> None:
    if length == 1 and data_start is not None and data_start[0] <= 0x7F:
        # no header when encoding one byte below 0x80
        pass

    elif length <= 55:
        w.append(header_byte + length)

    else:
        encoded_length = int_to_bytes(length)
        w.append(header_byte + 55 + len(encoded_length))
        w.extend(encoded_length)
コード例 #2
0
ファイル: der.py プロジェクト: vdovhanych/trezor-firmware
def write_int(w: Writer, number: bytes) -> None:
    i = 0
    while i < len(number) and number[i] == 0:
        i += 1

    length = len(number) - i
    w.append(0x02)
    if length == 0 or number[i] >= 0x80:
        w.extend(encode_length(length + 1))
        w.append(0x00)
    else:
        w.extend(encode_length(length))

    w.extend(memoryview(number)[i:])
コード例 #3
0
def write(w: Writer, field: RippleField,
          value: int | bytes | str | None) -> None:
    if value is None:
        return
    write_type(w, field)
    if field.type == FIELD_TYPE_INT16:
        assert isinstance(value, int)
        w.extend(value.to_bytes(2, "big"))
    elif field.type == FIELD_TYPE_INT32:
        assert isinstance(value, int)
        w.extend(value.to_bytes(4, "big"))
    elif field.type == FIELD_TYPE_AMOUNT:
        assert isinstance(value, int)
        w.extend(serialize_amount(value))
    elif field.type == FIELD_TYPE_ACCOUNT:
        assert isinstance(value, str)
        write_bytes_varint(w, helpers.decode_address(value))
    elif field.type == FIELD_TYPE_VL:
        assert isinstance(value, (bytes, bytearray))
        write_bytes_varint(w, value)
    else:
        raise ValueError("Unknown field type")
コード例 #4
0
ファイル: rlp.py プロジェクト: vdovhanych/trezor-firmware
def write_string(w: Writer, string: bytes) -> None:
    write_header(w, len(string), STRING_HEADER_BYTE, string)
    w.extend(string)
コード例 #5
0
def write_bytes_reversed(w: Writer, b: bytes) -> int:
    w.extend(bytes(reversed(b)))
    return len(b)
コード例 #6
0
def write_bytes(w: Writer, b: bytes) -> int:
    w.extend(b)
    return len(b)
コード例 #7
0
ファイル: writers.py プロジェクト: mcudev/trezor-firmware
def write_bytes_reversed(w: Writer, b: bytes, length: int) -> int:
    ensure(len(b) == length)
    w.extend(bytes(reversed(b)))
    return length
コード例 #8
0
ファイル: writers.py プロジェクト: mcudev/trezor-firmware
def write_bytes_fixed(w: Writer, b: bytes, length: int) -> int:
    ensure(len(b) == length)
    w.extend(b)
    return length
コード例 #9
0
ファイル: writers.py プロジェクト: mcudev/trezor-firmware
def write_bytes_unchecked(w: Writer, b: Union[bytes, memoryview]) -> int:
    w.extend(b)
    return len(b)
コード例 #10
0
ファイル: writers.py プロジェクト: zhengger/trezor-firmware
def write_bytes_unchecked(w: Writer, b: bytes) -> int:
    w.extend(b)
    return len(b)
コード例 #11
0
def write_bytes_varint(w: Writer, value: bytes) -> None:
    """Serialize a variable length bytes."""
    write_varint(w, len(value))
    w.extend(value)