1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
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 } } |