type spongeDirection … const spongeAbsorbing … const spongeSqueezing … const maxRate … type state … // BlockSize returns the rate of sponge underlying this hash function. func (d *state) BlockSize() int { … } // Size returns the output size of the hash function in bytes. func (d *state) Size() int { … } // Reset clears the internal state by zeroing the sponge state and // the buffer indexes, and setting Sponge.state to absorbing. func (d *state) Reset() { … } func (d *state) clone() *state { … } // permute applies the KeccakF-1600 permutation. It handles // any input-output buffering. func (d *state) permute() { … } // pads appends the domain separation bits in dsbyte, applies // the multi-bitrate 10..1 padding rule, and permutes the state. func (d *state) padAndPermute() { … } // Write absorbs more data into the hash's state. It panics if any // output has already been read. func (d *state) Write(p []byte) (written int, err error) { … } // Read squeezes an arbitrary number of bytes from the sponge. func (d *state) Read(out []byte) (n int, err error) { … } // Sum applies padding to the hash state and then squeezes out the desired // number of output bytes. It panics if any output has already been read. func (d *state) Sum(in []byte) []byte { … }