package session import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "log" "os" ) func generateHostKey(filename string, bitSize int) error { if _, err := os.Stat(filename); !os.IsNotExist(err) { log.Printf("Reusing key file '%s'", filename) return nil } privateKey, err := rsa.GenerateKey(rand.Reader, bitSize) if err != nil { return err } privateKeyPEM := &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey), } privateKeyFile, err := os.Create(filename) if err != nil { return err } defer privateKeyFile.Close() log.Printf("Generating key '%s'", filename) return pem.Encode(privateKeyFile, privateKeyPEM) }