package crypto

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/base64"
	"encoding/pem"
)

func GenerateKeyPair(bytes int) (string, string, error) {
	privateKey, err := rsa.GenerateKey(rand.Reader, bytes)
	if err != nil {
		return "", "", err
	}

	err = privateKey.Validate()
	if err != nil {
		return "", "", err
	}

	privBlock := pem.Block{
		Type:    "RSA PRIVATE KEY",
		Headers: nil,
		Bytes:   x509.MarshalPKCS1PrivateKey(privateKey),
	}

	privateKeyPEM := pem.EncodeToMemory(&privBlock)

	pubBytes, err := x509.MarshalPKIXPublicKey(&privateKey.PublicKey)
	if err != nil {
		return "", "", err
	}

	return string(privateKeyPEM), string(base64.StdEncoding.EncodeToString(pubBytes)), nil
}