Skip to main content

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

Project description

python-codex32

Python 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.0.tar.gz (27.4 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.0-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: codex32-0.6.0.tar.gz
  • Upload date:
  • Size: 27.4 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.0.tar.gz
Algorithm Hash digest
SHA256 3ec9c9ad954d8a3934846aa00a8fa46e244e1d99c71b237d3970f9a5722f9172
MD5 a4d645fd8f577d59ba7f1c8c49417829
BLAKE2b-256 076dca28345c2b07d261766bbf35668dbf625380900262874f235031d11d4f7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex32-0.6.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: codex32-0.6.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bb24dba4d319cc61a346094901647a5381c8b5a1fae74f8d65bf740ab43c0f62
MD5 af39376ad034c2d55c13dc8daf0247ba
BLAKE2b-256 c914e15b92474460a3d1a1119cbd1a33750d6aa4f56d96f2b99f8fa457bf192e

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex32-0.6.0-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