carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package host
2
3import (
4 "context"
5 "crypto/ed25519"
6 "crypto/sha256"
7 "encoding/hex"
8 "path/filepath"
9 "reflect"
10
11 "github.com/carlosframework/platform/internal/release"
12 "github.com/carlosframework/platform/internal/rootstate"
13)
14
15// Retain the independently verified pointer before its artifact can replace a
16// recovery binary. A pointer race retries; no existing identity is overwritten.
17func rememberRootFloorSystemIdentity(ctx context.Context, store release.Store, pub ed25519.PublicKey, opt string, expected *release.SystemPointer) error {
18 raw, _, err := store.Get(ctx, release.SystemPointerKey("router", expected.Channel))
19 if err != nil {
20 return err
21 }
22 verified, err := release.VerifySystemIdentity(pub, raw)
23 if err != nil {
24 return err
25 }
26 if verified.Component != "router" || verified.Channel != expected.Channel || !reflect.DeepEqual(verified.Current, expected.Current) {
27 return errRootFloorHistory
28 }
29 dir, err := rootstate.Open(filepath.Join(opt, "system", "guard", "identities"), true, true)
30 if err != nil {
31 return err
32 }
33 defer dir.Close()
34 digest := sha256.Sum256(raw)
35 return dir.Write(hex.EncodeToString(digest[:])+".json", raw)
36}
37