|  | @@ -1,65 +1,65 @@
 | 
	
		
			
				|  |  |  package io
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import (
 | 
	
		
			
				|  |  | -  "crypto/cipher"
 | 
	
		
			
				|  |  | -  "io"
 | 
	
		
			
				|  |  | +	"crypto/cipher"
 | 
	
		
			
				|  |  | +	"io"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // CryptionReader is a general purpose reader that applies
 | 
	
		
			
				|  |  |  // block cipher on top of a regular reader.
 | 
	
		
			
				|  |  |  type CryptionReader struct {
 | 
	
		
			
				|  |  | -  mode cipher.BlockMode
 | 
	
		
			
				|  |  | -  reader io.Reader
 | 
	
		
			
				|  |  | +	mode   cipher.BlockMode
 | 
	
		
			
				|  |  | +	reader io.Reader
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func NewCryptionReader(mode cipher.BlockMode, reader io.Reader) *CryptionReader {
 | 
	
		
			
				|  |  | -  this := new(CryptionReader)
 | 
	
		
			
				|  |  | -  this.mode = mode
 | 
	
		
			
				|  |  | -  this.reader = reader
 | 
	
		
			
				|  |  | -  return this
 | 
	
		
			
				|  |  | +	this := new(CryptionReader)
 | 
	
		
			
				|  |  | +	this.mode = mode
 | 
	
		
			
				|  |  | +	this.reader = reader
 | 
	
		
			
				|  |  | +	return this
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Read reads blocks from underlying reader, the length of blocks must be
 | 
	
		
			
				|  |  |  // a multiply of BlockSize()
 | 
	
		
			
				|  |  |  func (reader CryptionReader) Read(blocks []byte) (int, error) {
 | 
	
		
			
				|  |  | -  nBytes, err := reader.reader.Read(blocks)
 | 
	
		
			
				|  |  | -  if err != nil && err != io.EOF {
 | 
	
		
			
				|  |  | -    return nBytes, err
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  if nBytes < len(blocks) {
 | 
	
		
			
				|  |  | -    for i, _ := range blocks[nBytes:] {
 | 
	
		
			
				|  |  | -      blocks[i] = 0
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  reader.mode.CryptBlocks(blocks, blocks)
 | 
	
		
			
				|  |  | -  return nBytes, err
 | 
	
		
			
				|  |  | +	nBytes, err := reader.reader.Read(blocks)
 | 
	
		
			
				|  |  | +	if err != nil && err != io.EOF {
 | 
	
		
			
				|  |  | +		return nBytes, err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if nBytes < len(blocks) {
 | 
	
		
			
				|  |  | +		for i, _ := range blocks[nBytes:] {
 | 
	
		
			
				|  |  | +			blocks[i] = 0
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	reader.mode.CryptBlocks(blocks, blocks)
 | 
	
		
			
				|  |  | +	return nBytes, err
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (reader CryptionReader) BlockSize() int {
 | 
	
		
			
				|  |  | -  return reader.mode.BlockSize()
 | 
	
		
			
				|  |  | +	return reader.mode.BlockSize()
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Cryption writer is a general purpose of byte stream writer that applies
 | 
	
		
			
				|  |  |  // block cipher on top of a regular writer.
 | 
	
		
			
				|  |  |  type CryptionWriter struct {
 | 
	
		
			
				|  |  | -  mode cipher.BlockMode
 | 
	
		
			
				|  |  | -  writer io.Writer
 | 
	
		
			
				|  |  | +	mode   cipher.BlockMode
 | 
	
		
			
				|  |  | +	writer io.Writer
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func NewCryptionWriter(mode cipher.BlockMode, writer io.Writer) *CryptionWriter {
 | 
	
		
			
				|  |  | -  this := new(CryptionWriter)
 | 
	
		
			
				|  |  | -  this.mode = mode
 | 
	
		
			
				|  |  | -  this.writer = writer
 | 
	
		
			
				|  |  | -  return this
 | 
	
		
			
				|  |  | +	this := new(CryptionWriter)
 | 
	
		
			
				|  |  | +	this.mode = mode
 | 
	
		
			
				|  |  | +	this.writer = writer
 | 
	
		
			
				|  |  | +	return this
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Write writes the give blocks to underlying writer. The length of the blocks
 | 
	
		
			
				|  |  |  // must be a multiply of BlockSize()
 | 
	
		
			
				|  |  |  func (writer CryptionWriter) Write(blocks []byte) (int, error) {
 | 
	
		
			
				|  |  | -  writer.mode.CryptBlocks(blocks, blocks)
 | 
	
		
			
				|  |  | -  return writer.writer.Write(blocks)
 | 
	
		
			
				|  |  | +	writer.mode.CryptBlocks(blocks, blocks)
 | 
	
		
			
				|  |  | +	return writer.writer.Write(blocks)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (writer CryptionWriter) BlockSize() int {
 | 
	
		
			
				|  |  | -  return writer.mode.BlockSize()
 | 
	
		
			
				|  |  | +	return writer.mode.BlockSize()
 | 
	
		
			
				|  |  |  }
 |