Skip to main content

A library for building IPFS CID v1 compatible content identifiers using fixed encoding parameters.

Project description

ipfs-cid

pypi test codecov python-versions

A library for building IPFS CID v1 compatible content identifiers using fixed encoding parameters.

Usage

Get CID from bytes

All at once

from ipfs_cid import cid_sha256_hash

data = b"Hello world"
result = cid_sha256_hash(data)
assert result == "bafkreide5semuafsnds3ugrvm6fbwuyw2ijpj43gwjdxemstjkfozi37hq"

In chunks with a generator

from typing import Iterable
from io import BytesIO
from ipfs_cid import cid_sha256_hash_chunked

def as_chunks(stream: BytesIO, chunk_size: int) -> Iterable[bytes]:
    while len((chunk := stream.read(chunk_size))) > 0:
        yield chunk

buffer = BytesIO(b"Hello world")
result = cid_sha256_hash_chunked(as_chunks(buffer, 4))
assert result == "bafkreide5semuafsnds3ugrvm6fbwuyw2ijpj43gwjdxemstjkfozi37hq"

Wrap an existing SHA 256 checksum as a CID

WARNING: This will lead to an invalid CID if an invalid digest is provided. This is not possible to validate against without the original data.

from hashlib import sha256
from ipfs_cid import cid_sha256_wrap_digest

data = b"Hello world"
digest = sha256(data).digest()
result = cid_sha256_wrap_digest(digest)
assert result == "bafkreide5semuafsnds3ugrvm6fbwuyw2ijpj43gwjdxemstjkfozi37hq"

Unwrap a compatible CID to a sha256 digest

NOTE: The cid_sha256_unwrap_digest function will throw an AttributeError if the input CID is not using the same encoding parameters.

from hashlib import sha256
from ipfs_cid import cid_sha256_unwrap_digest

data = b"Hello world"
digest = sha256(data).digest()

cid = "bafkreide5semuafsnds3ugrvm6fbwuyw2ijpj43gwjdxemstjkfozi37hq"
result = cid_sha256_unwrap_digest(cid)
assert result == digest

Encoding Format

The CID spec supports multiple different encodings and hashing algorithms.

The resulting CID string is composed of the following components:

{multibase prefix} + multibase_encoded({cid version} + {content type} + {multihash})

This library always uses the following encoding parameters:

multibase CID version Content Type Multihash
base32 cidv1 raw sha2-256

More details about the formats below:

Multibase

encoding code description
base32 b rfc4648 case-insensitive - no padding

Multicodec

name code description
cidv1 0x01 CID v1
sha2-256 0x12 sha2-256 with 256 bit digest
raw 0x55 raw binary

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

ipfs_cid-1.0.0.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

ipfs_cid-1.0.0-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

File details

Details for the file ipfs_cid-1.0.0.tar.gz.

File metadata

  • Download URL: ipfs_cid-1.0.0.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.9 Linux/5.15.0-1030-azure

File hashes

Hashes for ipfs_cid-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a752c87cde68840e27dcb02f4e7cf940297fae43872bb5e6ef3bf73ad31af73d
MD5 a1397c8c915fb5e44e6cd73e57a82c31
BLAKE2b-256 a2119a363e839d17cc9e98391c7862fc20985d012e3b7b3b50e9b9991562b155

See more details on using hashes here.

File details

Details for the file ipfs_cid-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ipfs_cid-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 4.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.9 Linux/5.15.0-1030-azure

File hashes

Hashes for ipfs_cid-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 341985f50f893e0e49cf7da0fc0c4ba1afbe57fdea8a215724fd708de4ef96cb
MD5 5a57b38796036d049b68fb30ccbdc622
BLAKE2b-256 d051e006097277ff32f552f47b568ff7af292873fa395bbf38d8ca12859b44fc

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