// Copyright (c) 2016 Andreas Auernhammer. All rights reserved.
|
|
// Use of this source code is governed by a license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Package skein1024 implements the Skein1024 hash function
|
|
// based on the Threefish1024 tweakable block cipher.
|
|
package skein1024
|
|
|
|
import (
|
|
"hash"
|
|
|
|
"github.com/aead/skein"
|
|
)
|
|
|
|
// Sum512 computes the 512 bit Skein1024 checksum (or MAC if key is set) of msg
|
|
// and writes it to out. The key is optional and can be nil.
|
|
func Sum512(out *[64]byte, msg, key []byte) {
|
|
var out1024 [128]byte
|
|
|
|
s := new(hashFunc)
|
|
s.initialize(64, &skein.Config{Key: key})
|
|
|
|
s.Write(msg)
|
|
|
|
s.finalizeHash()
|
|
|
|
s.output(&out1024, 0)
|
|
copy(out[:], out1024[:64])
|
|
}
|
|
|
|
// Sum384 computes the 384 bit Skein1024 checksum (or MAC if key is set) of msg
|
|
// and writes it to out. The key is optional and can be nil.
|
|
func Sum384(out *[48]byte, msg, key []byte) {
|
|
var out1024 [128]byte
|
|
|
|
s := new(hashFunc)
|
|
s.initialize(48, &skein.Config{Key: key})
|
|
|
|
s.Write(msg)
|
|
|
|
s.finalizeHash()
|
|
|
|
s.output(&out1024, 0)
|
|
copy(out[:], out1024[:48])
|
|
}
|
|
|
|
// Sum256 computes the 256 bit Skein1024 checksum (or MAC if key is set) of msg
|
|
// and writes it to out. The key is optional and can be nil.
|
|
func Sum256(out *[32]byte, msg, key []byte) {
|
|
var out1024 [128]byte
|
|
|
|
s := new(hashFunc)
|
|
s.initialize(32, &skein.Config{Key: key})
|
|
|
|
s.Write(msg)
|
|
|
|
s.finalizeHash()
|
|
|
|
s.output(&out1024, 0)
|
|
copy(out[:], out1024[:32])
|
|
}
|
|
|
|
// Sum160 computes the 160 bit Skein1024 checksum (or MAC if key is set) of msg
|
|
// and writes it to out. The key is optional and can be nil.
|
|
func Sum160(out *[20]byte, msg, key []byte) {
|
|
var out1024 [128]byte
|
|
|
|
s := new(hashFunc)
|
|
s.initialize(20, &skein.Config{Key: key})
|
|
|
|
s.Write(msg)
|
|
|
|
s.finalizeHash()
|
|
|
|
s.output(&out1024, 0)
|
|
copy(out[:], out1024[:20])
|
|
}
|
|
|
|
// Sum returns the Skein1024 checksum with the given hash size of msg using the (optional)
|
|
// conf for configuration. The hashsize must be > 0.
|
|
func Sum(msg []byte, hashsize int, conf *skein.Config) []byte {
|
|
s := New(hashsize, conf)
|
|
s.Write(msg)
|
|
return s.Sum(nil)
|
|
}
|
|
|
|
// New512 returns a hash.Hash computing the Skein1024 512 bit checksum.
|
|
// The key is optional and turns the hash into a MAC.
|
|
func New512(key []byte) hash.Hash {
|
|
s := new(hashFunc)
|
|
|
|
s.initialize(64, &skein.Config{Key: key})
|
|
|
|
return s
|
|
}
|
|
|
|
// New256 returns a hash.Hash computing the Skein1024 256 bit checksum.
|
|
// The key is optional and turns the hash into a MAC.
|
|
func New256(key []byte) hash.Hash {
|
|
s := new(hashFunc)
|
|
|
|
s.initialize(32, &skein.Config{Key: key})
|
|
|
|
return s
|
|
}
|
|
|
|
// New returns a hash.Hash computing the Skein1024 checksum with the given hash size.
|
|
// The conf is optional and configurates the hash.Hash
|
|
func New(hashsize int, conf *skein.Config) hash.Hash {
|
|
s := new(hashFunc)
|
|
s.initialize(hashsize, conf)
|
|
return s
|
|
}
|