| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | 
							- package hash
 
- import (
 
- 	"crypto/hmac"
 
- 	"crypto/md5"
 
- )
 
- type CounterHash interface {
 
- 	Hash(key []byte, counter int64) []byte
 
- }
 
- type StringHash interface {
 
- 	Hash(key []byte, data []byte) []byte
 
- }
 
- type TimeHash struct {
 
- 	baseHash StringHash
 
- }
 
- func NewTimeHash(baseHash StringHash) CounterHash {
 
- 	return TimeHash{
 
- 		baseHash: baseHash,
 
- 	}
 
- }
 
- func (h TimeHash) Hash(key []byte, counter int64) []byte {
 
- 	counterBytes := int64ToBytes(counter)
 
- 	return h.baseHash.Hash(key, counterBytes)
 
- }
 
- type HMACHash struct {
 
- }
 
- func (h HMACHash) Hash(key []byte, data []byte) []byte {
 
- 	hash := hmac.New(md5.New, key)
 
- 	hash.Write(data)
 
- 	return hash.Sum(nil)
 
- }
 
- func int64ToBytes(value int64) []byte {
 
- 	return []byte{
 
- 		byte(value >> 56),
 
- 		byte(value >> 48),
 
- 		byte(value >> 40),
 
- 		byte(value >> 32),
 
- 		byte(value >> 24),
 
- 		byte(value >> 16),
 
- 		byte(value >> 8),
 
- 		byte(value),
 
- 	}
 
- }
 
 
  |