Files
blazena/shared/ssh.go
2026-05-25 15:39:14 +02:00

46 lines
934 B
Go

package shared
import (
"crypto/ed25519"
"crypto/rand"
"encoding/pem"
"log/slog"
"os"
"golang.org/x/crypto/ssh"
)
type Keypair struct {
Public string
Private string
}
func GenerateSSHKeypair() Keypair {
publicKey, privateKey, err := ed25519.GenerateKey(rand.Reader)
if err != nil {
slog.Error("Failed to generate an ssh keypair.", slog.Any("propagatedError", err));
os.Exit(42);
}
privBlock, err := ssh.MarshalPrivateKey(privateKey, "")
if err != nil {
slog.Error("Failed to marshal private key", slog.Any("propagatedError", err));
os.Exit(42);
}
privPem := pem.EncodeToMemory(privBlock)
sshPubKey, err := ssh.NewPublicKey(publicKey)
if err != nil {
slog.Error("Failed deriving public ssh key from a private one.", slog.Any("propagatedError", err));
os.Exit(42);
}
pubBytes := ssh.MarshalAuthorizedKey(sshPubKey)
return Keypair{
Private: string(privPem),
Public: string(pubBytes),
}
}