|
@@ -6,24 +6,16 @@ import (
|
|
|
"github.com/aead/chacha20"
|
|
"github.com/aead/chacha20"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-func makeNonce(nonce *[chacha20.NonceSize]byte, iv []byte) {
|
|
|
|
|
|
|
+// NewChaCha20Stream creates a new Chacha/20 cipher stream. Caller must ensure that key is 32-bytes long and iv is either 8 or 12 bytes.
|
|
|
|
|
+func NewChaCha20Stream(key []byte, iv []byte) cipher.Stream {
|
|
|
|
|
+ var keyArray [32]byte
|
|
|
|
|
+ var nonce [12]byte
|
|
|
|
|
+ copy(keyArray[:], key)
|
|
|
switch len(iv) {
|
|
switch len(iv) {
|
|
|
case 8:
|
|
case 8:
|
|
|
copy(nonce[4:], iv)
|
|
copy(nonce[4:], iv)
|
|
|
case 12:
|
|
case 12:
|
|
|
copy(nonce[:], iv)
|
|
copy(nonce[:], iv)
|
|
|
- default:
|
|
|
|
|
- panic("bad nonce length")
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func NewChaCha20Stream(key []byte, iv []byte) cipher.Stream {
|
|
|
|
|
- var Key [32]byte
|
|
|
|
|
- var Nonce [12]byte
|
|
|
|
|
- if len(key) != 32 {
|
|
|
|
|
- panic("bad key length")
|
|
|
|
|
}
|
|
}
|
|
|
- copy(Key[:], key)
|
|
|
|
|
- makeNonce(&Nonce, iv)
|
|
|
|
|
- return chacha20.NewCipher(&Nonce, &Key)
|
|
|
|
|
|
|
+ return chacha20.NewCipher(&nonce, &keyArray)
|
|
|
}
|
|
}
|