@@ -17,9 +17,11 @@ limitations under the License.
17
17
package libgit2
18
18
19
19
import (
20
+ "encoding/base64"
20
21
"reflect"
21
22
"testing"
22
23
24
+ git2go "github.com/libgit2/git2go/v31"
23
25
corev1 "k8s.io/api/core/v1"
24
26
25
27
"github.com/fluxcd/source-controller/pkg/git"
@@ -145,3 +147,51 @@ func TestPublicKeyStrategy_Method(t *testing.T) {
145
147
})
146
148
}
147
149
}
150
+
151
+ func TestKnownKeyHash (t * testing.T ) {
152
+ tests := []struct {
153
+ name string
154
+ hostkey git2go.HostkeyCertificate
155
+ wantMatches bool
156
+ }{
157
+ {"good sha256 hostkey" , git2go.HostkeyCertificate {Kind : git2go .HostkeySHA256 , HashSHA256 : sha256Fingerprint ("nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8" )}, true },
158
+ {"bad sha256 hostkey" , git2go.HostkeyCertificate {Kind : git2go .HostkeySHA256 , HashSHA256 : sha256Fingerprint ("ROQFvPThGrW4RuWLoL9tq9I9zJ42fK4XywyRtbOz/EQ" )}, false },
159
+ {"good sha1 hostkey" , git2go.HostkeyCertificate {Kind : git2go .HostkeySHA1 , HashSHA1 : sha1Fingerprint ("v2toJdKXfFEaR1u++4iq1UqSrHM" )}, true },
160
+ {"invalid hostkey" , git2go.HostkeyCertificate {}, false },
161
+ }
162
+ for _ , tt := range tests {
163
+ t .Run (tt .name , func (t * testing.T ) {
164
+ knownKeys , err := parseKnownHosts (knownHostsFixture )
165
+ if err != nil {
166
+ t .Error (err )
167
+ return
168
+ }
169
+
170
+ matches := knownKeys [0 ].matches ("github.com" , tt .hostkey )
171
+ if matches != tt .wantMatches {
172
+ t .Errorf ("Method() matches = %v, wantMatches %v" , matches , tt .wantMatches )
173
+ return
174
+ }
175
+ })
176
+ }
177
+ }
178
+
179
+ func sha1Fingerprint (in string ) [20 ]byte {
180
+ d , err := base64 .RawStdEncoding .DecodeString (in )
181
+ if err != nil {
182
+ panic (err )
183
+ }
184
+ var out [20 ]byte
185
+ copy (out [:], d )
186
+ return out
187
+ }
188
+
189
+ func sha256Fingerprint (in string ) [32 ]byte {
190
+ d , err := base64 .RawStdEncoding .DecodeString (in )
191
+ if err != nil {
192
+ panic (err )
193
+ }
194
+ var out [32 ]byte
195
+ copy (out [:], d )
196
+ return out
197
+ }
0 commit comments