1# Copyright (c) 2023, exiledkingcc 
    2# All rights reserved. 
    3# 
    4# Redistribution and use in source and binary forms, with or without 
    5# modification, are permitted provided that the following conditions are 
    6# met: 
    7# 
    8# * Redistributions of source code must retain the above copyright notice, 
    9# this list of conditions and the following disclaimer. 
    10# * Redistributions in binary form must reproduce the above copyright notice, 
    11# this list of conditions and the following disclaimer in the documentation 
    12# and/or other materials provided with the distribution. 
    13# * The name of the author may not be used to endorse or promote products 
    14# derived from this software without specific prior written permission. 
    15# 
    16# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
    17# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
    18# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
    19# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
    20# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
    21# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
    22# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
    23# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
    24# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
    25# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
    26# POSSIBILITY OF SUCH DAMAGE. 
    27 
    28from pypdf._crypt_providers._base import CryptBase, CryptIdentity 
    29 
    30try: 
    31    from pypdf._crypt_providers._cryptography import ( 
    32        CryptAES, 
    33        CryptRC4, 
    34        aes_cbc_decrypt, 
    35        aes_cbc_encrypt, 
    36        aes_ecb_decrypt, 
    37        aes_ecb_encrypt, 
    38        crypt_provider, 
    39        rc4_decrypt, 
    40        rc4_encrypt, 
    41    ) 
    42    from pypdf._utils import Version 
    43 
    44    if Version(crypt_provider[1]) <= Version("3.0"): 
    45        # This is due to the backend parameter being required back then: 
    46        # https://cryptography.io/en/latest/changelog/#v3-1 
    47        raise ImportError("cryptography<=3.0 is not supported")  # pragma: no cover 
    48except ImportError: 
    49    try: 
    50        from pypdf._crypt_providers._pycryptodome import (  # type: ignore 
    51            CryptAES, 
    52            CryptRC4, 
    53            aes_cbc_decrypt, 
    54            aes_cbc_encrypt, 
    55            aes_ecb_decrypt, 
    56            aes_ecb_encrypt, 
    57            crypt_provider, 
    58            rc4_decrypt, 
    59            rc4_encrypt, 
    60        ) 
    61    except ImportError: 
    62        from pypdf._crypt_providers._fallback import (  # type: ignore 
    63            CryptAES, 
    64            CryptRC4, 
    65            aes_cbc_decrypt, 
    66            aes_cbc_encrypt, 
    67            aes_ecb_decrypt, 
    68            aes_ecb_encrypt, 
    69            crypt_provider, 
    70            rc4_decrypt, 
    71            rc4_encrypt, 
    72        ) 
    73 
    74__all__ = [ 
    75    "CryptAES", 
    76    "CryptBase", 
    77    "CryptIdentity", 
    78    "CryptRC4", 
    79    "aes_cbc_decrypt", 
    80    "aes_cbc_encrypt", 
    81    "aes_ecb_decrypt", 
    82    "aes_ecb_encrypt", 
    83    "crypt_provider", 
    84    "rc4_decrypt", 
    85    "rc4_encrypt", 
    86]