63 lines
1.2 KiB
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)
|
|
}
|