github.com/spotify/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/src/pkg/crypto/crypto.go (about) 1 // Copyright 2011 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 crypto collects common cryptographic constants. 6 package crypto 7 8 import ( 9 "hash" 10 "strconv" 11 ) 12 13 // Hash identifies a cryptographic hash function that is implemented in another 14 // package. 15 type Hash uint 16 17 const ( 18 MD4 Hash = 1 + iota // import code.google.com/p/go.crypto/md4 19 MD5 // import crypto/md5 20 SHA1 // import crypto/sha1 21 SHA224 // import crypto/sha256 22 SHA256 // import crypto/sha256 23 SHA384 // import crypto/sha512 24 SHA512 // import crypto/sha512 25 MD5SHA1 // no implementation; MD5+SHA1 used for TLS RSA 26 RIPEMD160 // import code.google.com/p/go.crypto/ripemd160 27 maxHash 28 ) 29 30 var digestSizes = []uint8{ 31 MD4: 16, 32 MD5: 16, 33 SHA1: 20, 34 SHA224: 28, 35 SHA256: 32, 36 SHA384: 48, 37 SHA512: 64, 38 MD5SHA1: 36, 39 RIPEMD160: 20, 40 } 41 42 // Size returns the length, in bytes, of a digest resulting from the given hash 43 // function. It doesn't require that the hash function in question be linked 44 // into the program. 45 func (h Hash) Size() int { 46 if h > 0 && h < maxHash { 47 return int(digestSizes[h]) 48 } 49 panic("crypto: Size of unknown hash function") 50 } 51 52 var hashes = make([]func() hash.Hash, maxHash) 53 54 // New returns a new hash.Hash calculating the given hash function. New panics 55 // if the hash function is not linked into the binary. 56 func (h Hash) New() hash.Hash { 57 if h > 0 && h < maxHash { 58 f := hashes[h] 59 if f != nil { 60 return f() 61 } 62 } 63 panic("crypto: requested hash function #" + strconv.Itoa(int(h)) + " is unavailable") 64 } 65 66 // Available reports whether the given hash function is linked into the binary. 67 func (h Hash) Available() bool { 68 return h < maxHash && hashes[h] != nil 69 } 70 71 // RegisterHash registers a function that returns a new instance of the given 72 // hash function. This is intended to be called from the init function in 73 // packages that implement hash functions. 74 func RegisterHash(h Hash, f func() hash.Hash) { 75 if h >= maxHash { 76 panic("crypto: RegisterHash of unknown hash function") 77 } 78 hashes[h] = f 79 } 80 81 // PublicKey represents a public key using an unspecified algorithm. 82 type PublicKey interface{} 83 84 // PrivateKey represents a private key using an unspecified algorithm. 85 type PrivateKey interface{}