@@ -19,7 +19,9 @@ package libgit2
19
19
import (
20
20
"bufio"
21
21
"bytes"
22
+ "crypto/md5"
22
23
"crypto/sha1"
24
+ "crypto/sha256"
23
25
"crypto/x509"
24
26
"fmt"
25
27
"net/url"
@@ -135,7 +137,7 @@ func (s *PublicKeyAuth) Method(secret corev1.Secret) (*git.Auth, error) {
135
137
}
136
138
certCallback := func (cert * git2go.Certificate , valid bool , hostname string ) git2go.ErrorCode {
137
139
for _ , k := range kk {
138
- if k .matches (hostname , cert .Hostkey . HashSHA1 [:] ) {
140
+ if k .matches (hostname , cert .Hostkey ) {
139
141
return git2go .ErrOk
140
142
}
141
143
}
@@ -173,13 +175,28 @@ func parseKnownHosts(s string) ([]knownKey, error) {
173
175
return knownHosts , nil
174
176
}
175
177
176
- func (k knownKey ) matches (host string , key [] byte ) bool {
178
+ func (k knownKey ) matches (host string , hostkey git2go. HostkeyCertificate ) bool {
177
179
if ! containsHost (k .hosts , host ) {
178
180
return false
179
181
}
180
182
181
- hash := sha1 .Sum ([]byte (k .key .Marshal ()))
182
- if bytes .Compare (hash [:], key ) != 0 {
183
+ var hash []byte
184
+ var key []byte
185
+ switch hostkey .Kind {
186
+ case git2go .HostkeyMD5 :
187
+ sum := md5 .Sum (k .key .Marshal ())
188
+ hash = sum [:]
189
+ key = hostkey .HashMD5 [:]
190
+ case git2go .HostkeySHA1 :
191
+ sum := sha1 .Sum (k .key .Marshal ())
192
+ hash = sum [:]
193
+ key = hostkey .HashSHA1 [:]
194
+ case git2go .HostkeySHA256 :
195
+ sum := sha256 .Sum256 (k .key .Marshal ())
196
+ hash = sum [:]
197
+ key = hostkey .HashSHA256 [:]
198
+ }
199
+ if bytes .Compare (hash , key ) != 0 {
183
200
return false
184
201
}
185
202
0 commit comments