package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
)
type (
App struct {
Private *rsa.PublicKey
Public []byte
//Secret []byte
}
)
func main() {
app := new(App)
if err := app.GenerateKey(); err != nil {
panic(err)
}
privpem := pem.EncodeToMemory(
&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(app.Private),
},
)
fmt.Printf("%s\n", privpem)
pubbytes, err := x509.MarshalPKIXPublicKey(&app.Private.PublicKey)
if err != nil {
panic(err)
}
pubpem := pem.EncodeToMemory(
&pem.Block{
Type: "RSA PUBLIC KEY",
Bytes: pubbytes,
},
)
fmt.Printf("%s\n", pubpem)
}
func NewApp() *App {
return &App{
PrivateKey: make([]byte, 0),
PublicKey: make([]byte, 0),
//Secret: make([]byte, 0),
}
}
func (this *App) GenerateKey() error {
if priv, err := rsa.GenerateKey(rand.Reader, 2048); err != nil {
return err
} else {
if err := priv.Validate(); err != nil {
return err
}
this.Private = priv
return nil
}
}