OSDN Git Service

versoin1.1.9 (#594)
[bytom/vapor.git] / vendor / github.com / aliyun / aliyun-oss-go-sdk / oss / crypto / cipher.go
1 package osscrypto
2
3 import (
4         "io"
5 )
6
7 // Cipher is interface for encryption or decryption of an object
8 type Cipher interface {
9         Encrypter
10         Decrypter
11 }
12
13 // Encrypter is interface with only encrypt method
14 type Encrypter interface {
15         Encrypt(io.Reader) io.Reader
16 }
17
18 // Decrypter is interface with only decrypt method
19 type Decrypter interface {
20         Decrypt(io.Reader) io.Reader
21 }
22
23 // CryptoEncrypter provides close method for Encrypter
24 type CryptoEncrypter struct {
25         Body      io.Reader
26         Encrypter io.Reader
27         isClosed  bool
28 }
29
30 // Close lets the CryptoEncrypter satisfy io.ReadCloser interface
31 func (rc *CryptoEncrypter) Close() error {
32         rc.isClosed = true
33         if closer, ok := rc.Body.(io.ReadCloser); ok {
34                 return closer.Close()
35         }
36         return nil
37 }
38
39 // Read lets the CryptoEncrypter satisfy io.ReadCloser interface
40 func (rc *CryptoEncrypter) Read(b []byte) (int, error) {
41         if rc.isClosed {
42                 return 0, io.EOF
43         }
44         return rc.Encrypter.Read(b)
45 }
46
47 // CryptoDecrypter provides close method for Decrypter
48 type CryptoDecrypter struct {
49         Body      io.Reader
50         Decrypter io.Reader
51         isClosed  bool
52 }
53
54 // Close lets the CryptoDecrypter satisfy io.ReadCloser interface
55 func (rc *CryptoDecrypter) Close() error {
56         rc.isClosed = true
57         if closer, ok := rc.Body.(io.ReadCloser); ok {
58                 return closer.Close()
59         }
60         return nil
61 }
62
63 // Read lets the CryptoDecrypter satisfy io.ReadCloser interface
64 func (rc *CryptoDecrypter) Read(b []byte) (int, error) {
65         if rc.isClosed {
66                 return 0, io.EOF
67         }
68         return rc.Decrypter.Read(b)
69 }