package release import ( "context" "encoding/hex" "os" ) func PublishHistoryReconstruction(ctx context.Context, store Store, signer Signer, g HistoryReconstruction) error { if !ValidAccount(g.Account) || !ValidApp(g.App) || len(g.Identity) != 64 || g.Revision == 0 { return os.ErrPermission } if _, err := hex.DecodeString(g.Identity); err != nil { return os.ErrPermission } wire, err := SignRootEnvelope(signer, g) if err != nil { return err } _, err = store.Put(ctx, HistoryReconstructionKey(g.Account, g.App, g.Identity, g.Revision), wire, "") return err } func PublishHistoryRecoveryRetirement(ctx context.Context, store Store, signer Signer, g HistoryRecoveryRetirement) error { if !validHistoryRetirement(g) { return os.ErrPermission } for _, digest := range []string{g.Identity, g.OutcomeDigest, g.VerifiedDigest} { if _, err := hex.DecodeString(digest); err != nil { return os.ErrPermission } } wire, err := SignRootEnvelope(signer, g) if err != nil { return err } _, err = store.Put(ctx, HistoryRecoveryRetirementKey(g.Binding, g.Identity, g.OutcomeDigest), wire, "") return err }