Skip to main content

Python reference implementation for codex32 (BIP93) and codex32-encoded master seeds.

Project description

python-codex32

Reference implementation of BIP-0093 (codex32): checksummed, SSSS-aware BIP32 seed strings.

This repository implements the codex32 string format described by BIP-0093. It provides encoding/decoding, regular/long codex32 checksums, CRC padding for base conversions, Shamir secret sharing scheme (SSSS) interpolation helpers and helpers to build codex32 strings from seed bytes.

Features

  • Encode/decode codex32 data via from_string and from_unchecksummed_string.
  • Regular checksum (13 chars) and long checksum (15 chars) support.
  • Construct codex32 strings from raw seed bytes via from_seed.
  • CRC-based default padding scheme for from_seed.
  • Default from_seed identifier is the bech32-encoded BIP32 fingerprint.
  • Interpolate/recover shares via interpolate_at.
  • Parse codex32 strings and access parts via properties.
  • Mutate codex32 strings by reassigning is_upper, hrp, k, ident, share_idx, data, and pad_val.
  • Contains module and tests for Bech32/Bech32m and segwit addresses.

Security

Caution: This is reference code. Verify carefully before using with real funds.

Installation

Compatibility: Python 3.10–3.14

Recommended: use a virtual environment

Linux / macOS

python -m venv .venv
source .venv/bin/activate
pip install codex32

Windows

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install codex32

Quick usage

from codex32 import Codex32String

# Create from seed bytes
s = Codex32String.from_seed(
    bytes.fromhex('ffeeddccbbaa99887766554433221100'),
    "ms13cashs",        # prefix string, (HRP + '1' + header)
    0                   # padding value (default "CRC", otherwise integer)
)
print(s.s)              # codex32 string

# Parse an existing codex32 string and inspect parts
a = Codex32String("ms13casha320zyxwvutsrqpnmlkjhgfedca2a8d0zehn8a0t")
print(a.hrp)            # human-readable part
print(a.k)              # threshold parameter
print(a.ident)          # 4 character identifier
print(a.share_idx)      # share index character
print(a.payload)        # payload part
print(a.checksum)       # checksum part
print(len(a))           # length of the codex32 string
print(a.is_upper)       # case is upper True/False
print(s.data.hex())     # raw seed bytes as hex
print(a.pad_val)        # padding value integer, (MSB first)



# Create from unchecksummed string (will append checksum)
c = Codex32String.from_unchecksummed_string("ms13cashcacdefghjklmnpqrstuvwxyz023")
print(str(c))           # equivalent to print(c.s)

# Interpolate shares to recover or derive target share index
shares = [s, a, c]
derived_share_d = Codex32String.interpolate_at(shares, target='d')
print(derived_share_d.s)

# Create Codex32String object from existing codex32 string and validate any HRP
e = Codex32String.from_string("cl", "cl10lueasd35kw6r5de5kueedxyesqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqanvrktzhlhusz")
print(e.ident)
print(e.s)

# Relabel a Codex32String object
e.ident = "cln2"
print(e.ident)
print(e.s)

# Uppercase a Codex32String object (for encoding in QR codes or handwriting)
e.is_upper = True
print(e.s)

Tests

pip install -e .[dev]
pytest

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

codex32-0.6.1.tar.gz (27.9 kB view details)

Uploaded Source

Built Distribution

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

codex32-0.6.1-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

Details for the file codex32-0.6.1.tar.gz.

File metadata

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

File hashes

Hashes for codex32-0.6.1.tar.gz
Algorithm Hash digest
SHA256 57e2645e4eab870f59500217de44d8ba1f059d6b78ae6daf96705a0c31679871
MD5 12b09652e8009a9a518f062448e0d674
BLAKE2b-256 2ac61a7893241e236003fad8049d9421a41d0f0ed0629c5174cd14a82e548835

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex32-0.6.1.tar.gz:

Publisher: python-publish.yml on BenWestgate/python-codex32

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

File details

Details for the file codex32-0.6.1-py3-none-any.whl.

File metadata

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

File hashes

Hashes for codex32-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 aeeed3c0be7aa95c360d19c1f29e48e49cf70ee9573a578d4f9b1ac19b1a13fb
MD5 700345a70c6128d402e4856602dfbf0e
BLAKE2b-256 3b9a145d385da3bb5b71fed1e2c339fc71530b3c587b3a39a35a41c58d2d17f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex32-0.6.1-py3-none-any.whl:

Publisher: python-publish.yml on BenWestgate/python-codex32

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