package main

// Imzalama anahtari uretici. Gizli anahtar yalnizca verilen klasore yazilir (bridge deposu DISINDA).
// Yalnizca ACIK anahtar ekrana basilir.
import (
	"crypto/ed25519"
	"crypto/rand"
	"encoding/base64"
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Println("kullanim: keygen <klasor>")
		os.Exit(2)
	}
	klasor := os.Args[1]
	if err := os.MkdirAll(klasor, 0o700); err != nil {
		fmt.Println("klasor olusturulamadi:", err)
		os.Exit(1)
	}
	yol := filepath.Join(klasor, "gizli-anahtar.txt")
	if _, err := os.Stat(yol); err == nil {
		fmt.Println("gizli anahtar zaten var, uzerine yazilmadi")
		os.Exit(1)
	}
	pub, priv, err := ed25519.GenerateKey(rand.Reader)
	if err != nil {
		fmt.Println("uretim hatasi:", err)
		os.Exit(1)
	}
	if err := os.WriteFile(yol, []byte(base64.StdEncoding.EncodeToString(priv)), 0o600); err != nil {
		fmt.Println("yazilamadi:", err)
		os.Exit(1)
	}
	fmt.Println(base64.StdEncoding.EncodeToString(pub))
}