Skip to content

Commit 4b93759

Browse files
committed
Add tests for eventlog parsing
1 parent cca097f commit 4b93759

15 files changed

+14496
-0
lines changed

events/events_test.go

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Copyright 2019 Google Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4+
// use this file except in compliance with the License. You may obtain a copy of
5+
// the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11+
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12+
// License for the specific language governing permissions and limitations under
13+
// the License.
14+
15+
package events
16+
17+
import (
18+
"crypto"
19+
"encoding/json"
20+
"io/ioutil"
21+
"testing"
22+
23+
"github.com/google/go-attestation/attest"
24+
)
25+
26+
func TestParseEvents(t *testing.T) {
27+
var emptyPCRs [24]attest.PCR
28+
29+
for i, _ := range emptyPCRs {
30+
emptyPCRs[i].Index = i
31+
emptyPCRs[i].Digest = make([]byte, 20)
32+
emptyPCRs[i].DigestAlg = crypto.SHA1
33+
}
34+
testParseEvent(t, emptyPCRs[:], "testdata/binary_bios_measurements_15")
35+
testParseEvent(t, emptyPCRs[:], "testdata/binary_bios_measurements_27")
36+
testParseEvent(t, emptyPCRs[:], "testdata/linux_event_log")
37+
testParseEvent(t, emptyPCRs[:], "testdata/tpm12_windows_lenovo_x1carbonv3")
38+
}
39+
40+
func TestParseCryptoAgileEvents(t *testing.T) {
41+
var emptyPCRs [24]attest.PCR
42+
for i, _ := range emptyPCRs {
43+
emptyPCRs[i].Index = i
44+
emptyPCRs[i].Digest = make([]byte, 32)
45+
emptyPCRs[i].DigestAlg = crypto.SHA256
46+
}
47+
48+
testParseEvent(t, emptyPCRs[:], "testdata/crypto_agile_eventlog")
49+
testParseEvent(t, emptyPCRs[:], "testdata/tpm2_windows_lenovo_yogax1v2")
50+
testParseEvent(t, emptyPCRs[:], "testdata/windows_event_log")
51+
}
52+
53+
func testParseEvent(t *testing.T, PCRs []attest.PCR, filename string) {
54+
data, err := ioutil.ReadFile(filename)
55+
if err != nil {
56+
t.Fatalf("reading test data %s: %v", filename, err)
57+
}
58+
el, err := attest.ParseEventLog(data)
59+
if err != nil {
60+
t.Fatalf("parsing event log %s: %v", filename, err)
61+
}
62+
outputEvents, err := el.Verify(PCRs[:])
63+
if err != nil {
64+
if replayErr, isReplayErr := err.(attest.ReplayError); isReplayErr {
65+
outputEvents = replayErr.Events
66+
} else {
67+
t.Fatalf("failed to verify from event log %s: %v", filename, err)
68+
}
69+
}
70+
if len(outputEvents) == 0 {
71+
t.Fatalf("failed to extract any events from %s", filename)
72+
}
73+
74+
parsedEvents, err := ParseEvents(outputEvents)
75+
76+
if err != nil {
77+
t.Fatalf("parsing events %s: %v", filename, err)
78+
}
79+
80+
if len(parsedEvents) == 0 {
81+
t.Fatalf("failed to parse any events from %s", filename)
82+
}
83+
84+
reference := filename + ".json"
85+
referenceData, err := ioutil.ReadFile(reference)
86+
if err != nil {
87+
t.Fatalf("failed to read json reference %s: %v", reference, err)
88+
}
89+
90+
var referenceEvents []TPMEvent
91+
92+
err = json.Unmarshal(referenceData, &referenceEvents)
93+
if err != nil {
94+
t.Fatalf("failed to unmarshal json reference %s: %v", reference, err)
95+
}
96+
97+
for i, _ := range parsedEvents {
98+
if parsedEvents[i] != referenceEvents[i] {
99+
t.Fatalf("mismatch in event %d from %s: %+v %+v", i, filename, referenceEvents[i], parsedEvents[i])
100+
}
101+
}
102+
}
4.19 KB
Binary file not shown.

0 commit comments

Comments
 (0)