This release is a pre-release and may not be stable for production use.
ORCHIDs for Internet Applications & Protocols
Overlay Routable Cryptographic Hash IDentifiers (ORCHIDs) are valid non-routable addresses that are found under specific IANA assigned prefixes out of the IPv6 Special Purpose Address Space. They encode cryptographic agility and optional additional information (such as hierarchy) while acting as a handle to the public portion of an asymmetric keypair.
An ORCHID is formed with the following general procedure:
- Select an application specific Suite ID (selecting a key algorithm family and hash algorithm)
- Generate an asymmetric key pair using the specified Suite ID algorithm family
- Construct hash input string per application specification with public key
- With the specified hash algorithm of Suite ID and application Context ID hash previous steps output
- Assemble ORCHID using application provided prefix, Suite ID and resulting hash
The main protocols using ORCHIDs are:
- Host Identity Protocol (HIP, RFC7401) with the Host Identity Tag (HIT)
- Drone Remote ID Protocol (DRIP, RFC9374) with the DRIP Entity Tag (DET), a form of Hierarchical HIT (HHIT)
More on ORCHIDs can be found in RFC7343.
This project is designed as a reference implementation for ORCHIDs and provides a simple interface to generate and import them in Internet based applications or protocols. It is not intended to be a complete solution but rather a general toolbox for using of ORCHIDs.
The project (pyorchis) is named after the plant family and genus that orchids are from.
Installing
pip3 install pyorchis # core ORCHID capabilities
pip3 install pyorchis[drip] # capabilities for DRIP
pip3 install pyorchis[all] # all capabilities
Cryptography Matrix
This project relies on pycryptodome to provide its cryptographic capabilities in support of ORCHID generation and
utility functions for HIP and DRIP.
| [H]HIT Suite ID | HI Algorithm | Key Algorithm | Curve | Hash Algorithm | Supported |
|---|---|---|---|---|---|
| 1 | 3 | DSA | - | SHA-256 | :white_check_mark: |
| 1 | 5 | RSA | - | SHA-256 | :white_check_mark: |
| 2 | 7 | ECDSA | NIST P-256 | SHA-384 | :white_check_mark: |
| 2 | 7 | ECDSA | NIST P-384 | SHA-384 | :white_check_mark: |
| 3 | 9 | ECDSA_LOW | SECP160R1 | SHA-1 | :x: |
| 5 | 13 | EdDSA | Ed25519 | cSHAKE128 | :white_check_mark: |
| 5 | 13 | EdDSA | Ed25519ph | cSHAKE128 | :x: |
| 5 | 13 | EdDSA | Ed448 | cSHAKE128 | :white_check_mark: |
| 5 | 13 | EdDSA | Ed448ph | cSHAKE128 | :x: |
Both RFC7401 prefix of 2001:20::/28 and RFC9374 prefix of 2001:30::/28 are supported.
Import/Export Matrix
| Key Algorithm | Curve | PEM/DER/OpenSSH | Raw | JSON Web Key | COSE Key |
|---|---|---|---|---|---|
| DSA | - | :white_check_mark: | :x: | :x: | :x: |
| RSA | - | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: |
| ECDSA | NIST P-256 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| ECDSA | NIST P-384 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| EdDSA | Ed25519 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| ECDSA | Ed448 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
JSON Web Keys of RFC7517 and
COSE Keys of RFC9052 are imported using their native
encoded typing (str/bytes) and can be exported either encoded or in dict[int, Any] for COSE Key and dict[str,
Any] for JWK.
When exported as COSE Key/JWK, a Key ID is set using the ORCHID of the key. When imported with a Key ID an
attempt is made to convert it to an ORCHID or use the imported key to generate the ORCHID and set the Orchid.ip
attribute. A raw key import generates the ORCHID directly from incoming key material.
HIP Capabilities
Orchid.host_identity() provides the "Host Identity" field for
the HOST_ID parameter. This is used as part of the
Base Exchange (BEX) when initiating a HIP connection. This structure is also used in the generation of an ORCHID as
the primary data input for the hash algorithm.
DRIP Capabilities
Orchid.arpa() returns the reverse lookup (i.e. nibble-reversed) IPv6 Fully Qualified Domain Name (FQDN) that is
used by DRIP to enable lookups via RFC9886.
x509 is a module supporting X.509 functions around CertificateSigningRequests & Certificates. It follows the
guidelines in
DRIP Key Infrastructure (DKI) and generalizes them
away from the DRIP ecosystem/constraints.
It includes the use of Subject Alternative Name: IP6 for holding the Subject ORCHID and the extension of
Authority Key Identifier for the Issuer ORCHID. These certificates are the "Canonical Registration Certificate"
that are issued by levels of the hierarchy in DRIP and stored in the HHIT RRType of DNS.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 pyorchis-2026.8.0a0.tar.gz.
File metadata
- Download URL: pyorchis-2026.8.0a0.tar.gz
- Upload date:
- Size: 26.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa2ea29f6612fdb13314549b8767fd5245dab57232bc930b0ddcdbf37270eef6
|
|
| MD5 |
0746a08e7a05fd4f2d92e6e94538c3c9
|
|
| BLAKE2b-256 |
8f2896a3f5b221997abe9c96bd2eb79c621666464f814e30188f0e785b57e209
|
File details
Details for the file pyorchis-2026.8.0a0-py3-none-any.whl.
File metadata
- Download URL: pyorchis-2026.8.0a0-py3-none-any.whl
- Upload date:
- Size: 24.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d920e600cba43494043d3008d56b4025df2d0bd94e08cd0514c8e8399b79ea1f
|
|
| MD5 |
26b86f449f2129010122bec7f2ae0866
|
|
| BLAKE2b-256 |
d7b219a9a394b53788d1a27b511359e29e2659b068ee168b0066ad9dc7cf2e7d
|