Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/pypdf/_crypt_providers/__init__.py: 58%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

12 statements  

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]