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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
package tpm2test
import (
"bytes"
"testing"
. "github.com/google/go-tpm/tpm2"
"github.com/google/go-tpm/tpm2/transport/simulator"
)
func TestHandleName(t *testing.T) {
want := []byte{0x40, 0x00, 0x00, 0x0B}
name := HandleName(TPMRHEndorsement)
if !bytes.Equal(want, name.Buffer) {
t.Errorf("Incorrect name for RH_ENDORSEMENT (want %x got %x)", want, name.Buffer)
}
}
func TestObjectName(t *testing.T) {
thetpm, err := simulator.OpenSimulator()
if err != nil {
t.Fatalf("could not connect to TPM simulator: %v", err)
}
defer thetpm.Close()
createPrimary := CreatePrimary{
PrimaryHandle: TPMRHEndorsement,
InPublic: New2B(ECCEKTemplate),
}
rsp, err := createPrimary.Execute(thetpm)
if err != nil {
t.Fatalf("could not call TPM2_CreatePrimary: %v", err)
}
flush := FlushContext{FlushHandle: rsp.ObjectHandle}
defer flush.Execute(thetpm)
public := rsp.OutPublic
want := rsp.Name
pub, err := public.Contents()
if err != nil {
t.Fatalf("%v", err)
}
name, err := ObjectName(pub)
if err != nil {
t.Fatalf("error from ObjectName: %v", err)
}
if !bytes.Equal(want.Buffer, name.Buffer) {
t.Errorf("Incorrect name for ECC EK (want %x got %x)", want.Buffer, name.Buffer)
}
}
func TestNVName(t *testing.T) {
thetpm, err := simulator.OpenSimulator()
if err != nil {
t.Fatalf("could not connect to TPM simulator: %v", err)
}
defer thetpm.Close()
public := New2B(
TPMSNVPublic{
NVIndex: TPMHandle(0x0180000F),
NameAlg: TPMAlgSHA256,
Attributes: TPMANV{
OwnerWrite: true,
OwnerRead: true,
NT: TPMNTOrdinary,
},
DataSize: 4,
})
defineSpace := NVDefineSpace{
AuthHandle: TPMRHOwner,
PublicInfo: public,
}
if _, err := defineSpace.Execute(thetpm); err != nil {
t.Fatalf("could not call TPM2_DefineSpace: %v", err)
}
pub, err := public.Contents()
if err != nil {
t.Fatalf("%v", err)
}
readPublic := NVReadPublic{
NVIndex: pub.NVIndex,
}
rsp, err := readPublic.Execute(thetpm)
if err != nil {
t.Fatalf("could not call TPM2_ReadPublic: %v", err)
}
want := rsp.NVName
name, err := NVName(pub)
if err != nil {
t.Fatalf("error from NVIndexName: %v", err)
}
if !bytes.Equal(want.Buffer, name.Buffer) {
t.Errorf("Incorrect name for NV index (want %x got %x)", want.Buffer, name.Buffer)
}
}
|