github.com/aliyun/aliyun-oss-go-sdk@v3.0.2+incompatible/oss/crypto/cipher.go (about)

     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  }