diff --git a/launcher/agent/agent.go b/launcher/agent/agent.go index 768f01ca0..f640dca6c 100644 --- a/launcher/agent/agent.go +++ b/launcher/agent/agent.go @@ -327,6 +327,7 @@ func (a *agent) AttestationEvidence(_ context.Context, challenge []byte, extraDa switch v := attResult.(type) { case *pb.Attestation: + v.CanonicalEventLog = cosCel.Bytes() attestation.Quote = &teemodels.VMAttestationQuote{ TPMQuote: convertPBToTPMQuote(v), } diff --git a/launcher/agent/agent_test.go b/launcher/agent/agent_test.go index 91eeae34b..9d78f579d 100644 --- a/launcher/agent/agent_test.go +++ b/launcher/agent/agent_test.go @@ -6,7 +6,9 @@ import ( "crypto" "crypto/rand" "crypto/rsa" + "crypto/sha256" "crypto/sha512" + _ "embed" "encoding/base64" "errors" "fmt" @@ -16,6 +18,7 @@ import ( "testing" "time" + "github.com/GoogleCloudPlatform/confidential-space/server/extract" "github.com/cenkalti/backoff/v4" "github.com/golang-jwt/jwt/v4" "github.com/google/go-cmp/cmp" @@ -30,6 +33,7 @@ import ( teemodels "github.com/google/go-tpm-tools/launcher/teeserver/models" attestpb "github.com/google/go-tpm-tools/proto/attest" tpmpb "github.com/google/go-tpm-tools/proto/tpm" + "github.com/google/go-tpm-tools/server" "github.com/google/go-tpm-tools/verifier" "github.com/google/go-tpm-tools/verifier/fake" "github.com/google/go-tpm-tools/verifier/models" @@ -652,6 +656,7 @@ func measureFakeEvents(attestAgent AttestationAgent) error { type fakeTdxAttestRoot struct { cel gecel.CEL receivedNonce []byte + tdxQuote []byte deviceRoTS []DeviceROT } @@ -682,7 +687,7 @@ func (f *fakeTdxAttestRoot) Attest(nonce []byte) (any, error) { } return &verifier.TDCCELAttestation{ - TdQuote: []byte("fake-tdx-quote"), + TdQuote: f.tdxQuote, NvidiaAttestation: nvAtt, }, nil } @@ -698,6 +703,12 @@ func (f *fakeTdxAttestRoot) ComputeNonce(challenge []byte, extraData []byte) []b return finalNonce[:] } +//go:embed tdx_quote.b64 +var tdxQuoteB64 string + +//go:embed cel.b64 +var celB64 string + func (f *fakeTdxAttestRoot) AddDeviceROTs(deviceRoTS []DeviceROT) { f.deviceRoTS = append(f.deviceRoTS, deviceRoTS...) } @@ -778,8 +789,21 @@ func TestAttestationEvidence_TDX_Success(t *testing.T) { t.Fatal(err) } + testTDXQuote, err := base64.StdEncoding.DecodeString(tdxQuoteB64) + if err != nil { + t.Fatalf("failed to decode tdx_quote.b64: %v", err) + } + testCEL, err := base64.StdEncoding.DecodeString(celB64) + if err != nil { + t.Fatalf("failed to decode cel.b64: %v", err) + } + decodedCEL, err := gecel.DecodeToCEL(bytes.NewBuffer(testCEL)) + if err != nil { + t.Fatalf("failed to decode test CEL: %v", err) + } fakeRoot := &fakeTdxAttestRoot{ - cel: gecel.NewConfComputeMR(), + cel: decodedCEL, + tdxQuote: testTDXQuote, } attestAgent := &agent{ avRot: fakeRoot, @@ -802,17 +826,29 @@ func TestAttestationEvidence_TDX_Success(t *testing.T) { t.Fatalf("AttestationEvidence failed: %v", err) } - if att.Quote.TDXCCELQuote == nil { - t.Fatal("expected TDCCELAttestation to be populated for TDX") + // Verify the nonce passed to Attest was derived from challenge+extraData. + expectedNonce := fakeRoot.ComputeNonce(challenge, extraData) + if !bytes.Equal(fakeRoot.receivedNonce, expectedNonce) { + t.Errorf("got nonce %x, want %x", fakeRoot.receivedNonce, expectedNonce) } - if string(att.Quote.TDXCCELQuote.TDQuote) != "fake-tdx-quote" { - t.Errorf("got quote %s, want fake-tdx-quote", string(att.Quote.TDXCCELQuote.TDQuote)) + if att.Quote.TDXCCELQuote == nil { + t.Fatal("expected TDXCCELQuote to be populated for TDX") } - - expectedHash := fakeRoot.ComputeNonce(challenge, extraData) - if !bytes.Equal(fakeRoot.receivedNonce, expectedHash) { - t.Errorf("got nonce %x, want %x", fakeRoot.receivedNonce, expectedHash) + if !bytes.Equal(att.Quote.TDXCCELQuote.TDQuote, testTDXQuote) { + t.Errorf("TDQuote mismatch: got %x, want %x", att.Quote.TDXCCELQuote.TDQuote, testTDXQuote) + } + if att.Quote.TPMQuote != nil { + t.Error("expected TPMQuote to be nil for TDX attestation") + } + if len(att.Quote.TDXCCELQuote.CELLaunchEventLog) == 0 { + t.Error("expected CELLaunchEventLog to be non-empty after MeasureEvent calls") + } + if !bytes.Equal(att.Challenge, challenge) { + t.Errorf("challenge mismatch: got %x, want %x", att.Challenge, challenge) + } + if !bytes.Equal(att.ExtraData, extraData) { + t.Errorf("extraData mismatch: got %x, want %x", att.ExtraData, extraData) } } @@ -827,6 +863,12 @@ func TestAttestationEvidence_TPM_Success(t *testing.T) { } verifierClient := fake.NewClient(fakeSigner) + ak, err := client.AttestationKeyECC(tpm) + if err != nil { + t.Fatalf("failed to create AK: %v", err) + } + defer ak.Close() + agent, err := CreateAttestationAgent(tpm, client.AttestationKeyECC, verifierClient, placeholderPrincipalFetcher, signaturediscovery.NewFakeClient(), spec.LaunchSpec{ Experiments: experiments.Experiments{ EnableAttestationEvidence: true, @@ -854,6 +896,54 @@ func TestAttestationEvidence_TPM_Success(t *testing.T) { if att.Quote.TDXCCELQuote != nil { t.Fatal("expected TDCCELAttestation to be nil for TPM") } + + // Test the evidence can be verified by the server by re-computing the nonce and calling server.VerifyAttestation. + extraDataDigest := sha256.Sum256(extraData) + challengeData := append(challenge, extraDataDigest[:]...) + challengeDigest := sha256.Sum256(challengeData) + tpmNonce := sha256.Sum256(append([]byte(teemodels.WorkloadAttestationLabel), challengeDigest[:]...)) + + pbAttestation, err := ak.Attest(client.AttestOpts{Nonce: tpmNonce[:]}) + if err != nil { + t.Fatalf("ak.Attest() failed: %v", err) + } + + _, err = server.VerifyAttestation(pbAttestation, server.VerifyOpts{ + Nonce: tpmNonce[:], + TrustedAKs: []crypto.PublicKey{ak.PublicKey()}, + }) + if err != nil { + t.Errorf("server.VerifyAttestation failed: %v", err) + } + + // Test that the COS state can be extracted from the CEL and contains the expected values. + decodedCEL, err := gecel.DecodeToCEL(bytes.NewBuffer(att.Quote.TPMQuote.CELLaunchEventLog)) + if err != nil { + t.Fatalf("gecel.DecodeToCEL failed: %v", err) + } + + cosState, err := extract.VerifiedCOSState(decodedCEL, uint8(gecel.PCRType)) + if err != nil { + t.Errorf("extract.VerifiedCOSState failed: %v", err) + } else { + ctr := cosState.GetContainer() + if ctr.GetImageReference() != imageRef { + t.Errorf("ImageReference: got %q, want %q", ctr.GetImageReference(), imageRef) + } + if ctr.GetImageDigest() != imageDigest { + t.Errorf("ImageDigest: got %q, want %q", ctr.GetImageDigest(), imageDigest) + } + if ctr.GetImageId() != imageID { + t.Errorf("ImageId: got %q, want %q", ctr.GetImageId(), imageID) + } + if len(ctr.GetArgs()) == 0 || ctr.GetArgs()[0] != arg { + t.Errorf("Args[0]: got %v, want %q", ctr.GetArgs(), arg) + } + if ctr.GetEnvVars()[envK] != envV { + t.Errorf("EnvVars[%q]: got %q, want %q", envK, ctr.GetEnvVars()[envK], envV) + } + t.Logf("extract.VerifiedCOSState succeeded: ImageRef=%s", ctr.GetImageReference()) + } } type testClient struct { @@ -956,3 +1046,72 @@ func TestConvertPBToTPMQuote(t *testing.T) { t.Errorf("convertPBToTPMQuote() mismatch (-got +want):\n%s", diff) } } + +// TestAttestationEvidence_ExperimentDisabled verifies that AttestationEvidence +// returns an error when the EnableAttestationEvidence experiment flag is off. +func TestAttestationEvidence_ExperimentDisabled(t *testing.T) { + ctx := context.Background() + tpm := test.GetTPM(t) + defer client.CheckedClose(t, tpm) + + fakeSigner, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + t.Fatalf("failed to generate signing key: %v", err) + } + agent, err := CreateAttestationAgent(tpm, client.AttestationKeyECC, fake.NewClient(fakeSigner), + placeholderPrincipalFetcher, signaturediscovery.NewFakeClient(), + spec.LaunchSpec{ /* EnableAttestationEvidence defaults to false */ }, + logging.SimpleLogger(), nil) + if err != nil { + t.Fatalf("failed to create agent: %v", err) + } + defer agent.Close() + + _, err = agent.AttestationEvidence(ctx, []byte("challenge"), nil) + if err == nil { + t.Error("expected error when EnableAttestationEvidence is disabled, got nil") + } +} + +// TestAttestationEvidence_TDX_NilExtraData verifies that AttestationEvidence +// handles nil extraData correctly, deriving the nonce from the challenge alone. +func TestAttestationEvidence_TDX_NilExtraData(t *testing.T) { + ctx := context.Background() + tpm := test.GetTPM(t) + defer client.CheckedClose(t, tpm) + + ak, err := client.AttestationKeyECC(tpm) + if err != nil { + t.Fatalf("failed to create AK: %v", err) + } + defer ak.Close() + + fakeRoot := &fakeTdxAttestRoot{ + cel: gecel.NewConfComputeMR(), + tdxQuote: []byte("fake-tdx-quote"), + } + attestatAgent := &agent{ + avRot: fakeRoot, + fetchedAK: ak, + launchSpec: spec.LaunchSpec{ + Experiments: experiments.Experiments{ + EnableAttestationEvidence: true, + }, + }, + } + + challenge := []byte("test-challenge") + att, err := attestatAgent.AttestationEvidence(ctx, challenge, nil) + if err != nil { + t.Fatalf("AttestationEvidence failed with nil extraData: %v", err) + } + + expectedNonce := fakeRoot.ComputeNonce(challenge, nil) + if !bytes.Equal(fakeRoot.receivedNonce, expectedNonce) { + t.Errorf("nonce mismatch with nil extraData: got %x, want %x", + fakeRoot.receivedNonce, expectedNonce) + } + if att.ExtraData != nil { + t.Errorf("expected nil ExtraData in attestation, got %x", att.ExtraData) + } +} diff --git a/launcher/agent/cel.b64 b/launcher/agent/cel.b64 new file mode 100644 index 000000000..b77f336e6 --- /dev/null +++ b/launcher/agent/cel.b64 @@ -0,0 +1 @@ +AAAAAAgAAAAAAAAAAGwAAAABBAMAAAA1DAAAADBcj1Ug+HHJ6NVVzAyuX2LYGUTZiYZTL7ZCjlLn6OcFs0Z1TMjI519YGBd/RCoLVCVQAAAAagAAAABldXMtd2VzdDEtZG9ja2VyLnBrZy5kZXYvY29uZmlkZW50aWFsLXNwYWNlLWltYWdlcy1kZXYvY3MtaW50ZWctdGVzdC1pbWFnZXMvZ3B1L2N1ZGEtdmVjdG9yLWFkZDpsYXRlc3QAAAAACAAAAAAAAAABbAAAAAEEAwAAADUMAAAAMC6GMbiO5Ha1OVViE1okYl4k20+dG/FhKspzyQW7zfzq+MnQcjtCYZD0FICZxQBYhlAAAABMAQAAAEdzaGEyNTY6Nzc3MDQ5Zjk2OWQ3OTBjN2ZhOWVkZjU3ODNhZDIyYjJkNGZhMjVmMzE2MTJlOTU2MzllYjNiNTA5OGZmODA2NgAAAAAIAAAAAAAAAAJsAAAAAQQDAAAANQwAAAAwg+TbLqOZ96nZlz0Xi42XbMms33HVHznf6Q9XBVJObIr0O1lESST0rhCn8mBI8+P9UAAAAAoCAAAABU5ldmVyAAAAAAgAAAAAAAAAA2wAAAABBAMAAAA1DAAAADAcAE45vuCj6Z7WQw3betTBYywuYknn7EmO70JuLv71jR3G1tFugw35ez59LbmEG3ZQAAAATAMAAABHc2hhMjU2OjFkYjAxNDU4MGFkNDM3NzllM2E0YTJiN2IzYjM5M2VhMzUxN2MyMWVmYzhiZWYzOGY2ZTYxYzBjNzI0Zjg4MzMAAAAACAAAAAAAAAAEbAAAAAEEAwAAADUMAAAAML6vH37T2AJ5sqDKE3SwdXXP1R8yjgHCATOtvh+3ZFfKALpaCx9MKhUWTZpmYSART1AAAAAZBAAAABQvY3VkYS1zYW1wbGVzL3NhbXBsZQAAAAAIAAAAAAAAAAVsAAAAAQQDAAAANQwAAAAwNdmF0h9sWMi2fGvZmNo4LKnRkuHRT9yjUBPTuk9+sj9Ml6V4i1TRP0B0qm61h/FKUAAAAHAFAAAAa1BBVEg9L3Vzci9sb2NhbC9udmlkaWEvYmluOi91c3IvbG9jYWwvY3VkYS9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluAAAAAAgAAAAAAAAABmwAAAABBAMAAAA1DAAAADBNQYxNZvAOxcHMy8ZMeQg8r6B08U/3wGdjkYZcVzNNnphbSWM/X35cHxfQNMJNTQhQAAAAEgUAAAANTlZBUkNIPXg4Nl82NAAAAAAIAAAAAAAAAAdsAAAAAQQDAAAANQwAAAAw9bF65fsfc3QwygsEFnxIAnUf+yki9FhH9Qs6U5KGQFpNH/4DHC3xBgMCqAk1En6wUAAABTAFAAAFK05WSURJQV9SRVFVSVJFX0NVREE9Y3VkYT49MTIuNSBicmFuZD11bmtub3duLGRyaXZlcj49NDcwLGRyaXZlcjw0NzEgYnJhbmQ9Z3JpZCxkcml2ZXI+PTQ3MCxkcml2ZXI8NDcxIGJyYW5kPXRlc2xhLGRyaXZlcj49NDcwLGRyaXZlcjw0NzEgYnJhbmQ9bnZpZGlhLGRyaXZlcj49NDcwLGRyaXZlcjw0NzEgYnJhbmQ9cXVhZHJvLGRyaXZlcj49NDcwLGRyaXZlcjw0NzEgYnJhbmQ9cXVhZHJvcnR4LGRyaXZlcj49NDcwLGRyaXZlcjw0NzEgYnJhbmQ9bnZpZGlhcnR4LGRyaXZlcj49NDcwLGRyaXZlcjw0NzEgYnJhbmQ9dmFwcHMsZHJpdmVyPj00NzAsZHJpdmVyPDQ3MSBicmFuZD12cGMsZHJpdmVyPj00NzAsZHJpdmVyPDQ3MSBicmFuZD12Y3MsZHJpdmVyPj00NzAsZHJpdmVyPDQ3MSBicmFuZD12d3MsZHJpdmVyPj00NzAsZHJpdmVyPDQ3MSBicmFuZD1jbG91ZGdhbWluZyxkcml2ZXI+PTQ3MCxkcml2ZXI8NDcxIGJyYW5kPXVua25vd24sZHJpdmVyPj01MzUsZHJpdmVyPDUzNiBicmFuZD1ncmlkLGRyaXZlcj49NTM1LGRyaXZlcjw1MzYgYnJhbmQ9dGVzbGEsZHJpdmVyPj01MzUsZHJpdmVyPDUzNiBicmFuZD1udmlkaWEsZHJpdmVyPj01MzUsZHJpdmVyPDUzNiBicmFuZD1xdWFkcm8sZHJpdmVyPj01MzUsZHJpdmVyPDUzNiBicmFuZD1xdWFkcm9ydHgsZHJpdmVyPj01MzUsZHJpdmVyPDUzNiBicmFuZD1udmlkaWFydHgsZHJpdmVyPj01MzUsZHJpdmVyPDU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 \ No newline at end of file diff --git a/launcher/agent/tdx_quote.b64 b/launcher/agent/tdx_quote.b64 new file mode 100644 index 000000000..7d329dc65 --- /dev/null +++ b/launcher/agent/tdx_quote.b64 @@ -0,0 +1 @@ +BAACAIEAAAAAAAAAk5pyM/ecTKmUCg2zlX8GBwAAAAAAAAAAAAAAAAAAAAAAAAAADQEIAAAAAAAAAAAAAAAAAEieWF8cVLxaAgZsjG7CFhn/AzTsbyHgfio1ICxZGDeJyAV+fZfdWRuwgxSxhYGecgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAADnAAYAAAAAANqwFhnBrtpWguTPOQbQZf9zEnSpZg5BKHQNW7Gk0JR7Ry/pn5iOg2cLbfUC9eC12gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM6frTAfZc4W89VgYL5eV1kt7G8AhDKP2Hmc/Bb5t3IKHE1yXzDSPGRfCv8rci88SEIHpxqrqU2VUF8oPeVj6HWNU7min0sUBPShppN0TWHH1Zr/kDzXl/PKu8yYCI3m+E21FyrBBYWMhi9+8dyEUIFUW+3+REccRTxyRyGgIwpnSw3MTIMjBW2LQGM1XOpQeyJh+TN07VOLNefpPFQKFWLMsl0U9sQKHv6gPTKeKalxcthOFSNEr0pxiNDIufyr60dvb2dBdHRlc3RWMWhrYnV4RTZlXzNSdXd1Z0hhWEdHY3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLEAAA39ICWw8fB61cgQ21mUdOzPfW78XHucuybISx6hfpZCkzaVehQ26lGGaqR/M4I01gzaCPCj+dtN0dZ2Ajb6KgjBOAkwGDnz7lRfQDVRKFfwROJ79raurjgH5YpXwSDgSg17KrpMNe5OUDTjlfs9B5awPlSKZiaEPpT2h1LFgqPpQGAEUQAAAICP8bBP8ABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAOcAAAAAAAAA5aOntdgwwpU7mFNMbFmjo0/cNOkz9/WJjwqFzwiEa8oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyeKnxvlI8XR040p/xD7QMPfBVj8bq932NAyC4OVKjFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI8049p9zxGEAPeZmUbFjMRD4T8n2fm3/JlJ83KmQrnVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj3pELUvjPNA4933Cf7SPjQUFnVrImOgqgx+FfexQLvkkryONoKxruKDKB3+bBcJDiVnvblrMGzapWEXdHhZihIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAXQ4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFOFRDQ0JKZWdBd0lCQWdJVkFLUStTOE5sdTBPZWhvMGthM3VlT3k2bnJlTTVNQW9HQ0NxR1NNNDlCQU1DCk1IQXhJakFnQmdOVkJBTU1HVWx1ZEdWc0lGTkhXQ0JRUTBzZ1VHeGhkR1p2Y20wZ1EwRXhHakFZQmdOVkJBb00KRVVsdWRHVnNJRU52Y25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRQpDQXdDUTBFeEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJMU1USXpNREUyTlRZd01sb1hEVE15TVRJek1ERTJOVFl3Ck1sb3djREVpTUNBR0ExVUVBd3daU1c1MFpXd2dVMGRZSUZCRFN5QkRaWEowYVdacFkyRjBaVEVhTUJnR0ExVUUKQ2d3UlNXNTBaV3dnUTI5eWNHOXlZWFJwYjI0eEZEQVNCZ05WQkFjTUMxTmhiblJoSUVOc1lYSmhNUXN3Q1FZRApWUVFJREFKRFFURUxNQWtHQTFVRUJoTUNWVk13V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFCCldibmUvYVF2V0xvR0pHKzg0ZDBISEgwNUh3RXRTekNkZVdLS0pjM0p2eXEyeFNmRE55Qlh3Ukp2elRkS205dysKR0pKTFA0WU5TZzNvd0xqZ1hGcHlvNElERERDQ0F3Z3dId1lEVlIwakJCZ3dGb0FVbFc5ZHpiMGI0ZWxBU2NuVQo5RFBPQVZjTDNsUXdhd1lEVlIwZkJHUXdZakJnb0Y2Z1hJWmFhSFIwY0hNNkx5OWhjR2t1ZEhKMWMzUmxaSE5sCmNuWnBZMlZ6TG1sdWRHVnNMbU52YlM5elozZ3ZZMlZ5ZEdsbWFXTmhkR2x2Ymk5Mk5DOXdZMnRqY213L1kyRTkKY0d4aGRHWnZjbTBtWlc1amIyUnBibWM5WkdWeU1CMEdBMVVkRGdRV0JCUzBTSWZXenkrUFAxU2NXV1dYYWtYMgowQnlmSlRBT0JnTlZIUThCQWY4RUJBTUNCc0F3REFZRFZSMFRBUUgvQkFJd0FEQ0NBamtHQ1NxR1NJYjRUUUVOCkFRU0NBaW93Z2dJbU1CNEdDaXFHU0liNFRRRU5BUUVFRUpkVGJVSS9UbVFVdGR4a0dhSm1QaHd3Z2dGakJnb3EKaGtpRytFMEJEUUVDTUlJQlV6QVFCZ3NxaGtpRytFMEJEUUVDQVFJQkNEQVFCZ3NxaGtpRytFMEJEUUVDQWdJQgpDREFRQmdzcWhraUcrRTBCRFFFQ0F3SUJBakFRQmdzcWhraUcrRTBCRFFFQ0JBSUJBakFRQmdzcWhraUcrRTBCCkRRRUNCUUlCQkRBUUJnc3Foa2lHK0UwQkRRRUNCZ0lCQVRBUUJnc3Foa2lHK0UwQkRRRUNCd0lCQURBUUJnc3EKaGtpRytFMEJEUUVDQ0FJQkJqQVFCZ3NxaGtpRytFMEJEUUVDQ1FJQkFEQVFCZ3NxaGtpRytFMEJEUUVDQ2dJQgpBREFRQmdzcWhraUcrRTBCRFFFQ0N3SUJBREFRQmdzcWhraUcrRTBCRFFFQ0RBSUJBREFRQmdzcWhraUcrRTBCCkRRRUNEUUlCQURBUUJnc3Foa2lHK0UwQkRRRUNEZ0lCQURBUUJnc3Foa2lHK0UwQkRRRUNEd0lCQURBUUJnc3EKaGtpRytFMEJEUUVDRUFJQkFEQVFCZ3NxaGtpRytFMEJEUUVDRVFJQkN6QWZCZ3NxaGtpRytFMEJEUUVDRWdRUQpDQWdDQWdRQkFBWUFBQUFBQUFBQUFEQVFCZ29xaGtpRytFMEJEUUVEQkFJQUFEQVVCZ29xaGtpRytFMEJEUUVFCkJBWUFnRzhGQUFBd0R3WUtLb1pJaHZoTkFRMEJCUW9CQVRBZUJnb3Foa2lHK0UwQkRRRUdCQkM0eVJwM1RTUDQKNFpvNFcwMEhaVURzTUVRR0NpcUdTSWI0VFFFTkFRY3dOakFRQmdzcWhraUcrRTBCRFFFSEFRRUIvekFRQmdzcQpoa2lHK0UwQkRRRUhBZ0VCQURBUUJnc3Foa2lHK0UwQkRRRUhBd0VCL3pBS0JnZ3Foa2pPUFFRREFnTklBREJGCkFpRUFsVDNlcjFYVENIRGs0aURFejBTTnNwbWkzMDBQanlyclJBZDRFT3BFWkxvQ0lGODhCQ2NIUGxhS2d0bCsKU2NzR3BSbjdIMTFzcWJDdlFQQnl4TEFtVU1FTwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDbGpDQ0FqMmdBd0lCQWdJVkFKVnZYYzI5RytIcFFFbkoxUFF6emdGWEM5NVVNQW9HQ0NxR1NNNDlCQU1DCk1HZ3hHakFZQmdOVkJBTU1FVWx1ZEdWc0lGTkhXQ0JTYjI5MElFTkJNUm93R0FZRFZRUUtEQkZKYm5SbGJDQkQKYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFKQmdOVkJBZ01Ba05CTVFzdwpDUVlEVlFRR0V3SlZVekFlRncweE9EQTFNakV4TURVd01UQmFGdzB6TXpBMU1qRXhNRFV3TVRCYU1IQXhJakFnCkJnTlZCQU1NR1VsdWRHVnNJRk5IV0NCUVEwc2dVR3hoZEdadmNtMGdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnMKSUVOdmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeApDekFKQmdOVkJBWVRBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTlNCLzd0MjFsWFNPCjJDdXpweHc3NGVKQjcyRXlER2dXNXJYQ3R4MnRWVExxNmhLazZ6K1VpUlpDbnFSN3BzT3ZncUZlU3hsbVRsSmwKZVRtaTJXWXozcU9CdXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCUwpCZ05WSFI4RVN6QkpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVWxXOWQKemIwYjRlbEFTY25VOURQT0FWY0wzbFF3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQgpBZjhDQVFBd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ1hzVmtpMHcraTZWWUdXM1VGLzIydWFYZTBZSkRqMVVlCm5BK1RqRDFhaTVjQ0lDWWIxU0FtRDV4a2ZUVnB2bzRVb3lpU1l4ckRXTG1VUjRDSTlOS3lmUE4rCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNqekNDQWpTZ0F3SUJBZ0lVSW1VTTFscWROSW56ZzdTVlVyOVFHemtuQnF3d0NnWUlLb1pJemowRUF3SXcKYURFYU1CZ0dBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdgpjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKCkJnTlZCQVlUQWxWVE1CNFhEVEU0TURVeU1URXdORFV4TUZvWERUUTVNVEl6TVRJek5UazFPVm93YURFYU1CZ0cKQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnZjbkJ2Y21GMAphVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSkJnTlZCQVlUCkFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVDNm5Fd01ESVlaT2ovaVBXc0N6YUVLaTcKMU9pT1NMUkZoV0dqYm5CVkpmVm5rWTR1M0lqa0RZWUwwTXhPNG1xc3lZamxCYWxUVll4RlAyc0pCSzV6bEtPQgp1ekNCdURBZkJnTlZIU01FR0RBV2dCUWlaUXpXV3AwMGlmT0R0SlZTdjFBYk9TY0dyREJTQmdOVkhSOEVTekJKCk1FZWdSYUJEaGtGb2RIUndjem92TDJObGNuUnBabWxqWVhSbGN5NTBjblZ6ZEdWa2MyVnlkbWxqWlhNdWFXNTAKWld3dVkyOXRMMGx1ZEdWc1UwZFlVbTl2ZEVOQkxtUmxjakFkQmdOVkhRNEVGZ1FVSW1VTTFscWROSW56ZzdTVgpVcjlRR3prbkJxd3dEZ1lEVlIwUEFRSC9CQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCQWY4Q0FRRXdDZ1lJCktvWkl6ajBFQXdJRFNRQXdSZ0loQU9XLzVRa1IrUzlDaVNEY05vb3dMdVBSTHNXR2YvWWk3R1NYOTRCZ3dUd2cKQWlFQTRKMGxySG9NcytYbzVvL3NYNk85UVd4SFJBdlpVR09kUlE3Y3ZxUlhhcUk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= \ No newline at end of file diff --git a/launcher/go.mod b/launcher/go.mod index a0b88b82d..3ac0fda20 100644 --- a/launcher/go.mod +++ b/launcher/go.mod @@ -19,7 +19,7 @@ require ( github.com/google/go-eventlog v0.0.3-0.20250820210646-0f4d84deece4 github.com/google/go-tdx-guest v0.3.2-0.20250814004405-ffb0869e6f4d github.com/google/go-tpm v0.9.6 - github.com/google/go-tpm-tools v0.4.4 + github.com/google/go-tpm-tools v0.4.6 github.com/google/go-tpm-tools/verifier v0.4.4 github.com/opencontainers/go-digest v1.0.0 github.com/opencontainers/image-spec v1.1.0 @@ -39,6 +39,7 @@ require ( cloud.google.com/go/longrunning v0.8.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 // indirect + github.com/GoogleCloudPlatform/confidential-space/server v0.0.0-20260227215608-998bdbe721d1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Microsoft/hcsshim v0.12.9 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/launcher/go.sum b/launcher/go.sum index 023e46d69..68919e163 100644 --- a/launcher/go.sum +++ b/launcher/go.sum @@ -94,6 +94,8 @@ github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSW github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= +github.com/GoogleCloudPlatform/confidential-space/server v0.0.0-20260227215608-998bdbe721d1 h1:QDGDC9sTIlwQ0IMOVKctqUBF0u17s0cvBcVFiO4N15E= +github.com/GoogleCloudPlatform/confidential-space/server v0.0.0-20260227215608-998bdbe721d1/go.mod h1:5SswqTFF1P+mhlxN5SH3d/1xq3bCeNDBkN3i31sH/uA= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -403,6 +405,8 @@ github.com/google/go-tdx-guest v0.3.2-0.20250814004405-ffb0869e6f4d h1:Ff8goEP/u github.com/google/go-tdx-guest v0.3.2-0.20250814004405-ffb0869e6f4d/go.mod h1:uHy3VaNXNXhl0fiPxKqTxieeouqQmW6A0EfLcaeCYBk= github.com/google/go-tpm v0.9.6 h1:Ku42PT4LmjDu1H5C5ISWLlpI1mj+Zq7sPGKoRw2XROA= github.com/google/go-tpm v0.9.6/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/google/go-tpm-tools v0.4.6 h1:hwIwPG7w4z5eQEBq11gYw8YYr9xXLfBQ/0JsKyq5AJM= +github.com/google/go-tpm-tools v0.4.6/go.mod h1:MsVQbJnRhKDfWwf5zgr3cDGpj13P1uLAFF0wMEP/n5w= github.com/google/go-tspi v0.3.0 h1:ADtq8RKfP+jrTyIWIZDIYcKOMecRqNJFOew2IT0Inus= github.com/google/go-tspi v0.3.0/go.mod h1:xfMGI3G0PhxCdNVcYr1C4C+EizojDg/TXuX5by8CiHI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=