diff --git a/cmd/object-handlers.go b/cmd/object-handlers.go index 9837e4f59..5a5339d27 100644 --- a/cmd/object-handlers.go +++ b/cmd/object-handlers.go @@ -808,9 +808,21 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re var encMetadata = make(map[string]string) if objectAPI.IsEncryptionSupported() && !srcInfo.IsCompressed() { + // Encryption parameters not applicable for this object. + if !crypto.IsEncrypted(srcInfo.UserDefined) && crypto.SSECopy.IsRequested(r.Header) { + writeErrorResponse(w, toAPIErrorCode(errInvalidEncryptionParameters), r.URL) + return + } + + // Encryption parameters not present for this object. + if crypto.SSEC.IsEncrypted(srcInfo.UserDefined) && !crypto.SSECopy.IsRequested(r.Header) { + writeErrorResponse(w, ErrInvalidSSECustomerAlgorithm, r.URL) + return + } + var oldKey, newKey []byte sseCopyS3 := crypto.S3.IsEncrypted(srcInfo.UserDefined) - sseCopyC := crypto.SSECopy.IsRequested(r.Header) + sseCopyC := crypto.SSEC.IsEncrypted(srcInfo.UserDefined) && crypto.SSECopy.IsRequested(r.Header) sseC := crypto.SSEC.IsRequested(r.Header) sseS3 := crypto.S3.IsRequested(r.Header)