From 038f60349cc3ce373171486440e4e291cfdd4305 Mon Sep 17 00:00:00 2001
From: Sandeep Shewalkar <sandeepss@mkcl.org>
Date: Wed, 12 Jul 2017 12:49:12 +0530
Subject: [PATCH] Security helper and compression helper added

---
 compressionHelper.go | 16 ++++++++++
 glide.yaml           | 11 ++-----
 securityHelper.go    | 71 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 89 insertions(+), 9 deletions(-)
 create mode 100644 compressionHelper.go
 create mode 100644 securityHelper.go

diff --git a/compressionHelper.go b/compressionHelper.go
new file mode 100644
index 0000000..08fe9ce
--- /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 6022171..736facc 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 0000000..cfc79cc
--- /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()
+}
-- 
GitLab