/
hash.go
201 lines (172 loc) · 3.38 KB
/
hash.go
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
package hash
import (
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"crypto/sha512"
"golang.org/x/crypto/sha3"
)
type SumType = int8
const (
SumMD5 SumType = iota
SumSHA1
SumSHA224
SumSHA256
SumSHA384
SumSHA512
SumSHA512_256
SumSHA3_224
SumSHA3_256
SumSHA3_384
SumSHA3_512
)
func MD5(data []byte) [16]byte {
return md5.Sum(data)
}
func MD5String(data string) [16]byte {
return MD5([]byte(data))
}
func SHA1(data []byte) [20]byte {
return sha1.Sum(data)
}
func SHA1String(data string) [20]byte {
return SHA1([]byte(data))
}
func SHA224(data []byte) [28]byte {
return sha256.Sum224(data)
}
func SHA224String(data string) [28]byte {
return SHA224([]byte(data))
}
func SHA256(data []byte) [32]byte {
return sha256.Sum256(data)
}
func SHA256String(data string) [32]byte {
return SHA256([]byte(data))
}
func SHA384(data []byte) [48]byte {
return sha512.Sum384(data)
}
func SHA384String(data string) [48]byte {
return SHA384([]byte(data))
}
func SHA512(data []byte) [64]byte {
return sha512.Sum512(data)
}
func SHA512String(data string) [64]byte {
return SHA512([]byte(data))
}
func SHA512_224(data []byte) [28]byte {
return sha3.Sum224(data)
}
func SHA512_224String(data string) [28]byte {
return SHA512_224([]byte(data))
}
func SHA512_256(data []byte) [32]byte {
return sha512.Sum512_256(data)
}
func SHA512_256String(data string) [32]byte {
return SHA512_256([]byte(data))
}
func SHA3_224(data []byte) [28]byte {
return sha3.Sum224(data)
}
func SHA3_224String(data string) [28]byte {
return SHA3_224([]byte(data))
}
func SHA3_256(data []byte) [32]byte {
return sha3.Sum256(data)
}
func SHA3_256String(data string) [32]byte {
return SHA3_256([]byte(data))
}
func SHA3_384(data []byte) [48]byte {
return sha3.Sum384(data)
}
func SHA3_384String(data string) [48]byte {
return SHA3_384([]byte(data))
}
func SHA3_512(data []byte) [64]byte {
return sha3.Sum512(data)
}
func SHA3_512String(data string) [64]byte {
return sha3.Sum512([]byte(data))
}
func Hash(sumType SumType, data []byte) []byte {
switch sumType {
case SumMD5:
v := MD5(data)
return v[:]
case SumSHA1:
v := SHA1(data)
return v[:]
case SumSHA224:
v := SHA224(data)
return v[:]
case SumSHA256:
v := SHA256(data)
return v[:]
case SumSHA384:
v := SHA384(data)
return v[:]
case SumSHA512:
v := SHA512(data)
return v[:]
case SumSHA512_256:
v := SHA512_256(data)
return v[:]
case SumSHA3_224:
v := SHA3_224(data)
return v[:]
case SumSHA3_256:
v := SHA3_256(data)
return v[:]
case SumSHA3_384:
v := SHA3_384(data)
return v[:]
case SumSHA3_512:
v := SHA3_512(data)
return v[:]
default:
panic("invalid sum hash type")
}
}
func HashString(sumType SumType, data string) []byte {
switch sumType {
case SumMD5:
v := MD5String(data)
return v[:]
case SumSHA1:
v := SHA1String(data)
return v[:]
case SumSHA224:
v := SHA224String(data)
return v[:]
case SumSHA256:
v := SHA256String(data)
return v[:]
case SumSHA384:
v := SHA384String(data)
return v[:]
case SumSHA512:
v := SHA512String(data)
return v[:]
case SumSHA512_256:
v := SHA512_256String(data)
return v[:]
case SumSHA3_224:
v := SHA3_224String(data)
return v[:]
case SumSHA3_256:
v := SHA3_256String(data)
return v[:]
case SumSHA3_384:
v := SHA3_384String(data)
return v[:]
case SumSHA3_512:
v := SHA3_512String(data)
return v[:]
default:
panic("invalid sum hash type")
}
}