blob: 98c36c2e811eda3d125f3f3e785dbc47ba963cae (
about) (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package furgit
import (
"crypto/sha1"
"crypto/sha256"
"encoding/hex"
)
const maxHashSize = 32
// Hash represents a Git object identifier.
type Hash struct {
data [maxHashSize]byte
size int
}
// hashFunc is a function that computes a hash from input data.
type hashFunc func([]byte) Hash
// hashFuncs maps hash size to hash function.
var hashFuncs = map[int]hashFunc{
sha1.Size: func(data []byte) Hash {
sum := sha1.Sum(data)
var h Hash
copy(h.data[:], sum[:])
h.size = sha1.Size
return h
},
sha256.Size: func(data []byte) Hash {
sum := sha256.Sum256(data)
var h Hash
copy(h.data[:], sum[:])
h.size = sha256.Size
return h
},
}
// String returns the ID as hex using its internal size.
func (hash Hash) String() string {
return hex.EncodeToString(hash.data[:hash.size])
}
// Bytes returns a mutable copy of the underlying bytes using its internal size.
func (hash Hash) Bytes() []byte {
return append([]byte(nil), hash.data[:hash.size]...)
}
// Size returns the hash size.
func (hash Hash) Size() int {
return hash.size
}
|