diff --git a/compressionHelper.go b/compressionHelper.go new file mode 100644 index 0000000000000000000000000000000000000000..08fe9cebc09808c48e08ad7c752d4c4c726a7efb --- /dev/null +++ b/compressionHelper.go @@ -0,0 +1,16 @@ +package coreos + +import "github.com/DataDog/zstd" + +//Compress Compress +func Compress(inputData []byte) ([]byte, error) { + compressedData, err := zstd.Compress(nil, inputData) + + return compressedData, err +} + +// Decompress Decompress +func Decompress(compressedData []byte) ([]byte, error) { + decompressedData, err := zstd.Decompress(nil, compressedData) + return decompressedData, err +} diff --git a/glide.yaml b/glide.yaml index 6022171cb9e5cae39f77945d13e31e2a8d1967bd..736facc0acfa04a268f85291e161daa525871eba 100644 --- a/glide.yaml +++ b/glide.yaml @@ -1,28 +1,22 @@ package: . import: +- package: github.com/DataDog/zstd +- package: github.com/OneOfOne/xxhash - package: github.com/allegro/bigcache - package: github.com/dgrijalva/jwt-go - version: v3.0.0 - package: github.com/garyburd/redigo - version: v1.1.0 subpackages: - redis - package: github.com/go-playground/locales - version: v0.11.1 subpackages: - en - package: github.com/go-playground/universal-translator - version: v0.16.0 - package: github.com/gocraft/dbr - version: v2.1 - package: github.com/labstack/echo - version: v3.2.1 subpackages: - middleware - package: github.com/sirupsen/logrus - version: v1.0.1 - package: gopkg.in/go-playground/validator.v9 - version: v9.4.0 subpackages: - translations/en - package: gopkg.in/mgo.v2 @@ -30,6 +24,5 @@ import: - bson testImport: - package: github.com/stretchr/testify - version: v1.1.4 subpackages: - assert diff --git a/securityHelper.go b/securityHelper.go new file mode 100644 index 0000000000000000000000000000000000000000..cfc79ccb7116cb2320b119bdb2fea1649691c7fb --- /dev/null +++ b/securityHelper.go @@ -0,0 +1,71 @@ +package coreos + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "encoding/base64" + + "github.com/OneOfOne/xxhash" +) + +const ( + IV = "AAAAAAAAAAAAAAAA" +) + +//AESEncrypt Encrypts given text +func AESEncrypt(plainText, key []byte) []byte { + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + padding := block.BlockSize() - len(plainText)%block.BlockSize() + + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + + plainText = append(plainText, padtext...) + + cipherText := make([]byte, len(plainText)) + + cbc := cipher.NewCBCEncrypter(block, []byte(IV)) + cbc.CryptBlocks(cipherText, plainText) + + encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(plainText))) + + base64.StdEncoding.Encode(encodedData, cipherText) + + return encodedData +} + +//AESDecrypt Decrypts given cipher text +func AESDecrypt(encodedData, key []byte) []byte { + decodedData := make([]byte, base64.StdEncoding.DecodedLen(len(encodedData))) + n, err := base64.StdEncoding.Decode(decodedData, encodedData) + if err != nil { + panic(err) + } + + cipherText := decodedData[:n] + + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + cbc := cipher.NewCBCDecrypter(block, []byte(IV)) + cbc.CryptBlocks(cipherText, cipherText) + + length := len(cipherText) + + unpadding := int(cipherText[length-1]) + + return cipherText[:(length - unpadding)] +} + +//GetHashChecksum Get Hash Check sum +func GetHashChecksum(byteArray []byte) uint64 { + h := xxhash.New64() + h.Write(byteArray) + return h.Sum64() +}