Skip to main content

Python bindings for CIRISVerify hardware-rooted license verification

Project description

CIRISVerify Python Bindings

Python bindings for CIRISVerify, the hardware-rooted license verification module for the CIRIS ecosystem.

Installation

pip install ciris-verify

Note: The CIRISVerify binary must be installed separately. See the CIRISVerify documentation for installation instructions.

Quick Start

import os
from ciris_verify import CIRISVerify, LicenseStatus

# Initialize the verifier
verifier = CIRISVerify()

# Get license status with a fresh nonce
status = await verifier.get_license_status(
    challenge_nonce=os.urandom(32)
)

# Check if professional capabilities are available
if status.allows_licensed_operation():
    print("Professional license verified!")
    print(f"Tier: {status.license.tier}")
    print(f"Capabilities: {status.license.capabilities}")
else:
    print("Running in community mode")

# IMPORTANT: Always display the mandatory disclosure
print(status.mandatory_disclosure.text)

Mandatory Disclosure

Per the CIRIS ecosystem rules, agents MUST display the mandatory_disclosure.text to users. This ensures transparency about the agent's capabilities and licensing status.

# The disclosure MUST be shown to users
disclosure = status.mandatory_disclosure
print(f"[{disclosure.severity.upper()}] {disclosure.text}")

Capability Checking

For frequent capability checks, use the fast path:

result = await verifier.check_capability("medical:diagnosis")
if result.allowed:
    # Capability is available
    pass
else:
    print(f"Capability denied: {result.reason}")

Testing

For testing without the actual binary, use MockCIRISVerify:

from ciris_verify import MockCIRISVerify, LicenseStatus

# Create a mock that returns community mode
verifier = MockCIRISVerify(
    mock_status=LicenseStatus.UNLICENSED_COMMUNITY
)

# Use exactly like the real client
status = await verifier.get_license_status(os.urandom(32))
assert status.status == LicenseStatus.UNLICENSED_COMMUNITY

Error Handling

from ciris_verify import (
    CIRISVerifyError,
    BinaryNotFoundError,
    BinaryTamperedError,
    VerificationFailedError,
)

try:
    verifier = CIRISVerify()
    status = await verifier.get_license_status(os.urandom(32))
except BinaryNotFoundError as e:
    # Binary not installed
    print(f"CIRISVerify not found: {e.path}")
except BinaryTamperedError:
    # CRITICAL: Binary has been modified
    # Halt all operations immediately
    raise SystemExit("SECURITY ALERT: Binary integrity compromised")
except VerificationFailedError as e:
    # Verification failed - operate in restricted mode
    print(f"Verification failed: {e}")

License Status Codes

Status Code Description
LICENSED_PROFESSIONAL 100 Full professional license active
LICENSED_PROFESSIONAL_GRACE 101 License valid, in offline grace period
UNLICENSED_COMMUNITY 200 Community mode, no professional capabilities
RESTRICTED_* 300-399 Restricted mode due to verification issues
ERROR_* 400-499 Error states (revoked, expired, etc.)
LOCKDOWN_* 500+ Critical security failure, halt operations

Thread Safety

The client is thread-safe and can be used from multiple threads or async tasks concurrently.

License

AGPL-3.0-or-later - See LICENSE file in the CIRISVerify repository.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

ciris_verify-0.3.0.tar.gz (18.6 kB view details)

Uploaded Source

Built Distributions

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

ciris_verify-0.3.0-py3-none-win_amd64.whl (2.0 MB view details)

Uploaded Python 3Windows x86-64

ciris_verify-0.3.0-py3-none-manylinux_2_17_x86_64.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ciris_verify-0.3.0-py3-none-manylinux_2_17_aarch64.whl (2.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ciris_verify-0.3.0-py3-none-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

ciris_verify-0.3.0-py3-none-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file ciris_verify-0.3.0.tar.gz.

File metadata

  • Download URL: ciris_verify-0.3.0.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for ciris_verify-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d9d84598092ac770cd4468feb9f2364de8a680d13d0218d3051e462f34c5170f
MD5 abb1baa31f3ba4037776c1cc05df1e37
BLAKE2b-256 a1ddf952783d51f23da0d80a3866939b79479898466667c32ee77518edc114a9

See more details on using hashes here.

File details

Details for the file ciris_verify-0.3.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: ciris_verify-0.3.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for ciris_verify-0.3.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 72bfaeb23d5fa9e4bd795d23289a967baa8e78d1459efd694e3d195d7ed43f15
MD5 3ecb18b73ef9e7926d75ba7245d0a054
BLAKE2b-256 1577963a68c9fe719a3bec9c3ceaec328dae9a11f516d7fd2f755b63f93879e6

See more details on using hashes here.

File details

Details for the file ciris_verify-0.3.0-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ciris_verify-0.3.0-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8ec653ab34679bef0f20394de62840b9cb3f277deca91c916e0ddf545b44873f
MD5 1528d0fbe111d1a33d246389a87b94ca
BLAKE2b-256 1534d729d5abb3ba8468a89c4b13ec246d7c7261434ef03f853b469107482dcd

See more details on using hashes here.

File details

Details for the file ciris_verify-0.3.0-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for ciris_verify-0.3.0-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 c56cb1692822f86cef12766ea5e0b4bb8bbdfcd094b8bd4f8c9ce96999c8207d
MD5 32949343133498b32bffc68d96ec2bf3
BLAKE2b-256 834adca815efbfc450cd2436e2d87b1e5f914232b84e21d522cdd6c2cefb1078

See more details on using hashes here.

File details

Details for the file ciris_verify-0.3.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ciris_verify-0.3.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5c7d019722691ea6e6655b7d56d115114ccd4b8dba258947517df547e2acea6
MD5 93536cd00d65d925fe9ff1d9a2cb5b63
BLAKE2b-256 269a61654e3674d685013436299662cea00389a4d868917f9a2e67edecbebb5d

See more details on using hashes here.

File details

Details for the file ciris_verify-0.3.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ciris_verify-0.3.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ac3bf6bec6d1a28f75e73526b75bf018efe9197ce7e0de95d69041608d70428f
MD5 c55590a2dcf329c5970270114a20e69c
BLAKE2b-256 ee80bbca3291561aac23e1b7cf65240142fa9dba78e6b45dd43ecde320a9adb3

See more details on using hashes here.

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