package cmd import ( "crypto/ed25519" "crypto/rand" "encoding/json" "fmt" "git.1in9.net/raider/wroofauth/internal/keystore" "github.com/lestrrat-go/jwx/jwk" "github.com/spf13/cobra" ) // generateKeysCmd represents the generateKeys command var generateKeysCmd = &cobra.Command{ Use: "generate-keys", Short: "Generates a new keys", Run: func(cmd *cobra.Command, args []string) { public, private, err := ed25519.GenerateKey(rand.Reader) if err != nil { cmd.PrintErrln(err) return } key, err := jwk.New(private) if err != nil { cmd.PrintErrln(err) return } keyPublic, err := jwk.New(public) if err != nil { cmd.PrintErrln(err) return } kid, err := keystore.GenerateKeyID() if err != nil { cmd.PrintErrln(err) return } key.Set(jwk.KeyIDKey, kid) keyPublic.Set(jwk.KeyIDKey, kid) key.Set(jwk.AlgorithmKey, "EdDSA") keyPublic.Set(jwk.AlgorithmKey, "EdDSA") keystore.Global.Add(key) keystore.Global.Add(keyPublic) buf, err := json.MarshalIndent(keystore.Global, "", " ") if err != nil { fmt.Printf("failed to marshal key into JSON: %s\n", err) return } fmt.Printf("%s\n", buf) }, } func init() { rootCmd.AddCommand(generateKeysCmd) }