2023-01-08 19:44:13 +00:00
|
|
|
package sshui
|
|
|
|
|
|
|
|
import (
|
2023-01-08 23:39:36 +00:00
|
|
|
"crypto/rand"
|
2023-01-08 19:44:13 +00:00
|
|
|
"crypto/rsa"
|
|
|
|
"crypto/x509"
|
|
|
|
"encoding/pem"
|
|
|
|
)
|
|
|
|
|
|
|
|
// encodePrivateKeyToPEM encodes Private Key from RSA to PEM format
|
|
|
|
func encodePrivateKeyToPEM(privateKey *rsa.PrivateKey) []byte {
|
|
|
|
// Get ASN.1 DER format
|
|
|
|
privDER := x509.MarshalPKCS1PrivateKey(privateKey)
|
|
|
|
|
|
|
|
// pem.Block
|
|
|
|
privBlock := pem.Block{
|
|
|
|
Type: "RSA PRIVATE KEY",
|
|
|
|
Headers: map[string]string{"gr33tz": "tcp.direct"},
|
|
|
|
Bytes: privDER,
|
|
|
|
}
|
|
|
|
|
|
|
|
return pem.EncodeToMemory(&privBlock)
|
|
|
|
}
|
2023-01-08 23:39:36 +00:00
|
|
|
|
|
|
|
func generatePrivateKey() (*rsa.PrivateKey, error) {
|
|
|
|
privateKey, err := rsa.GenerateKey(rand.Reader, 4096)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if err = privateKey.Validate(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return privateKey, nil
|
|
|
|
}
|