poseidonSponge<F extends PastaFieldElement<F> > static method
Squeezing<F>
poseidonSponge<F extends PastaFieldElement<F> >(
- List<
F> state, - Absorbing<
F> ? input, - PoseidonSpec<
F> spec
Implementation
static Squeezing<F> poseidonSponge<F extends PastaFieldElement<F>>(
List<F> state,
Absorbing<F>? input,
PoseidonSpec<F> spec,
) {
final rate = spec.rate();
if (input != null) {
for (int i = 0; i < state.length && i < input._fields.length; i++) {
final value = input._fields[i];
if (value == null) {
throw ArgumentException.invalidOperationArguments(
"poseidonSponge",
reason:
"Invalid State: this operation is not permitted in the current mode",
);
}
state[i] = state[i] + value;
}
}
// Apply Poseidon permutation
permute(state, spec);
// Prepare output (take first RATE words from state)
final output = List<F?>.filled(rate, null);
for (int i = 0; i < rate && i < state.length; i++) {
output[i] = state[i];
}
return Squeezing<F>(output);
}