cipher.go 933 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package s3crypto
  2. import (
  3. "io"
  4. )
  5. // Cipher interface allows for either encryption and decryption of an object
  6. type Cipher interface {
  7. Encrypter
  8. Decrypter
  9. }
  10. // Encrypter interface with only the encrypt method
  11. type Encrypter interface {
  12. Encrypt(io.Reader) io.Reader
  13. }
  14. // Decrypter interface with only the decrypt method
  15. type Decrypter interface {
  16. Decrypt(io.Reader) io.Reader
  17. }
  18. // CryptoReadCloser handles closing of the body and allowing reads from the decrypted
  19. // content.
  20. type CryptoReadCloser struct {
  21. Body io.ReadCloser
  22. Decrypter io.Reader
  23. isClosed bool
  24. }
  25. // Close lets the CryptoReadCloser satisfy io.ReadCloser interface
  26. func (rc *CryptoReadCloser) Close() error {
  27. rc.isClosed = true
  28. return rc.Body.Close()
  29. }
  30. // Read lets the CryptoReadCloser satisfy io.ReadCloser interface
  31. func (rc *CryptoReadCloser) Read(b []byte) (int, error) {
  32. if rc.isClosed {
  33. return 0, io.EOF
  34. }
  35. return rc.Decrypter.Read(b)
  36. }