LM-SHA3 is a cryptographic IP core for hardware offloading of hash algorithms in FPGA and SoC designs.
The engine implements the Secure Hash Algorithm 3 family according to FIPS 202, including the fixed-length functions SHA3-224, SHA3-256, SHA3-384 and SHA3-512 and the extendable-output functions SHAKE128 and SHAKE256. It also supports the cSHAKE and KMAC operations of NIST SP 800-185.
LM-SHA3 implements the Keccak sponge construction complete: the domain separation suffix, the message padding and the permutation are all performed in hardware, so a host sends message bytes and nothing else. With the context-switching function the internal state of the Keccak engine can be saved and restored, allowing a partially absorbed message to be suspended while other data is processed.
The core is delivered as vendor-neutral SystemVerilog and builds from one source on AMD, Altera and Efinix devices. It includes AMBA AXI interfaces and a register map with user-programmable parameters selecting the hash function, the digest length of the XOFs and the cSHAKE/KMAC configuration. ANSI C drivers are provided for fast integration into the target platform.
Measured FPGA results
Product top, out of context, constrained at the target clock. AMD and Efinix report LUTs, Altera reports ALMs; the two are never combined.
| Device | Configuration | Logic | FF | Memory | DSP | Fmax |
|---|---|---|---|---|---|---|
| Altera Agilex 3A3CW135BM16AE6S · quartus-pro 26.1.1 | default | 6,005 ALM | 5,961 | 0 Kb M20K | 0 | 215.0 MHztarget 215 |
| AMD Kintex UltraScale+xcku3p-ffva676-1-e · vivado 2026.1 | default | 7,972 LUT | 4,360 | 0 BRAM | 0 | 307.3 MHztarget 300 |
| Efinix Titanium Ti375Ti375N1156 · efinity 2026.1 | default | 13,833 LUT | 4,343 | 0 RAM | 0 | 276.7 MHztarget 255 |
Features
Cryptographic hashing
- SHA3-224, SHA3-256, SHA3-384, SHA3-512
Extendable-output functions
- SHAKE128, cSHAKE128
- SHAKE256, cSHAKE256
Message authentication
- KMAC128, KMAC256
Engine
- One Keccak-f[1600] permutation every 24 clock cycles, fixed
- Message absorbed at a full 64-bit lane per clock — the engine does not stall for data
- Domain suffix and pad10*1 applied in hardware
- Context switching: the full 1600-bit state saved and restored through the register map
- Capability register — the driver discovers the configuration rather than being told
Integration
- AMBA AXI4-Lite control and three AXI4-Stream data interfaces
- Two delivery tops: complete AXI product, or bare sponge for a custom fabric
- Single clock domain, single reset — no false paths, no multicycle paths
- ANSI C driver, UVM RAL, IP-XACT, SystemRDL register description
- Portable to any AMD, Altera or Efinix device from one source
Applications
- Digital signature and certificate processing
- Post-quantum cryptography — ML-KEM and ML-DSA use SHAKE and cSHAKE throughout
- Key derivation and message authentication
- Secure boot and firmware verification
- Encrypted data storage
- Secure communications
Block diagram
SHA-3 functions
The ten functions differ only in a rate, a domain suffix and an output length; one engine serves all of them.
| Function | Rate (bytes) | Rate (lanes) | Suffix | Digest |
|---|---|---|---|---|
| SHA3-224 | 144 | 18 | 0x06 | 28 bytes |
| SHA3-256 | 136 | 17 | 0x06 | 32 bytes |
| SHA3-384 | 104 | 13 | 0x06 | 48 bytes |
| SHA3-512 | 72 | 9 | 0x06 | 64 bytes |
| SHAKE128 | 168 | 21 | 0x1F | programmable |
| SHAKE256 | 136 | 17 | 0x1F | programmable |
| cSHAKE128 | 168 | 21 | 0x04 | programmable |
| cSHAKE256 | 136 | 17 | 0x04 | programmable |
| KMAC128 | 168 | 21 | 0x04 | programmable |
| KMAC256 | 136 | 17 | 0x04 | programmable |
Rates follow FIPS 202 section 6, r = 1600 − 2s. Suffixes follow appendix B.2 for SHA-3
and SHAKE; the derived functions absorb 00 because the cSHAKE prefix separates their
domain instead.
Interfaces
The IP core includes two 64-bit AXI4-Stream interfaces for high-speed transfer of the input message and the output hash value, and an 8-bit AXI4-Stream interface carrying the cSHAKE and KMAC parameter strings. The AXI4-Lite interface provides access to the register map for selecting the SHA-3 function, the digest length of the XOFs and the cSHAKE/KMAC parameters.
| Interface | Type | Width | Function |
|---|---|---|---|
s_axil | AXI4-Lite slave | 32-bit data, 8-bit address | configuration, command, status, digest and context windows |
s_axis_msg | AXI4-Stream sink | 64-bit, tkeep, tlast | input message |
s_axis_par | AXI4-Stream sink | 8-bit | cSHAKE and KMAC parameter strings |
m_axis_hash | AXI4-Stream source | 64-bit, tkeep, tlast | output hash value |
irq | level | 1-bit | completion and error events |
tkeep qualifies bytes on the final message beat, so a message is any number of bytes.
Parameter strings arrive as N then S for cSHAKE, and S then K for KMAC.
Throughput
Throughput follows directly from the architecture and can be computed for any clock frequency without a lookup table:
one permutation 24 clock cycles
one rate-block per permutation
throughput = rate_bytes x f_clk / 24
For SHA3-256 at 300 MHz this gives 136 × 300 × 10⁶ / 24 ≈ 1.7 GB/s.
The permutation is fixed-latency. Every permutation is 24 cycles regardless of message content, and this is proved formally rather than measured — the round-count property is carried by a dedicated proof. Execution time is therefore a function of message length alone. No masking, randomisation or fault-detection countermeasures are implemented; where an application requires resistance to power analysis or fault injection, that belongs in the surrounding system.
Configuration
| Parameter | Effect |
|---|---|
function select (cfg.fn) | run-time, one of the ten functions |
XOF digest length (xoflen) | run-time, any byte count |
| cSHAKE / KMAC string lengths | run-time (nlen, slen, keylen) |
| top choice | elaboration: full AXI product, or bare sponge |
Everything that distinguishes a hash from a MAC on this core is a register write. There is no elaboration-time function subsetting to get wrong.
Resources and performance
Resource utilisation and maximum clock frequency for each target device are measured out of context and published per target in the measured results on this page. AMD and Efinix rows report LUTs; Altera rows report ALMs, and the two are never combined.
Deliverables
| Item | Contents |
|---|---|
| RTL | parameterised SystemVerilog, vendor-neutral |
| Model | bit-accurate C++ model |
| Registers | SystemRDL source plus six generated exports |
| Verification | UVM RAL, formal property wrappers, CAVP vector drivers |
| Software | ANSI C reference driver with generated header and JSON |
| Packaging | IP-XACT, IEEE 1685-2022 |
| Implementation | runnable flow script per FPGA vendor, file list, SDC |
| Documentation | integration guide |