def normalize_before_encryption(unencrypted, content_type, content_encoding, enforce_text_only=False): """Normalize unencrypted prior to plugin encryption processing.""" if not unencrypted: raise CryptoNoPayloadProvidedException() # Validate and normalize content-type. normalized_mime = mime_types.normalize_content_type(content_type) if not mime_types.is_supported(normalized_mime): raise CryptoContentTypeNotSupportedException(content_type) # Process plain-text type. if normalized_mime in mime_types.PLAIN_TEXT: # normalize text to binary string unencrypted = unencrypted.encode('utf-8') # Process binary type. else: # payload has to be decoded if mime_types.is_base64_processing_needed(content_type, content_encoding): try: unencrypted = base64.b64decode(unencrypted) except TypeError: raise CryptoPayloadDecodingError() elif enforce_text_only: # For text-based protocols (such as the one-step secret POST), # only 'base64' encoding is possible/supported. raise CryptoContentEncodingMustBeBase64() elif content_encoding: # Unsupported content-encoding request. raise CryptoContentEncodingNotSupportedException(content_encoding) return unencrypted, normalized_mime
def analyze_before_decryption(content_type): """Determine support for desired content type.""" if not mime_types.is_supported(content_type): raise CryptoAcceptNotSupportedException(content_type)