commit e37f42ff973aa2cf549c01a0a163e9cf07908f94
parent 49795529fe37c53a1bdc53926a573989b2daed9b
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Thu, 2 Feb 2023 19:34:36 -0800
reuseable code to create ctr stream
Diffstat:
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/pkg/utils/crypto/stream.go b/pkg/utils/crypto/stream.go
@@ -11,18 +11,27 @@ import (
"io"
)
-// NewStreamEncrypter creates a new stream encrypter
-func NewStreamEncrypter(encKey, macKey []byte, plainText io.Reader) (*StreamEncrypter, error) {
+func NewCtrStram(encKey []byte) (cipher.Stream, cipher.Block, []byte, error) {
block, err := aes.NewCipher(encKey)
if err != nil {
- return nil, err
+ return nil, nil, nil, err
}
iv := make([]byte, block.BlockSize())
_, err = rand.Read(iv)
if err != nil {
- return nil, err
+ return nil, nil, nil, err
}
stream := cipher.NewCTR(block, iv)
+ return stream, block, iv, nil
+}
+
+// NewStreamEncrypter creates a new stream encrypter
+func NewStreamEncrypter(encKey, macKey []byte, plainText io.Reader) (*StreamEncrypter, error) {
+ stream, block, iv, err := NewCtrStram(encKey)
+ if err != nil {
+ return nil, err
+ }
+
mac := hmac.New(sha256.New, macKey)
return &StreamEncrypter{
Source: plainText,