Source file src/crypto/internal/fips140/sha3/hashes.go

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package sha3
     6  
     7  // New224 returns a new Digest computing the SHA3-224 hash.
     8  func New224() *Digest {
     9  	return &Digest{rate: rateK448, outputLen: 28, dsbyte: dsbyteSHA3}
    10  }
    11  
    12  // New256 returns a new Digest computing the SHA3-256 hash.
    13  func New256() *Digest {
    14  	return &Digest{rate: rateK512, outputLen: 32, dsbyte: dsbyteSHA3}
    15  }
    16  
    17  // New384 returns a new Digest computing the SHA3-384 hash.
    18  func New384() *Digest {
    19  	return &Digest{rate: rateK768, outputLen: 48, dsbyte: dsbyteSHA3}
    20  }
    21  
    22  // New512 returns a new Digest computing the SHA3-512 hash.
    23  func New512() *Digest {
    24  	return &Digest{rate: rateK1024, outputLen: 64, dsbyte: dsbyteSHA3}
    25  }
    26  
    27  // TODO(fips): do this in the stdlib crypto/sha3 package.
    28  //
    29  //     crypto.RegisterHash(crypto.SHA3_224, New224)
    30  //     crypto.RegisterHash(crypto.SHA3_256, New256)
    31  //     crypto.RegisterHash(crypto.SHA3_384, New384)
    32  //     crypto.RegisterHash(crypto.SHA3_512, New512)
    33  
    34  const (
    35  	dsbyteSHA3   = 0b00000110
    36  	dsbyteKeccak = 0b00000001
    37  	dsbyteShake  = 0b00011111
    38  	dsbyteCShake = 0b00000100
    39  
    40  	// rateK[c] is the rate in bytes for Keccak[c] where c is the capacity in
    41  	// bits. Given the sponge size is 1600 bits, the rate is 1600 - c bits.
    42  	rateK256  = (1600 - 256) / 8
    43  	rateK448  = (1600 - 448) / 8
    44  	rateK512  = (1600 - 512) / 8
    45  	rateK768  = (1600 - 768) / 8
    46  	rateK1024 = (1600 - 1024) / 8
    47  )
    48  
    49  // NewLegacyKeccak256 returns a new Digest computing the legacy, non-standard
    50  // Keccak-256 hash.
    51  func NewLegacyKeccak256() *Digest {
    52  	return &Digest{rate: rateK512, outputLen: 32, dsbyte: dsbyteKeccak}
    53  }
    54  
    55  // NewLegacyKeccak512 returns a new Digest computing the legacy, non-standard
    56  // Keccak-512 hash.
    57  func NewLegacyKeccak512() *Digest {
    58  	return &Digest{rate: rateK1024, outputLen: 64, dsbyte: dsbyteKeccak}
    59  }
    60  

View as plain text