**Note: Keylime Python modules do not have a stable API and might change without notice!**
# Keylime
[![Slack CNCF chat](https://img.shields.io/badge/Chat-CNCF%20Slack-informational)](https://cloud-native.slack.com/archives/C01ARE2QUTZ)
[![Docs Status](https://readthedocs.org/projects/keylime/badge/?version=latest)](https://keylime.readthedocs.io/en/latest/?badge=latest)
![Keylime](docs/keylime.png?raw=true "Title")
Keylime is an open-source scalable trust system harnessing TPM Technology.
Keylime provides an end-to-end solution for bootstrapping hardware rooted
cryptographic trust for remote machines, the provisioning of encrypted payloads,
and run-time system integrity monitoring. It also provides a flexible
framework for the remote attestation of any given `PCR` (Platform Configuration
Register). Users can create their own customized actions that will trigger when
a machine fails its attested measurements.
Keylime's mission is to make TPM Technology easily accessible to developers and
users alike, without the need for a deep understanding of the lower levels of a
TPM's operations. Amongst many scenarios, it well suited to tenants who need to
remotely attest machines not under their own full control (such as a consumer of
hybrid cloud or a remote Edge / IoT device in an insecure physical tamper prone
location.)
Keylime can be driven with a CLI application and a set of RESTful APIs.
Keylime consists of three main components; The Verifier, Registrar and the
Agent.
* The Verifier continuously verifies the integrity state of the machine that
the agent is running on.
* The Registrar is a database of all agents registered
with Keylime and hosts the public keys of the TPM vendors.
* The Agent is deployed to the remote machine that is to be measured or provisioned
with secrets stored within an encrypted payload released once trust is established.
### Rust based Keylime Agent
The verifier, registrar, and agent are all developed in Python and situated
in this repository `keylime`. The agent was ported to the
[Rust programming language](https://www.rust-lang.org). The code can be found
in the [rust-keylime repository](https://github.com/keylime/rust-keylime).
The decision was made to port the agent to Rust, as rust is a low-level
performant systems language designed with security as a central tenet, by means
of the rust compiler's ownership model.
Starting with the 0.1.0 release of the Rust based Keylime agent, this agent is now the official agent.
| IMPORTANT: The Python version is deprecated and will be removed with the next major version (7.0.0)! |
|------------------------------------------------------------------------------------------------------|
### TPM Support
Keylime supports TPM version *2.0*.
Keylime can be used with a hardware TPM, or a software TPM emulator for
development, testing, or demonstration purposes. However, DO NOT USE Keylime in
production with a TPM emulator! A software TPM emulator does not provide a
hardware root of trust and dramatically lowers the security benefits of using
Keylime.
A hardware TPM should always be used when real secrets and trust is required.
## Table of Contents
* [Installation](#installation)
* [Usage](#usage)
* [Configuring Keylime](#configuring-keylime)
* [Running Keylime](#running-keylime)
* [Provisioning](#provisioning)
* [Request a Feature](#request-a-feature)
* [Security Vulnerability Management Policy](#security-vulnerability-management-policy)
* [Meeting Information](#project-meetings)
* [Contributing: First Timers Support](#contributing--first-timers-support)
* [Testing](#testing)
* [Additional Reading](#additional-reading)
* [Disclaimer](#disclaimer)
## Installation
To install Keylime refer to [the instructions found in the documentation](https://keylime.readthedocs.io/en/latest/installation.html).
## Usage
### Configuring Keylime
Keylime puts its configuration in `/etc/keylime/*.conf` or `/usr/etc/keylime/*.conf`.
It will also take an alternate location for the config in the environment var
`keylime_{VERIFIER,REGISTRAR,TENANT,CA,LOGGING}_CONFIG`.
Those files are documented with comments and should be self-explanatory in most cases.
### Running Keylime
Keylime has three major component services that run: the registrar, verifier, and the agent:
* The *registrar* is a simple HTTPS service that accepts TPM public keys. It then
presents an interface to obtain these public keys for checking quotes.
* The *verifier* is the most important component in Keylime. It does initial and
periodic checks of system integrity and supports bootstrapping a cryptographic key
securely with the agent. The verifier uses mutual TLS for its control interface.
By default, the verifier will create appropriate TLS certificates for itself
in `/var/lib/keylime/cv_ca/`. The registrar and tenant will use this as well. If
you use the generated TLS certificates then all the processes need to run as root
to allow reading of private key files in `/var/lib/keylime/`.
* The *agent* is the target of bootstrapping and integrity measurements. It puts
its stuff into `/var/lib/keylime/`.
### Provisioning
To kick everything off you need to tell Keylime to provision a machine. This can be
done with the Keylime tenant.
#### Provisioning with keylime_tenant
The `keylime_tenant` utility can be used to provision your agent.
As an example, the following command tells Keylime to provision a new agent
at 127.0.0.1 with UUID d432fbb3-d2f1-4a97-9ef7-75bd81c00000 and talk to a
verifier at 127.0.0.1. Finally, it will encrypt a file called `filetosend`
and send it to the agent allowing it to decrypt it only if the configured TPM
policy is satisfied:
`keylime_tenant -c add -t 127.0.0.1 -v 127.0.0.1 -u D432fbb3-d2f1-4a97-9ef7-75bd81c00000 -f filetosend`
To stop Keylime from requesting attestations:
`keylime_tenant -c delete -t 127.0.0.1 -u d432fbb3-d2f1-4a97-9ef7-75bd81c00000`
For additional advanced options for the tenant utility run:
`keylime_tenant -h`
Documentation on how to create runtime and measured boot policies can be found in
the [Keylime User Guide](https://keylime.readthedocs.io/en/latest/user_guide.html).
## Systemd service support
The directory `services/` includes `systemd` service files for the verifier,
agent and registrar.
You can install the services with the following command:
`sudo ./services/installer.sh`
Once installed, you can run and inspect the services `keylime_verifier` and `keylime_registrar` via `systemctl`.
The Rust agent repository also contains a systemd service file for the agent.
## Request a feature
Keylime feature requests are tracked as enhancements in the [enhancements repository](https://github.com/keylime/enhancements)
The enhancement process has been implemented to provide a way to review and
assess the impact(s) of significant changes to Keylime.
## Security Vulnerability Management Policy
If you have found a security vulnerability in Keylime and would like to
report, first of all: thank you.
Please contact us directly at [security@keylime.groups.io](mailto:security@keylime.groups.io)
for any bug that might impact the security of this project. **Do not** use a
Github issue to report any potential security bugs.
## Project Meetings
We meet on the fourth Wednesday each month @ 15:30 GMT to 16:30. Anyone is welcome to join the meeting.
The meeting is normally announced on [CNCF chat (Slack)](https://cloud-native.slack.com/archives/C01ARE2QUTZ)
Meeting agenda are hosted and archived in the [meetings repo](https://github.com/keylime/meetings) as GitHub issues.
## Contributing: First Timers Support
We welcome new contributors to Keylime of any form, including those of you who maybe new to working in an open source project.
So if you are new to open source development, don't worry, there are a myriad of ways you can get involved in our open source project. As a start, try exploring issues with [`good first issue`](https://github.com/keylime/keylime/labels/good%20first%20issue) label.
We understand that the process of creating a Pull Request (PR) can be a barrier for new contributors. These issues are reserved for new contributors like you. If you need any help or advice in making the PR, feel free to jump into our [chat room](https://cloud-native.slack.com/archives/C01ARE2QUTZ) and ask for help there.
Your contribution is our gift to make our project even more robust. Check out [CONTRIBUTING.md](https://github.com/keylime/keylime/blob/master/CONTRIBUTING.md) to find out more about how to contribute to our project.
Keylime uses [Semantic Versioning](https://semver.org/). It is recommended you also read the [RELEASE.md](RELEASE.md)
file to learn more about it and familiarise yourself with simple of examples of using it.
## Testing
Please, see [TESTING.md](TESTING.md) for details.
## Additional Reading
* Executive summary Keylime slides: [docs/old/keylime-elevator-slides.pptx](https://github.com/keylime/keylime/raw/master/docs/old/keylime-elevator-slides.pptx)
* Detailed Keylime Architecture slides: [docs/old/keylime-detailed-architecture-v7.pptx](https://github.com/keylime/keylime/raw/master/docs/old/keylime-detailed-architecture-v7.pptx)
* See ACSAC 2016 paper in doc directory: [docs/old/tci-acm.pdf](https://github.com/keylime/keylime/blob/master/docs/old/tci-acm.pdf)
* and the ACSAC presentation on Keylime: [docs/old/llsrc-keylime-acsac-v6.pptx](https://github.com/keylime/keylime/raw/master/docs/old/llsrc-keylime-acsac-v6.pptx)
* See the HotCloud 2018 paper: [docs/old/hotcloud18.pdf](https://github.com/keylime/keylime/blob/master/docs/old/hotcloud18.pdf)
* Details about Keylime REST API: [docs/old/keylime RESTful API.docx](https://github.com/keylime/keylime/raw/master/docs/old/keylime%20RESTful%20API.docx)
* [Demo files](demo/) - Some pre-packaged demos to show off what Keylime can do.
* [IMA stub service](https://github.com/keylime/rust-keylime/tree/master/keylime-ima-emulator) - Allows you to test IMA and Keylime on a machine without a TPM. Service keeps emulated TPM synchronized with IMA.
#### Errata from the ACSAC Paper
We discovered a typo in Figure 5 of the published ACSAC paper. The final interaction
between the Tenant and Cloud Verifier showed an HMAC of the node's ID using the key
K_e. This should be using K_b. The paper in this repository and the ACSAC presentation
have been updated to correct this typo.
The software that runs on the system with the TPM is now called the Keylime *agent* rather
than the *node*. We have made this change in the documentation and code. The ACSAC paper
will remain as it was published using *node*.
## Disclaimer
DISTRIBUTION STATEMENT A. Approved for public release: distribution unlimited.
This material is based upon work supported by the Assistant Secretary of Defense for
Research and Engineering under Air Force Contract No. FA8721-05-C-0002 and/or
FA8702-15-D-0001. Any opinions, findings, conclusions or recommendations expressed in this
material are those of the author(s) and do not necessarily reflect the views of the
Assistant Secretary of Defense for Research and Engineering.
Keylime's license was changed from BSD Clause-2 to Apache 2.0. The original BSD
Clause-2 licensed code can be found on the [MIT GitHub
organization](https://github.com/mit-ll/MIT-keylime).
Raw data
{
"_id": null,
"home_page": "https://keylime.dev",
"name": "keylime",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "iot,security,cloud,edge,tpm,ima,attestation,virtualization",
"author": "Keylime Community",
"author_email": "keylime@groups.io",
"download_url": "https://files.pythonhosted.org/packages/12/bc/ff7265f33f67fadc526c3ca86f877c993d1b67db05ff943a3074a9330ecd/keylime-7.10.0.tar.gz",
"platform": null,
"description": "**Note: Keylime Python modules do not have a stable API and might change without notice!**\n\n# Keylime\n\n[![Slack CNCF chat](https://img.shields.io/badge/Chat-CNCF%20Slack-informational)](https://cloud-native.slack.com/archives/C01ARE2QUTZ)\n[![Docs Status](https://readthedocs.org/projects/keylime/badge/?version=latest)](https://keylime.readthedocs.io/en/latest/?badge=latest)\n\n![Keylime](docs/keylime.png?raw=true \"Title\")\n\nKeylime is an open-source scalable trust system harnessing TPM Technology.\n\nKeylime provides an end-to-end solution for bootstrapping hardware rooted\ncryptographic trust for remote machines, the provisioning of encrypted payloads, \nand run-time system integrity monitoring. It also provides a flexible\nframework for the remote attestation of any given `PCR` (Platform Configuration\nRegister). Users can create their own customized actions that will trigger when\na machine fails its attested measurements.\n\nKeylime's mission is to make TPM Technology easily accessible to developers and\nusers alike, without the need for a deep understanding of the lower levels of a\nTPM's operations. Amongst many scenarios, it well suited to tenants who need to\nremotely attest machines not under their own full control (such as a consumer of\nhybrid cloud or a remote Edge / IoT device in an insecure physical tamper prone\nlocation.)\n\nKeylime can be driven with a CLI application and a set of RESTful APIs.\n\nKeylime consists of three main components; The Verifier, Registrar and the\nAgent.\n\n* The Verifier continuously verifies the integrity state of the machine that\nthe agent is running on.\n\n* The Registrar is a database of all agents registered\nwith Keylime and hosts the public keys of the TPM vendors.\n\n* The Agent is deployed to the remote machine that is to be measured or provisioned\nwith secrets stored within an encrypted payload released once trust is established.\n\n### Rust based Keylime Agent\n\nThe verifier, registrar, and agent are all developed in Python and situated\nin this repository `keylime`. The agent was ported to the\n[Rust programming language](https://www.rust-lang.org). The code can be found \nin the [rust-keylime repository](https://github.com/keylime/rust-keylime).\n\nThe decision was made to port the agent to Rust, as rust is a low-level\nperformant systems language designed with security as a central tenet, by means\nof the rust compiler's ownership model.\n\nStarting with the 0.1.0 release of the Rust based Keylime agent, this agent is now the official agent.\n\n| IMPORTANT: The Python version is deprecated and will be removed with the next major version (7.0.0)! |\n|------------------------------------------------------------------------------------------------------|\n\n\n### TPM Support\n\nKeylime supports TPM version *2.0*.\n\nKeylime can be used with a hardware TPM, or a software TPM emulator for\ndevelopment, testing, or demonstration purposes. However, DO NOT USE Keylime in\nproduction with a TPM emulator! A software TPM emulator does not provide a\nhardware root of trust and dramatically lowers the security benefits of using\nKeylime.\n\nA hardware TPM should always be used when real secrets and trust is required.\n\n## Table of Contents\n\n* [Installation](#installation)\n* [Usage](#usage)\n * [Configuring Keylime](#configuring-keylime)\n * [Running Keylime](#running-keylime)\n * [Provisioning](#provisioning)\n* [Request a Feature](#request-a-feature)\n* [Security Vulnerability Management Policy](#security-vulnerability-management-policy)\n* [Meeting Information](#project-meetings)\n* [Contributing: First Timers Support](#contributing--first-timers-support)\n* [Testing](#testing)\n* [Additional Reading](#additional-reading)\n* [Disclaimer](#disclaimer)\n\n## Installation\n\nTo install Keylime refer to [the instructions found in the documentation](https://keylime.readthedocs.io/en/latest/installation.html).\n\n\n## Usage\n\n### Configuring Keylime\n\nKeylime puts its configuration in `/etc/keylime/*.conf` or `/usr/etc/keylime/*.conf`.\nIt will also take an alternate location for the config in the environment var \n`keylime_{VERIFIER,REGISTRAR,TENANT,CA,LOGGING}_CONFIG`.\n\nThose files are documented with comments and should be self-explanatory in most cases.\n\n### Running Keylime\n\nKeylime has three major component services that run: the registrar, verifier, and the agent:\n\n* The *registrar* is a simple HTTPS service that accepts TPM public keys. It then\npresents an interface to obtain these public keys for checking quotes.\n\n* The *verifier* is the most important component in Keylime. It does initial and\nperiodic checks of system integrity and supports bootstrapping a cryptographic key\nsecurely with the agent. The verifier uses mutual TLS for its control interface.\n\n By default, the verifier will create appropriate TLS certificates for itself\n in `/var/lib/keylime/cv_ca/`. The registrar and tenant will use this as well. If\n you use the generated TLS certificates then all the processes need to run as root\n to allow reading of private key files in `/var/lib/keylime/`.\n\n* The *agent* is the target of bootstrapping and integrity measurements. It puts\n its stuff into `/var/lib/keylime/`.\n\n\n### Provisioning\n\nTo kick everything off you need to tell Keylime to provision a machine. This can be\ndone with the Keylime tenant.\n\n#### Provisioning with keylime_tenant\n\nThe `keylime_tenant` utility can be used to provision your agent.\n\nAs an example, the following command tells Keylime to provision a new agent\nat 127.0.0.1 with UUID d432fbb3-d2f1-4a97-9ef7-75bd81c00000 and talk to a\nverifier at 127.0.0.1. Finally, it will encrypt a file called `filetosend`\nand send it to the agent allowing it to decrypt it only if the configured TPM\npolicy is satisfied:\n\n`keylime_tenant -c add -t 127.0.0.1 -v 127.0.0.1 -u D432fbb3-d2f1-4a97-9ef7-75bd81c00000 -f filetosend`\n\nTo stop Keylime from requesting attestations:\n\n`keylime_tenant -c delete -t 127.0.0.1 -u d432fbb3-d2f1-4a97-9ef7-75bd81c00000`\n\nFor additional advanced options for the tenant utility run:\n\n`keylime_tenant -h`\n\nDocumentation on how to create runtime and measured boot policies can be found in\nthe [Keylime User Guide](https://keylime.readthedocs.io/en/latest/user_guide.html).\n\n## Systemd service support\n\nThe directory `services/` includes `systemd` service files for the verifier,\nagent and registrar.\n\nYou can install the services with the following command:\n\n`sudo ./services/installer.sh`\n\nOnce installed, you can run and inspect the services `keylime_verifier` and `keylime_registrar` via `systemctl`.\nThe Rust agent repository also contains a systemd service file for the agent.\n\n## Request a feature\n\nKeylime feature requests are tracked as enhancements in the [enhancements repository](https://github.com/keylime/enhancements)\n\nThe enhancement process has been implemented to provide a way to review and\nassess the impact(s) of significant changes to Keylime.\n\n## Security Vulnerability Management Policy\n\nIf you have found a security vulnerability in Keylime and would like to\nreport, first of all: thank you.\n\nPlease contact us directly at [security@keylime.groups.io](mailto:security@keylime.groups.io)\nfor any bug that might impact the security of this project. **Do not** use a\nGithub issue to report any potential security bugs.\n\n\n## Project Meetings\n\nWe meet on the fourth Wednesday each month @ 15:30 GMT to 16:30. Anyone is welcome to join the meeting.\n\nThe meeting is normally announced on [CNCF chat (Slack)](https://cloud-native.slack.com/archives/C01ARE2QUTZ)\n\nMeeting agenda are hosted and archived in the [meetings repo](https://github.com/keylime/meetings) as GitHub issues.\n\n## Contributing: First Timers Support\n\nWe welcome new contributors to Keylime of any form, including those of you who maybe new to working in an open source project.\n\nSo if you are new to open source development, don't worry, there are a myriad of ways you can get involved in our open source project. As a start, try exploring issues with [`good first issue`](https://github.com/keylime/keylime/labels/good%20first%20issue) label.\nWe understand that the process of creating a Pull Request (PR) can be a barrier for new contributors. These issues are reserved for new contributors like you. If you need any help or advice in making the PR, feel free to jump into our [chat room](https://cloud-native.slack.com/archives/C01ARE2QUTZ) and ask for help there.\n\nYour contribution is our gift to make our project even more robust. Check out [CONTRIBUTING.md](https://github.com/keylime/keylime/blob/master/CONTRIBUTING.md) to find out more about how to contribute to our project.\n\nKeylime uses [Semantic Versioning](https://semver.org/). It is recommended you also read the [RELEASE.md](RELEASE.md)\nfile to learn more about it and familiarise yourself with simple of examples of using it.\n\n## Testing\n\nPlease, see [TESTING.md](TESTING.md) for details.\n\n## Additional Reading\n\n* Executive summary Keylime slides: [docs/old/keylime-elevator-slides.pptx](https://github.com/keylime/keylime/raw/master/docs/old/keylime-elevator-slides.pptx)\n* Detailed Keylime Architecture slides: [docs/old/keylime-detailed-architecture-v7.pptx](https://github.com/keylime/keylime/raw/master/docs/old/keylime-detailed-architecture-v7.pptx)\n* See ACSAC 2016 paper in doc directory: [docs/old/tci-acm.pdf](https://github.com/keylime/keylime/blob/master/docs/old/tci-acm.pdf)\n * and the ACSAC presentation on Keylime: [docs/old/llsrc-keylime-acsac-v6.pptx](https://github.com/keylime/keylime/raw/master/docs/old/llsrc-keylime-acsac-v6.pptx)\n* See the HotCloud 2018 paper: [docs/old/hotcloud18.pdf](https://github.com/keylime/keylime/blob/master/docs/old/hotcloud18.pdf)\n* Details about Keylime REST API: [docs/old/keylime RESTful API.docx](https://github.com/keylime/keylime/raw/master/docs/old/keylime%20RESTful%20API.docx)\n* [Demo files](demo/) - Some pre-packaged demos to show off what Keylime can do.\n* [IMA stub service](https://github.com/keylime/rust-keylime/tree/master/keylime-ima-emulator) - Allows you to test IMA and Keylime on a machine without a TPM. Service keeps emulated TPM synchronized with IMA.\n\n#### Errata from the ACSAC Paper\n\nWe discovered a typo in Figure 5 of the published ACSAC paper. The final interaction\nbetween the Tenant and Cloud Verifier showed an HMAC of the node's ID using the key\nK_e. This should be using K_b. The paper in this repository and the ACSAC presentation\nhave been updated to correct this typo.\n\nThe software that runs on the system with the TPM is now called the Keylime *agent* rather\nthan the *node*. We have made this change in the documentation and code. The ACSAC paper\nwill remain as it was published using *node*.\n\n## Disclaimer\n\nDISTRIBUTION STATEMENT A. Approved for public release: distribution unlimited.\n\nThis material is based upon work supported by the Assistant Secretary of Defense for\nResearch and Engineering under Air Force Contract No. FA8721-05-C-0002 and/or\nFA8702-15-D-0001. Any opinions, findings, conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the views of the\nAssistant Secretary of Defense for Research and Engineering.\n\nKeylime's license was changed from BSD Clause-2 to Apache 2.0. The original BSD\nClause-2 licensed code can be found on the [MIT GitHub\norganization](https://github.com/mit-ll/MIT-keylime).\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "TPM-based key bootstrapping and system integrity measurement system for cloud",
"version": "7.10.0",
"project_urls": {
"Documentation": "https://keylime.readthedocs.io/en/latest/",
"Homepage": "https://keylime.dev",
"Source": "https://github.com/keylime/keylime"
},
"split_keywords": [
"iot",
"security",
"cloud",
"edge",
"tpm",
"ima",
"attestation",
"virtualization"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5bafcc7b1364ee9d4f61a018ea47c389ca18da75efe99891cf072b3713fbede2",
"md5": "f4d6a10cd7a0c35a33bf98821b27509e",
"sha256": "86feac939238a35b385b783769d6d3551b684983ef7fd36215f0982e12eb9a07"
},
"downloads": -1,
"filename": "keylime-7.10.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f4d6a10cd7a0c35a33bf98821b27509e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 252927,
"upload_time": "2024-03-13T20:12:09",
"upload_time_iso_8601": "2024-03-13T20:12:09.211380Z",
"url": "https://files.pythonhosted.org/packages/5b/af/cc7b1364ee9d4f61a018ea47c389ca18da75efe99891cf072b3713fbede2/keylime-7.10.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "12bcff7265f33f67fadc526c3ca86f877c993d1b67db05ff943a3074a9330ecd",
"md5": "c0bde1c0ca812b9946f05e73b6f4dc2f",
"sha256": "be74990458f95980cc52065058669293f0dfe6a9f9d6d56db5997939d713275b"
},
"downloads": -1,
"filename": "keylime-7.10.0.tar.gz",
"has_sig": false,
"md5_digest": "c0bde1c0ca812b9946f05e73b6f4dc2f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 278627,
"upload_time": "2024-03-13T20:12:11",
"upload_time_iso_8601": "2024-03-13T20:12:11.565639Z",
"url": "https://files.pythonhosted.org/packages/12/bc/ff7265f33f67fadc526c3ca86f877c993d1b67db05ff943a3074a9330ecd/keylime-7.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-13 20:12:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "keylime",
"github_project": "keylime",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "cryptography",
"specs": [
[
">=",
"3.3.2"
]
]
},
{
"name": "tornado",
"specs": [
[
">=",
"5.0.2"
]
]
},
{
"name": "pyzmq",
"specs": [
[
">=",
"14.4"
]
]
},
{
"name": "pyyaml",
"specs": [
[
">=",
"3.11"
]
]
},
{
"name": "requests",
"specs": [
[
">=",
"2.6"
]
]
},
{
"name": "sqlalchemy",
"specs": [
[
">=",
"1.3.12"
]
]
},
{
"name": "alembic",
"specs": [
[
">=",
"1.1.0"
]
]
},
{
"name": "packaging",
"specs": [
[
">=",
"20.0"
]
]
},
{
"name": "psutil",
"specs": [
[
">=",
"5.4.2"
]
]
},
{
"name": "lark",
"specs": [
[
">=",
"1.0.0"
]
]
},
{
"name": "pyasn1",
"specs": [
[
">=",
"0.4.2"
]
]
},
{
"name": "pyasn1-modules",
"specs": [
[
">=",
"0.2.5"
]
]
},
{
"name": "jinja2",
"specs": [
[
">=",
"3.0.0"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
">=",
"4.0.1"
]
]
},
{
"name": "jsonschema",
"specs": [
[
">=",
"2.6.0"
]
]
}
],
"tox": true,
"lcname": "keylime"
}