Files
shhh/internal/clis/hmpki/generate_key.go
T
2026-10-21 00:13:31 -07:00

55 lines
983 B
Go

package hmpki
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"crypto/x509"
"encoding/pem"
"os"
"git.handmadecities.com/HMC/shhh/pkg/pki"
"github.com/spf13/cobra"
)
func init() {
generateCmd.AddCommand(generateKeyCmd)
}
var generateKeyCmd = &cobra.Command{
Use: "key",
Short: "Generate a private key and save it to a file",
RunE: func(cmd *cobra.Command, args []string) error {
priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
return err
}
der, err := x509.MarshalPKCS8PrivateKey(priv)
if err != nil {
return err
}
pemBytes := pem.EncodeToMemory(&pem.Block{
Type: pki.PEMTypePrivateKey,
Bytes: der,
})
kf, err := os.OpenFile(
Output,
// Write only, and fail if it alreay exists.
os.O_WRONLY|os.O_CREATE|os.O_EXCL,
pki.PrivateKeyFilePerms,
)
if err != nil {
return err
}
defer kf.Close()
if _, err = kf.Write(pemBytes); err != nil {
return err
}
return nil
},
}