Name | elf JSON |
Version |
0.1.0
JSON |
| download |
home_page | None |
Summary | A Python library for integrating and analyzing vulnerability data to enhance vulnerability management and prioritization. |
upload_time | 2024-12-24 10:23:47 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | MIT License Copyright (c) 2024 TypeError Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
keywords |
cisa kev
first epss
nist nvd
cybersecurity
vulnerability management
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<div align="center">
# ELF (Exposure Lookup Framework)
**Bringing together vulnerability intelligence from multiple sources into a single, harmonious API.**
[![PyPI Version](https://img.shields.io/pypi/v/elf.svg)](https://pypi.org/project/elf/)
[![Python Versions](https://img.shields.io/pypi/pyversions/elf.svg)](https://pypi.org/project/elf/)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![Downloads](https://pepy.tech/badge/elf)](https://pepy.tech/project/elf)
[![License](https://img.shields.io/pypi/l/elf.svg)](https://github.com/TypeError/elf/blob/main/LICENSE)
[![GitHub Stars](https://img.shields.io/github/stars/TypeError/elf.svg)](https://github.com/TypeError/elf/stargazers)
</div>
---
**ELF** (Exposure Lookup Framework) is a modern Python library that streamlines the **aggregation**, **parsing**, and **analysis** of vulnerability data from multiple trusted sources, including:
- **[CISA KEV](#cisa-kev)** – Authoritative catalog of actively exploited vulnerabilities
- **[FIRST EPSS](#first-epss)** – Predictive scoring system to gauge exploitation likelihood
- **[NIST NVD](#nist-nvd)** – Comprehensive CVE database maintained by the National Institute of Standards and Technology
**Supported Python Versions**: 3.10 and above
ELF helps you:
- Effortlessly query and consolidate vulnerability information
- Apply advanced filters, searches, and scoring systems
- Validate structured data using Pydantic models
- Integrate insights into dashboards, CI/CD pipelines, and data-driven security workflows
All with a clean, Pythonic, **async-first** interface. If you’re new to asynchronous programming in Python, check out the [asyncio documentation](https://docs.python.org/3/library/asyncio.html).
---
## Table of Contents
- [Features](#features)
- [Installation](#installation)
- [Supported Data Sources](#supported-data-sources)
- [CISA KEV](#cisa-kev)
- [FIRST EPSS](#first-epss)
- [NIST NVD](#nist-nvd)
- [Usage](#usage)
- [CISA KEV Examples](#cisa-kev-examples)
- [FIRST EPSS Examples](#first-epss-examples)
- [NIST NVD Examples](#nist-nvd-examples)
- [Attribution and Usage Guidelines](#attribution-and-usage-guidelines)
- [Special Thanks to Solos](#special-thanks-to-solos)
- [Contributing](#contributing)
- [License](#license)
---
## Features
- ✅ **Query vulnerability data from multiple sources**
- **CISA KEV**: Known Exploited Vulnerabilities catalog
- **FIRST EPSS**: Exploit Prediction Scoring System for prioritization
- **NIST NVD**: National Vulnerability Database for comprehensive CVE details
- 🔍 **Advanced filtering and searching**
- Filter by date, CVE IDs, scores, severity, and more
- 🛠️ **Pydantic-based data validation**
- Robust validation for structured data handling
- 📈 **Pagination and bulk data fetching**
- Efficiently process large datasets
- 🚀 **Integration-ready**
- Seamlessly integrate into dashboards, CI/CD pipelines, or analytics workflows
---
## Installation
### Using `pip`
```bash
pip install elf
```
### Using `uv`
If you use [uv](https://docs.astral.sh/uv/) for package management:
```bash
uv add elf
```
---
## Supported Data Sources
### CISA KEV
The [CISA Known Exploited Vulnerabilities (KEV)](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) catalog provides an authoritative list of vulnerabilities actively exploited in the wild. ELF enables seamless programmatic access to these datasets.
### FIRST EPSS
The [Exploit Prediction Scoring System (EPSS)](https://www.first.org/epss) predicts the likelihood of a CVE being exploited. ELF offers interfaces for JSON and CSV retrievals, along with time-series data.
### NIST NVD
The [National Vulnerability Database (NVD)](https://nvd.nist.gov/) from NIST is among the most comprehensive CVE data sources. ELF integrates with NVD for CVE details, search functionality, and change history.
---
## Usage
### CISA KEV Examples
```python
import asyncio
from elf import CisaKevApiClient
# Fetch all vulnerabilities in JSON format
async def fetch_all_vulnerabilities():
async with CisaKevApiClient() as client:
kev_data = await client.get_kev_json()
print(f"Catalog Title: {kev_data.catalog_version}")
print(f"Total Vulnerabilities: {kev_data.count}")
# Fetch vulnerabilities as raw CSV
async def fetch_vulnerabilities_csv():
async with CisaKevApiClient() as client:
kev_csv = await client.get_kev_csv()
with open("kev_data.csv", "wb") as file:
file.write(kev_csv)
print("CSV data saved as kev_data.csv")
# Fetch paginated data
async def fetch_paginated_vulnerabilities():
async with CisaKevApiClient() as client:
async for chunk in client.get_kev_json_paginated(chunk_size=500):
print(f"Fetched {len(chunk.vulnerabilities)} vulnerabilities in this chunk.")
# Run examples
async def main():
await fetch_all_vulnerabilities()
await fetch_vulnerabilities_csv()
await fetch_paginated_vulnerabilities()
asyncio.run(main())
```
---
### FIRST EPSS Examples
```python
import asyncio
from elf import FirstEpssApiClient, FirstEpssOrderOption
# Retrieve EPSS scores for specific CVEs
async def fetch_epss_scores():
async with FirstEpssApiClient() as client:
scores = await client.get_scores_json(["CVE-2023-1234", "CVE-2023-5678"])
for score in scores.data:
print(f"CVE: {score.cve}, Score: {score.epss}, Percentile: {score.percentile}")
# Download full EPSS CSV for a specific date
async def download_full_csv():
async with FirstEpssApiClient() as client:
csv_data = await client.download_and_decompress_full_csv_for_date("2023-12-01")
with open("epss_data.csv", "w") as file:
file.write(csv_data)
print("Decompressed CSV saved as epss_data.csv")
# Fetch the highest EPSS scores
async def fetch_highest_epss_scores():
async with FirstEpssApiClient() as client:
response = await client.get_cves(order=FirstEpssOrderOption.EPSS_DESC, limit=5)
print("Top 5 CVEs with the highest EPSS scores:")
for item in response.data:
print(f"CVE: {item.cve}, EPSS: {item.epss}, Percentile: {item.percentile}")
# Paginate EPSS data
async def fetch_paginated_epss_scores():
async with FirstEpssApiClient() as client:
async for page in client.get_scores_paginated_json(limit_per_request=100, max_records=500):
for record in page.data:
print(f"CVE: {record.cve}, Score: {record.epss}")
# Run examples
async def main():
await fetch_epss_scores()
await download_full_csv()
await fetch_highest_epss_scores()
await fetch_paginated_epss_scores()
asyncio.run(main())
```
---
### NIST NVD Examples
```python
import asyncio
import os
from datetime import datetime
from elf.core.exceptions import ApiClientError
from elf.sources.nist_nvd.client import NistNvdApiClient
NIST_NVD_API_KEY = os.getenv("NIST_NVD_API_KEY")
# Fetch details for a specific CVE
async def fetch_cve_details():
async with NistNvdApiClient(api_key=NIST_NVD_API_KEY) as client:
cve_data = await client.get_cve("CVE-2021-34527")
print(f"CVE ID: {cve_data.vulnerabilities[0].cve.id}")
print(f"Description: {cve_data.vulnerabilities[0].cve.descriptions[0].value}")
# Search CVEs with filters
async def search_cves():
try:
async with NistNvdApiClient(api_key=NIST_NVD_API_KEY) as client:
async for page in client.search_cves(
cpe_name="cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*",
cvss_v3_severity="HIGH",
pub_start_date=datetime(2016, 3, 1),
pub_end_date=datetime(2016, 3, 12),
):
if not page.vulnerabilities:
print("No vulnerabilities found for this query.")
return
for vuln in page.vulnerabilities:
print(f"CVE ID: {vuln.cve.id}, Published: {vuln.cve.published}")
except ApiClientError as e:
print(f"Error during CVE search: {e}")
# Retrieve CVE change history
async def fetch_cve_history():
try:
async with NistNvdApiClient(api_key=NIST_NVD_API_KEY) as client:
async for page in client.get_cve_history_paginated(
cve_id="CVE-2021-34527",
change_start_date=datetime(2023, 1, 1),
change_end_date=datetime(2023, 6, 1),
):
if not page.cve_changes:
print("No changes found for this CVE.")
return
print(page.cve_changes)
except ApiClientError as e:
print(f"Error during CVE history fetch: {e}")
# Run examples
async def main():
await fetch_cve_details()
await search_cves()
await fetch_cve_history()
asyncio.run(main())
```
---
## Attribution and Usage Guidelines
### CISA KEV
Data provided under the [Creative Commons 0 1.0 License (CC0)](https://www.cisa.gov/sites/default/files/licenses/kev/license.txt).
### FIRST EPSS
Usage must adhere to the [FIRST EPSS Usage Guidelines](https://www.first.org/epss/user-guide).
### NIST NVD
Data usage is governed by the [NIST Terms of Use](https://nvd.nist.gov/developers/terms-of-use).
---
## Special Thanks to Solos
Special thanks to [Solos](https://github.com/solos) for donating the `elf` package name on PyPI.
---
## Contributing
Contributions are welcome! Please [open an issue](https://github.com/TypeError/elf/issues) or submit a [pull request](https://github.com/TypeError/elf/pulls) for new features or bug fixes.
---
## License
This project is licensed under the [MIT License](LICENSE).
Raw data
{
"_id": null,
"home_page": null,
"name": "elf",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "CISA KEV, FIRST EPSS, NIST NVD, cybersecurity, vulnerability management",
"author": null,
"author_email": "cak <cak@typeerror.com>",
"download_url": "https://files.pythonhosted.org/packages/c0/01/3ab5666c331460e90b4fc32d8af47d4b6c7f57865b74d675fc3dd88a3c41/elf-0.1.0.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n\n# ELF (Exposure Lookup Framework)\n\n**Bringing together vulnerability intelligence from multiple sources into a single, harmonious API.**\n\n[![PyPI Version](https://img.shields.io/pypi/v/elf.svg)](https://pypi.org/project/elf/)\n[![Python Versions](https://img.shields.io/pypi/pyversions/elf.svg)](https://pypi.org/project/elf/)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Downloads](https://pepy.tech/badge/elf)](https://pepy.tech/project/elf)\n[![License](https://img.shields.io/pypi/l/elf.svg)](https://github.com/TypeError/elf/blob/main/LICENSE)\n[![GitHub Stars](https://img.shields.io/github/stars/TypeError/elf.svg)](https://github.com/TypeError/elf/stargazers)\n\n</div>\n\n---\n\n**ELF** (Exposure Lookup Framework) is a modern Python library that streamlines the **aggregation**, **parsing**, and **analysis** of vulnerability data from multiple trusted sources, including:\n\n- **[CISA KEV](#cisa-kev)** \u2013 Authoritative catalog of actively exploited vulnerabilities\n- **[FIRST EPSS](#first-epss)** \u2013 Predictive scoring system to gauge exploitation likelihood\n- **[NIST NVD](#nist-nvd)** \u2013 Comprehensive CVE database maintained by the National Institute of Standards and Technology\n\n**Supported Python Versions**: 3.10 and above\n\nELF helps you:\n\n- Effortlessly query and consolidate vulnerability information\n- Apply advanced filters, searches, and scoring systems\n- Validate structured data using Pydantic models\n- Integrate insights into dashboards, CI/CD pipelines, and data-driven security workflows\n\nAll with a clean, Pythonic, **async-first** interface. If you\u2019re new to asynchronous programming in Python, check out the [asyncio documentation](https://docs.python.org/3/library/asyncio.html).\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Supported Data Sources](#supported-data-sources)\n - [CISA KEV](#cisa-kev)\n - [FIRST EPSS](#first-epss)\n - [NIST NVD](#nist-nvd)\n- [Usage](#usage)\n - [CISA KEV Examples](#cisa-kev-examples)\n - [FIRST EPSS Examples](#first-epss-examples)\n - [NIST NVD Examples](#nist-nvd-examples)\n- [Attribution and Usage Guidelines](#attribution-and-usage-guidelines)\n- [Special Thanks to Solos](#special-thanks-to-solos)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Features\n\n- \u2705 **Query vulnerability data from multiple sources**\n\n - **CISA KEV**: Known Exploited Vulnerabilities catalog\n - **FIRST EPSS**: Exploit Prediction Scoring System for prioritization\n - **NIST NVD**: National Vulnerability Database for comprehensive CVE details\n\n- \ud83d\udd0d **Advanced filtering and searching**\n\n - Filter by date, CVE IDs, scores, severity, and more\n\n- \ud83d\udee0\ufe0f **Pydantic-based data validation**\n\n - Robust validation for structured data handling\n\n- \ud83d\udcc8 **Pagination and bulk data fetching**\n\n - Efficiently process large datasets\n\n- \ud83d\ude80 **Integration-ready**\n - Seamlessly integrate into dashboards, CI/CD pipelines, or analytics workflows\n\n---\n\n## Installation\n\n### Using `pip`\n\n```bash\npip install elf\n```\n\n### Using `uv`\n\nIf you use [uv](https://docs.astral.sh/uv/) for package management:\n\n```bash\nuv add elf\n```\n\n---\n\n## Supported Data Sources\n\n### CISA KEV\n\nThe [CISA Known Exploited Vulnerabilities (KEV)](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) catalog provides an authoritative list of vulnerabilities actively exploited in the wild. ELF enables seamless programmatic access to these datasets.\n\n### FIRST EPSS\n\nThe [Exploit Prediction Scoring System (EPSS)](https://www.first.org/epss) predicts the likelihood of a CVE being exploited. ELF offers interfaces for JSON and CSV retrievals, along with time-series data.\n\n### NIST NVD\n\nThe [National Vulnerability Database (NVD)](https://nvd.nist.gov/) from NIST is among the most comprehensive CVE data sources. ELF integrates with NVD for CVE details, search functionality, and change history.\n\n---\n\n## Usage\n\n### CISA KEV Examples\n\n```python\nimport asyncio\nfrom elf import CisaKevApiClient\n\n# Fetch all vulnerabilities in JSON format\nasync def fetch_all_vulnerabilities():\n async with CisaKevApiClient() as client:\n kev_data = await client.get_kev_json()\n print(f\"Catalog Title: {kev_data.catalog_version}\")\n print(f\"Total Vulnerabilities: {kev_data.count}\")\n\n# Fetch vulnerabilities as raw CSV\nasync def fetch_vulnerabilities_csv():\n async with CisaKevApiClient() as client:\n kev_csv = await client.get_kev_csv()\n with open(\"kev_data.csv\", \"wb\") as file:\n file.write(kev_csv)\n print(\"CSV data saved as kev_data.csv\")\n\n# Fetch paginated data\nasync def fetch_paginated_vulnerabilities():\n async with CisaKevApiClient() as client:\n async for chunk in client.get_kev_json_paginated(chunk_size=500):\n print(f\"Fetched {len(chunk.vulnerabilities)} vulnerabilities in this chunk.\")\n\n# Run examples\nasync def main():\n await fetch_all_vulnerabilities()\n await fetch_vulnerabilities_csv()\n await fetch_paginated_vulnerabilities()\n\nasyncio.run(main())\n```\n\n---\n\n### FIRST EPSS Examples\n\n```python\nimport asyncio\nfrom elf import FirstEpssApiClient, FirstEpssOrderOption\n\n# Retrieve EPSS scores for specific CVEs\nasync def fetch_epss_scores():\n async with FirstEpssApiClient() as client:\n scores = await client.get_scores_json([\"CVE-2023-1234\", \"CVE-2023-5678\"])\n for score in scores.data:\n print(f\"CVE: {score.cve}, Score: {score.epss}, Percentile: {score.percentile}\")\n\n# Download full EPSS CSV for a specific date\nasync def download_full_csv():\n async with FirstEpssApiClient() as client:\n csv_data = await client.download_and_decompress_full_csv_for_date(\"2023-12-01\")\n with open(\"epss_data.csv\", \"w\") as file:\n file.write(csv_data)\n print(\"Decompressed CSV saved as epss_data.csv\")\n\n# Fetch the highest EPSS scores\nasync def fetch_highest_epss_scores():\n async with FirstEpssApiClient() as client:\n response = await client.get_cves(order=FirstEpssOrderOption.EPSS_DESC, limit=5)\n print(\"Top 5 CVEs with the highest EPSS scores:\")\n for item in response.data:\n print(f\"CVE: {item.cve}, EPSS: {item.epss}, Percentile: {item.percentile}\")\n\n# Paginate EPSS data\nasync def fetch_paginated_epss_scores():\n async with FirstEpssApiClient() as client:\n async for page in client.get_scores_paginated_json(limit_per_request=100, max_records=500):\n for record in page.data:\n print(f\"CVE: {record.cve}, Score: {record.epss}\")\n\n# Run examples\nasync def main():\n await fetch_epss_scores()\n await download_full_csv()\n await fetch_highest_epss_scores()\n await fetch_paginated_epss_scores()\n\nasyncio.run(main())\n```\n\n---\n\n### NIST NVD Examples\n\n```python\nimport asyncio\nimport os\nfrom datetime import datetime\n\nfrom elf.core.exceptions import ApiClientError\nfrom elf.sources.nist_nvd.client import NistNvdApiClient\n\nNIST_NVD_API_KEY = os.getenv(\"NIST_NVD_API_KEY\")\n\n\n# Fetch details for a specific CVE\nasync def fetch_cve_details():\n async with NistNvdApiClient(api_key=NIST_NVD_API_KEY) as client:\n cve_data = await client.get_cve(\"CVE-2021-34527\")\n print(f\"CVE ID: {cve_data.vulnerabilities[0].cve.id}\")\n print(f\"Description: {cve_data.vulnerabilities[0].cve.descriptions[0].value}\")\n\n\n# Search CVEs with filters\nasync def search_cves():\n try:\n async with NistNvdApiClient(api_key=NIST_NVD_API_KEY) as client:\n async for page in client.search_cves(\n cpe_name=\"cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*\",\n cvss_v3_severity=\"HIGH\",\n pub_start_date=datetime(2016, 3, 1),\n pub_end_date=datetime(2016, 3, 12),\n ):\n if not page.vulnerabilities:\n print(\"No vulnerabilities found for this query.\")\n return\n for vuln in page.vulnerabilities:\n print(f\"CVE ID: {vuln.cve.id}, Published: {vuln.cve.published}\")\n except ApiClientError as e:\n print(f\"Error during CVE search: {e}\")\n\n\n# Retrieve CVE change history\nasync def fetch_cve_history():\n try:\n async with NistNvdApiClient(api_key=NIST_NVD_API_KEY) as client:\n async for page in client.get_cve_history_paginated(\n cve_id=\"CVE-2021-34527\",\n change_start_date=datetime(2023, 1, 1),\n change_end_date=datetime(2023, 6, 1),\n ):\n if not page.cve_changes:\n print(\"No changes found for this CVE.\")\n return\n print(page.cve_changes)\n except ApiClientError as e:\n print(f\"Error during CVE history fetch: {e}\")\n\n\n# Run examples\nasync def main():\n await fetch_cve_details()\n await search_cves()\n await fetch_cve_history()\n\n\nasyncio.run(main())\n```\n\n---\n\n## Attribution and Usage Guidelines\n\n### CISA KEV\n\nData provided under the [Creative Commons 0 1.0 License (CC0)](https://www.cisa.gov/sites/default/files/licenses/kev/license.txt).\n\n### FIRST EPSS\n\nUsage must adhere to the [FIRST EPSS Usage Guidelines](https://www.first.org/epss/user-guide).\n\n### NIST NVD\n\nData usage is governed by the [NIST Terms of Use](https://nvd.nist.gov/developers/terms-of-use).\n\n---\n\n## Special Thanks to Solos\n\nSpecial thanks to [Solos](https://github.com/solos) for donating the `elf` package name on PyPI.\n\n---\n\n## Contributing\n\nContributions are welcome! Please [open an issue](https://github.com/TypeError/elf/issues) or submit a [pull request](https://github.com/TypeError/elf/pulls) for new features or bug fixes.\n\n---\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n",
"bugtrack_url": null,
"license": "MIT License Copyright (c) 2024 TypeError Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
"summary": "A Python library for integrating and analyzing vulnerability data to enhance vulnerability management and prioritization.",
"version": "0.1.0",
"project_urls": {
"Documentation": "https://github.com/TypeError/elf/",
"Homepage": "https://github.com/TypeError/elf",
"Issue-Tracker": "https://github.com/TypeError/elf/issues",
"Repository": "https://github.com/TypeError/elf"
},
"split_keywords": [
"cisa kev",
" first epss",
" nist nvd",
" cybersecurity",
" vulnerability management"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "65bce7af26ddcda9bed4fc07ae9c236efb794d0bb4059b5d84180ccd001aac6f",
"md5": "318370266ad08251b9b8ed2ffefbde4e",
"sha256": "525ee9439a292a9ccd6f2bc5c09186769c4ee5b7046f59d44d420a7fd0c7b222"
},
"downloads": -1,
"filename": "elf-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "318370266ad08251b9b8ed2ffefbde4e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 40309,
"upload_time": "2024-12-24T10:23:44",
"upload_time_iso_8601": "2024-12-24T10:23:44.862756Z",
"url": "https://files.pythonhosted.org/packages/65/bc/e7af26ddcda9bed4fc07ae9c236efb794d0bb4059b5d84180ccd001aac6f/elf-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c0013ab5666c331460e90b4fc32d8af47d4b6c7f57865b74d675fc3dd88a3c41",
"md5": "61acb510c8693d6057c49529e83eda7e",
"sha256": "7f3d58ec71aa81e50681ad279948fef41c3dcbdcf7cdf83c69d8db7732041b54"
},
"downloads": -1,
"filename": "elf-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "61acb510c8693d6057c49529e83eda7e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 33638,
"upload_time": "2024-12-24T10:23:47",
"upload_time_iso_8601": "2024-12-24T10:23:47.097286Z",
"url": "https://files.pythonhosted.org/packages/c0/01/3ab5666c331460e90b4fc32d8af47d4b6c7f57865b74d675fc3dd88a3c41/elf-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-24 10:23:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "TypeError",
"github_project": "elf",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "elf"
}