ICICLE libraries
Device Library​
The ICICLE device library serves as an abstraction layer for interacting with various hardware devices. It provides a comprehensive interface for tasks such as setting the active device, querying device-specific information like free and total memory, determining the number of available devices, and managing memory allocation. Additionally, it offers functionality for copying data to and from devices, managing task queues (streams) for efficient device utilization, and abstracting the complexities of device management away from the user.
See programmers guide for more details. C++, Rust, Go
Core Library​
ICICLE Core is a template library written in C++ that implements fundamental cryptographic operations, including field and curve arithmetic, as well as higher-level APIs such as MSM and NTT. Each library has a corresponding crate. See Rust and Go.
The Core can be instantiated for different fields, curves, and other cryptographic components, allowing you to tailor it to your specific needs. You can link your application to one or more ICICLE libraries, depending on the requirements of your project. For example, you might only need the babybear library or a combination of babybear and a Merkle tree builder.
Supported curves, fields and operations​
This chart is scrollable horizontally & vertically. It shows feature support across different curves and fields.
Each icon represents support for a specific backend.
- A gear icon means partial support.
- A full icon without the gear means full support.
- Icons are clickable — click to reveal the backend and support type.
- For more info on specific operations, please see the API section.