10 encrypter cipher.Stream
11 decrypter cipher.Stream
14 func newAesCtr(cd CipherData) (Cipher, error) {
15 block, err := aes.NewCipher(cd.Key)
20 encrypter := cipher.NewCTR(block, cd.IV)
21 decrypter := cipher.NewCTR(block, cd.IV)
22 return &aesCtr{encrypter, decrypter}, nil
25 func (c *aesCtr) Encrypt(src io.Reader) io.Reader {
26 reader := &ctrEncryptReader{
27 encrypter: c.encrypter,
33 type ctrEncryptReader struct {
34 encrypter cipher.Stream
38 func (reader *ctrEncryptReader) Read(data []byte) (int, error) {
39 plainText := make([]byte, len(data), len(data))
40 n, err := reader.src.Read(plainText)
42 plainText = plainText[0:n]
43 reader.encrypter.XORKeyStream(data, plainText)
48 func (c *aesCtr) Decrypt(src io.Reader) io.Reader {
49 return &ctrDecryptReader{
50 decrypter: c.decrypter,
55 type ctrDecryptReader struct {
56 decrypter cipher.Stream
60 func (reader *ctrDecryptReader) Read(data []byte) (int, error) {
61 cryptoText := make([]byte, len(data), len(data))
62 n, err := reader.src.Read(cryptoText)
64 cryptoText = cryptoText[0:n]
65 reader.decrypter.XORKeyStream(data, cryptoText)