github.com/s7techlab/cckit@v0.10.5/extensions/encryption/encryption.go (about) 1 package encryption 2 3 import ( 4 "github.com/pkg/errors" 5 "github.com/s7techlab/cckit/convert" 6 "github.com/s7techlab/cckit/router" 7 ) 8 9 const TransientMapKey = `ENCODE_KEY` 10 11 // EncryptArgs convert args to [][]byte and encrypt args with key 12 func EncryptArgs(key []byte, args ...interface{}) ([][]byte, error) { 13 argBytes, err := convert.ArgsToBytes(args...) 14 if err != nil { 15 return nil, err 16 } 17 18 return EncryptArgsBytes(key, argBytes) 19 } 20 21 // EncryptArgsBytes encrypt args with key 22 func EncryptArgsBytes(key []byte, argsBytes [][]byte) ([][]byte, error) { 23 eargs := make([][]byte, len(argsBytes)) 24 for i, bb := range argsBytes { 25 encrypted, err := EncryptBytes(key, bb) 26 if err != nil { 27 return nil, errors.Wrap(err, `encryption error`) 28 } 29 30 eargs[i] = encrypted 31 } 32 return eargs, nil 33 } 34 35 // DecryptArgs decrypt args 36 func DecryptArgs(key []byte, args [][]byte) ([][]byte, error) { 37 dargs := make([][]byte, len(args)) 38 for i, a := range args { 39 40 // do not try to decrypt init function 41 if i == 0 && string(a) == router.InitFunc { 42 dargs[i] = a 43 continue 44 } 45 46 decrypted, err := DecryptBytes(key, a) 47 if err != nil { 48 return nil, errors.Wrap(err, `decryption error`) 49 } 50 dargs[i] = decrypted 51 } 52 return dargs, nil 53 } 54 55 // Encrypt converts value to []byte and encrypts its with key 56 func Encrypt(key []byte, value interface{}) ([]byte, error) { 57 // TODO: customize IV 58 bb, err := convert.ToBytes(value) 59 if err != nil { 60 return nil, errors.Wrap(err, `convert values to bytes`) 61 } 62 63 return EncryptBytes(key, bb) 64 } 65 66 // Decrypt decrypts value with key 67 func Decrypt(key, value []byte) ([]byte, error) { 68 69 bb := make([]byte, len(value)) 70 copy(bb, value) 71 return DecryptBytes(key, bb) 72 } 73 74 // TransientMapWithKey creates transient map with encrypting/decrypting key 75 func TransientMapWithKey(key []byte) map[string][]byte { 76 return map[string][]byte{TransientMapKey: key} 77 }