Newer
Older
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package hashmdl
import (
"crypto/md5"
"os"
"strconv"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/filemdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"
OneOfOne "github.com/OneOfOne/xxhash"
)
// GetHashChecksumOfByteArray Get Hash Check sum
func GetHashChecksumOfByteArray(byteArray []byte) (uint64, error) {
if byteArray == nil || len(byteArray) <= 0 {
loggermdl.LogError("data is nil or length is less than or equal to zero")
return 0, errormdl.Wrap("data is nil or length is less than or equal to zero")
}
hash := OneOfOne.New64()
_, writeerr := hash.Write(byteArray)
if errormdl.CheckErr(writeerr) != nil {
loggermdl.LogError("error occured while calling hash.Write : ", errormdl.CheckErr(writeerr))
return 0, errormdl.CheckErr(writeerr)
}
return hash.Sum64(), nil
}
//GetHashChecksumOfFile Get Hash Check sum
func GetHashChecksumOfFile(filePath string) (uint64, error) {
byteArray, readerr := filemdl.ReadFile(filePath)
if errormdl.CheckErr(readerr) != nil {
loggermdl.LogError("error occured while calling hash.Write : ", errormdl.CheckErr(readerr))
return 0, errormdl.CheckErr(readerr)
}
hash, hasherr := GetHashChecksumOfByteArray(byteArray)
if errormdl.CheckErr1(hasherr) != nil {
loggermdl.LogError("error occured while calling GetHashChecksumOfByteArray : ", errormdl.CheckErr1(hasherr))
return 0, errormdl.CheckErr1(hasherr)
}
return hash, nil
}
// GetAtributeBasedHash this func will return the hash calcluted on basis of file attributes
func GetAtributeBasedHash(filePath string) (string, error) {
fileInfo, statErr := os.Stat(filePath)
if errormdl.CheckErr(statErr) != nil {
loggermdl.LogError("error occured while getting stats of file : ", filePath, " : ", errormdl.CheckErr(statErr))
return "", errormdl.CheckErr(statErr)
}
fileModTime := fileInfo.ModTime()
fileLength := fileInfo.Size()
customFileHash := strconv.FormatInt(fileModTime.Unix(), 10) + strconv.FormatInt(fileLength, 10)
return customFileHash, nil
}
// TODO: implement another hashing algo instead of MD5
// Get128BitHash returns 128 bit hash
func Get128BitHash(data []byte) ([16]byte, error) {
if data == nil || len(data) <= 0 {
return [16]byte{}, errormdl.Wrap("data is nil or length is less than or equal to zero")
}
return md5.Sum(data), nil
}