in linux/tpm.go [343:378]
func (tpm *tpmDevice) LoadDiskKey(keyID string) (CryptoKey, error) {
db, err := diskio.OpenDB()
if err != nil {
return nil, err
}
keyBytes, err := db.Load(keyID)
if err != nil {
flog.Warningf("Got error loading key from disk: %+v", err)
return nil, nil
}
if len(keyBytes) <= 0 {
flog.Warning("Loaded key file but got no data")
return nil, nil
}
flog.Debugf("Attempting to unmarshal key '%s'", keyID)
var keyobj tpmKey
if err := utils.UnmarshalBytes(keyBytes, &keyobj); err != nil {
flog.Criticalf("Failed to unmarshal key '%s': %+v", keyID, err)
return nil, err
}
if keyobj.IsEmpty() {
flog.Warningf(
"Key '%s' loaded, but has no data; generate a new key",
keyID,
)
return nil, nil
}
keyobj.FillKeyData(keyobj.PublicBytes, nil, nil, nil)
return &keyobj, nil
}