(T, inputs)
let state[T]
state[0] = 0 let i = 1
loop T {
state[i] = inputs[i]
i = i + 1
}
let C = poseidon_C(T)
let M = poseidon_M(T)
let N_F = poseidon_N_F(T)
let N_P = poseidon_N_P(T)
let c_i = 0
loop N_F / 2 {
state = state * C[c_i]
c_i = c_i + T
state = pow5(state)
let mix_i = 0
loop T {
state[mix_i] = sum(T, M[mix_i] * state)
mix_i = mix_i + 1
}
}
loop N_P {
state = state * C[c_i]
c_i = c_i + T
state[0] = pow5(state[0])
let mix_i = 0
loop T {
state[mix_i] = sum(T, M[mix_i] * state)
mix_i = mix_i + 1
}
}
loop N_F / 2 {
state = state * C[c_i]
c_i = c_i + T
state = pow5(state)
let mix_i = 0
loop T {
state[mix_i] = sum(T, M[mix_i] * state)
mix_i = mix_i + 1
}
}
return state