// 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 sha256 implements the SHA224 and SHA256 hash algorithms as defined // in FIPS 180-4. package sha256 import ( "crypto" "crypto/internal/boring" _ "crypto/internal/fips/check" "crypto/internal/fips/sha256" "hash" ) func init() { crypto.RegisterHash(crypto.SHA224, New224) crypto.RegisterHash(crypto.SHA256, New) } // The size of a SHA256 checksum in bytes. const Size = 32 // The size of a SHA224 checksum in bytes. const Size224 = 28 // The blocksize of SHA256 and SHA224 in bytes. const BlockSize = 64 // New returns a new [hash.Hash] computing the SHA256 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.NewSHA256() } return sha256.New() } // New224 returns a new [hash.Hash] computing the SHA224 checksum. The Hash // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal // state of the hash. func New224() hash.Hash { if boring.Enabled { return boring.NewSHA224() } return sha256.New224() } // Sum256 returns the SHA256 checksum of the data. func Sum256(data []byte) [Size]byte { if boring.Enabled { return boring.SHA256(data) } h := New() h.Write(data) var sum [Size]byte h.Sum(sum[:0]) return sum } // Sum224 returns the SHA224 checksum of the data. func Sum224(data []byte) [Size224]byte { if boring.Enabled { return boring.SHA224(data) } h := New224() h.Write(data) var sum [Size224]byte h.Sum(sum[:0]) return sum }