wroofauth/cmd/generateKeys.go

63 lines
1.2 KiB
Go

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)
}