Skip to content

Instantly share code, notes, and snippets.

@yujp
Created January 8, 2020 13:54
Show Gist options
  • Select an option

  • Save yujp/29bff4e96d3f76ef53b6453967df4654 to your computer and use it in GitHub Desktop.

Select an option

Save yujp/29bff4e96d3f76ef53b6453967df4654 to your computer and use it in GitHub Desktop.
package main
import (
"crypto/ed25519"
"crypto/rand"
"crypto/x509"
//"crypto/x509/pkix"
"encoding/pem"
"log"
//"math/big"
"os"
//"time"
)
func main() {
pub, priv, err := ed25519.GenerateKey(rand.Reader)
if err != nil {
log.Fatalf("%v\n", err)
}
// func() {
// template := func() x509.Certificate {
// var notBefore time.Time
// notBefore = time.Now()
// notAfter := notBefore.Add(time.Duration(365 * 24 * time.Hour))
// serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
// serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
// if err != nil {
// log.Fatalf("Failed to generate serial number: %s", err)
// }
// return x509.Certificate{
// SerialNumber: serialNumber,
// Subject: pkix.Name{
// Organization: []string{"Acme Co"},
// },
// NotBefore: notBefore,
// NotAfter: notAfter,
// KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
// ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
// BasicConstraintsValid: true,
// }
// }()
// pub := priv.Public().(ed25519.PublicKey)
// b, err := x509.CreateCertificate(rand.Reader, &template, &template, pub, priv)
// if err != nil {
// log.Fatalf("Failed to create certificate: %v", err)
// }
// out, err := os.Create("cert.pem")
// if err != nil {
// log.Fatalf("Failed to open cert.pem for writing: %s", err)
// }
// defer out.Close()
// if err := pem.Encode(out, &pem.Block{Type: "CERTIFICATE", Bytes: b}); err != nil {
// log.Fatalf("Failed to write data to cert.pem: %s", err)
// }
// }()
func() {
b, err := x509.MarshalPKCS8PrivateKey(priv)
if err != nil {
log.Fatalf("Unable to marshal private key: %v", err)
}
out, err := os.OpenFile("private.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
log.Fatalf("Failed to open private.pem for writing: %v", err)
return
}
defer out.Close()
if err := pem.Encode(out, &pem.Block{Type: "ED25519 PRIVATE KEY", Bytes: b}); err != nil {
log.Fatalf("Failed to write data to private.pem: %s", err)
}
}()
func() {
//pub := priv.Public().(ed25519.PublicKey)
b, err := x509.MarshalPKIXPublicKey(pub)
if err != nil {
log.Fatalf("Unable to marshal public key: %v", err)
}
out, err := os.OpenFile("public.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
log.Fatalf("Failed to open public.pem for writing: %v", err)
return
}
defer out.Close()
if err := pem.Encode(out, &pem.Block{Type: "ED25519 PUBLIC KEY", Bytes: b}); err != nil {
log.Fatalf("Failed to write data to public.pem: %s", err)
}
}()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment