You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package coscrypto
import ( "io" )
// Cipher is interface for encryption or decryption of an object
type Cipher interface { Encrypter Decrypter }
// Encrypter is interface with only encrypt method
type Encrypter interface { Encrypt(io.Reader) io.Reader }
// Decrypter is interface with only decrypt method
type Decrypter interface { Decrypt(io.Reader) io.Reader }
// CryptoEncrypter provides close method for Encrypter
type CryptoEncrypter struct { Body io.Reader Encrypter io.Reader isClosed bool }
// Close lets the CryptoEncrypter satisfy io.ReadCloser interface
func (rc *CryptoEncrypter) Close() error { rc.isClosed = true if closer, ok := rc.Body.(io.ReadCloser); ok { return closer.Close() } return nil }
// Read lets the CryptoEncrypter satisfy io.ReadCloser interface
func (rc *CryptoEncrypter) Read(b []byte) (int, error) { if rc.isClosed { return 0, io.EOF } return rc.Encrypter.Read(b) }
// CryptoDecrypter provides close method for Decrypter
type CryptoDecrypter struct { Body io.Reader Decrypter io.Reader isClosed bool }
// Close lets the CryptoDecrypter satisfy io.ReadCloser interface
func (rc *CryptoDecrypter) Close() error { rc.isClosed = true if closer, ok := rc.Body.(io.ReadCloser); ok { return closer.Close() } return nil }
// Read lets the CryptoDecrypter satisfy io.ReadCloser interface
func (rc *CryptoDecrypter) Read(b []byte) (int, error) { if rc.isClosed { return 0, io.EOF } return rc.Decrypter.Read(b) }
|