Files
irsa-manager/internal/selfhosted/keys.go
T
2024-03-28 22:01:51 +09:00

41 lines
781 B
Go

package selfhosted
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
)
type KeyPair struct {
PublicKey []byte
PrivateKey []byte
}
func createKeyPair() (*KeyPair, error) {
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
return nil, err
}
// convert private key to PEM
privPem := pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
}
privPemBytes := pem.EncodeToMemory(&privPem)
// convert public key to PKIX, ASN.1 DER
pubASN1, err := x509.MarshalPKIXPublicKey(&privateKey.PublicKey)
if err != nil {
return nil, err
}
pubPem := pem.Block{
Type: "PUBLIC KEY",
Bytes: pubASN1,
}
pubPemBytes := pem.EncodeToMemory(&pubPem)
return &KeyPair{pubPemBytes, privPemBytes}, nil
}