{"id":33928695,"url":"https://github.com/cryspen/hacl-packages","last_synced_at":"2026-03-27T04:05:42.991Z","repository":{"id":37095003,"uuid":"400104445","full_name":"cryspen/hacl-packages","owner":"cryspen","description":"The Cryspen HACL Distribution","archived":false,"fork":false,"pushed_at":"2025-04-20T01:01:32.000Z","size":18282,"stargazers_count":20,"open_issues_count":63,"forks_count":18,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-12-13T20:35:14.286Z","etag":null,"topics":["aead","cryptography","decryption","digest","encryption","formally-verified","hashing","hkdf","hmac","signatures"],"latest_commit_sha":null,"homepage":"https://cryspen.com/hacl-packages","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cryspen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-08-26T08:57:42.000Z","updated_at":"2025-12-11T01:39:33.000Z","dependencies_parsed_at":"2023-12-31T01:43:33.226Z","dependency_job_id":"df068edd-7a2f-4951-9024-05c89d205a8d","html_url":"https://github.com/cryspen/hacl-packages","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/cryspen/hacl-packages","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryspen%2Fhacl-packages","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryspen%2Fhacl-packages/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryspen%2Fhacl-packages/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryspen%2Fhacl-packages/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cryspen","download_url":"https://codeload.github.com/cryspen/hacl-packages/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryspen%2Fhacl-packages/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31018546,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T03:51:26.850Z","status":"ssl_error","status_checked_at":"2026-03-27T03:51:09.693Z","response_time":164,"last_error":"SSL_read: 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":["aead","cryptography","decryption","digest","encryption","formally-verified","hashing","hkdf","hmac","signatures"],"created_at":"2025-12-12T11:41:21.702Z","updated_at":"2026-03-27T04:05:42.983Z","avatar_url":"https://github.com/cryspen.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Cryspen HACL Packages\n\nThis repository contains ready-to-use crypto packages developed by [Cryspen] on top of [HACL*].\nIn particular, it contains a portable C crypto library that selects optimized implementations for each platform,\nas well as Rust, OCaml, and JavaScript bindings for this library.\n\nCurrently, we are in the process of adding more usable APIs, [providing extensive documentation](https://cryspen.com/hacl-packages/), and further optimizing the algorithms.\n\n## What is HACL\\* and why should you use HACL Packages?\n\n[HACL*] is a collection of high-assurance cryptographic algorithms developed as part of [Project Everest].\nIt includes source code written in [F*], generated C code, verified assembly code from the [Vale] project, and an agile multiplexed cryptographic provider called [EverCrypt].\nAs such, the full HACL\\* repository contains many software artifacts and a complicated build system that can be intimidating to a crypto developer who simply wishes to use verified crypto.\n\n## Quickstart\n\n### Install build dependencies\n\nWe need the following dependencies ...\n\n- [cmake] (3.17 or newer)\n- [ninja] (1.10 or newer)\n- [python] (3.6 or newer)\n- [clang] (7 or newer) or [gcc] (7 or newer)\n\nDepending on your system you can install them as follows (click to expand) ...\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eArch Linux\u003c/b\u003e\u003c/summary\u003e\n\n```sh\n$ sudo pacman -S cmake ninja python\n\n# Either of ...\n$ sudo pacman -S clang\n$ sudo pacman -S gcc\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eFedora\u003c/b\u003e\u003c/summary\u003e\n  \n```sh\n$ sudo dnf install cmake ninja-build python3\n\n# Either of ...\n$ sudo dnf install clang\n$ sudo dnf install gcc\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eUbuntu\u003c/b\u003e\u003c/summary\u003e\n  \n```sh\n$ sudo apt install cmake ninja-build python3\n\n# Either of ...\n$ sudo apt install clang\n$ sudo apt install gcc\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003emacOS\u003c/b\u003e\u003c/summary\u003e\n\n```sh\n$ brew install cmake ninja python\n\n# Either of ...\n$ brew install llvm\n$ brew install gcc\n```\n\u003c/details\u003e\n\n## Build (and test) HACL Packages\n\nYou can run ...\n\n```sh\n$ ./mach build --test\n```\n\n... to build HACL Packages and run the tests. All actions are driven by [mach]. See `./mach --help` for details.\n\n## Platform support\n\nThe HACL Packages are supported based on the following tiers.\n\n### Tier 1\n\nTier 1 targets are guaranteed to work. These targets have automated testing to\nensure that changes do not break them.\n\n- [x] x86_64 Linux (x86_64-unknown-linux-gnu)\n- [x] x86 Linux (i686-unknown-linux-gnu)\n- [x] x86_64 macOS (x86_64-apple-darwin)\n- [x] x86_64 Windows\n  - [x] x86_64-pc-windows-msvc\n  - [x] x86_64-pc-windows-clang\n- [x] x86 Windows (i686-pc-windows-msvc)\n\n### Tier 2\n\nTier 2 targets are guaranteed to build.\nThese targets have automated builds to ensure that changes do not break the\nbuilds. However, not all of them are always tested.\n\n- [x] arm64 macOS (aarch64-apple-darwin)\n- [x] arm64 Linux (aarch64-unknown-linux-gnu)\n- [x] arm64 Android (aarch64-linux-android)\n- [x] arm64 iOS (aarch64-apple-ios)\n- [x] s390x z14 Linux (s390x-unknown-linux-gnu)\n\n### Tier 3\n\nTier 3 targets are supported by the code but there are no automated checks and\nthere is no guarantee that they work.\n\n- ARMv7 Android (aarch64arm-linux-androideabi)\n- arm64 iOS Simulator (aarch64-apple-ios-sim)\n- x86_64 iOS (x86_64-apple-ios)\n- PowerPC\n- FreeBSD / x64\n\n## Compiler support\n\n\u003c!-- When using the `c89` edition of HACL GCC 4.8 and up are supported.\nIn any other case a modern C compiler is expected. --\u003e\n\nA modern C compiler is expected.\n\n## Algorithms\n\nThe following tables gives an overview over the algorithms supported by the HACL\npackages.\n\n| Family               | Algorithm         | Support                                 |\n| -------------------- | ----------------- | --------------------------------------- |\n| AEAD                 | AES-GCM 128       | AES-NI \u0026 CLMUL (x86 only)               |\n| AEAD                 | AES-GCM 256       | AES-NI \u0026 CLMUL (x86 only)               |\n| AEAD                 | Chacha20-Poly1305 | Portable \\| vec128 \\| vec256            |\n| ECDH                 | Curve25519        | Portable \\| BMI2 \u0026 ADX                  |\n| ECDH                 | P-256             | Portable                                |\n| Signature            | Ed25519           | Portable                                |\n| Signature            | ECDSA P-256r1     | Portable                                |\n| Signature            | ECDSA P-256k1     | Portable                                |\n| Signature            | RSA-PSS           | Portable                                |\n| Hash                 | SHA2-224          | Portable \\| SHAEXT                      |\n| Hash                 | SHA2-256          | Portable \\| SHAEXT                      |\n| Hash                 | SHA2-384          | Portable                                |\n| Hash                 | SHA2-512          | Portable                                |\n| Hash                 | SHA3              | Portable                                |\n| Hash                 | Blake2            | Portable \\| vec128 \\| vec256            |\n| Key Derivation       | HKDF              | Portable (depends on hash)              |\n| Symmetric Encryption | Chacha20          | Portable \\| vec128 \\| vec256            |\n| Symmetric Encryption | AES 128           | AES-NI \u0026 CLMUL (x86 only)               |\n| Symmetric Encryption | AES 256           | AES-NI \u0026 CLMUL (x86 only)               |\n| MAC                  | HMAC              | Portable (depends on hash)              |\n| MAC                  | Poly1305          | Portable \\| vec128 \\| vec256 \\| x64 ASM |\n\n## Testing\n\nTesting is done with [gtest] and requires a C++11 compiler (or C++20 MSVC).\n\n### Measure Test Coverage\n\nTest coverage in HACL Packages can be measured with ...\n\n```sh\n./mach build --tests --coverage\n./mach test --coverage\n./tools/coverage.sh\n```\n\nNote that only clang is supported as a compiler and you may get an error ...\n\n```\ncc: error: unrecognized command-line option ‘-fprofile-instr-generate’; did you mean ‘-fprofile-generate’?\n```\n\n... when your default compiler is not clang.\nIn this case, try to set the `CC` and `CXX` environment variables accordingly ...\n\n```sh\nexport CC=clang\nexport CXX=clang++\n```\n\nFurthermore, additional tools are required to measure (and view) test coverage.\n\nMake sure you have `lcov` and `genhtml`.\n\nFor Ubuntu these can be installed via ...\n\n```sh\n$ sudo apt install lcov\n```\n\nWhen everything went well you should be able to view the coverage reports with, e.g., ...\n\n```sh\nfirefox build/Debug/coverage/full/html/index.html\n```\n\n### Dependencies\n\nTests require the [nlohmann_json] package to read json test files.\nCMake takes care of pulling and building the package.\n\n## License\n\nHACL packages are licensed under either of\n\n- [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\n- [MIT license](http://opensource.org/licenses/MIT)\n\nat your option.\n\n[//]: # \"links\"\n[cryspen]: https://www.cryspen.com/\n[cmake]: https://cmake.org/\n[ninja]: https://ninja-build.org/\n[clang]: https://clang.llvm.org/\n[gcc]: https://gcc.gnu.org/\n[mach]: ./mach\n[gtest]: https://google.github.io/googletest/\n[nlohmann_json]: https://github.com/nlohmann/json\n[hacl*]: https://hacl-star.github.io\n[f*]: https://fstar-lang.org\n[vale]: https://hacl-star.github.io/HaclValeEverCrypt.html\n[evercrypt]: https://hacl-star.github.io/HaclValeEverCrypt.html\n[status]: https://img.shields.io/badge/status-beta-orange.svg?style=for-the-badge\n[project everest]: https://project-everest.github.io/\n[python]: https://www.python.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryspen%2Fhacl-packages","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcryspen%2Fhacl-packages","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryspen%2Fhacl-packages/lists"}