Source file src/crypto/sha512/sha512.go
1 // Copyright 2009 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 sha512 implements the SHA-384, SHA-512, SHA-512/224, and SHA-512/256 6 // hash algorithms as defined in FIPS 180-4. 7 // 8 // All the hash.Hash implementations returned by this package also 9 // implement encoding.BinaryMarshaler and encoding.BinaryUnmarshaler to 10 // marshal and unmarshal the internal state of the hash. 11 package sha512 12 13 import ( 14 "crypto" 15 "crypto/internal/boring" 16 "crypto/internal/fips/sha512" 17 "hash" 18 ) 19 20 func init() { 21 crypto.RegisterHash(crypto.SHA384, New384) 22 crypto.RegisterHash(crypto.SHA512, New) 23 crypto.RegisterHash(crypto.SHA512_224, New512_224) 24 crypto.RegisterHash(crypto.SHA512_256, New512_256) 25 } 26 27 const ( 28 // Size is the size, in bytes, of a SHA-512 checksum. 29 Size = 64 30 31 // Size224 is the size, in bytes, of a SHA-512/224 checksum. 32 Size224 = 28 33 34 // Size256 is the size, in bytes, of a SHA-512/256 checksum. 35 Size256 = 32 36 37 // Size384 is the size, in bytes, of a SHA-384 checksum. 38 Size384 = 48 39 40 // BlockSize is the block size, in bytes, of the SHA-512/224, 41 // SHA-512/256, SHA-384 and SHA-512 hash functions. 42 BlockSize = 128 43 ) 44 45 // New returns a new [hash.Hash] computing the SHA-512 checksum. The Hash 46 // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and 47 // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal 48 // state of the hash. 49 func New() hash.Hash { 50 if boring.Enabled { 51 return boring.NewSHA512() 52 } 53 return sha512.New() 54 } 55 56 // New512_224 returns a new [hash.Hash] computing the SHA-512/224 checksum. The Hash 57 // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and 58 // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal 59 // state of the hash. 60 func New512_224() hash.Hash { 61 return sha512.New512_224() 62 } 63 64 // New512_256 returns a new [hash.Hash] computing the SHA-512/256 checksum. The Hash 65 // also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and 66 // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal 67 // state of the hash. 68 func New512_256() hash.Hash { 69 return sha512.New512_256() 70 } 71 72 // New384 returns a new [hash.Hash] computing the SHA-384 checksum. The Hash 73 // also implements [encoding.BinaryMarshaler], [encoding.AppendBinary] and 74 // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal 75 // state of the hash. 76 func New384() hash.Hash { 77 if boring.Enabled { 78 return boring.NewSHA384() 79 } 80 return sha512.New384() 81 } 82 83 // Sum512 returns the SHA512 checksum of the data. 84 func Sum512(data []byte) [Size]byte { 85 if boring.Enabled { 86 return boring.SHA512(data) 87 } 88 h := New() 89 h.Write(data) 90 var sum [Size]byte 91 h.Sum(sum[:0]) 92 return sum 93 } 94 95 // Sum384 returns the SHA384 checksum of the data. 96 func Sum384(data []byte) [Size384]byte { 97 if boring.Enabled { 98 return boring.SHA384(data) 99 } 100 h := New384() 101 h.Write(data) 102 var sum [Size384]byte 103 h.Sum(sum[:0]) 104 return sum 105 } 106 107 // Sum512_224 returns the Sum512/224 checksum of the data. 108 func Sum512_224(data []byte) [Size224]byte { 109 h := New512_224() 110 h.Write(data) 111 var sum [Size224]byte 112 h.Sum(sum[:0]) 113 return sum 114 } 115 116 // Sum512_256 returns the Sum512/256 checksum of the data. 117 func Sum512_256(data []byte) [Size256]byte { 118 h := New512_256() 119 h.Write(data) 120 var sum [Size256]byte 121 h.Sum(sum[:0]) 122 return sum 123 } 124