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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ciris_verify-0.7.7.tar.gz.
File metadata
- Download URL: ciris_verify-0.7.7.tar.gz
- Upload date:
- Size: 24.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
849e027f99de0486531b329d2aefada8a0d0da04e97206908c9a461d99783143
|
|
| MD5 |
7836f2f349cfd1d6181afe08767dda45
|
|
| BLAKE2b-256 |
14cf113e9159c31d84b4411e698984e189a4b1e8b627e1adc7efe3b6e6d2baed
|
File details
Details for the file ciris_verify-0.7.7-py3-none-win_amd64.whl.
File metadata
- Download URL: ciris_verify-0.7.7-py3-none-win_amd64.whl
- Upload date:
- Size: 3.5 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8732f4e7682f7bbf13e7abdd6a4c3c8473286855975eb32153b21b94980a5216
|
|
| MD5 |
9f61c84040e367ff98b9d966bd25bcb4
|
|
| BLAKE2b-256 |
1f2473834f14525fe6f6e0226e0ad00729af5353a76f2ddffdc735d1f0bcf9cf
|
File details
Details for the file ciris_verify-0.7.7-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: ciris_verify-0.7.7-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 4.0 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b6994f629b92c6ec70cf0d24a64bc104411c6538eb291cc62282fa1606dca7e
|
|
| MD5 |
290caaaaba581f23b49ec1251bf145f9
|
|
| BLAKE2b-256 |
57b6a97635d3b53e09f0ecce11a7fd6ac34e4a6cd4009a1f7bf75c5f1010b23a
|
File details
Details for the file ciris_verify-0.7.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ciris_verify-0.7.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 4.0 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90a5aa4d5d1e1c4b3e9b792d8b2ca083034cbece3512200bcf80f8cff5219b2d
|
|
| MD5 |
5d2751f0ed42a84fe8c75bf64702c71f
|
|
| BLAKE2b-256 |
22c5e8e10ae856124b574bab6853d8e6b2bc81ab30355f8a44b87d1eecd068f9
|
Provenance
The following attestation bundles were made for ciris_verify-0.7.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on CIRISAI/CIRISVerify
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_verify-0.7.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
90a5aa4d5d1e1c4b3e9b792d8b2ca083034cbece3512200bcf80f8cff5219b2d - Sigstore transparency entry: 978084395
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISVerify@003f8b1b67bb09a1119bb46006f4debb59d02f0c -
Branch / Tag:
refs/tags/v0.7.7 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@003f8b1b67bb09a1119bb46006f4debb59d02f0c -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_verify-0.7.7-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: ciris_verify-0.7.7-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 3.7 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0a8365fb44df6e12a27019ed9766419ed50083621f0128dc6cd3cd83044c39a
|
|
| MD5 |
72e1df6feb33880790d1d6cb82d4e5a8
|
|
| BLAKE2b-256 |
503fb317ffec931d85544bb89db019b1ef19328cf5594e66701a79ee19a2d52b
|
File details
Details for the file ciris_verify-0.7.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ciris_verify-0.7.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.7 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb25a88d48bbb888d79ec5217115b0293fb813b0dfd15abf769b106c3ca12be7
|
|
| MD5 |
fea9996a649cfef3e67a64890b86d159
|
|
| BLAKE2b-256 |
d92f1354768a0b11fbc9888b5facb267eeba8b54c471e8f4399767fccc0c074b
|
Provenance
The following attestation bundles were made for ciris_verify-0.7.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on CIRISAI/CIRISVerify
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_verify-0.7.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
bb25a88d48bbb888d79ec5217115b0293fb813b0dfd15abf769b106c3ca12be7 - Sigstore transparency entry: 978084575
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISVerify@003f8b1b67bb09a1119bb46006f4debb59d02f0c -
Branch / Tag:
refs/tags/v0.7.7 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@003f8b1b67bb09a1119bb46006f4debb59d02f0c -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_verify-0.7.7-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: ciris_verify-0.7.7-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.3 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e1be759e767f7f41fe458e83f41e0b4ac6351823a54a2701d8d62e59b2ff3ea
|
|
| MD5 |
ac32a9a4b817017177d96ac0e8345273
|
|
| BLAKE2b-256 |
099db2d8d94076c0f93298e3a643aae6c091c423c5cab44de6f7fc43e4f5cd55
|
File details
Details for the file ciris_verify-0.7.7-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: ciris_verify-0.7.7-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47ce339aef5f9cbefa2ba12ae0a3afb00c9a8466e88d25996565d17009c0a56e
|
|
| MD5 |
c5b454685d3e141be9d1e253916c5b54
|
|
| BLAKE2b-256 |
224212a9285e0295039fff340ef0a3d0648e9923fd3588aa13cae3808735f0aa
|