{"id":43496701,"url":"https://github.com/quarkslab/crypto-condor","last_synced_at":"2026-02-03T10:38:44.282Z","repository":{"id":242568097,"uuid":"791283664","full_name":"quarkslab/crypto-condor","owner":"quarkslab","description":"crypto-condor is a Python library for compliance testing of implementations of cryptographic primitives","archived":false,"fork":false,"pushed_at":"2025-10-06T12:14:15.000Z","size":251627,"stargazers_count":30,"open_issues_count":3,"forks_count":6,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-10-18T02:56:59.452Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://quarkslab.github.io/crypto-condor/latest/index.html","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quarkslab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-04-24T12:42:48.000Z","updated_at":"2025-10-06T12:14:19.000Z","dependencies_parsed_at":"2025-09-29T14:34:42.514Z","dependency_job_id":null,"html_url":"https://github.com/quarkslab/crypto-condor","commit_stats":null,"previous_names":["quarkslab/crypto-condor"],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/quarkslab/crypto-condor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkslab%2Fcrypto-condor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkslab%2Fcrypto-condor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkslab%2Fcrypto-condor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkslab%2Fcrypto-condor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quarkslab","download_url":"https://codeload.github.com/quarkslab/crypto-condor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkslab%2Fcrypto-condor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29041869,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-03T10:38:43.645Z","updated_at":"2026-02-03T10:38:44.273Z","avatar_url":"https://github.com/quarkslab.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# crypto-condor\n\n\u003cimg align=\"right\" src=\"crypto-condor.png\" width=\"250\" alt=\"The logo of crypto-condor, depicting a condor holding a key.\"\u003e\n\ncrypto-condor is a tool for compliance testing of cryptographic primitives, in\nthe form of a Python library and CLI. It is complemented by an extensive\ndocumentation, featuring guides on the primitives supported.\n\n**Q: What is a cryptographic primitive?**\n\n**A**: A low-level cryptographic algorithm, generally used to build a protocol.\nFor example, AES is an encryption primitive that is used in the TLS protocol,\nwhich is the protocol your browser used to securely get this page.\n\n**Q: What is compliance testing?**\n\n**A**: Algorithms are described in specifications, such as FIPS publications or\nRFCs. When implementing these algorithms, we want to ensure that they comply\nwith the specification, i.e. the implementation behaves as the algorithm\ndescribed.\n\n**Q: How to test for compliance then?**\n\n**A**: We can use *test vectors*, which are sets of inputs and their\ncorresponding outputs. For example, encrypting with AES is a deterministic\noperation: for a given key and message, AES will always return the same\nciphertext. So we can choose some input values, run the algorithm, and record\nthe value returned. All implementations of AES are then expected to return the\n*same* ciphertext for this given key and message. If it does not, then it is not\ncompliant.\n\n**Q: And so, what does crypto-condor do?**\n\n**A**: crypto-condor provides both a nice Python API and a wrapper system to\ntest implementations with sets of test vectors that come from sources such as\nthe [NIST\nCAVP](https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program).\n\nThe Python API exposes test functions that take an implementation as input, in\nthe form of a Python function or class, passes the inputs defined by the test\nvectors to that implementation, and checks if the outputs are those defined by\nthe vectors.\n\nThe wrappers are small programs that already define the function prototype. The\nuser calls the implementation to test inside this function, and crypto-condor\nruns it with the test vectors as with the Python API.\n\nAnd it comes with a documentation, wrapper examples, and guides on supported\nprimitives.\n\n## Requirements\n\ncrypto-condor requires **Python 3.10+**. For information, it is developed using\nPython 3.13 on Fedora 41.\n\nThe implementations of **AES, ML-KEM, ML-DSA, and TestU01** are written in C and\nare compiled directly on the user's machine. As such, they require a C compiler\n(by default GCC on Linux and Clang on MacOS) and GNU Make. These primitives are\nonly compiled when required, and not when installing the package:\n\n- AES: when testing the output of an implementation using classic modes of\noperation (not CCM or GCM).\n- ML-KEM: when testing the output of an implementation **or** when using test\n  vectors on the `encapsulate` function.\n- ML-DSA: when testing the output of an implementation.\n- TestU01: when used to test a file.\n\nThe compiler can be chosen by setting the `CC` environment variable on Linux. On\nMacOS, only Clang has been confirmed to work.\n\n## Installation\n\nIt is available on PyPI:\n\n```bash\npython -m pip install crypto-condor\n```\n\nAn up-to-date list of the requirements can be found in the\n`[tool.poetry.dependencies]` section of the\n[pyproject.toml](https://github.com/quarkslab/crypto-condor/blob/main/pyproject.toml)\nfile.\n\n## Usage\n\n\u003e The documentation is available at\n\u003e \u003chttps://quarkslab.github.io/crypto-condor/latest/index.html\u003e.\n\nOnce installed, the CLI is available as `crypto-condor-cli`. It is structured in\ncommands, similar to Git. Run it without arguments or with `--help` to display\nthe help message detailing the available subcommands. You can check [the\ndocumentation](https://quarkslab.github.io/crypto-condor/latest/index.html) for\na quick rundown of all the commands.\n\nAs for the Python library, it is available as `crypto_condor` (note the\nunderscore). Each primitive has its own module under `primitives`, e.g.\n`crypto_condor.primitives.AES`. It contains the functions used to test\nimplementations.\n\n## Development\n\nSee\n[CONTRIBUTING](https://github.com/quarkslab/crypto-condor/blob/main/CONTRIBUTING.md).\n\n## Changelog and versioning\n\nA [changelog](https://github.com/quarkslab/crypto-condor/blob/main/CHANGELOG.md)\nis available. This projects adheres to [CalVer](https://calver.org/). The format\nused is YYYY.MM.DD\\[.MICRO\\]\\[-MODIFIER\\]:\n\n- YYYY: full year (2023).\n- 0M: zero-padded month (01, 02, ..., 12).\n- 0D: zero-padded day (01, 02, ..., 31).\n- MICRO: an increasing counter, used for patches published in the same day.\n- MODIFIER: usually `rc\u003cn\u003e` to indicate a release candidate.\n\n## Authors\n\n- Julio Loayza Meneses, Quarkslab.\n- Angèle Bossuat, Quarkslab.\n- Dahmun Goudarzi, Quarkslab.\n\nLogo idea by Robin David, drawing by Irene Loayza.\n\n## License\n\n[Apache License Version 2.0](https://www.apache.org/licenses/LICENSE-2.0), see\n[LICENSE](https://github.com/quarkslab/crypto-condor/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquarkslab%2Fcrypto-condor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquarkslab%2Fcrypto-condor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquarkslab%2Fcrypto-condor/lists"}