aboutsummaryrefslogtreecommitdiff
path: root/weed/util
diff options
context:
space:
mode:
Diffstat (limited to 'weed/util')
-rw-r--r--weed/util/cipher.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/weed/util/cipher.go b/weed/util/cipher.go
index f044c2ca3..7bcb6559a 100644
--- a/weed/util/cipher.go
+++ b/weed/util/cipher.go
@@ -1,11 +1,14 @@
package util
import (
+ "bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"errors"
+ "fmt"
"io"
+ "io/ioutil"
"github.com/chrislusf/seaweedfs/weed/glog"
)
@@ -58,3 +61,21 @@ func Decrypt(ciphertext []byte, key CipherKey) ([]byte, error) {
nonce, ciphertext := ciphertext[:nonceSize], ciphertext[nonceSize:]
return gcm.Open(nil, nonce, ciphertext, nil)
}
+
+func EncryptReader(clearReader io.Reader) (cipherKey CipherKey, encryptedReader io.ReadCloser, clearDataLen, encryptedDataLen int, err error) {
+ clearData, err := ioutil.ReadAll(clearReader)
+ if err != nil {
+ err = fmt.Errorf("read raw input: %v", err)
+ return
+ }
+ clearDataLen = len(clearData)
+ cipherKey = GenCipherKey()
+ encryptedData, err := Encrypt(clearData, cipherKey)
+ if err != nil {
+ err = fmt.Errorf("encrypt input: %v", err)
+ return
+ }
+ encryptedDataLen = len(encryptedData)
+ encryptedReader = ioutil.NopCloser(bytes.NewReader(encryptedData))
+ return
+}