Skip to content
This repository has been archived by the owner on Oct 26, 2022. It is now read-only.

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
Maka8ka authored Jul 16, 2021
1 parent 1291f56 commit fc9c0aa
Show file tree
Hide file tree
Showing 3 changed files with 424 additions and 0 deletions.
102 changes: 102 additions & 0 deletions module/cipher/aescbc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package cipher

import (
"bytes"
"crypto/aes"
"crypto/cipher"
"log"
"runtime"
)

const (
ivaes = "Kasy65xGUhjbzg5f" // must be set in len 16 string
//aeskey = "whoisyourdaddy11" //needs be set in programs
)

func PKCS5Padding(plainText []byte, blockSize int) []byte {
padding := blockSize - (len(plainText) % blockSize)
padText := bytes.Repeat([]byte{byte(padding)}, padding)
newText := append(plainText, padText...)
return newText
}

func PKCS5UnPadding(plainText []byte) ([]byte, error) {
length := len(plainText)
number := int(plainText[length-1])
if number > length {
return nil, nil
}
return plainText[:length-number], nil
}

func init() {
log.SetFlags(log.Ldate | log.Lshortfile)
}

// encrypt
func AesCbcEncrypt(plainText, key []byte, ivAes ...byte) ([]byte, error) {
if len(key) != 16 && len(key) != 24 && len(key) != 32 {
return nil, nil
}
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
paddingText := PKCS5Padding(plainText, block.BlockSize())

var iv []byte
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, nil //, ErrIvAes
} else {
iv = ivAes
}
} else {
iv = []byte(ivaes)
} // To initialize the vector, it needs to be the same length as block.blocksize
blockMode := cipher.NewCBCEncrypter(block, iv)
cipherText := make([]byte, len(paddingText))
blockMode.CryptBlocks(cipherText, paddingText)
return cipherText, nil
}

// decrypt
func AesCbcDecrypt(cipherText, key []byte, ivAes ...byte) ([]byte, error) {
if len(key) != 16 && len(key) != 24 && len(key) != 32 {
return nil, nil //, ErrKeyLengthSixteen
}
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}

defer func() {
if err := recover(); err != nil {
switch err.(type) {
case runtime.Error:
log.Println("runtime err:", err, "Check that the key or text is correct")
default:
log.Println("error:", err)
}
}
}()
var iv []byte
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, nil
} else {
iv = ivAes
}
} else {
iv = []byte(ivaes)
}
blockMode := cipher.NewCBCDecrypter(block, iv)
paddingText := make([]byte, len(cipherText))
blockMode.CryptBlocks(paddingText, cipherText)

plainText, err := PKCS5UnPadding(paddingText)
if err != nil {
return nil, err
}
return plainText, nil
}
108 changes: 108 additions & 0 deletions module/cipher/rsa.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package cipher

import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"log"
"os"
"runtime"
)

const (
privateKeyPrefix = "PRIVATE KEY"
publicKeyPrefix = "PUBLIC KEY"

privateFileName = "private.pem"
publicFileName = "public.pem"
)

func init() {
log.SetFlags(log.Ldate | log.Lshortfile)
}

func RsaEncrypt(plainText, key []byte) (cryptText []byte, err error) {
block, _ := pem.Decode(key)
defer func() {
if err := recover(); err != nil {
switch err.(type) {
case runtime.Error:
log.Println("runtime err:", err, "Check that the key is correct")
default:
log.Println("error:", err)
}
}
}()
publicKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return nil, err
}
publicKey := publicKeyInterface.(*rsa.PublicKey)

cipherText, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, plainText)
if err != nil {
return nil, err
}
return cipherText, nil
}

func RsaDecrypt(cryptText, key []byte) (plainText []byte, err error) {
block, _ := pem.Decode(key)

defer func() {
if err := recover(); err != nil {
switch err.(type) {
case runtime.Error:
log.Println("runtime err:", err, "Check that the key is correct")
default:
log.Println("error:", err)
}
}
}()
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return []byte{}, err
}
plainText, err = rsa.DecryptPKCS1v15(rand.Reader, privateKey, cryptText)
if err != nil {
return []byte{}, err
}
return plainText, nil
}

func GetRsaKey() error {
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
return err
}
x509PrivateKey := x509.MarshalPKCS1PrivateKey(privateKey)
privateFile, err := os.Create(privateFileName)
if err != nil {
return err
}
defer privateFile.Close()
privateBlock := pem.Block{
Type: privateKeyPrefix,
Bytes: x509PrivateKey,
}

if err = pem.Encode(privateFile, &privateBlock); err != nil {
return err
}
publicKey := privateKey.PublicKey
x509PublicKey, err := x509.MarshalPKIXPublicKey(&publicKey)
if err != nil {
panic(err)
}
publicFile, _ := os.Create(publicFileName)
defer publicFile.Close()
publicBlock := pem.Block{
Type: publicKeyPrefix,
Bytes: x509PublicKey,
}
if err = pem.Encode(publicFile, &publicBlock); err != nil {
return err
}
return nil
}
Loading

0 comments on commit fc9c0aa

Please sign in to comment.