@@ -19,14 +19,23 @@ const (
1919
2020// Many of the tests use two fixtures: V4 signature packets (*.signature), and V3 signature packets (*.signature-v3)
2121
22- // fixtureVariants loads V3 and V4 signature fixture variants based on the v4 fixture path, and returns a map which makes it easy to test both.
23- func fixtureVariants (t * testing.T , v4Path string ) map [string ][]byte {
22+ type fixtureVariant struct {
23+ path string
24+ bytes []byte
25+ isV3 bool
26+ }
27+
28+ // fixtureVariants loads V3 and V4 signature fixture variants based on the v4 fixture path.
29+ func fixtureVariants (t * testing.T , v4Path string ) []fixtureVariant {
2430 v4 , err := os .ReadFile (v4Path )
2531 require .NoError (t , err )
2632 v3Path := v4Path + "-v3"
2733 v3 , err := os .ReadFile (v3Path )
2834 require .NoError (t , err )
29- return map [string ][]byte {v4Path : v4 , v3Path : v3 }
35+ return []fixtureVariant {
36+ {path : v4Path , bytes : v4 , isV3 : false },
37+ {path : v3Path , bytes : v3 , isV3 : true },
38+ }
3039}
3140
3241func TestSigningNotSupportedError (t * testing.T ) {
@@ -56,9 +65,9 @@ func TestNewGPGSigningMechanismInDirectory(t *testing.T) {
5665 mech , err = newGPGSigningMechanismInDirectory ("" )
5766 require .NoError (t , err )
5867 defer mech .Close ()
59- for version , signature := range signatures {
60- _ , _ , err := mech .Verify (signature )
61- assert .Error (t , err , version )
68+ for _ , variant := range signatures {
69+ _ , _ , err := mech .Verify (variant . bytes )
70+ assert .Error (t , err , variant . path )
6271 }
6372
6473 // Similarly, using a newly created empty directory makes TestKeyFingerprint
@@ -67,9 +76,9 @@ func TestNewGPGSigningMechanismInDirectory(t *testing.T) {
6776 mech , err = newGPGSigningMechanismInDirectory (emptyDir )
6877 require .NoError (t , err )
6978 defer mech .Close ()
70- for version , signature := range signatures {
71- _ , _ , err := mech .Verify (signature )
72- assert .Error (t , err , version )
79+ for _ , variant := range signatures {
80+ _ , _ , err := mech .Verify (variant . bytes )
81+ assert .Error (t , err , variant . path )
7382 }
7483
7584 // If pubring.gpg is unreadable in the directory, either initializing
@@ -82,29 +91,29 @@ func TestNewGPGSigningMechanismInDirectory(t *testing.T) {
8291 mech , err = newGPGSigningMechanismInDirectory (unreadableDir )
8392 if err == nil {
8493 defer mech .Close ()
85- for version , signature := range signatures {
86- _ , _ , err := mech .Verify (signature )
87- assert .Error (t , err , version )
94+ for _ , variant := range signatures {
95+ _ , _ , err := mech .Verify (variant . bytes )
96+ assert .Error (t , err , variant . path )
8897 }
8998 }
9099
91100 // Setting the directory parameter to testGPGHomeDirectory makes the key available.
92101 mech , err = newGPGSigningMechanismInDirectory (testGPGHomeDirectory )
93102 require .NoError (t , err )
94103 defer mech .Close ()
95- for version , signature := range signatures {
96- _ , _ , err := mech .Verify (signature )
97- assert .NoError (t , err , version )
104+ for _ , variant := range signatures {
105+ _ , _ , err := mech .Verify (variant . bytes )
106+ assert .NoError (t , err , variant . path )
98107 }
99108
100109 // If we use the default directory mechanism, GNUPGHOME is respected.
101110 t .Setenv ("GNUPGHOME" , testGPGHomeDirectory )
102111 mech , err = newGPGSigningMechanismInDirectory ("" )
103112 require .NoError (t , err )
104113 defer mech .Close ()
105- for version , signature := range signatures {
106- _ , _ , err := mech .Verify (signature )
107- assert .NoError (t , err , version )
114+ for _ , variant := range signatures {
115+ _ , _ , err := mech .Verify (variant . bytes )
116+ assert .NoError (t , err , variant . path )
108117 }
109118}
110119
@@ -116,9 +125,9 @@ func TestNewEphemeralGPGSigningMechanism(t *testing.T) {
116125 assert .Empty (t , keyIdentities )
117126 // Try validating a signature when the key is unknown.
118127 signatures := fixtureVariants (t , "./fixtures/invalid-blob.signature" )
119- for version , signature := range signatures {
120- _ , _ , err := mech .Verify (signature )
121- require .Error (t , err , version )
128+ for _ , variant := range signatures {
129+ _ , _ , err := mech .Verify (variant . bytes )
130+ require .Error (t , err , variant . path )
122131 }
123132
124133 // Successful import
@@ -129,11 +138,11 @@ func TestNewEphemeralGPGSigningMechanism(t *testing.T) {
129138 defer mech .Close ()
130139 assert .Equal (t , []string {TestKeyFingerprint }, keyIdentities )
131140 // After import, the signature should validate.
132- for version , signature := range signatures {
133- content , signingFingerprint , err := mech .Verify (signature )
134- require .NoError (t , err , version )
135- assert .Equal (t , []byte ("This is not JSON\n " ), content , version )
136- assert .Equal (t , TestKeyFingerprint , signingFingerprint , version )
141+ for _ , variant := range signatures {
142+ content , signingFingerprint , err := mech .Verify (variant . bytes )
143+ require .NoError (t , err , variant . path )
144+ assert .Equal (t , []byte ("This is not JSON\n " ), content , variant . path )
145+ assert .Equal (t , TestKeyFingerprint , signingFingerprint , variant . path )
137146 }
138147
139148 // Import of a key with a subkey
@@ -241,28 +250,28 @@ func TestGPGSigningMechanismVerify(t *testing.T) {
241250
242251 // Successful verification
243252 signatures := fixtureVariants (t , "./fixtures/invalid-blob.signature" )
244- for variant , signature := range signatures {
245- content , signingFingerprint , err := mech .Verify (signature )
246- require .NoError (t , err , variant )
247- assert .Equal (t , []byte ("This is not JSON\n " ), content , variant )
248- assert .Equal (t , TestKeyFingerprint , signingFingerprint , variant )
253+ for _ , variant := range signatures {
254+ content , signingFingerprint , err := mech .Verify (variant . bytes )
255+ require .NoError (t , err , variant . path )
256+ assert .Equal (t , []byte ("This is not JSON\n " ), content , variant . path )
257+ assert .Equal (t , TestKeyFingerprint , signingFingerprint , variant . path )
249258 }
250259 // Successful verification of a signature using a subkey
251260 signatures = fixtureVariants (t , "./fixtures/subkey.signature" )
252- for variant , signature := range signatures {
253- content , signingFingerprint , err := mech .Verify (signature )
254- require .NoError (t , err , variant )
255- assert .Equal (t , []byte (`{"critical":{"identity":{"docker-reference":"testing/manifest:latest"},"image":{"docker-manifest-digest":"sha256:20bf21ed457b390829cdbeec8795a7bea1626991fda603e0d01b4e7f60427e55"},"type":"atomic container signature"},"optional":{}}` ), content , variant )
261+ for _ , variant := range signatures {
262+ content , signingFingerprint , err := mech .Verify (variant . bytes )
263+ require .NoError (t , err , variant . path )
264+ assert .Equal (t , []byte (`{"critical":{"identity":{"docker-reference":"testing/manifest:latest"},"image":{"docker-manifest-digest":"sha256:20bf21ed457b390829cdbeec8795a7bea1626991fda603e0d01b4e7f60427e55"},"type":"atomic container signature"},"optional":{}}` ), content , variant . path )
256265 if signingFingerprint != TestKeyFingerprintPrimaryWithSubkey {
257- assert .Equal (t , TestKeyFingerprintSubkeyWithSubkey , signingFingerprint , variant )
266+ assert .Equal (t , TestKeyFingerprintSubkeyWithSubkey , signingFingerprint , variant . path )
258267 withLookup , ok := mech .(signingMechanismWithVerificationIdentityLookup )
259- require .True (t , ok , variant )
268+ require .True (t , ok , variant . path )
260269
261270 primaryKey , err := withLookup .keyIdentityForVerificationKeyIdentity (signingFingerprint )
262- require .NoError (t , err , variant )
271+ require .NoError (t , err , variant . path )
263272 signingFingerprint = primaryKey
264273 }
265- assert .Equal (t , TestKeyFingerprintPrimaryWithSubkey , signingFingerprint , variant )
274+ assert .Equal (t , TestKeyFingerprintPrimaryWithSubkey , signingFingerprint , variant . path )
266275 }
267276
268277 // For extra paranoia, test that we return nil data on error.
@@ -296,23 +305,23 @@ func TestGPGSigningMechanismVerify(t *testing.T) {
296305
297306 // Corrupt signature
298307 signatures = fixtureVariants (t , "./fixtures/corrupt.signature" )
299- for version , signature := range signatures {
300- content , signingFingerprint , err := mech .Verify (signature )
301- assertSigningError (t , content , signingFingerprint , err , version )
308+ for _ , variant := range signatures {
309+ content , signingFingerprint , err := mech .Verify (variant . bytes )
310+ assertSigningError (t , content , signingFingerprint , err , variant . path )
302311 }
303312
304313 // Valid signature with an unknown key
305314 signatures = fixtureVariants (t , "./fixtures/unknown-key.signature" )
306- for version , signature := range signatures {
307- content , signingFingerprint , err := mech .Verify (signature )
308- assertSigningError (t , content , signingFingerprint , err , version )
315+ for _ , variant := range signatures {
316+ content , signingFingerprint , err := mech .Verify (variant . bytes )
317+ assertSigningError (t , content , signingFingerprint , err , variant . path )
309318 }
310319
311320 // Valid signature with a revoked subkey
312321 signatures = fixtureVariants (t , "./fixtures/subkey-revoked.signature" )
313- for version , signature := range signatures {
314- content , signingFingerprint , err := mech .Verify (signature )
315- assertSigningError (t , content , signingFingerprint , err , version )
322+ for _ , variant := range signatures {
323+ content , signingFingerprint , err := mech .Verify (variant . bytes )
324+ assertSigningError (t , content , signingFingerprint , err , variant . path )
316325 }
317326
318327 // The various GPG/GPGME failures cases are not obviously easy to reach.
@@ -367,11 +376,11 @@ func TestGPGSigningMechanismUntrustedSignatureContents(t *testing.T) {
367376
368377 // A valid signature
369378 signatures := fixtureVariants (t , "./fixtures/invalid-blob.signature" )
370- for version , signature := range signatures {
371- content , shortKeyID , err := mech .UntrustedSignatureContents (signature )
372- require .NoError (t , err , version )
373- assert .Equal (t , []byte ("This is not JSON\n " ), content , version )
374- assert .Equal (t , TestKeyShortID , shortKeyID , version )
379+ for _ , variant := range signatures {
380+ content , shortKeyID , err := mech .UntrustedSignatureContents (variant . bytes )
381+ require .NoError (t , err , variant . path )
382+ assert .Equal (t , []byte ("This is not JSON\n " ), content , variant . path )
383+ assert .Equal (t , TestKeyShortID , shortKeyID , variant . path )
375384 }
376385
377386 // Completely invalid signature.
@@ -403,19 +412,19 @@ func TestGPGSigningMechanismUntrustedSignatureContents(t *testing.T) {
403412
404413 // Corrupt signature
405414 signatures = fixtureVariants (t , "./fixtures/corrupt.signature" )
406- for version , signature := range signatures {
407- content , shortKeyID , err := mech .UntrustedSignatureContents (signature )
408- require .NoError (t , err , version )
409- assert .Equal (t , []byte (`{"critical":{"identity":{"docker-reference":"testing/manifest"},"image":{"docker-manifest-digest":"sha256:20bf21ed457b390829cdbeec8795a7bea1626991fda603e0d01b4e7f60427e55"},"type":"atomic container signature"},"optional":{"creator":"atomic ","timestamp":1458239713}}` ), content , version )
410- assert .Equal (t , TestKeyShortID , shortKeyID , version )
415+ for _ , variant := range signatures {
416+ content , shortKeyID , err := mech .UntrustedSignatureContents (variant . bytes )
417+ require .NoError (t , err , variant . path )
418+ assert .Equal (t , []byte (`{"critical":{"identity":{"docker-reference":"testing/manifest"},"image":{"docker-manifest-digest":"sha256:20bf21ed457b390829cdbeec8795a7bea1626991fda603e0d01b4e7f60427e55"},"type":"atomic container signature"},"optional":{"creator":"atomic ","timestamp":1458239713}}` ), content , variant . path )
419+ assert .Equal (t , TestKeyShortID , shortKeyID , variant . path )
411420 }
412421
413422 // Valid signature with an unknown key
414423 signatures = fixtureVariants (t , "./fixtures/unknown-key.signature" )
415- for version , signature := range signatures {
416- content , shortKeyID , err := mech .UntrustedSignatureContents (signature )
417- require .NoError (t , err , version )
418- assert .Equal (t , []byte (`{"critical":{"identity":{"docker-reference":"testing/manifest"},"image":{"docker-manifest-digest":"sha256:20bf21ed457b390829cdbeec8795a7bea1626991fda603e0d01b4e7f60427e55"},"type":"atomic container signature"},"optional":{"creator":"atomic 0.1.13-dev","timestamp":1464633474}}` ), content , version )
419- assert .Equal (t , "5F9470E3BC6C3B55" , shortKeyID , version )
424+ for _ , variant := range signatures {
425+ content , shortKeyID , err := mech .UntrustedSignatureContents (variant . bytes )
426+ require .NoError (t , err , variant . path )
427+ assert .Equal (t , []byte (`{"critical":{"identity":{"docker-reference":"testing/manifest"},"image":{"docker-manifest-digest":"sha256:20bf21ed457b390829cdbeec8795a7bea1626991fda603e0d01b4e7f60427e55"},"type":"atomic container signature"},"optional":{"creator":"atomic 0.1.13-dev","timestamp":1464633474}}` ), content , variant . path )
428+ assert .Equal (t , "5F9470E3BC6C3B55" , shortKeyID , variant . path )
420429 }
421430}
0 commit comments