Skip to main content

A EMV BER-TLV encoding/decoding package

Project description

BER-TLV Package

Summary

This is a BER-TLV (described in EMV Book 3) format encoder/decoder library for Python. BER is Basic Encoding Rules. TLV stands for Tag + Length + Value. Tag is 1-4 byte long (integer) identifier. Length is 1-4 byte integer representing value (or entire branch) size. Value is binary data, which can also be a nested list of sub-items. BER-TLV is a binary data storage tree, which is widely used in electonic payment industry and in EMV in particular.

Install

pip3 install ber-tlv

Usage

Parse TLV:

>>> from ber_tlv.tlv import *
>>> Tlv.parse(binascii.unhexlify("7F100DF303414243F4038A0135100100"))
[(32528, [(243, b'ABC'), (244, [(138, b'5')]), (16, b'\x00')])]

Build TLV:

>>> from ber_tlv.tlv import *
>>> Tlv.build({0x9F10:[(0x8A,b"ABC"),(0x8B,{0x10:b"\xf0\x0d"})]})
b'\x9f\x10\x0b\x8a\x03ABC\x8b\x04\x10\x02\xf0\r'

Convert HEX bytes to string:

>>> from ber_tlv.tlv import *
>>> Tlv.hexify_bytes(b"\x01\x23\x45\x67\x89\xab\xcd\xef")
'0123456789ABCDEF'

Tag class checking:

>>> from ber_tlv.tlv import *
>>> Tag.isConstructed(0x7f10)
True
>>> Tag.tagClass(0x1f10) == Tag.UNIVERSAL
True
>>> Tag.tagClass(0x7f10) == Tag.APPLICATION
True
>>> Tag.tagClass(0x9f10) == Tag.CONTEXT_SPECIFIC
True
>>> Tag.tagClass(0xdf10) == Tag.PRIVATE
True

Technical description

Below is a brief technical description of BER-TLV format.

Tag field

Tag has variable size of 1-4 bytes. If first tag byte, bits 1-5 are set to 1, there are more tag bytes follow. In subsequent bytes, bit 8 indicates if this is a last byte. Other bits identify unique tag number.

Length field

Length field has variable size of 1-4 bytes. When bit b8 of the most significant byte of the length field is set to 0, the length field consists of only one byte. Bits b7 to b1 code the number of bytes of the value field. The length field is within the range 1 to 127.When bit b8 of the most significant byte of the length field is set to 1, the subsequent bits b7 to b1 of the most significant byte code the number of subsequent bytes in the length field. The subsequent bytes code an integer representing the number of bytes in the value field.

Value field

Value is binary bytes array of specified length. Value may represent recursive sub-tree (branch).

Padding

Before, between, or after TLV-coded data objects, zero bytes without any meaning may occur (for example, due to erased or modified TLV-coded data objects).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ber-tlv-0.0.6.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

ber_tlv-0.0.6-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file ber-tlv-0.0.6.tar.gz.

File metadata

  • Download URL: ber-tlv-0.0.6.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10

File hashes

Hashes for ber-tlv-0.0.6.tar.gz
Algorithm Hash digest
SHA256 80abc0f7caa26ca9f4da3c18db4936baebe33aee9c6ecaee8b718d5dd2414902
MD5 c92482bda4c3acab8ec5073f57514f45
BLAKE2b-256 aed90a20d07636ff53b3045e855a1c68f4dbae84cfbaed32b9877087a4b12f99

See more details on using hashes here.

File details

Details for the file ber_tlv-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: ber_tlv-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10

File hashes

Hashes for ber_tlv-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 a2269e06de167ab9d0765328f68f86777403e0a2d1f05e09d78b3ea10326a465
MD5 dac84564583ddd1405d564daf12ca9f8
BLAKE2b-256 993ec95664f67c26375f669c2d774f49448497651652c1d351cffc81f3661faa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page