diff options
author | Ricardo Catalinas Jiménez <r@untroubled.be> | 2016-02-22 06:05:00 +0800 |
---|---|---|
committer | Ricardo Catalinas Jiménez <r@untroubled.be> | 2016-02-22 06:34:34 +0800 |
commit | e4b138a5931b309805162610870df50165e61a8f (patch) | |
tree | 6f97b16fcffc263dfab7094a07288a0a28a5af6c /crypto/sha3/shake.go | |
parent | 0a1da69fac3766b48a116580295f98df93122503 (diff) | |
download | go-tangerine-e4b138a5931b309805162610870df50165e61a8f.tar go-tangerine-e4b138a5931b309805162610870df50165e61a8f.tar.gz go-tangerine-e4b138a5931b309805162610870df50165e61a8f.tar.bz2 go-tangerine-e4b138a5931b309805162610870df50165e61a8f.tar.lz go-tangerine-e4b138a5931b309805162610870df50165e61a8f.tar.xz go-tangerine-e4b138a5931b309805162610870df50165e61a8f.tar.zst go-tangerine-e4b138a5931b309805162610870df50165e61a8f.zip |
crypto/sha3: Copy latest code from "golang.org/x/crypto/sha3"
Revision: 1f22c0103821b9390939b6776727195525381532
Diffstat (limited to 'crypto/sha3/shake.go')
-rw-r--r-- | crypto/sha3/shake.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/crypto/sha3/shake.go b/crypto/sha3/shake.go new file mode 100644 index 000000000..841f9860f --- /dev/null +++ b/crypto/sha3/shake.go @@ -0,0 +1,60 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file defines the ShakeHash interface, and provides +// functions for creating SHAKE instances, as well as utility +// functions for hashing bytes to arbitrary-length output. + +import ( + "io" +) + +// ShakeHash defines the interface to hash functions that +// support arbitrary-length output. +type ShakeHash interface { + // Write absorbs more data into the hash's state. It panics if input is + // written to it after output has been read from it. + io.Writer + + // Read reads more output from the hash; reading affects the hash's + // state. (ShakeHash.Read is thus very different from Hash.Sum) + // It never returns an error. + io.Reader + + // Clone returns a copy of the ShakeHash in its current state. + Clone() ShakeHash + + // Reset resets the ShakeHash to its initial state. + Reset() +} + +func (d *state) Clone() ShakeHash { + return d.clone() +} + +// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 128 bits against all attacks if at +// least 32 bytes of its output are used. +func NewShake128() ShakeHash { return &state{rate: 168, dsbyte: 0x1f} } + +// NewShake256 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 256 bits against all attacks if +// at least 64 bytes of its output are used. +func NewShake256() ShakeHash { return &state{rate: 136, dsbyte: 0x1f} } + +// ShakeSum128 writes an arbitrary-length digest of data into hash. +func ShakeSum128(hash, data []byte) { + h := NewShake128() + h.Write(data) + h.Read(hash) +} + +// ShakeSum256 writes an arbitrary-length digest of data into hash. +func ShakeSum256(hash, data []byte) { + h := NewShake256() + h.Write(data) + h.Read(hash) +} |