osbuild2: add new FDOStage for org.osbuild.fdo
The stage takes no options but a single file input that contains the root certs. Add the stage with a helper constructor that will generate the needed reference based on the actual certificate data. Add corresponding tests.
This commit is contained in:
parent
6d383ec89a
commit
892cfb67cc
2 changed files with 71 additions and 0 deletions
40
internal/osbuild2/fdo_stage.go
Normal file
40
internal/osbuild2/fdo_stage.go
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
package osbuild2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FDOStageReferences []string
|
||||||
|
|
||||||
|
func (FDOStageReferences) isReferences() {}
|
||||||
|
|
||||||
|
type FDOStageInput struct {
|
||||||
|
inputCommon
|
||||||
|
References FDOStageReferences `json:"references"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (FDOStageInput) isStageInput() {}
|
||||||
|
|
||||||
|
type FDOStageInputs struct {
|
||||||
|
RootCerts *FDOStageInput `json:"rootcerts"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (FDOStageInputs) isStageInputs() {}
|
||||||
|
|
||||||
|
// NewFDOStageForCert creates FDOStage
|
||||||
|
func NewFDOStageForRootCerts(rootCertsData string) *Stage {
|
||||||
|
|
||||||
|
dataBytes := []byte(rootCertsData)
|
||||||
|
rootCertsInputHash := fmt.Sprintf("sha256:%x", sha256.Sum256(dataBytes))
|
||||||
|
|
||||||
|
input := new(FDOStageInput)
|
||||||
|
input.Type = "org.osbuild.files"
|
||||||
|
input.Origin = "org.osbuild.source"
|
||||||
|
input.References = FDOStageReferences{rootCertsInputHash}
|
||||||
|
|
||||||
|
return &Stage{
|
||||||
|
Type: "org.osbuild.fdo",
|
||||||
|
Inputs: &FDOStageInputs{RootCerts: input},
|
||||||
|
}
|
||||||
|
}
|
||||||
31
internal/osbuild2/fdo_stage_test.go
Normal file
31
internal/osbuild2/fdo_stage_test.go
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
package osbuild2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewFDOStageForRootCerts(t *testing.T) {
|
||||||
|
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
data string
|
||||||
|
hash string
|
||||||
|
}{
|
||||||
|
{"42\n", "sha256:084c799cd551dd1d8d5c5f9a5d593b2e931f5e36122ee5c793c1d08a19839cc0"},
|
||||||
|
{"Hallo Welt\n", "sha256:f950375066d74787f31cbd8f9f91c71819357cad243fb9d4a0d9ef4fa76709e0"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
stage := NewFDOStageForRootCerts(tt.data)
|
||||||
|
|
||||||
|
inputs := stage.Inputs.(*FDOStageInputs)
|
||||||
|
certs := inputs.RootCerts
|
||||||
|
|
||||||
|
assert.Len(certs.References, 1)
|
||||||
|
assert.Equal(certs.References[0], tt.hash)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue