rsa

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 2, 2021 License: GPL-3.0 Imports: 11 Imported by: 0

README

rsa

RSA module

Install

go get github.com/maplepie/rsa

What is RSA

RSA is designed to encrypt or decrypt data. It supports:

  • encrypt or decrypt data
  • sign and verify data
  • reading from PEM, SSH-RSA, OpenSSH key files
  • writing to PEM, SSH-RSA key files
  • generate key

Example

Simple

Here is an example of simple encrypt/decrypt data.

r := rsa.New()
str := []byte("Hello World!")

err := r.GenerateKey(rsa.ADVANTAGE_KEY_BITS)
if err != nil {
    fmt.Println(err)
}

encrypt, err := r.Encrypt(str, nil)
if err != nil {
    fmt.Println(err)
}
result, err := r.Decrypt(encrypt, nil)
if err != nil {
    fmt.Println(err)
}
fmt.Println(string(result))

you can use label to encrypt your data, and you should use the same label to decrypt your data which you had encrypt.

r := rsa.New()
str := []byte("Hello World!")

err := r.GenerateKey(rsa.ADVANTAGE_KEY_BITS)
if err != nil {
    fmt.Println(err)
}

// add label
label := []byte("your message id")

encrypt, err := r.Encrypt(str, label)
if err != nil {
    fmt.Println(err)
}
result, err := r.Decrypt(encrypt, label)
if err != nil {
    fmt.Println(err)
}
fmt.Println(string(result))
Reading key from files
r := rsa.New()
str := []byte("Hello World!")

p := rsa.NewPemKey() // read key use pem method
// p := rsa.NewSSHKey() // read key use ssh-rsa method

r.SetReader(p)
// load file form file path
err := r.Load("private.pem", "public.pem")
if err != nil {
    fmt.Println(err)
}

encrypt, err := r.Encrypt(str, nil)
if err != nil {
    fmt.Println(err)
}
fmt.Println(encrypt)
Write key to files
r := rsa.New()

err := r.GenerateKey(rsa.ADVANTAGE_KEY_BITS)
if err != nil {
	fmt.Println(err)
}

p := rsa.NewPemKey() // save key use pem method
// p := rsa.NewSSHKey() // save key use ssh-rsa method

r.SetWriter(p)

// save file to file path
err = r.Save("private.pem", "public.pem")
if err != nil {
	fmt.Println(err)
}
Translate

translate pem type to ssh-rsa type, or reverse.

r := rsa.New()

p1 := rsa.NewPemKey() // read key use pem method
p2 := rsa.NewSSHKey() // save key use ssh-rsa method

r.SetReader(p1)
r.SetWriter(p2)

err = r.Load("private.pem", "public.pem")
if err != nil {
    fmt.Println(err)
}

// save file to file path
err = r.Save("id_rsa", "id_rsa.pub")
if err != nil {
	fmt.Println(err)
}
Advantage

if you want to use custom reader/writer, you just need to implement the interface of Reader or Writer.

type Reader interface {
	Load(key *Key, privateFile string, publicFile string) (err error)
}

type Writer interface {
	Save(key *Key, privateFile string, publicFile string) (err error)
}

Documentation

Index

Constants

View Source
const (
	DEFAULT_KEY_BITS   = 1024 // default key bits.
	ADVANTAGE_KEY_BITS = 2048 // advantage key bits
)
View Source
const (
	DEFAULT_PEM_PUBLICFILE  = `public.pem`  // 默认公钥名
	DEFAULT_PEM_PRIVATEFILE = `private.pem` // 默认私钥名
)
View Source
const (
	DEFAULT_SSH_PUBLICFILE  = `id_rsa.pub` // 默认公钥名
	DEFAULT_SSH_PRIVATEFILE = `id_rsa`     // 默认私钥名
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Key

type Key struct {
	// contains filtered or unexported fields
}

type KeyManager

type KeyManager struct {
	Key
	// contains filtered or unexported fields
}

func New

func New() *KeyManager

func (*KeyManager) Decrypt

func (m *KeyManager) Decrypt(cipherText string, label []byte) ([]byte, error)

解密

func (*KeyManager) Encrypt

func (m *KeyManager) Encrypt(plainText []byte, label []byte) (string, error)

加密

func (*KeyManager) GenerateKey

func (m *KeyManager) GenerateKey(bits int) error

生成私钥公钥 明文长度(bytes)小于等于密钥长度(bytes) - 11(bytes) rsa的生成长度是用比特计算

func (*KeyManager) Load

func (m *KeyManager) Load(privateFile string, publicFile string) error

func (*KeyManager) Save

func (m *KeyManager) Save(privateFile string, publicFile string) error

func (*KeyManager) SetReader

func (m *KeyManager) SetReader(reader Reader)

func (*KeyManager) SetWriter

func (m *KeyManager) SetWriter(writer Writer)

func (*KeyManager) Sign

func (m *KeyManager) Sign(plainText []byte) ([]byte, error)

签名

func (*KeyManager) Verify

func (m *KeyManager) Verify(plainText []byte, signature []byte) error

验证

type PemKey

type PemKey struct{}

func NewPemKey

func NewPemKey() *PemKey

func (*PemKey) Load

func (p *PemKey) Load(key *Key, privateFile string, publicFile string) error

func (*PemKey) Save

func (p *PemKey) Save(key *Key, privateFile string, publicFile string) error

type Reader

type Reader interface {
	Load(key *Key, privateFile string, publicFile string) (err error)
}

type SSHKey

type SSHKey struct{}

func NewSSHKey

func NewSSHKey() *SSHKey

func (*SSHKey) Load

func (s *SSHKey) Load(key *Key, privateFile string, publicFile string) error

func (*SSHKey) Save

func (s *SSHKey) Save(key *Key, privateFile string, publicFile string) error

type Writer

type Writer interface {
	Save(key *Key, privateFile string, publicFile string) (err error)
}

Directories

Path Synopsis
example

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL