1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
package tpm2test
import (
"bytes"
"testing"
. "github.com/google/go-tpm/tpm2"
"github.com/google/go-tpm/tpm2/transport/simulator"
)
func TestClear(t *testing.T) {
thetpm, err := simulator.OpenSimulator()
if err != nil {
t.Fatalf("could not connect to TPM simulator: %v", err)
}
defer thetpm.Close()
srkCreate := CreatePrimary{
PrimaryHandle: TPMRHOwner,
InPublic: New2B(ECCSRKTemplate),
}
srkCreateRsp, err := srkCreate.Execute(thetpm)
if err != nil {
t.Fatalf("could not generate SRK: %v", err)
}
srkName1 := srkCreateRsp.Name
clear := Clear{
AuthHandle: AuthHandle{
Handle: TPMRHLockout,
Auth: PasswordAuth(nil),
},
}
_, err = clear.Execute(thetpm)
if err != nil {
t.Fatalf("could not clear TPM: %v", err)
}
srkCreateRsp, err = srkCreate.Execute(thetpm)
if err != nil {
t.Fatalf("could not generate SRK: %v", err)
}
defer func() {
flush := FlushContext{
FlushHandle: srkCreateRsp.ObjectHandle,
}
_, err := flush.Execute(thetpm)
if err != nil {
t.Fatalf("could not flush SRK: %v", err)
}
}()
srkName2 := srkCreateRsp.Name
if bytes.Equal(srkName1.Buffer, srkName2.Buffer) {
t.Errorf("SRK Name did not change across clear, was %x both times", srkName1.Buffer)
}
}
|