@@ -29,7 +29,7 @@ func (c *Cipher) SetPadding(padding PaddingMode) {
2929 c .padding = padding
3030}
3131
32- func (c * Cipher ) stream () cipher.Stream {
32+ func (c * Cipher ) encryptStream () cipher.Stream {
3333 var stream cipher.Stream
3434 switch c .mode {
3535 case CTR :
@@ -51,19 +51,31 @@ func (c *Cipher) Encrypt(src []byte) []byte {
5151 }
5252
5353 dst := make ([]byte , len (src ))
54- stream := c .stream ()
54+ stream := c .encryptStream ()
5555 stream .XORKeyStream (dst , src )
5656 return dst
5757}
5858
5959func (c * Cipher ) StreamEncrypt (w io.Writer ) io.WriteCloser {
60- stream := c .stream ()
61- return & cipher.StreamWriter {S : stream , W : w }
60+ return & cipher.StreamWriter {S : c .encryptStream (), W : w }
61+ }
62+
63+ func (c * Cipher ) decryptStream () cipher.Stream {
64+ var stream cipher.Stream
65+ switch c .mode {
66+ case CTR :
67+ stream = cipher .NewCTR (c .block , c .iv [:])
68+ case OFB :
69+ stream = cipher .NewOFB (c .block , c .iv [:])
70+ default :
71+ stream = cipher .NewCFBDecrypter (c .block , c .iv [:])
72+ }
73+ return stream
6274}
6375
6476func (c * Cipher ) Decrypt (src []byte ) []byte {
6577 dst := make ([]byte , len (src ))
66- stream := c .stream ()
78+ stream := c .decryptStream ()
6779 stream .XORKeyStream (dst , src )
6880
6981 switch c .padding {
@@ -76,13 +88,13 @@ func (c *Cipher) Decrypt(src []byte) []byte {
7688}
7789
7890func (c * Cipher ) StreamDecrypt (r io.Reader ) io.ReadCloser {
79- return & StreamReader {S : c .stream (), R : r }
91+ return & StreamReader {S : c .decryptStream (), R : r }
8092}
8193
8294func NewCipher (mode BlockMode , key []byte ) (* Cipher , error ) {
8395 block , err := aes .NewCipher (key )
8496 if err != nil {
8597 return nil , err
8698 }
87- return & Cipher {block : block , mode : mode }, nil
88- }
99+ return & Cipher {block : block , mode : mode , padding : PKCS7 }, nil
100+ }
0 commit comments