Golang spritz cipher (see RS14.pdf)
I have implemented the spritz cipher for hashing and encryption in several languages in my spritz_cipher repo. There is even a golang version there, but it doesn't provide a library and only does hashing.
This is a fully-featured golang implementation of spritz, which
hash.Hash interface for hashing and a
interface for encryp/decrypt.
It also provides commands that use the library for hashing and encrypting/decrypting files.
You can get the spritz library by:
go get github.com/rwtodd/spritz-go
As I mentioned, it provides standard interfaces, and is easy to use if you know golang's standard hashes and streams. For instance, here is some example code for hashing:
import "github.com/rwtodd/spritz-go" // 256-bit hash of a byte slice: hash := spritz.Sum(256, buffer) // 512-bit hash of a file (ignoring errors for brevity) infile, _ := os.Open(fname) shash := spritz.NewHash(512) io.Copy(shash, infile) infile.Close() hash := shash.Sum(nil)
You can get the command-line driver like so:
go get github.com/rwtodd/spritz-go/cmd/spritz
The hasher is a concurrent program, which will hash up to 8 files at once as it works
through the list. It takes a "--size" parameter to get the hash size in bits.
The encrypt/decrypt program is also concurrent.