|
|
|
|
@ -23,6 +23,7 @@ import (
|
|
|
|
|
"github.com/google/go-tpm/tpm2/transport"
|
|
|
|
|
"golang.org/x/crypto/nacl/secretbox"
|
|
|
|
|
"tailscale.com/atomicfile"
|
|
|
|
|
"tailscale.com/envknob"
|
|
|
|
|
"tailscale.com/feature"
|
|
|
|
|
"tailscale.com/hostinfo"
|
|
|
|
|
"tailscale.com/ipn"
|
|
|
|
|
@ -31,6 +32,7 @@ import (
|
|
|
|
|
"tailscale.com/tailcfg"
|
|
|
|
|
"tailscale.com/types/key"
|
|
|
|
|
"tailscale.com/types/logger"
|
|
|
|
|
"tailscale.com/util/testenv"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var infoOnce = sync.OnceValue(info)
|
|
|
|
|
@ -49,13 +51,20 @@ func init() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var verboseTPM = envknob.RegisterBool("TS_DEBUG_TPM")
|
|
|
|
|
|
|
|
|
|
func info() *tailcfg.TPMInfo {
|
|
|
|
|
logf := logger.Discard
|
|
|
|
|
if !testenv.InTest() || verboseTPM() {
|
|
|
|
|
logf = log.New(log.Default().Writer(), "TPM: ", 0).Printf
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tpm, err := open()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("TPM: error opening: %v", err)
|
|
|
|
|
logf("error opening: %v", err)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
log.Printf("TPM: successfully opened")
|
|
|
|
|
logf("successfully opened")
|
|
|
|
|
defer tpm.Close()
|
|
|
|
|
|
|
|
|
|
info := new(tailcfg.TPMInfo)
|
|
|
|
|
@ -84,12 +93,12 @@ func info() *tailcfg.TPMInfo {
|
|
|
|
|
PropertyCount: 1,
|
|
|
|
|
}.Execute(tpm)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("TPM: GetCapability %v: %v", cap.prop, err)
|
|
|
|
|
logf("GetCapability %v: %v", cap.prop, err)
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
props, err := resp.CapabilityData.Data.TPMProperties()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("TPM: GetCapability %v: %v", cap.prop, err)
|
|
|
|
|
logf("GetCapability %v: %v", cap.prop, err)
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
if len(props.TPMProperty) == 0 {
|
|
|
|
|
@ -97,6 +106,7 @@ func info() *tailcfg.TPMInfo {
|
|
|
|
|
}
|
|
|
|
|
cap.apply(info, props.TPMProperty[0].Value)
|
|
|
|
|
}
|
|
|
|
|
logf("successfully read all properties")
|
|
|
|
|
return info
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|