Skip to content
Snippets Groups Projects
Select Git revision
  • 07e03ceea1cc780a10ddf13807db3fdd6856e37c
  • main default protected
  • v1.302.0
  • v1.301.0
  • v1.300.0
  • v1.299.0
  • v1.298.0
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
22 results

cron.go

Blame
  • encryption.go 1.58 KiB
    package encryption
    
    import (
    	"crypto/aes"
    	"crypto/cipher"
    	"crypto/hmac"
    	"crypto/md5"
    	"crypto/rand"
    	"crypto/sha256"
    	"encoding/base64"
    	"fmt"
    	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors"
    	"io"
    )
    
    func Hash(input string, key string) string {
    	keyBytes := []byte(key)
    	h := hmac.New(sha256.New, keyBytes)
    	h.Write([]byte(input))
    	return base64.StdEncoding.EncodeToString(h.Sum(nil))
    }
    
    func Md5HashString(bytesToHash []byte) string {
    	hash := md5.Sum(bytesToHash)
    	hashString := fmt.Sprintf("%X", hash)
    	return hashString
    }
    
    func Encrypt(plaintext string, key string) (string, error) {
    	if len(key) != 32 {
    		return "", errors.New("key should be 32 bytes")
    	}
    
    	block, err := aes.NewCipher([]byte(key))
    	if err != nil {
    		return "", err
    	}
    
    	aesGcm, err := cipher.NewGCM(block)
    	if err != nil {
    		return "", err
    	}
    
    	nonce := make([]byte, aesGcm.NonceSize())
    	if _, err = io.ReadFull(rand.Reader, nonce); err != nil {
    		return "", err
    	}
    
    	return string(aesGcm.Seal(nonce, nonce, []byte(plaintext), nil)), nil
    }
    
    func Decrypt(ciphertext string, key string) (string, error) {
    	if len(key) != 32 {
    		return "", errors.New("key should be 32 bytes")
    	}
    
    	block, err := aes.NewCipher([]byte(key))
    	if err != nil {
    		return "", err
    	}
    
    	aesGcm, err := cipher.NewGCM(block)
    	if err != nil {
    		return "", err
    	}
    
    	nonceSize := aesGcm.NonceSize()
    	if len(ciphertext) < nonceSize {
    		return "", errors.New("ciphertext too short")
    	}