Skip to main content

Typed content-addressing — deterministic, verifiable sha256:<64hex> κ-labels from JSON / S-expressions / XML / ASN.1 DER / schema.org / in-toto. Wraps the uor-addr-c native library via ctypes.

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

uor_addr-0.1.1-py3-none-win_amd64.whl (300.3 kB view details)

Uploaded Python 3Windows x86-64

uor_addr-0.1.1-py3-none-manylinux_2_28_x86_64.whl (441.6 kB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

uor_addr-0.1.1-py3-none-manylinux_2_28_aarch64.whl (414.7 kB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

uor_addr-0.1.1-py3-none-macosx_11_0_x86_64.whl (411.1 kB view details)

Uploaded Python 3macOS 11.0+ x86-64

uor_addr-0.1.1-py3-none-macosx_11_0_universal2.whl (375.0 kB view details)

Uploaded Python 3macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file uor_addr-0.1.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: uor_addr-0.1.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 300.3 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for uor_addr-0.1.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b36d704577cc54b1576fd819a88aae2f49d0ed3442967d6189a31f6a15e60c27
MD5 b77241530ef95b8ed00414dacde1771d
BLAKE2b-256 b3210fc3904bd261607af5f9c17e4a187359d1e673f20bc06640fd850ea9eb5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for uor_addr-0.1.1-py3-none-win_amd64.whl:

Publisher: release.yml on UOR-Foundation/uor-addr

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

File details

Details for the file uor_addr-0.1.1-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for uor_addr-0.1.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e4929b274885200d13b7a28c815e1123780c911950e7314cfe21813f5b9d8a2
MD5 b29641378900ec257a7a1b5c49b2e73d
BLAKE2b-256 52b3e1e171867d1a79ad80943513c82bea1ee172e0a29e60a87003a985f092e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for uor_addr-0.1.1-py3-none-manylinux_2_28_x86_64.whl:

Publisher: release.yml on UOR-Foundation/uor-addr

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

File details

Details for the file uor_addr-0.1.1-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for uor_addr-0.1.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 acfc8d894399730cdf3ef61d352b012e655d1ebbeb5731e2fd55f0fbc3f068a9
MD5 435b5aa466fd119763cc8c8fe85f306f
BLAKE2b-256 902768c443db3b58457433cff8a01b8954d4f66c80f8c99f05f03ff7b94fbd03

See more details on using hashes here.

Provenance

The following attestation bundles were made for uor_addr-0.1.1-py3-none-manylinux_2_28_aarch64.whl:

Publisher: release.yml on UOR-Foundation/uor-addr

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

File details

Details for the file uor_addr-0.1.1-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for uor_addr-0.1.1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4fd9bfde44280669b7b2d4747fa9d7d9630a6d1100932e7bc1c4fb456e7f2225
MD5 7d005c923b2748bc336ad0a45083ce3e
BLAKE2b-256 ec1b78ac91cdc6251b3adbfaac973d37ab4cb9534445b88b25b491b9563131d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for uor_addr-0.1.1-py3-none-macosx_11_0_x86_64.whl:

Publisher: release.yml on UOR-Foundation/uor-addr

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

File details

Details for the file uor_addr-0.1.1-py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for uor_addr-0.1.1-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 9eac311ea3ba6390ba8e6fa774cd3d4736c2b9d87be648697df9b627abc5d116
MD5 bef043409811ac78864e4974443bf2de
BLAKE2b-256 be2a6c5ecab2fcb1b5af328b014d71e28f1da468f78fc77b9b23cbc7284b1ef8

See more details on using hashes here.

Provenance

The following attestation bundles were made for uor_addr-0.1.1-py3-none-macosx_11_0_universal2.whl:

Publisher: release.yml on UOR-Foundation/uor-addr

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