// Copyright 2009 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 sha512 implements the SHA-384, SHA-512, SHA-512/224, and SHA-512/256 // hash algorithms as defined in FIPS 180-4. // // All the hash.Hash implementations returned by this package also // implement encoding.BinaryMarshaler and encoding.BinaryUnmarshaler to // marshal and unmarshal the internal state of the hash. package sha512 import ( "crypto" "crypto/internal/boring" "crypto/internal/fips/sha512" "hash" ) func init() { crypto.RegisterHash(crypto.SHA384, New384) crypto.RegisterHash(crypto.SHA512, New) crypto.RegisterHash(crypto.SHA512_224, New512_224) crypto.RegisterHash(crypto.SHA512_256, New512_256) } const ( // Size is the size, in bytes, of a SHA-512 checksum. Size = 64 // Size224 is the size, in bytes, of a SHA-512/224 checksum. Size224 = 28 // Size256 is the size, in bytes, of a SHA-512/256 checksum. Size256 = 32 // Size384 is the size, in bytes, of a SHA-384 checksum. Size384 = 48 // BlockSize is the block size, in bytes, of the SHA-512/224, // SHA-512/256, SHA-384 and SHA-512 hash functions. BlockSize = 128 ) // New returns a new [hash.Hash] computing the SHA-512 checksum. The Hash // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal // state of the hash. func New() hash.Hash { if boring.Enabled { return boring.NewSHA512() } return sha512.New() } // New512_224 returns a new [hash.Hash] computing the SHA-512/224 checksum. The Hash // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal // state of the hash. func New512_224() hash.Hash { return sha512.New512_224() } // New512_256 returns a new [hash.Hash] computing the SHA-512/256 checksum. The Hash // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal // state of the hash. func New512_256() hash.Hash { return sha512.New512_256() } // New384 returns a new [hash.Hash] computing the SHA-384 checksum. The Hash // also implements [encoding.BinaryMarshaler], [encoding.AppendBinary] and // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal // state of the hash. func New384() hash.Hash { if boring.Enabled { return boring.NewSHA384() } return sha512.New384() } // Sum512 returns the SHA512 checksum of the data. func Sum512(data []byte) [Size]byte { if boring.Enabled { return boring.SHA512(data) } h := New() h.Write(data) var sum [Size]byte h.Sum(sum[:0]) return sum } // Sum384 returns the SHA384 checksum of the data. func Sum384(data []byte) [Size384]byte { if boring.Enabled { return boring.SHA384(data) } h := New384() h.Write(data) var sum [Size384]byte h.Sum(sum[:0]) return sum } // Sum512_224 returns the Sum512/224 checksum of the data. func Sum512_224(data []byte) [Size224]byte { h := New512_224() h.Write(data) var sum [Size224]byte h.Sum(sum[:0]) return sum } // Sum512_256 returns the Sum512/256 checksum of the data. func Sum512_256(data []byte) [Size256]byte { h := New512_256() h.Write(data) var sum [Size256]byte h.Sum(sum[:0]) return sum }