From 87fa6021e4565a57cb186aa4a1211eccd33d96bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Sun, 29 Jan 2023 06:02:58 +0100 Subject: [PATCH] v0.0.66 --- cryptext/aes.go | 25 +++++++++++++++++++++++-- cryptext/aes_test.go | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 cryptext/aes_test.go diff --git a/cryptext/aes.go b/cryptext/aes.go index 9c9075a..9546aac 100644 --- a/cryptext/aes.go +++ b/cryptext/aes.go @@ -6,42 +6,63 @@ import ( "crypto/rand" "encoding/base64" "errors" + "golang.org/x/crypto/scrypt" "io" ) // https://stackoverflow.com/a/18819040/1761622 -func EncryptAES(key, text []byte) ([]byte, error) { +func EncryptAESSimple(password, text []byte) ([]byte, error) { + + key, err := scrypt.Key(password, nil, 32768, 8, 1, 32) // this is not 100% correct, rounds too low and salt is missing + if err != nil { + return nil, err + } + block, err := aes.NewCipher(key) if err != nil { return nil, err } + b := base64.StdEncoding.EncodeToString(text) ciphertext := make([]byte, aes.BlockSize+len(b)) + iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return nil, err } + cfb := cipher.NewCFBEncrypter(block, iv) cfb.XORKeyStream(ciphertext[aes.BlockSize:], []byte(b)) + return ciphertext, nil } -func DecryptAES(key, text []byte) ([]byte, error) { +func DecryptAESSimple(password, text []byte) ([]byte, error) { + + key, err := scrypt.Key(password, nil, 32768, 8, 1, 32) // this is not 100% correct, rounds too low and salt is missing + if err != nil { + return nil, err + } + block, err := aes.NewCipher(key) if err != nil { return nil, err } + if len(text) < aes.BlockSize { return nil, errors.New("ciphertext too short") } + iv := text[:aes.BlockSize] text = text[aes.BlockSize:] cfb := cipher.NewCFBDecrypter(block, iv) cfb.XORKeyStream(text, text) + data, err := base64.StdEncoding.DecodeString(string(text)) if err != nil { return nil, err } + return data, nil } diff --git a/cryptext/aes_test.go b/cryptext/aes_test.go new file mode 100644 index 0000000..ec5c5a3 --- /dev/null +++ b/cryptext/aes_test.go @@ -0,0 +1,22 @@ +package cryptext + +import "testing" + +func TestEncryptAESSimple(t *testing.T) { + + pw := []byte("hunter12") + + str1 := []byte("Hello World") + + str2, err := EncryptAESSimple(pw, str1) + if err != nil { + panic(err) + } + + str3, err := DecryptAESSimple(pw, str2) + if err != nil { + panic(err) + } + + assertEqual(t, string(str1), string(str3)) +}