Skip to content

Commit 52c1782

Browse files
authored
chore(attestations): add STRING materials to referrer graph (#1680)
Signed-off-by: Jose I. Paris <[email protected]>
1 parent e103df6 commit 52c1782

File tree

10 files changed

+283
-238
lines changed

10 files changed

+283
-238
lines changed

app/controlplane/api/gen/frontend/attestation/v1/crafting_state.ts

Lines changed: 19 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.KeyVal.jsonschema.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.KeyVal.schema.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/attestation/crafter/api/attestation/v1/crafting_state.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (m *Attestation_Material) NormalizedOutput() (*NormalizedMaterialOutput, er
6868
}
6969

7070
if a := m.GetString_(); a != nil {
71-
return &NormalizedMaterialOutput{Content: []byte(a.Value)}, nil
71+
return &NormalizedMaterialOutput{Content: []byte(a.Value), Digest: a.GetDigest()}, nil
7272
}
7373

7474
if a := m.GetArtifact(); a != nil {

pkg/attestation/crafter/api/attestation/v1/crafting_state.pb.go

Lines changed: 242 additions & 232 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/attestation/crafter/api/attestation/v1/crafting_state.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ message Attestation {
5858
message KeyVal {
5959
string id = 1 [(buf.validate.field).string.min_len = 1];
6060
string value = 2 [(buf.validate.field).string.min_len = 1];
61+
62+
string digest = 3 [(buf.validate.field).string.min_len = 1];
6163
}
6264

6365
message ContainerImage {

pkg/attestation/crafter/materials/materials_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestCraft(t *testing.T) {
4545
assert.Equal(contractAPI.CraftingSchema_Material_STRING, got.MaterialType)
4646
assert.False(got.UploadedToCas)
4747
assert.Equal(got.GetString_(), &attestationApi.Attestation_Material_KeyVal{
48-
Id: "test", Value: "test-value",
48+
Id: "test", Value: "test-value", Digest: "sha256:5b1406fffc9de5537eb35a845c99521f26fba0e772d58b42e09f4221b9e043ae",
4949
})
5050

5151
// Timestamp

pkg/attestation/crafter/materials/string.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ package materials
1818
import (
1919
"context"
2020
"fmt"
21+
"strings"
2122

2223
schemaapi "github.com/chainloop-dev/chainloop/app/controlplane/api/workflowcontract/v1"
2324
api "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/api/attestation/v1"
25+
cr_v1 "github.com/google/go-containerregistry/pkg/v1"
2426
)
2527

2628
type StringCrafter struct {
@@ -38,11 +40,15 @@ func NewStringCrafter(materialSchema *schemaapi.CraftingSchema_Material) (*Strin
3840
}
3941

4042
func (i *StringCrafter) Craft(_ context.Context, value string) (*api.Attestation_Material, error) {
43+
hash, _, err := cr_v1.SHA256(strings.NewReader(value))
44+
if err != nil {
45+
return nil, fmt.Errorf("generating digest: %w", err)
46+
}
4147
return &api.Attestation_Material{
4248
MaterialType: i.input.Type,
4349
M: &api.Attestation_Material_String_{
4450
String_: &api.Attestation_Material_KeyVal{
45-
Id: i.input.Name, Value: value,
51+
Id: i.input.Name, Value: value, Digest: hash.String(),
4652
},
4753
},
4854
}, nil

pkg/attestation/crafter/materials/string_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,6 @@ func TestStringCraft(t *testing.T) {
7777
assert.Equal(contractAPI.CraftingSchema_Material_STRING, got.MaterialType)
7878
assert.False(got.UploadedToCas)
7979
assert.Equal(got.GetString_(), &attestationApi.Attestation_Material_KeyVal{
80-
Id: "test", Value: "value",
80+
Id: "test", Value: "value", Digest: "sha256:cd42404d52ad55ccfa9aca4adc828aa5800ad9d385a0671fbcbf724118320619",
8181
})
8282
}

pkg/attestation/renderer/chainloop/v02.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,10 @@ func normalizeMaterial(material *intoto.ResourceDescriptor) (*NormalizedMaterial
462462
}
463463

464464
m.Value = string(material.Content)
465+
hash, ok := material.Digest["sha256"]
466+
if ok {
467+
m.Hash = &crv1.Hash{Algorithm: "sha256", Hex: hash}
468+
}
465469

466470
return m, nil
467471
}

0 commit comments

Comments
 (0)