Go Private Public RSA

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
    }
}

 

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.