keccak

std.crypto.hash.keccak

val LANES

pub val LANES: usize = 25

1600 位状态中的 64 位通道数量

rec Sponge

pub rec Sponge;

由每个 SHA-3 和 SHAKE 变体共享的海绵(sponge)状态

lanes 将 1600 位状态保存为 25 个小端 64 位字;rate 是吸收/挤出块大小(以字节为单位);pos 是吸收或挤出期间当前块内的字节偏移量。

fun permute

pub fun permute(st: *u64);

就地应用 Keccak-f[1600] 置换

st:指向 25 通道状态的指针

fun init

pub fun init(s: *Sponge, rate: usize);

将海绵重置为给定速率(以字节为单位)的零状态

s:指向海绵的指针 rate:块大小(以字节为单位)

fun absorb

pub fun absorb(s: *Sponge, data: *u8, len: usize);

吸收输入字节,在每个满速率块上进行置换

s:指向海绵的指针 data:指向输入字节的指针 len:要吸收的字节数

fun finalize

pub fun finalize(s: *Sponge, ds: u8);

应用带有给定域分离字节的 pad10*1 并进行置换,结束吸收阶段并为挤出准备海绵

s:指向海绵的指针 ds:域分离字节(SHA-3 为 0x06,SHAKE 为 0x1f)

fun squeeze

pub fun squeeze(s: *Sponge, out: *u8, len: usize);

挤出输出字节,在速率块之间进行置换;可重复调用

s:指向海绵的指针 out:指向输出缓冲区的指针 len:要生成的字节数