uor-addr (Python)
Python bindings for uor-addr — typed content-addressing producing deterministic sha256:<64hex> κ-labels from JSON, S-expressions, XML, ASN.1 DER, schema.org, in-toto, and more.
Wraps the uor-addr-c C ABI dynamic library via ctypes (stdlib — no external dependencies). The produced κ-label is byte-for-byte identical to the Rust crate's output.
Install
pip install uor-addr
Requires Python 3.10+. Wheels ship per-platform; sdist falls back to building from the workspace.
Quickstart
from uor_addr import kappa
label = kappa.json_address(b'{"foo":"bar"}')
print(label)
# sha256:7a38bf81f383f69433ad6e900d35b3e2385593f76a7b7ab5d4355b8ba41ee24b
API
Nine *_address methods on the kappa singleton, one per realization. Each takes bytes-like and returns the 71-byte ASCII sha256:<64-lowercase-hex> κ-label as str. Failures raise uor_addr.AddressError carrying one of three kind tags ('invalid-input' / 'too-large' / 'pipeline-failure').
| Method | Realization | Imported spec |
|---|---|---|
kappa.json_address |
JSON | RFC 8259 + RFC 8785 JCS + UAX #15 NFC |
kappa.sexp_address |
S-expressions | Rivest 1997 canonical form |
kappa.xml_address |
XML | W3C XML-C14N 1.1 (subset) |
kappa.asn1_address |
ASN.1 | ITU-T X.690 DER |
kappa.ring_address |
Ring elements | UOR-Framework Amendment 43 §2 |
kappa.codemodule_address |
Code-module AST | CCMAS |
kappa.schema_photo_address |
schema.org/Photograph | schema.org/Photograph |
kappa.schema_document_address |
schema.org/Article (+ subtypes) | schema.org/Article |
kappa.schema_codemodule_signed_address |
in-toto Statement v1 | in-toto Statement v1 |
Determinism + canonical-form invariance
from uor_addr import kappa
# JSON: whitespace, key order, NFC vs NFD all collapse.
a = kappa.json_address(b'{"a":1,"b":2}')
b = kappa.json_address(b'{ "b" : 2 , "a" : 1 }')
assert a == b
# But typed values that look similar produce distinct κ-labels.
int_label = kappa.json_address(b"42")
str_label = kappa.json_address(b'"42"')
assert int_label != str_label
TC-05 replay across the FFI boundary
Each *_address_with_witness method returns a Grounded handle carrying the ψ-pipeline's emitted derivation. Calling grounded.verify() replays the derivation through prism_verify::certify_from_trace and returns the recovered κ-label without re-invoking SHA-256. The verifier reads the trace events the source pipeline emitted and re-packages the certified output (QS-05 replay equivalence; CL-R* in CONFORMANCE.md).
from uor_addr import kappa
with kappa.json_address_with_witness(b'{"foo":"bar"}') as grounded:
print(grounded.kappa_label())
# sha256:7a38bf81f383f69433ad6e900d35b3e2385593f76a7b7ab5d4355b8ba41ee24b
assert grounded.verify() == grounded.kappa_label()
# TC-05 round-trip; SHA-256 was not re-invoked.
fingerprint: bytes = grounded.content_fingerprint()
# 32-byte content fingerprint (distinct from the κ-label hex
# suffix — it is prism's content-address of the Grounded's full
# state, used for replay verification).
The Grounded handle is freed on __exit__ of the with block; otherwise it is freed at garbage-collection time. Cross-process attestation is not supported (the underlying Trace<256> constructor is pub(crate) in uor-foundation); for that, persist the κ-label itself and re-mint at the verifier side.
Why C ABI rather than WASM?
The @uor-foundation/uor-addr npm package wraps the WASM Component Model artifact via jco. Python's wasmtime-py does not yet expose the Component Model API (24.x ships core-module support only); pivoting to wasm would require either waiting for upstream or pulling in a less-mature runtime. The C ABI path is faster (native code), more compact (no wasm runtime in the wheel), and produces the same κ-label byte-for-byte. The uor-addr-c native library is bundled per-platform in the wheel.
Byte identity with the Rust crate
The κ-label this package produces is byte-for-byte identical to uor_addr::<realization>::address(input).address from the Rust crate (and to @uor-foundation/uor-addr npm's output). Cross-validation is pinned by the CF-C* invariant class in CONFORMANCE.md.
License
Apache-2.0.
Metadata
Release files for uor-addr 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| uor_addr-0.2.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details for uor_addr-0.2.0-py3-none-win_amd64.whl |
| uor_addr-0.2.0-py3-none-manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.28+ x86-64 | Details for uor_addr-0.2.0-py3-none-manylinux_2_28_x86_64.whl |
| uor_addr-0.2.0-py3-none-manylinux_2_28_aarch64.whl | Python 3 | none | Linux glibc 2.28+ ARM64 | Details for uor_addr-0.2.0-py3-none-manylinux_2_28_aarch64.whl |
| uor_addr-0.2.0-py3-none-macosx_11_0_x86_64.whl | Python 3 | none | macOS 11.0+ x86-64 | Details for uor_addr-0.2.0-py3-none-macosx_11_0_x86_64.whl |
| uor_addr-0.2.0-py3-none-macosx_11_0_universal2.whl | Python 3 | none | macOS 11.0+ universal2 (ARM64, x86-64) | Details for uor_addr-0.2.0-py3-none-macosx_11_0_universal2.whl |
Total release size: 2.1 MB
Release files / uor_addr-0.2.0-py3-none-win_amd64.whl
| Download URL | uor_addr-0.2.0-py3-none-win_amd64.whl |
|---|---|
| Size | 323.0 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
62bbebb3a45458c3eb29cadd87b94dd09b66f63b954e8e9d217524ff69b14178
|
|
BLAKE2b-256 checksum How to use checksums |
a457eb57dc67252da05e8af689572a17ecdfc9b95dbe7c1191b876c0c3104d48
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency logRelease files / uor_addr-0.2.0-py3-none-manylinux_2_28_x86_64.whl
| Download URL | uor_addr-0.2.0-py3-none-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 466.2 kB |
| Tags | Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
d82dedf6bcc5fc76193f7bd38b2221ef98cffff366dd0f1867e6eb43258eef93
|
|
BLAKE2b-256 checksum How to use checksums |
cdf877006797c5718e12ed72d2741275c47c88fddbaaf02a7f28d49331f8a3c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency logRelease files / uor_addr-0.2.0-py3-none-manylinux_2_28_aarch64.whl
| Download URL | uor_addr-0.2.0-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 439.5 kB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
6385f9c8f1ea6782f7bd76a061ea97268d0a5a64501a7fcafce8f46fdcb4ee62
|
|
BLAKE2b-256 checksum How to use checksums |
5f595628c9f3f27557b12237ffe3af58e8becafe0f242736f55abfd8836b5a62
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency logRelease files / uor_addr-0.2.0-py3-none-macosx_11_0_x86_64.whl
| Download URL | uor_addr-0.2.0-py3-none-macosx_11_0_x86_64.whl |
|---|---|
| Size | 434.4 kB |
| Tags | Python 3 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
5877ab43daccd43a8d3545a45525176bd20738b42f90c855028960a0a6a963cf
|
|
BLAKE2b-256 checksum How to use checksums |
90f8abbfcdaecb881767d5c58e9bcc44ae47828390191e247f1bdc06722dd4fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency logRelease files / uor_addr-0.2.0-py3-none-macosx_11_0_universal2.whl
| Download URL | uor_addr-0.2.0-py3-none-macosx_11_0_universal2.whl |
|---|---|
| Size | 398.1 kB |
| Tags | Python 3 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
6b6a4b9801ea115feaf82fb64469d6474bd9321320fb680cb7111989bbc97a85
|
|
BLAKE2b-256 checksum How to use checksums |
9c3c2b07d5a960ba6f35802df4f00cdb041df07090dda8d70db18e19fd3a3be7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency logSecurity for uor-addr 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 5 files in this release have been uploaded with provenance metadata.
Attestation for uor_addr-0.2.0-py3-none-win_amd64.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 24, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.