Skip to content

Commit fafc487

Browse files
committed
Remove unused MarshalJSON methods
Remove MarshalJSON methods from slsaProvenance, slsaProvenanceV1, and provenance types as they are never invoked during JSON serialization. These attestation objects are wrapped in AttestationResult struct, that provides its own structure, so the custom MarshalJSON methods on the inner attestation types are never called by json.Marshal(). The attestation objects themselves are only used internally for policy evaluation and are never directly serialized to JSON in the current codebase. Co-authored-by: Claude Code <[email protected]> Ref: https://issues.redhat.com/browse/EC-1581
1 parent 8aaa4bd commit fafc487

File tree

6 files changed

+0
-214
lines changed

6 files changed

+0
-214
lines changed

internal/attestation/attestation.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -166,19 +166,3 @@ func (p provenance) Signatures() []signature.EntitySignature {
166166
func (p provenance) Subject() []in_toto.Subject {
167167
return p.statement.Subject
168168
}
169-
170-
// Todo: It seems odd that this does not contain the statement.
171-
// (See also the equivalent method in slsa_provenance_02.go)
172-
func (p provenance) MarshalJSON() ([]byte, error) {
173-
val := struct {
174-
Type string `json:"type"`
175-
PredicateType string `json:"predicateType"`
176-
Signatures []signature.EntitySignature `json:"signatures"`
177-
}{
178-
Type: p.Type(),
179-
PredicateType: p.PredicateType(),
180-
Signatures: p.Signatures(),
181-
}
182-
183-
return json.Marshal(val)
184-
}

internal/attestation/attestation_test.go

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package attestation
2020

2121
import (
2222
"crypto/x509"
23-
"encoding/json"
2423
"fmt"
2524
"testing"
2625

@@ -277,98 +276,3 @@ func TestProvenance_Subject(t *testing.T) {
277276
})
278277
}
279278
}
280-
281-
func TestProvenance_MarshalJSON(t *testing.T) {
282-
mockSig1 := signature.EntitySignature{
283-
KeyID: "key1",
284-
Signature: "sig1",
285-
}
286-
mockSig2 := signature.EntitySignature{
287-
KeyID: "key2",
288-
Signature: "sig2",
289-
}
290-
291-
tests := []struct {
292-
name string
293-
provenance provenance
294-
expectedErr bool
295-
validate func(*testing.T, []byte)
296-
}{
297-
{
298-
name: "marshals successfully with single signature",
299-
provenance: provenance{
300-
statement: in_toto.Statement{
301-
StatementHeader: in_toto.StatementHeader{
302-
PredicateType: "https://example.com/predicate/v1",
303-
},
304-
},
305-
signatures: []signature.EntitySignature{mockSig1},
306-
},
307-
expectedErr: false,
308-
validate: func(t *testing.T, data []byte) {
309-
var result map[string]interface{}
310-
err := json.Unmarshal(data, &result)
311-
assert.NoError(t, err)
312-
assert.Equal(t, "https://in-toto.io/Statement/v0.1", result["type"])
313-
assert.Equal(t, "https://example.com/predicate/v1", result["predicateType"])
314-
assert.Len(t, result["signatures"], 1)
315-
},
316-
},
317-
{
318-
name: "marshals successfully with multiple signatures",
319-
provenance: provenance{
320-
statement: in_toto.Statement{
321-
StatementHeader: in_toto.StatementHeader{
322-
PredicateType: "https://example.com/predicate/v2",
323-
},
324-
},
325-
signatures: []signature.EntitySignature{mockSig1, mockSig2},
326-
},
327-
expectedErr: false,
328-
validate: func(t *testing.T, data []byte) {
329-
var result map[string]interface{}
330-
err := json.Unmarshal(data, &result)
331-
assert.NoError(t, err)
332-
assert.Equal(t, "https://in-toto.io/Statement/v0.1", result["type"])
333-
assert.Equal(t, "https://example.com/predicate/v2", result["predicateType"])
334-
assert.Len(t, result["signatures"], 2)
335-
},
336-
},
337-
{
338-
name: "marshals successfully with empty signatures",
339-
provenance: provenance{
340-
statement: in_toto.Statement{
341-
StatementHeader: in_toto.StatementHeader{
342-
PredicateType: "https://example.com/predicate/v3",
343-
},
344-
},
345-
signatures: []signature.EntitySignature{},
346-
},
347-
expectedErr: false,
348-
validate: func(t *testing.T, data []byte) {
349-
var result map[string]interface{}
350-
err := json.Unmarshal(data, &result)
351-
assert.NoError(t, err)
352-
assert.Equal(t, "https://in-toto.io/Statement/v0.1", result["type"])
353-
assert.Equal(t, "https://example.com/predicate/v3", result["predicateType"])
354-
assert.Len(t, result["signatures"], 0)
355-
},
356-
},
357-
}
358-
359-
for _, tt := range tests {
360-
t.Run(tt.name, func(t *testing.T) {
361-
data, err := tt.provenance.MarshalJSON()
362-
363-
if tt.expectedErr {
364-
assert.Error(t, err)
365-
return
366-
}
367-
368-
assert.NoError(t, err)
369-
if tt.validate != nil {
370-
tt.validate(t, data)
371-
}
372-
})
373-
}
374-
}

internal/attestation/slsa_provenance_02.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -97,21 +97,3 @@ func (a slsaProvenance) Signatures() []signature.EntitySignature {
9797
func (a slsaProvenance) Subject() []in_toto.Subject {
9898
return a.statement.Subject
9999
}
100-
101-
// Todo: It seems odd that this does not contain the statement.
102-
// (See also the equivalent method in attestation.go)
103-
func (a slsaProvenance) MarshalJSON() ([]byte, error) {
104-
val := struct {
105-
Type string `json:"type"`
106-
PredicateType string `json:"predicateType"`
107-
PredicateBuildType string `json:"predicateBuildType"`
108-
Signatures []signature.EntitySignature `json:"signatures"`
109-
}{
110-
Type: a.statement.Type,
111-
PredicateType: a.statement.PredicateType,
112-
PredicateBuildType: a.statement.Predicate.BuildType,
113-
Signatures: a.signatures,
114-
}
115-
116-
return json.Marshal(val)
117-
}

internal/attestation/slsa_provenance_02_test.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -330,35 +330,6 @@ func TestSLSAProvenanceFromSignature(t *testing.T) {
330330
}
331331
}
332332

333-
func TestMarshal(t *testing.T) {
334-
sig := mockSignature{&mock.Mock{}}
335-
336-
sig1 := `{"keyid": "ignored-1", "sig": "ignored-1"}`
337-
sig2 := `{"keyid": "ignored-2", "sig": "ignored-2"}`
338-
payload := encode(`{
339-
"_type": "https://in-toto.io/Statement/v0.1",
340-
"predicateType": "https://slsa.dev/provenance/v0.2",
341-
"predicate": {"buildType": "https://my.build.type"}
342-
}`)
343-
sig.On("MediaType").Return(types.MediaType(ct.DssePayloadType), nil)
344-
sig.On("Uncompressed").Return(buffy(
345-
fmt.Sprintf(`{"payload": "%s", "signatures": [%s, %s]}`, payload, sig1, sig2),
346-
), nil)
347-
sig.On("Base64Signature").Return("sig-from-cert", nil)
348-
sig.On("Cert").Return(signature.ParseChainguardReleaseCert(), nil)
349-
sig.On("Chain").Return(signature.ParseSigstoreChainCert(), nil)
350-
351-
att, err := SLSAProvenanceFromSignature(sig)
352-
353-
require.NoError(t, err)
354-
355-
j, err := json.Marshal(att)
356-
357-
require.NoError(t, err)
358-
359-
snaps.MatchJSON(t, j)
360-
}
361-
362333
func encode(payload string) string {
363334
return base64.StdEncoding.EncodeToString([]byte(payload))
364335
}

internal/attestation/slsa_provenance_v1.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -97,21 +97,3 @@ func (a slsaProvenanceV1) Signatures() []signature.EntitySignature {
9797
func (a slsaProvenanceV1) Subject() []in_toto.Subject {
9898
return a.statement.Subject
9999
}
100-
101-
// Todo: It seems odd that this does not contain the statement.
102-
// (See also the equivalent method in attestation.go)
103-
func (a slsaProvenanceV1) MarshalJSON() ([]byte, error) {
104-
val := struct {
105-
Type string `json:"type"`
106-
PredicateType string `json:"predicateType"`
107-
PredicateBuildType string `json:"predicateBuildType"`
108-
Signatures []signature.EntitySignature `json:"signatures"`
109-
}{
110-
Type: a.statement.Type,
111-
PredicateType: a.statement.PredicateType,
112-
PredicateBuildType: a.statement.Predicate.BuildDefinition.BuildType,
113-
Signatures: a.signatures,
114-
}
115-
116-
return json.Marshal(val)
117-
}

internal/attestation/slsa_provenance_v1_test.go

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -245,43 +245,6 @@ func TestSLSAProvenanceFromSignatureV1(t *testing.T) {
245245
}
246246
}
247247

248-
func TestMarshalV1(t *testing.T) {
249-
sig := mockSignature{&mock.Mock{}}
250-
251-
sig1 := `{"keyid": "ignored-1", "sig": "ignored-1"}`
252-
sig2 := `{"keyid": "ignored-2", "sig": "ignored-2"}`
253-
payload := encode(`{
254-
"_type": "https://in-toto.io/Statement/v0.1",
255-
"predicateType": "https://slsa.dev/provenance/v1",
256-
"predicate": {
257-
"buildDefinition": {
258-
"buildType": "https://my.build.type",
259-
"externalParameters": {}
260-
},
261-
"runDetails": {
262-
"builder": {"id": "https://my.builder"}
263-
}
264-
}
265-
}`)
266-
sig.On("MediaType").Return(types.MediaType(ct.DssePayloadType), nil)
267-
sig.On("Uncompressed").Return(buffy(
268-
fmt.Sprintf(`{"payload": "%s", "signatures": [%s, %s]}`, payload, sig1, sig2),
269-
), nil)
270-
sig.On("Base64Signature").Return("sig-from-cert", nil)
271-
sig.On("Cert").Return(signature.ParseChainguardReleaseCert(), nil)
272-
sig.On("Chain").Return(signature.ParseSigstoreChainCert(), nil)
273-
274-
att, err := SLSAProvenanceFromSignatureV1(sig)
275-
276-
require.NoError(t, err)
277-
278-
j, err := json.Marshal(att)
279-
280-
require.NoError(t, err)
281-
282-
snaps.MatchJSON(t, j)
283-
}
284-
285248
func TestSLSAProvenanceV1_Subject(t *testing.T) {
286249
mockSubject1 := in_toto.Subject{
287250
Name: "registry.io/example/image@sha256:abc123",

0 commit comments

Comments
 (0)