{"id":33152926,"url":"https://github.com/XKCP/XKCP","last_synced_at":"2025-11-16T18:02:22.376Z","repository":{"id":9245634,"uuid":"11066960","full_name":"XKCP/XKCP","owner":"XKCP","description":"eXtended Keccak Code Package","archived":false,"fork":false,"pushed_at":"2025-10-03T15:05:42.000Z","size":24448,"stargazers_count":625,"open_issues_count":12,"forks_count":202,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-10-03T16:30:24.693Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/XKCP.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"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}},"created_at":"2013-06-30T09:12:10.000Z","updated_at":"2025-10-03T15:05:46.000Z","dependencies_parsed_at":"2023-01-13T16:23:56.423Z","dependency_job_id":"ef96939a-7b3b-4f67-8344-24f324ff66f4","html_url":"https://github.com/XKCP/XKCP","commit_stats":{"total_commits":326,"total_committers":45,"mean_commits":"7.2444444444444445","dds":0.6779141104294479,"last_synced_commit":"d1d7bbe799d10f67d44e46bea232d03c74a7ee77"},"previous_names":["gvanas/keccakcodepackage"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/XKCP/XKCP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XKCP%2FXKCP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XKCP%2FXKCP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XKCP%2FXKCP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XKCP%2FXKCP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/XKCP","download_url":"https://codeload.github.com/XKCP/XKCP/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XKCP%2FXKCP/sbom","scorecard":{"id":152765,"data":{"date":"2025-08-11","repo":{"name":"github.com/XKCP/XKCP","commit":"66069fa02add2a25707b1bab98a150a30bba05f9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":3,"reason":"Found 8/26 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":8,"reason":"9 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/XKCP/XKCP/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/XKCP/XKCP/ci.yml/master?enable=pin","Warn: containerImage not pinned by hash: CI/Dockerfile.ci:1","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T11:07:50.978Z","repository_id":9245634,"created_at":"2025-08-16T11:07:50.978Z","updated_at":"2025-08-16T11:07:50.978Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284750955,"owners_count":27057456,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-16T02:00:05.974Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2025-11-15T19:00:46.108Z","updated_at":"2025-11-16T18:02:22.368Z","avatar_url":"https://github.com/XKCP.png","language":"C","funding_links":[],"categories":["Frameworks and Libs"],"sub_categories":["C"],"readme":"\u003cimg src=\"doc/logo/XKCP-Anna-banner.svg\" width=\"60%\" /\u003e\n\n# What is the XKCP?\n\nThe **eXtended Keccak Code Package** (or the **Xoodoo and Keccak Code Package**, in both cases abbreviated as **XKCP**) is a repository that gathers different free and open-source implementations of the cryptographic schemes defined by the Keccak team.\nThis includes the [Keccak sponge function family](https://keccak.team/keccak.html)\nand closely related variants, such as\n\n* the SHAKE extendable-output functions and SHA-3 hash functions from [FIPS 202][fips202_standard],\n* the cSHAKE, KMAC, ParallelHash and TupleHash functions from [NIST SP 800-185][sp800_185_standard],\n* the fast [TurboSHAKE][turboshake] and [KangarooTwelve][k12] extendable-output functions,\n* the [Kravatte](https://keccak.team/kravatte.html) pseudo-random function and its modes,\n* the [SHAKE- and TurboSHAKE-Wrap and -BO](https://eprint.iacr.org/2024/1618) authenticated encryption schemes,\n\nas well as the [Xoodoo](https://keccak.team/xoodoo.html) permutation and\n\n* the [Xoofff](https://keccak.team/xoofff.html) pseudo-random function and its modes (experimental),\n* the [Xoodyak](https://keccak.team/xoodyak.html) scheme (submission to the NIST lightweight crypto standardization process).\n\nThe code in this repository can be built as a library called libXKCP.\n\nNote that we decided to remove [Ketje](https://keccak.team/ketje.html) and [Keyak](https://keccak.team/keyak.html) from the XKCP.\n\n\n# What is libXKCP?\n\n**libXKCP** is a library that contains all the Keccak and Xoodoo-based cryptographic schemes mentioned above.\n\nBefore building, please make sure that the submodules have been initialized and fetched using `git submodule update --init`.\nThen, to build **libXKCP**, the quick answer is to launch:\n\n```\nmake \u003ctarget\u003e/libXKCP.so\n```\n\nwhere `\u003ctarget\u003e` is to be replaced with the actual target (e.g., `x86-64` or `ARMv6M`), and where `.so` can be replaced with `.a` for a static library or with `.dylib` for a dynamic library on macOS.\nMore details, and in particular the list of targets, can be found in the section on how to build the XKCP below.\n\nIf your compiler supports it, you may add `EXTRA_CFLAGS=\"-march=native -mtune=native\"` at the end of the command line so that the code is further optimized for the platform on which it is compiled.\n\n\n# More precisely, what does the XKCP contain?\n\nFirst, the services available in this package are divided into high-level and low-level services. In a nutshell, the low level corresponds to Keccak-_f_[1600] and basic state manipulation, while the high level contains the constructions and the modes for, e.g., sponge functions, hashing or authenticated encryption. For more details, please see the section \"_How is the code organized?_\" below.\n\nSecond, these high-level and low-level services can be compiled as the libXKCP library.\n\nThen, the XKCP also contains some utilities for testing, benchmarking and illustration purposes.\n\nFinally, the repository contains some standalone implementations.\n\n\n## High-level services\n\nWhen used as a library or directly from the sources, the XKCP offers the high-level services documented in the following header files:\n\n* [`SimpleFIPS202`](lib/high/Keccak/FIPS202/SimpleFIPS202.h), the six approved FIPS 202 instances (SHAKE128, SHAKE256 and the SHA-3 hash functions) through simple functions.\n* [`KeccakHash`](lib/high/Keccak/FIPS202/KeccakHash.h), the six approved FIPS 202 instances, as well as any Keccak instance based on Keccak-_f_[1600]. This more advanced interface proposes a message queue (init-update-final) and supports bit-level inputs if needed.\n* [`SP800-185`](lib/high/Keccak/SP800-185/SP800-185.h), the functions (cSHAKE, KMAC, ParallelHash and TupleHash) in the official NIST SP 800-185 standard.\n* [`KeccakSponge`](doc/KeccakSponge-documentation.h), all Keccak sponge functions, with or without a message queue.\n* [`KeccakDuplex`](doc/KeccakDuplex-documentation.h), all Keccak duplex objects.\n* [`KeccakOD`](doc/KeccakOD-documentation.h), all Keccak overwrite duplex (OD) objects.\n* [`KeccakPRG`](doc/KeccakPRG-documentation.h), a pseudo-random number generator based on Keccak duplex objects.\n* [`TurboSHAKE`](lib/high/TurboSHAKE/TurboSHAKE.h), the fast twelve-round variant to Keccak.\n* [`KangarooTwelve`](lib/high/KangarooTwelve/KangarooTwelve.h), the fast and parallelizable hashing mode based on TurboSHAKE and Sakura coding.\n* [`ShakingUpAE`](doc/ShakingUpAE-documentation.h), the SHAKE- and TurboSHAKE-Wrap and -BO authenticated encryption schemes.\n* [`Kravatte`](lib/high/Kravatte/Kravatte.h) and [`KravatteModes`](lib/high/Kravatte/KravatteModes.h), the pseudo-random function Kravatte, as well as the modes on top of it (SANE, SANSE, WBC and WBC-AE).\n* [`Xoofff`](lib/high/Xoofff/Xoofff.h) and [`XoofffModes`](lib/high/Xoofff/XoofffModes.h), the pseudo-random function Xoofff, as well as the modes on top of it (SANE, SANSE, WBC and WBC-AE).\n* [`Xoodyak`](doc/Xoodyak-documentation.h), the lightweight cryptographic scheme Xoodyak that can be used for hashing, encryption, MAC computation and authenticated encryption.\n\n\n## Low-level services\n\nThe low-level services implement the different permutations Keccak-_f_[1600], Keccak-_p_[1600, 12 rounds] and Xoodoo.\n\nThe low-level services provide an opaque representation of the state together with functions to add data into and extract data from the state. Together with the permutations themselves, the low-level services implement what we call the **state and permutation** interface (abbreviated **SnP**). For parallelized implementation, we similarly use the **parallel** state and permutation interface or **PlSnP**.\n\n* In [`lib/low/`](lib/low/), one can find implementations of the following permutations for different platforms.\n    + [`lib/low/KeccakP-1600/`](lib/low/KeccakP-1600/), for Keccak-_p_[1600]. This is the one used in the six approved FIPS 202 instances.\n    + [`lib/low/Xoodoo/`](lib/low/Xoodoo/), for Xoodoo.\n\n* In addition, one can find the implementation of parallelized permutations using SIMD instructions.\n\nIn both cases, the hierarchy first selects a permutation (or a permutation and a degree of parallelism) and then a given implementation. E.g., one finds in [`lib/low/KeccakP-1600-times4/`](lib/low/KeccakP-1600-times4/) the implementations of 4 parallel instances of Keccak-_p_[1600] and in [`lib/low/KeccakP-1600-times4/AVX2/`](lib/low/KeccakP-1600-times4/AVX2/) a 256-bit SIMD implementation for AVX2.\n\nThe documentation of the low-level services can be found in [`SnP-documentation.h`](doc/SnP-documentation.h) and [`PlSnP-documentation.h`](doc/PlSnP-documentation.h).\n\n\n## Utilities\n\nThe package contains:\n\n* The **libXKCP** library;\n* [**Self-tests**](tests/UnitTests/main.c) that ensure that the implementation is working properly;\n* [**A benchmarking tool**](tests/Benchmarks/main.c) to measure the timing of the various schemes;\n* [**KeccakSum**](util/KeccakSum/KeccakSum.c) that computes a hash of the file (or multiple files) given in parameter.\n\nNote that, to run the benchmarks on ARM processors, you may need to include the [Kernel-PMU module](https://github.com/XKCP/Kernel-PMU).\n\n\n## Standalone implementations\n\nThe XKCP also provides some standalone implementations, including:\n\n* a very [compact](https://keccak.team/2015/tweetfips202.html) C code of the FIPS 202 (SHA-3) standard in [`Standalone/CompactFIPS202/C/`](Standalone/CompactFIPS202/C/);\n* a compact implementation in Python in [`Standalone/CompactFIPS202/Python/`](Standalone/CompactFIPS202/Python/).\n\n\n# Is there example code?\n\nYes, there is example code for using many cryptographic functions of the XKCP. You can find them in the [`usage-example.md`](usage-example.md) file.\n\n\n# Under which license is the XKCP distributed?\n\nMost of the source and header files in the XKCP are released to the **public domain** and associated to the [CC0](http://creativecommons.org/publicdomain/zero/1.0/) deed, but there are exceptions.\nPlease refer to the [LICENSE](LICENSE) file for more information.\n\n\n\n# How can I build the XKCP?\n\nTo build on Linux or macOS, the following tools are needed:\n\n* *GCC* or *clang*\n* *GNU make*\n* *xsltproc*\n\nThe different targets are defined in [`Makefile.build`](Makefile.build). This file is expanded into a regular makefile using *xsltproc*. To use it, simply type, e.g.,\n\n```\nmake generic64/UnitTests\n```\n\nor\n\n```\nmake x86-64/Benchmarks\n```\n\nto build UnitTests using plain 64-bit code or to build the Benchmarks tool with x86-64 code.\nThe name before the slash indicates the target, i.e., the platform or instruction set used, while the part after the slash is the executable or library to build.\nAs another example, the static (resp. dynamic) library is built by typing `make ARMv7M/libXKCP.a` (resp. `.so`) or similarly with `ARMv7M` replaced with the appropriate platform or instruction set name.\nAn alternate C compiler can be specified via the `CC` environment variable.\n\nAt the time of this writing, the possible target names before the slash are:\n\n* `x86-64`: automatic runtime selection among 64-bit plain C and SSSE3, AVX2 and AVX-512 instruction sets (**recommended for x86-64 platforms**);\n* `compact`: plain C compact implementations;\n* `generic32`: plain C implementation, generically optimized for 32-bit platforms;\n* `generic32lc`: same as `generic32` but featuring the lane complementing technique for platforms without a \"and not\" instruction;\n* `generic64`: plain C implementation, generically optimized for 64-bit platforms;\n* `generic64lc`: same as `generic64` but featuring the lane complementing technique for platforms without a \"and not\" instruction;\n* `SSSE3`: implementations selected for the processors that support the SSSE3 instruction set;\n* `AVX`: implementations selected for processors that support the AVX instruction set (e.g., Sandy Bridge microarchitectures);\n* `XOP`: implementations selected for processors that support the XOP instruction set (e.g., Bulldozer microarchitecture);\n* `AVX2`: implementations selected for processors that support the AVX2 instruction set (e.g., Haswell and Skylake microarchitectures);\n* `AVX512`: implementations selected for the processors that support the AVX-512 instruction set (e.g., SkylakeX microarchitecture);\n* `ARMv6`: implementations selected for processors with the ARMv6 architecture;\n* `ARMv6M`: implementations selected for processors with the ARMv6-M architecture;\n* `ARMv7M`: implementations selected for processors with the ARMv7-M architecture;\n* `ARMv7A`: implementations selected for processors with the ARMv7-A architecture;\n* `ARMv8A`: implementations selected for processors with the ARMv8-A architecture;\n* `AVR8`: implementations selected for processors with the 8-bit AVR architecture.\n\nIf your compiler supports it, you may add `EXTRA_CFLAGS=\"-march=native -mtune=native\"` at the end of the command line so that the code is further optimized for the platform on which it is compiled.\n\nInstead of building an executable with *GCC*, one can choose to select the files needed and make a package. For this, simply append `.pack` to the target name, e.g.,\n\n```\nmake x86-64/UnitTests.pack\n```\n\nThis creates a `.tar.gz` archive with all the necessary files to build the given target.\n\nThe list of targets can be found at the end of [`Makefile.build`](Makefile.build) or by running `make` without parameters.\n\n\n## Microsoft Visual Studio support\n\nThe XKCP can be compiled with Microsoft Visual Studio (MSVC). The XKCP build system offers support for the creation of project files. To get a project file for a given target, simply append `.vcxproj` to the target name, e.g.,\n\n```\nmake AVX512noAsm/KeccakSum.vcxproj\n```\n\nAs of today, please note the current limitations:\n\n- The assembly code, as used in some targets, follows the GCC syntax and at this point cannot be used directly with MSVC. Note that the `AVX2noAsm` and `AVX512noAsm` targets provide alternatives to `AVX2` and `AVX512`, respectively, without assembly implementations.\n- There is no support yet to build a dynamic library like `libXKCP.dll`. However, we are not far: `make \u003ctarget\u003e/libXKCP.so.vcxproj` gives you a project that compiles correctly (but does not link).\n\n\n# How do I build/extract just the part I need?\n\nIf you wish to make a custom target that integrates the cryptographic functions you need and nothing else, or if you just wish to get the source files to integrate them in another project, you can do this by following the steps described in [`doc/HOWTO-customize.build`](doc/HOWTO-customize.build). Some examples illustrate the process.\n\n\n\n# How is the code organized?\n\nThe code is organized as illustrated in the following figure:\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"doc/figures/Layers.svg\" width=\"80%\" /\u003e\n\u003c/p\u003e\n\nAt the top, the high-level cryptographic services are implemented in plain C, without any specific optimizations. At the bottom, the low-level services implement the permutations and the state input/output functions, which can be optimized for a given platform. The interface between the two layers is called **SnP**.\n\nThe idea is to have a single, portable, code base for the high level and the possibility to dedicate the low level to certain platforms for best performance.\n\nThe modes and constructions can be found in [`lib/high/`](lib/high/), while the permutations are stored in [`lib/low/`](lib/low/).\n\nThe situation is similar for parallelized services, as illustrated on the following figure. The interface is adapated to the parallelism and is called **PlSnP**, with the implementations in [`lib/low/`](lib/low/).\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"doc/figures/ParallelLayers.svg\" width=\"80%\" /\u003e\n\u003c/p\u003e\n\n*Disclaimer*: the above figures aim at illustrative purposes only, as not all modes, constructions or permutations are currently implemented in the XKCP or represented on the figures.\n\n\n\n# How fast is the code in the XKCP?\n\nWhenever possible, we try to integerate the fastest available open-source code into the repository.\nShould you find better implementations, do not hesitate to inform us.\n\nBenchmarks using the XKCP and comparisons with other functions can be found on [this page](https://keccak.team/sw_performance.html).\n\n\n\n# Where can I find more information?\n\nAbout the XKCP, we gave some presentations on its motivation and structure, e.g.,\n\n* at [FOSDEM in February 2017][FOSDEM2017] ([slides][slidesAtFOSDEM2017]),\n* at [SPEED-B in October 2016][SPEEDB] ([slides][slidesAtSPEEDB]) ([paper][paperAtSPEEDB]),\n* at the [SHA-3 Workshop in Santa Barbara in August 2014][SHA3workshop2014] ([slides][KCPslides]).\n\nThe XKCP follows an improved version of the structure proposed in the note [\"A software interface for Keccak\"][keccakinterface].\n\nMore information on the cryptographic aspects can be found:\n\n* on Keccak at [`keccak.team`](https://keccak.team/keccak.html)\n* on the FIPS 202 standard at [`csrc.nist.gov`](http://csrc.nist.gov/groups/ST/hash/sha-3/fips202_standard_2015.html)\n* on the NIST SP 800-185 standard at [`keccak.team`](https://keccak.team/2016/sp_800_185.html)\n* on KangarooTwelve at [`keccak.team`](https://keccak.team/kangarootwelve.html)\n* on cryptographic sponge functions at [`keccak.team`](https://keccak.team/sponge_duplex.html)\n* on Kravatte at [`keccak.team`](https://keccak.team/kravatte.html)\n* on Xoodoo, Xoofff and Xoodyak at [`eprint.iacr.org`](https://eprint.iacr.org/2018/767)\n* on the Farfalle construction at [`keccak.team`](https://keccak.team/farfalle.html)\n\n\n\n# How can I contribute?\n\nWe welcome contributions in various forms, e.g., general feedback, bug reports, improvements and optimized implementations on your favorite platforms. The best is to do this through GitHub. Alternatively, you can send us a mail at `all` _-at-_ `keccak` _-dot-_ `team`.\n\n\n\n# Acknowledgments\n\nWe wish to thank all the contributors, and in particular:\n\n- Andre C. de Moraes for ARMv8-A assembly code\n- Andy Polyakov and Ronny Van Keer for the AVX2 and AVX-512 assembly implementations of Keccak-_p_[1600]\n- Anna Guinet for the hummingbird logo design\n- Brian Gladman's `brg_endian.h`\n- Bruno Pairault for testing and benchmarking on ARM platforms\n- Conno Boel for the NEON implementations of Xoodoo\n- D.J. Bernstein, Peter Schwabe and Gilles Van Assche for the tweetable FIPS 202 implementation `TweetableFIPS202.c`\n- Hadi El Yakhni for providing example code\n- Hussama Ismail for setting up the continuous integration with Travis\n- Kent Ross for various improvements in [XKCP/K12](https://github.com/XKCP/K12) imported here\n- Larry Bassham, NIST for the original `genKAT.c` developed during the SHA-3 contest\n- Ryad Benadjila for adding continuous integration on different platforms with qemu\n- Samuel Neves and Jack O'Connor for their processor capability detection code\n- Stéphane Léon for helping support macOS\n- And to all those who fixed bugs or brought improvements (in no specific order): Tyler Young, Robert J Spencer, amane-c, Øystein Heskestad, Norman (Hongyu) Xu, Jorrit Jongma, David Adrian, Sebastian Ramacher, lvd2, Sam Chen, Thom Wiggers, Thomas van der Burgt, Donald Tsang, MoorayJenkins, UnePierre, Diggory Hardy, Joost Rijneveld, Steve Thomas, Benoît Viguier, Ko Stoffelen, Bogdan Vaneev, Alf Watt, surrim, Robert Crossfield, David Leon Gil, Matt Kelly, Ross Biro\n\n***\n\nThe Keccak and Xoodoo designers: Guido Bertoni, Joan Daemen, Seth Hoffert,\nMichaël Peeters, Gilles Van Assche, and Ronny Van Keer.\n\n[keccakinterface]: https://keccak.team/files/NoteSoftwareInterface.pdf\n[SHA3workshop2014]: http://csrc.nist.gov/groups/ST/hash/sha-3/Aug2014/index.html\n[KCPslides]: http://csrc.nist.gov/groups/ST/hash/sha-3/Aug2014/documents/vanassche_keccak_code.pdf\n[FOSDEM2017]: https://fosdem.org/2017/schedule/event/keccak/\n[slidesAtFOSDEM2017]: https://fosdem.org/2017/schedule/event/keccak/attachments/slides/1692/export/events/attachments/keccak/slides/1692/KeccakAtFOSDEM2017.pdf\n[fips202_standard]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf \"FIPS 202 standard\"\n[sp800_185_standard]: https://doi.org/10.6028/NIST.SP.800-185 \"NIST SP 800-185 standard\"\n[k12]: https://keccak.team/kangarootwelve.html\n[SPEEDB]: http://ccccspeed.win.tue.nl/\n[paperAtSPEEDB]: http://ccccspeed.win.tue.nl/papers/KeccakSoftware.pdf\n[slidesAtSPEEDB]: http://ccccspeed.win.tue.nl/presentations/KeccakSoftware-slides.pdf\n[XoodooCookbook]: https://eprint.iacr.org/2018/767\n[turboshake]: https://eprint.iacr.org/2023/342\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FXKCP%2FXKCP","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FXKCP%2FXKCP","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FXKCP%2FXKCP/lists"}