feature/tpm: log timing of TPM commands

This commit is contained in:
Andrew Lytvynov 2025-06-18 12:08:21 -07:00
parent 191a482daa
commit 5d18458663
No known key found for this signature in database

View File

@ -16,6 +16,7 @@ import (
"slices" "slices"
"strings" "strings"
"sync" "sync"
"time"
"github.com/google/go-tpm/tpm2" "github.com/google/go-tpm/tpm2"
"github.com/google/go-tpm/tpm2/transport" "github.com/google/go-tpm/tpm2/transport"
@ -128,6 +129,7 @@ func newStore(logf logger.Logf, path string) (ipn.StateStore, error) {
key: key, key: key,
cache: make(map[ipn.StateKey][]byte), cache: make(map[ipn.StateKey][]byte),
} }
if err := store.writeSealed(); err != nil { if err := store.writeSealed(); err != nil {
return nil, fmt.Errorf("failed to write initial state file: %w", err) return nil, fmt.Errorf("failed to write initial state file: %w", err)
} }
@ -186,6 +188,8 @@ func (s *tpmStore) WriteState(k ipn.StateKey, bs []byte) error {
} }
s.cache[k] = bytes.Clone(bs) s.cache[k] = bytes.Clone(bs)
s.logf("================ tpmStore.WriteState %q", k)
return s.writeSealed() return s.writeSealed()
} }
@ -314,14 +318,19 @@ func withSRK(logf logger.Logf, tpm transport.TPM, fn func(srk tpm2.AuthHandle) e
// tpmSeal seals the data using SRK of the local TPM. // tpmSeal seals the data using SRK of the local TPM.
func tpmSeal(logf logger.Logf, data []byte) (*tpmSealedData, error) { func tpmSeal(logf logger.Logf, data []byte) (*tpmSealedData, error) {
start := time.Now()
tpm, err := open() tpm, err := open()
if err != nil { if err != nil {
return nil, fmt.Errorf("opening TPM: %w", err) return nil, fmt.Errorf("opening TPM: %w", err)
} }
logf("tpm: open %v", time.Since(start))
start = time.Now()
defer tpm.Close() defer tpm.Close()
var res *tpmSealedData var res *tpmSealedData
err = withSRK(logf, tpm, func(srk tpm2.AuthHandle) error { err = withSRK(logf, tpm, func(srk tpm2.AuthHandle) error {
logf("tpm: withSRK %v", time.Since(start))
start = time.Now()
sealCmd := tpm2.Create{ sealCmd := tpm2.Create{
ParentHandle: srk, ParentHandle: srk,
InSensitive: tpm2.TPM2BSensitiveCreate{ InSensitive: tpm2.TPM2BSensitiveCreate{
@ -345,6 +354,8 @@ func tpmSeal(logf logger.Logf, data []byte) (*tpmSealedData, error) {
if err != nil { if err != nil {
return fmt.Errorf("tpm2.Create: %w", err) return fmt.Errorf("tpm2.Create: %w", err)
} }
logf("tpm: tpm2.Create %v", time.Since(start))
start = time.Now()
res = &tpmSealedData{ res = &tpmSealedData{
Private: sealRes.OutPrivate.Buffer, Private: sealRes.OutPrivate.Buffer,