package host import ( "context" "crypto/ed25519" "crypto/sha256" "encoding/hex" "path/filepath" "reflect" "github.com/carlosframework/platform/internal/release" "github.com/carlosframework/platform/internal/rootstate" ) // Retain the independently verified pointer before its artifact can replace a // recovery binary. A pointer race retries; no existing identity is overwritten. func rememberRootFloorSystemIdentity(ctx context.Context, store release.Store, pub ed25519.PublicKey, opt string, expected *release.SystemPointer) error { raw, _, err := store.Get(ctx, release.SystemPointerKey("router", expected.Channel)) if err != nil { return err } verified, err := release.VerifySystemIdentity(pub, raw) if err != nil { return err } if verified.Component != "router" || verified.Channel != expected.Channel || !reflect.DeepEqual(verified.Current, expected.Current) { return errRootFloorHistory } dir, err := rootstate.Open(filepath.Join(opt, "system", "guard", "identities"), true, true) if err != nil { return err } defer dir.Close() digest := sha256.Sum256(raw) return dir.Write(hex.EncodeToString(digest[:])+".json", raw) }