transcrypt.go
- Add documentation - Add tests Signed-off-by: Jan Tytgat <jan.tytgat@corelayer.eu>
This commit is contained in:
@ -12,6 +12,45 @@ import (
|
||||
"github.com/minio/sio"
|
||||
)
|
||||
|
||||
// Decrypt decrypts a supplied hex-encoded data string using the supplied secret key.
|
||||
// It will return an error if either the key or the data is empty.
|
||||
// If the hex-encoded string data cannot be converted into proper encrypted data, decryption will also fail with an error.
|
||||
func Decrypt(key string, data string) (any, error) {
|
||||
if key == "" {
|
||||
return nil, errors.New("key is empty")
|
||||
}
|
||||
if data == "" {
|
||||
return nil, errors.New("data is empty")
|
||||
}
|
||||
|
||||
var err error
|
||||
var encryptedData []byte
|
||||
var kind reflect.Kind
|
||||
var cryptoConfig sio.Config
|
||||
|
||||
if encryptedData, kind, cryptoConfig, err = decodeHexString(key, data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var decryptedHexData *bytes.Buffer
|
||||
decryptedHexData = bytes.NewBuffer(make([]byte, 0))
|
||||
if _, err = sio.Decrypt(decryptedHexData, bytes.NewBuffer(encryptedData), cryptoConfig); err != nil {
|
||||
return nil, fmt.Errorf("decrypt failed: %w", err)
|
||||
}
|
||||
|
||||
var decryptedData []byte
|
||||
if decryptedData, err = hex.DecodeString(string(decryptedHexData.Bytes())); err != nil {
|
||||
return nil, fmt.Errorf("decode decrypted hex data failed: %w", err)
|
||||
}
|
||||
|
||||
var outputValue reflect.Value
|
||||
if outputValue, err = convertBytesToValue(decryptedData, kind); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return outputValue.Interface(), nil
|
||||
}
|
||||
|
||||
// Encrypt encrypts the supplied data using the supplied secret key and cipher suite.
|
||||
// It will return an error if either the key is empty or the data is nil.
|
||||
// Additionally, if the necessary cryptographic configuration cannot be created using the supplied cipherSuite, it will return an error.
|
||||
@ -63,42 +102,3 @@ func Encrypt(key string, salt []byte, cipherSuite CipherSuite, d any) (string, e
|
||||
|
||||
return encryptedString, nil
|
||||
}
|
||||
|
||||
// Decrypt decrypts a supplied hex-encoded data string using the supplied secret key.
|
||||
// It will return an error if either the key or the data is empty.
|
||||
// If the hex-encoded string data cannot be converted into proper encrypted data, decryption will also fail with an error.
|
||||
func Decrypt(key string, data string) (any, error) {
|
||||
if key == "" {
|
||||
return nil, errors.New("key is empty")
|
||||
}
|
||||
if data == "" {
|
||||
return nil, errors.New("data is empty")
|
||||
}
|
||||
|
||||
var err error
|
||||
var encryptedData []byte
|
||||
var kind reflect.Kind
|
||||
var cryptoConfig sio.Config
|
||||
|
||||
if encryptedData, kind, cryptoConfig, err = decodeHexString(key, data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var decryptedHexData *bytes.Buffer
|
||||
decryptedHexData = bytes.NewBuffer(make([]byte, 0))
|
||||
if _, err = sio.Decrypt(decryptedHexData, bytes.NewBuffer(encryptedData), cryptoConfig); err != nil {
|
||||
return nil, fmt.Errorf("decrypt failed: %w", err)
|
||||
}
|
||||
|
||||
var decryptedData []byte
|
||||
if decryptedData, err = hex.DecodeString(string(decryptedHexData.Bytes())); err != nil {
|
||||
return nil, fmt.Errorf("decode decrypted hex data failed: %w", err)
|
||||
}
|
||||
|
||||
var outputValue reflect.Value
|
||||
if outputValue, err = convertBytesToValue(decryptedData, kind); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return outputValue.Interface(), nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user