Skip to content

Commit 2a8233c

Browse files
alexmwuSibcgh
authored andcommitted
Add a GCE SP800-155 eventlog and a cGKE eventlog (google#599)
* Add a GCE SP800-155 eventlog and a cGKE eventlog * Add repro of failing GetSimulatorWithLog * Fix the event log simulation by skipping EV_NO_ACTION
1 parent 720eae9 commit 2a8233c

File tree

6 files changed

+81
-0
lines changed

6 files changed

+81
-0
lines changed
Binary file not shown.
26.2 KB
Binary file not shown.

internal/test/simulate_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package test
2+
3+
import (
4+
"crypto"
5+
"testing"
6+
7+
"github.com/google/go-tpm-tools/client"
8+
"github.com/google/go-tpm-tools/server"
9+
)
10+
11+
func TestGetTPM(t *testing.T) {
12+
tpm := GetSimulatorWithLog(t, SP800155EventLog)
13+
defer tpm.Close()
14+
ak, err := client.AttestationKeyECC(tpm)
15+
if err != nil {
16+
t.Fatalf("failed to create key: %v", err)
17+
}
18+
nonce := []byte("hello")
19+
attestation, err := ak.Attest(client.AttestOpts{Nonce: nonce})
20+
if err != nil {
21+
t.Fatalf("failed to attest: %v", err)
22+
}
23+
24+
_, err = server.VerifyAttestation(attestation, server.VerifyOpts{
25+
Nonce: nonce,
26+
TrustedAKs: []crypto.PublicKey{ak.PublicKey()},
27+
})
28+
if err != nil {
29+
t.Errorf("failed to verify attestation for SP800 155 event log: %v", err)
30+
}
31+
}

internal/test/test_data.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ var (
2828
Cos101AmdSevEventLog []byte
2929
//go:embed eventlogs/gdc-host.bin
3030
GdcHost []byte
31+
//go:embed eventlogs/eventlogwithsp800155.bin
32+
SP800155EventLog []byte
33+
//go:embed eventlogs/confidential-gke-debug-251000_eventlog.bin
34+
CGKE251000 []byte
3135
)
3236

3337
// Kernel command lines from event logs.

internal/test/test_tpm.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ func simulateEventLogEvents(tb testing.TB, rw io.ReadWriter, eventLog []byte) {
136136
for tpm2Alg, attestAlg := range hashAlgs {
137137
events := attestEventLog.Events(attestAlg)
138138
for _, event := range events {
139+
// EV_NO_ACTION
140+
if event.Type == 0x03 {
141+
continue
142+
}
139143
extendOnePcr(tb, rw, event.Index, tpm2Alg, event.Digest)
140144
}
141145
}

server/eventlog_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,46 @@ var GdcHost = eventLog{
561561
},
562562
}
563563

564+
var SP800155EventLog = eventLog{
565+
RawLog: test.SP800155EventLog,
566+
Banks: []*pb.PCRs{{
567+
Hash: pb.HashAlgo_SHA256,
568+
Pcrs: map[uint32][]byte{
569+
0: decodeHex("d0c70a9310cd0b55767084333022ce53f42befbb69c059ee6c0a32766f160783"),
570+
1: decodeHex("f28e7dc5d058b98ba6f635c1de061a507426983b7ec370d3ba7ce90bdfd1a7c1"),
571+
2: decodeHex("3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969"),
572+
3: decodeHex("3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969"),
573+
4: decodeHex("18314f0c33adea45e461155e190199716256ca532cd89e9aa3b7d2f6407fa4c8"),
574+
5: decodeHex("7da8fcc5689af6d0f2a089b19bbe146702372ccfdc3d5758bf6b49ba50c7366e"),
575+
6: decodeHex("3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969"),
576+
7: decodeHex("8c5dc451764d0db9c1e17da03564bcae3a09fa3d7f8e467d9c381dc8698377d6"),
577+
8: decodeHex("98effecabbbdc67dd7627d0c50f24bbce548ca6e6fcca30ad284afde91a042a4"),
578+
9: decodeHex("06f41037a0f42d7308ff2d955ef6c0a5d2fe0a70f7c81ce288d3a158f4978b2f"),
579+
14: decodeHex("6eb05e8a8a6272a8e4b925a67c650daa13c12b1a80cc797d40fd345e29660161"),
580+
},
581+
}},
582+
}
583+
584+
var CGKE251000 = eventLog{
585+
RawLog: test.CGKE251000,
586+
Banks: []*pb.PCRs{{
587+
Hash: pb.HashAlgo_SHA256,
588+
Pcrs: map[uint32][]byte{
589+
0: decodeHex("d0c70a9310cd0b55767084333022ce53f42befbb69c059ee6c0a32766f160783"),
590+
1: decodeHex("f28e7dc5d058b98ba6f635c1de061a507426983b7ec370d3ba7ce90bdfd1a7c1"),
591+
2: decodeHex("3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969"),
592+
3: decodeHex("3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969"),
593+
4: decodeHex("18314f0c33adea45e461155e190199716256ca532cd89e9aa3b7d2f6407fa4c8"),
594+
5: decodeHex("7da8fcc5689af6d0f2a089b19bbe146702372ccfdc3d5758bf6b49ba50c7366e"),
595+
6: decodeHex("3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969"),
596+
7: decodeHex("8c5dc451764d0db9c1e17da03564bcae3a09fa3d7f8e467d9c381dc8698377d6"),
597+
8: decodeHex("98effecabbbdc67dd7627d0c50f24bbce548ca6e6fcca30ad284afde91a042a4"),
598+
9: decodeHex("4df4604236d15333b1a07acdb3c4655f3da5c0843b62e7a9df2f62844a9d92f1"),
599+
14: decodeHex("6eb05e8a8a6272a8e4b925a67c650daa13c12b1a80cc797d40fd345e29660161"),
600+
},
601+
}},
602+
}
603+
564604
func TestParseEventLogs(t *testing.T) {
565605
sbatErrorStr := "asn1: structure error: tags don't match (16 vs {class:0 tag:24 length:10 isCompound:true})"
566606
logs := []struct {
@@ -586,6 +626,8 @@ func TestParseEventLogs(t *testing.T) {
586626
{COS101AmdSev, "COS101AmdSev", VerifyOpts{Loader: GRUB}, nil},
587627
{Ubuntu2404AmdSevSnp, "Ubuntu2404AmdSevSnp", VerifyOpts{Loader: GRUB}, nil},
588628
{GdcHost, "GdcHost", VerifyOpts{Loader: GRUB, AllowEFIAppBeforeCallingEvent: true}, []string{"invalid SCRTM version event for PCR0"}},
629+
{SP800155EventLog, "SP800155EventLog", VerifyOpts{Loader: GRUB}, nil},
630+
{CGKE251000, "CGKE251000", VerifyOpts{Loader: GRUB}, nil},
589631
}
590632

591633
for _, log := range logs {

0 commit comments

Comments
 (0)