Skip to main content

CBOR (de)serializer with extensive tag support

Project description

Testing Status Publish Status Code Coverage Documentation Status

About

This library provides encoding and decoding for the Concise Binary Object Representation (CBOR) (RFC 8949) serialization format. The specification is fully compatible with the original RFC 7049. Read the docs to learn more.

It is implemented in pure python with an optional C backend.

On PyPy, cbor2 runs with almost identical performance to the C backend.

Features

  • Simple api like json or pickle modules.

  • Support many CBOR tags with stdlib objects.

  • Generic tag decoding.

  • Shared value references including cyclic references.

  • String references compact encoding with repeated strings replaced with indices.

  • Optional C module backend tested on big- and little-endian architectures.

  • Extensible tagged value handling using tag_hook and object_hook on decode and default on encode.

  • Command-line diagnostic tool, converting CBOR file or stream to JSON python -m cbor2.tool (This is a lossy conversion, for diagnostics only)

  • Thorough test suite.

Installation

pip install cbor2

Requirements

  • Python >= 3.9 (or PyPy3 3.9+)

  • C-extension: Any C compiler that can build Python extensions. Any modern libc with the exception of Glibc<2.9

Building the C-Extension

To force building of the optional C-extension, set OS env CBOR2_BUILD_C_EXTENSION=1. To disable building of the optional C-extension, set OS env CBOR2_BUILD_C_EXTENSION=0. If this environment variable is unset, setup.py will default to auto detecting a compatible C library and attempt to compile the extension.

Usage

Basic Usage

Command-line Usage

The provided command line tool (cbor2) converts CBOR data in raw binary or base64 encoding into a representation that allows printing as JSON. This is a lossy transformation as each datatype is converted into something that can be represented as a JSON value.

The tool can alternatively be invoked with python -m cbor2.tool.

Usage:

# Pass hexadecimal through xxd.
$ echo a16568656c6c6f65776f726c64 | xxd -r -ps | cbor2 --pretty
{
    "hello": "world"
}
# Decode Base64 directly
$ echo ggEC | python -m cbor2.tool --decode
[1, 2]
# Read from a file encoded in Base64
$ python -m cbor2.tool -d tests/examples.cbor.b64
{...}

It can be used in a pipeline with json processing tools like jq to allow syntax coloring, field extraction and more.

CBOR data items concatenated into a sequence can be decoded also:

$ echo ggECggMEggUG | cbor2 -d --sequence
[1, 2]
[3, 4]
[5, 6]

Multiple files can also be sent to a single output file:

$ cbor2 -o all_files.json file1.cbor file2.cbor ... fileN.cbor

Security

This library has not been tested against malicious input. In theory it should be as safe as JSON, since unlike pickle the decoder does not execute any code.

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

cbor2pure-5.7.2.tar.gz (100.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cbor2pure-5.7.2-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file cbor2pure-5.7.2.tar.gz.

File metadata

  • Download URL: cbor2pure-5.7.2.tar.gz
  • Upload date:
  • Size: 100.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cbor2pure-5.7.2.tar.gz
Algorithm Hash digest
SHA256 96bbd679260777c4e2075fe00a28a16a297207862d7e7ff80ab529c91c35925e
MD5 dd23eda7f20092584c7432b84630a74d
BLAKE2b-256 4bfd93134360ad789352a77b3c49ce99836db3e5e14e8ca2cf0da2b31f61ed5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cbor2pure-5.7.2.tar.gz:

Publisher: publish.yml on cffls/cbor2pure

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cbor2pure-5.7.2-py3-none-any.whl.

File metadata

  • Download URL: cbor2pure-5.7.2-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cbor2pure-5.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cc3ea93afc3d92789343cdaa7c3f75802f56beecf6272ee6069e04a237641d4f
MD5 f2fa0b680fb7508605e03a2dfaf55ed7
BLAKE2b-256 8d4bc04acc4d008a2469440ba952c9910ef96aa96efaab2af4858ca0679e3e84

See more details on using hashes here.

Provenance

The following attestation bundles were made for cbor2pure-5.7.2-py3-none-any.whl:

Publisher: publish.yml on cffls/cbor2pure

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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