package main import ( "fmt" "github.com/rs/zerolog" "os" "github.com/kairos-io/kcrypt/pkg/lib" "github.com/urfave/cli" ) var Version = "v0.0.0-dev" func main() { app := &cli.App{ Name: "kairos-kcrypt", Version: Version, Author: "Ettore Di Giacinto", Usage: "kairos escrow key agent component", Description: ``, UsageText: ``, Copyright: "Ettore Di Giacinto", Commands: []cli.Command{ { Name: "encrypt", Description: "Encrypts a partition", Usage: "Encrypts a partition", ArgsUsage: "kcrypt [--tpm] [--tpm-pcrs] [--public-key-pcrs] LABEL", Flags: []cli.Flag{ &cli.BoolFlag{ Name: "tpm", Usage: "Use TPM measurements to lock the partition", }, &cli.StringSliceFlag{ Name: "tpm-pcrs", Usage: "tpm pcrs to bind to (single measurement) . Only applies when --tpm is also set.", }, &cli.StringSliceFlag{ Name: "public-key-pcrs", Usage: "public key pcrs to bind to (policy). Only applies when --tpm is also set.", Value: &cli.StringSlice{"11"}, }, }, Action: func(c *cli.Context) error { var err error var out string if c.NArg() != 1 { return fmt.Errorf("requires 1 arg, the partition label") } log := zerolog.New(os.Stdout).With().Timestamp().Logger() if c.Bool("tpm") { err = lib.LuksifyMeasurements(c.Args().First(), c.StringSlice("tpm-pcrs"), c.StringSlice("public-key-pcrs"), log) } else { out, err = lib.Luksify(c.Args().First(), log) fmt.Println(out) } if err != nil { return err } return nil }, }, { Name: "unlock-all", UsageText: "unlock-all", Usage: "Try to unlock all LUKS partitions", Description: "Typically run during initrd to unlock all the LUKS partitions found", ArgsUsage: "kcrypt [--tpm] unlock-all", Flags: []cli.Flag{ &cli.BoolFlag{ Name: "tpm", Usage: "Use TPM to unlock the partition", }, }, Action: func(c *cli.Context) error { return lib.UnlockAll(c.Bool("tpm")) }, }, { Name: "extract-initrd", Hidden: true, Action: func(c *cli.Context) error { if c.NArg() != 2 { return fmt.Errorf("requires 3 args. initrd,, dst") } return lib.ExtractInitrd(c.Args()[0], c.Args()[1]) }, }, { Name: "inject-initrd", Hidden: true, Action: func(c *cli.Context) error { if c.NArg() != 3 { return fmt.Errorf("requires 3 args. initrd, srcfile, dst") } return lib.InjectInitrd(c.Args()[0], c.Args()[1], c.Args()[2]) }, }, }, } if err := app.Run(os.Args); err != nil { fmt.Println(err.Error()) os.Exit(1) } }