//go:build ignore

package main

import (
	"crypto/ed25519"
	"crypto/rand"
	"crypto/x509"
	"encoding/base64"
	"encoding/pem"
	"flag"
	"fmt"
	"os"
)

func main() {
	pemPath := flag.String("pem", "", "PKCS#8 private-key output")
	flag.Parse()
	if *pemPath == "" {
		fatal("-pem is required")
	}
	_, privateKey, err := ed25519.GenerateKey(rand.Reader)
	if err != nil {
		fatal(err.Error())
	}
	der, err := x509.MarshalPKCS8PrivateKey(privateKey)
	if err != nil {
		fatal(err.Error())
	}
	raw := pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: der})
	if err := os.WriteFile(*pemPath, raw, 0o400); err != nil {
		fatal(err.Error())
	}
	fmt.Println(base64.StdEncoding.EncodeToString(privateKey))
}

func fatal(message string) {
	_, _ = fmt.Fprintln(os.Stderr, message)
	os.Exit(1)
}
