github.com/adnan-c/fabric_e2e_couchdb@v0.6.1-preview.0.20170228180935-21ce6b23cf91/core/crypto/primitives/hash.go (about) 1 /* 2 Copyright IBM Corp. 2016 All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package primitives 18 19 import ( 20 "crypto/hmac" 21 "hash" 22 ) 23 24 var ( 25 defaultHash func() hash.Hash 26 defaultHashAlgorithm string 27 ) 28 29 // GetDefaultHash returns the default hash function used by the crypto layer 30 func GetDefaultHash() func() hash.Hash { 31 return defaultHash 32 } 33 34 // GetHashAlgorithm return the default hash algorithm 35 func GetHashAlgorithm() string { 36 return defaultHashAlgorithm 37 } 38 39 // NewHash returns a new hash function 40 func NewHash() hash.Hash { 41 return GetDefaultHash()() 42 } 43 44 // Hash hashes the msh using the predefined hash function 45 func Hash(msg []byte) []byte { 46 h := NewHash() 47 h.Write(msg) 48 return h.Sum(nil) 49 } 50 51 // HMACTruncated hmacs x using key key and truncate to truncation 52 func HMACTruncated(key, x []byte, truncation int) []byte { 53 mac := hmac.New(GetDefaultHash(), key) 54 mac.Write(x) 55 56 return mac.Sum(nil)[:truncation] 57 }