in linux/tpm.go [63:103]
func (tpm *tpmDevice) Initialize() error {
if tpm == nil {
return errors.New("cannot insnantiate a nil instance")
}
rwc, err := tpm2.OpenTPM(tpm.path)
if err != nil {
return err
}
tpm.rwc = rwc
flog.Debugf("Loaded TPM device: %s", tpm.path)
db, err := diskio.OpenDB()
if err != nil {
return err
}
handles := make(map[string]tpmutil.Handle)
err = db.Visit(func(key string, val []byte) error {
var keyobj tpmKey
if err := utils.UnmarshalBytes(val, &keyobj); err != nil {
flog.Criticalf("Failed to unmarshal key %q: %+v", key, err)
return err
}
handles[key] = keyobj.Handle
flog.Debugf("Found handle for key %q: %#x", key, keyobj.Handle)
return nil
})
if err != nil {
flog.Criticalf("Failed to init key handler: %+v", err)
return err
}
tpm.keyHandler = NewKeyHandler(handles)
flog.Debugf("Initialized key handler")
return nil
}