
     hl              
       J   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZ dd	lmZmZmZmZmZ dd
lmZm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2m3Z3 e G d d                      Z4dee5e6f         de6fdZ7	 d1de6de4dee6         fdZ8	 d1de6de4de6dee6         fdZ9dddZ:de6fdZ;	 d1de6de6dee6         de6fdZ<ej=         G d  d!ej>                              Z? G d" d#ej@        e/          ZA G d$ d%e'e jB                  ZC G d& d'eCe2          ZD G d( d)eCe3          ZE ejF        d*          ZGd+ ZHd, ZId-ejJ        fd.ZKe,jL         G d/ d0e,                      ZM e/jL        eA           dS )2    N)	dataclass)sha256sha384sha512)DictOptionalTupleUnion)core)Cipher
algorithmsmodes)genericmisc   )compute_o_value_legacycompute_o_value_legacy_prepcompute_u_value_r2compute_u_value_r34legacy_normalise_pw)aes_cbc_decryptaes_cbc_encrypt	as_signedrc4_encrypt)
	ALL_PERMS
AuthResult
AuthStatusCryptFilterCryptFilterBuilderCryptFilterConfigurationIdentityCryptFilterPdfKeyNotAvailableErrorSecurityHandlerSecurityHandlerVersion)SerialisableCredentialSerialisedCredential)AESCryptFilterMixinRC4CryptFilterMixinc                   N    e Zd ZU eed<   eed<   eed<   ededd fd            ZdS )_R6KeyEntry
hash_valuevalidation_saltkey_saltentryreturnc                 ~    t          |          dk    sJ t          |d d         |dd         |dd                   S )N0       (   )lenr*   )clsr.   s     \/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pyhanko/pdf_utils/crypt/standard.py
from_bytesz_R6KeyEntry.from_bytes,   sC    5zzR5":uRU|U2b5\BBB    N)__name__
__module____qualname__bytes__annotations__classmethodr7    r8   r6   r*   r*   &   sk         OOOCu C C C C [C C Cr8   r*   passwordr/   c                     t          | t                    r(| sdS ddlm}  ||                               d          } | d d         S )Nr8   r   )saslprepzutf-8   )
isinstancestr	_saslpreprB   encode)r@   rB   s     r6   _r6_normalise_pwrH   2   s^    (C   6 	3''''''8H%%,,W55DSD>r8   pw_bytesr.   u_entryc                 D    t          | |j        |          }||j        k    S N)_r6_hash_algor,   r+   )rI   r.   rJ   purported_hashs       r6   _r6_password_authenticaterO   =   s&     #8U-BGLLNU---r8   e_entryc                     t          | |j        |          }t          |          dk    sJ t          ||t	          d          d          S )Nr2      Fkeydataivuse_padding)rM   r-   r4   r   r<   )rI   r.   rP   rJ   
interm_keys        r6   _r6_derive_file_keyrY   D   sT     xAAJw<<2Wr   r8   TF)T   F   input_bytesc                 :    t          d | D                       dz  S )Nc              3       K   | ]	}|d z  V  
dS )   Nr?   ).0bs     r6   	<genexpr>z_bytes_mod_3.<locals>.<genexpr>V   s&      **q1u******r8   r_   )sum)r\   s    r6   _bytes_mod_3rd   T   s$    **k*****Q..r8   current_saltc                    t          |           }t          |          dk    sJ |                    |           |r*t          |          dk    sJ |                    |           |                                }t           t          t
          f}dx}}|dk     s	||dz
  k    r| |z   |pdz   dz  }t          |dd         ||dd         d	
          d         }	|t          |	dd                            }
 |
|	                                          }|	t          |	          dz
           }|dz  }|dk     ||dz
  k    |dd         S )u3   
    Algorithm 2.B in ISO 32000-2 § 7.6.4.3.4
       r1   r   @   r2   r8   NrR   FrS   r   )r   r4   updatedigestr   r   r   rd   )rI   re   rJ   initial_hashkhashesround_nolast_byte_valk1e	next_hashs              r6   rM   rM   Y   st    (##L|!!!!%%% %7||r!!!!G$$$Aff%F  H}
R--=8b=88lgn-3#2#RAbeH%
 
 


 <#2#//0	IaLL!!#a&&1*A R--=8b=88 SbS6Mr8   c                   V    e Zd ZdZdZdZdZdZdZ	 de	j
        fdZed
d	            ZdS ) StandardSecuritySettingsRevisionz;Indicate the standard security handler revision to emulate.   r_         Nr/   c                 b    | j         }|t          j                    nt          j        |          S rL   )valuer   
NullObjectNumberObject)selfvals     r6   as_pdf_objectz.StandardSecuritySettingsRevision.as_pdf_object   s.    j$'KG   W5I#5N5N	
r8   c                 Z    	 t          |          S # t          $ r t           j        cY S w xY wrL   )rt   
ValueErrorOTHER)r5   ry   s     r6   from_numberz,StandardSecuritySettingsRevision.from_number   s?    	:3E::: 	: 	: 	:39999	:s    **)r/   rt   )r9   r:   r;   __doc__	RC4_BASICRC4_EXTENDEDRC4_OR_AES128AES256r   r   	PdfObjectr~   r>   r   r?   r8   r6   rt   rt   w   sv        EEILMFE
w0 
 
 
 
 : : : [: : :r8   rt   c                   |    e Zd Zdej        fdej        ddifgZedefd            Zde	fdZ
ede	fd	            Zd
S )_PasswordCredential	pwd_bytesid1optionalTr/   c                     dS )Nr   r?   r5   s    r6   get_namez_PasswordCredential.get_name   s    {r8   c                 *    |                                  S rL   )dumpr|   s    r6   
_ser_valuez_PasswordCredential._ser_value   s    yy{{r8   rU   c                 |    	 t                               |          S # t          $ r t          j        d          w xY w)Nz)Failed to deserialise password credential)r   loadr   r   PdfReadError)r5   rU   s     r6   _deser_valuez _PasswordCredential._deser_value   sM    	Q&++D111 	Q 	Q 	Q#$OPPP	Qs    ;N)r9   r:   r;   r   OctetString_fieldsr>   rE   r   r<   r   r   r?   r8   r6   r   r      s        	d&'	 :t"45G
     [E     Q Q Q Q [Q Q Qr8   r   c                   j     e Zd ZU dZdZed         ed<   ed             Z fdZ	de
fdZ fd	Z xZS )
StandardCryptFilterzB
    Crypt filter for use with the standard security handler.
    NStandardSecurityHandler_handlerc                 \    t          | j        t                    r| j        j        S t          rL   )rD   r   r   _auth_failedNotImplementedErrorr   s    r6   r   z StandardCryptFilter._auth_failed   s(    dm%<== 	.=--!!r8   c                     t          |t                    st          t                                          |           d | _        d S rL   )rD   r   	TypeErrorsuper_set_security_handler_shared_key)r|   handler	__class__s     r6   r   z)StandardCryptFilter._set_security_handler   sA    '#:;; 	O%%g...r8   r/   c                 F    | j         sJ | j                                         S rL   )r   get_file_encryption_keyr   s    r6   derive_shared_encryption_keyz0StandardCryptFilter.derive_shared_encryption_key   s#    }}}44666r8   c                     t                                                      }t          j        | j                  |d<   |S )N/Length)r   r~   r   r{   keylen)r|   resultr   s     r6   r~   z!StandardCryptFilter.as_pdf_object   s6    &&(( $0==yr8   )r9   r:   r;   r   r   r   r=   propertyr   r   r<   r   r~   __classcell__r   s   @r6   r   r      s           59Hh01888" " X"
         7e 7 7 7 7        r8   r   c                       e Zd ZdZdS )StandardAESCryptFilterz=
    AES crypt filter for the standard security handler.
    Nr9   r:   r;   r   r?   r8   r6   r   r                	Dr8   r   c                       e Zd ZdZdS )StandardRC4CryptFilterz=
    RC4 crypt filter for the standard security handler.
    Nr   r?   r8   r6   r   r      r   r8   r   z/StdCFc                 d    t          t          t          |           it          t                    S Nr   )default_stream_filterdefault_string_filter)r    STD_CFr   r   s    r6   _std_rc4_configr      3    #	'v6667$$   r8   c                 d    t          t          t          |           it          t                    S r   )r    r   r   r   s    r6   _std_aes_configr      r   r8   cfdictc                 T    |                      dd          }t          |dz            S )Nr   r3   rg   r   )getr   )r   _acts_as_defaultkeylen_bitss      r6   #_build_legacy_standard_crypt_filterr      s-     **Y++K!)9::::r8   c            
       @    e Zd ZU dZ ej        d          e ej        d          d  ej        d          d  ej        d          d iZeej        e	f         e
d	<   ed
efd            Zedddeddfdedefd            Zededfd            Zed$d            Z	 	 	 	 	 	 d%dedededee         f fdZedej        d
efd            Zedej        fd            Zd ZdefdZdefd Z 	 d&dee         d
e!fd!Z"d
e#e$ee         f         fd"Z%d
efd#Z& xZ'S )'r   a  
    Implementation of the standard (password-based) security handler.

    You shouldn't have to instantiate :class:`.StandardSecurityHandler` objects
    yourself. For encrypting new documents, use :meth:`build_from_pw`
    or :meth:`build_from_pw_legacy`.

    For decrypting existing documents, pyHanko will take care of instantiating
    security handlers through :meth:`.SecurityHandler.build`.
    z/V2z/AESV2c                 "    t          d          S )NrR   r   r   ___s     r6   <lambda>z StandardSecurityHandler.<lambda>       4J5
 5
 5
 r8   z/AESV3c                 "    t          d          S )Nr2   r   r   r   s     r6   r   z StandardSecurityHandler.<lambda>  r   r8   z	/Identityc                     t                      S rL   )r!   r   s     r6   r   z StandardSecurityHandler.<lambda>  s    7J7L7L r8   _known_crypt_filtersr/   c                 *    t          j        d          S )N	/Standard)r   
NameObjectr   s    r6   r   z StandardSecurityHandler.get_name  s    !+...r8   NrR   Trevpermsc
                 ,   t          |          }|t          |          n|}|t          j        k    rt          | d          |t          j        k    rd}n|r|t          j        k    rd}t          |||j        |          }t          |dz            }|t          j        k    r(t          |dz            }t          ||||          \  }}nt          ||j        |||||	          \  }}|t          j        k    rt          j        }n)|t          j        k    rt          j        }nt          j        }|t          j        k    r%|#|rt          d          }nt          |          } | d
||||||||	d|
}||_        t!          ||d	          |_        |S )a  
        Initialise a legacy password-based security handler, to attach to a
        :class:`~.pyhanko.pdf_utils.writer.PdfFileWriter`.
        Any remaining keyword arguments will be passed to the constructor.

        .. danger::
            The functionality implemented by this handler is deprecated in the
            PDF standard. We only provide it for testing purposes, and to
            interface with legacy systems.

        :param rev:
            Security handler revision to use, see
            :class:`.StandardSecuritySettingsRevision`.
        :param id1:
            The first part of the document ID.
        :param desired_owner_pass:
            Desired owner password.
        :param desired_user_pass:
            Desired user password.
        :param keylen_bytes:
            Length of the key (in bytes).
        :param use_aes128:
            Use AES-128 instead of RC4 (default: ``True``).
        :param perms:
            Permission bits to set (defined as an integer)
        :param crypt_filter_config:
            Custom crypt filter configuration. PyHanko will supply a reasonable
            default if none is specified.
        :return:
            A :class:`StandardSecurityHandler` instance.
        Nz/ is not supported by this bootstrapping method.   rR       l    r   )versionrevisionlegacy_keylen
perm_flagsodataudatacrypt_filter_configencrypt_metadatar   r   r?   )r   rt   r   r   r   r   ry   r   r   r   r$   RC4_40RC4_LONGER_KEYSr   r   r   r   _credential)r5   r   r   desired_owner_passdesired_user_passkeylen_bytes
use_aes128r   r   r   kwargso_entryrJ   rT   r   shs                   r6   build_from_pw_legacyz,StandardSecurityHandler.build_from_pw_legacy  s   Z 11CDD !,   1222# 	
 1???GGG   2<<<LL	"B"PPPL( 139l
 

 %*,--2<<<ej011E-!7E3 LGSS /!	  LGS 2@@@,:GG4>>>,3GG,<G 3AAA#+ K&5R&@&@&@##&5\&J&J&J#S 

& 3-

 

 

 

 ,,S99
 
 	r8   c                 x   t          |          }|t          |          n|}t          j        d          }t          j        d          }	t          j        d          }
t          ||	          }||	z   |
z   }t          ||
          }t	          ||t          d          d          \  }}t          |          dk    sJ t          j        d          }t          j        d          }t          |||          }||z   |z   }t          |||          }t	          ||t          d          d          \  }}t          |          dk    sJ t          j        d|dz            }|d	z   |rd
ndz   dz   t          j        d          z   }t          t          j        |          t          j                              }|                                }|                    |          |                                z   } | dt"          j        t&          j        d|||||||d
|}||_        t+          d|i          |_        |S )a  
        Initialise a password-based security handler backed by AES-256,
        to attach to a :class:`~.pyhanko.pdf_utils.writer.PdfFileWriter`.
        This handler will use the new PDF 2.0 encryption scheme.

        Any remaining keyword arguments will be passed to the constructor.

        :param desired_owner_pass:
            Desired owner password.
        :param desired_user_pass:
            Desired user password.
        :param perms:
            Desired usage permissions.
        :param encrypt_metadata:
            Whether to set up the security handler for encrypting metadata
            as well.
        :return:
            A :class:`StandardSecurityHandler` instance.
        Nr2   rg   rR   F)rW   z<Ir   s      T   F   adbrv   )
r   r   r   r   r   r   oeseedueseedencrypted_permsr   r   r?   )rH   secretstoken_bytesrM   r   r<   r4   structpackr   r   AESr   ECB	encryptorri   finalizer$   r   rt   r   r   r   )r5   r   r   r   r   r   owner_pw_bytesuser_pw_bytesencryption_keyu_validation_salt
u_key_saltu_hashrJ   u_interm_keyr   ue_seedo_validation_salt
o_key_salto_hashr   o_interm_keyoe_seedperms_bytesextd_perms_bytescipherr   r   r   s                               r6   build_from_pwz%StandardSecurityHandler.build_from_pw  s   8 **<== !, ./// 	
 !,R00#/22(++
}.?@@,,z9$]J??$.%))
 
 

7 7||r!!!!#/22(++
~/@'JJ,,z9$^ZII$.%))
 
 

7 7||r!!!!k$
(:;;'1ttT3  !!$$	% 	 
~66	DD$$&&	-..1C1C1E1EE 	 S 
*15<+-
 
 
 
 (,k>-JKK	r8   rw   c                 l   t          |           t          |          cxk    rdk    sn t          j        d| d          |r+|r)t          |          t          |          cxk    rdk    sn t          j        d| d          |rt          |          dk    rt          j        d| d          d S )Nr1   z2/U and /O entries must be 48 bytes long in a rev. z security handlerr2   z;/UE and /OE must be present and be 32 bytes long in a rev. rR   z6/Perms must be present and be 16 bytes long in a rev. )r4   r   PdfError)r   r   r   r   r   r   s         r6   _check_r6_valuesz(StandardSecurityHandler._check_r6_values  s   E

c%jj....B....-// / /    	V 	CKK3v;;,L,L,L,L",L,L,L,L-// / /    	#o"6"6""<"<-// / /   #="<r8   r   r   r   r   c                    |v|t           j        k    rt          d          }nV|t           j        k    rt          |          }n6|t           j        k    r|t          d          }nt          j        d          t                      	                    ||||
|           || _
        t          |          | _        |t          j        k    r4| j                            |||||	           || _        || _        |	| _        nRt'          |          t'          |          cxk    rdk    sn t          j        d          d x| _        x| _        | _        || _        || _        d | _        d| _        d S )Nr   r2   z1Could not impute a reasonable crypt filter config)r   compat_entrieszD/U and /O entries must be 32 bytes long in a legacy security handlerF)r$   r   r   r   r   r   r   r  r   __init__r   r   r   rt   r   r  r   r   r   r4   r   r   r   r   )r|   r   r   r   r   r   r   r   r   r   r   r   r  r   s                r6   r  z StandardSecurityHandler.__init__  s    &0777&5a&8&8##2BBB&5m&D&D##1888'/ '6b&9&9##mG   	-) 	 	
 	
 	
 !z**
7>>>N++uffo   !DK DK#2D  JJ#e**22222222m.   @DCDKC$+(<

,0!r8   encrypt_dictc                 d   |                     dd          }|dz  dk    rt          j        d          |dz  }	 |d         }|d         }n"# t          $ r t          j        d          w xY wd	t          j        d
t          fd}t          |t          |                     dt                              |j
        dd         |j
        dd         |                    d|          |                    d|          |                    d|          |                    dt          d                    S )a  
        Gather and preprocess the "easy" metadata values in an encryption
        dictionary, and turn them into constructor kwargs.

        This function processes ``/Length``, ``/P``, ``/Perms``, ``/O``, ``/U``,
        ``/OE``, ``/UE`` and ``/EncryptMetadata``.
        r   r3   rg   r   z"Key length must be a multiple of 8/O/Uz!/O and /U entries must be presentxr/   c                     t          | t          j        t          j        f          s$t	          j        dt          |                      | j        S )NzExpected string, but got )rD   r   TextStringObjectByteStringObjectr   r   typeoriginal_bytes)r  s    r6   
_get_byteszFStandardSecurityHandler.gather_encryption_metadata.<locals>._get_bytes?  sP    G,g.FG  O '(MDGG(M(MNNN##r8   /PNr1   /OE/UE/Perms/EncryptMetadataT)default)r   r   r   r   r   r   r   r   )r   r   r  KeyErrorr   r   r<   dictr   r   r  get_and_applybool)r5   r  r   r   r   r   r   s          r6   gather_encryption_metadataz2StandardSecurityHandler.gather_encryption_metadata)  sa    #&&y"55!O!!- DEEE!	E &E &EE 	E 	E 	E- CDDD	E	$'+ 	$ 	$ 	$ 	$ 	$   !1!1$	!B!BCC&ss+&ss+--eZ@@--eZ@@(66xLL)77"D$ 8  
 
 
 	
s   A A*c                     t          j        |d                   }t                              |d                   }t          d|||                     |          d|                     |          S )N/V/R)r   r   r   r?   )r$   r   rt   r   process_crypt_filtersr+  )r5   r  vrs       r6   instantiate_from_pdf_objectz3StandardSecurityHandler.instantiate_from_pdf_objectS  s|     #.|D/ABB,88d9KLL& 
 # 9 9, G G
 
 ,,\::	
 
 	
r8   c                    t          j                    }t          j        d          |d<   t          j        | j                  |d<   t          j        | j                  |d<   t          j        t          | j                            |d<   | j	        s| j
        t          j        k    rt          j        | j        dz            |d<   | j
                                        |d<   | j                                        |d	<   | j
        t          j        k    rHt          j        | j                  |d
<   |                    | j                                                   | j        t(          j        k    rTt          j        | j                  |d<   t          j        | j                  |d<   t          j        | j                  |d<   |S )Nr   z/Filterr  r  r!  rg   r   r-  r.  r%  r"  r#  r$  )r   DictionaryObjectr   r  r   r   r{   r   r   _compat_entriesr   r$   r   r   r~   r   BooleanObjectr   ri   r   rt   r   r   r   r   )r|   r   s     r6   r~   z%StandardSecurityHandler.as_pdf_object`  s   )++#.{;;y/
;;t/
;;t+Idj,A,ABBt  	F|5EEE ' 4T[1_ E EF9|1133t}2244t<0@@@)0)>%* *F%& MM$2@@BBCCC=<CCC#4T[AAF5M#4T[AAF5M&78LMMF8r8   r   c           	         | j         }| j        }|t          j        k    r t	          || j        | j        |          \  }}nEt          ||j        | j	        | j        | j        || j
                  \  }}|d d         }|d d         }||k    |fS )NrR   )r   r   rt   r   r   r   r   r   ry   r   r   )r|   r   r@   r   
user_tokenuser_tok_suppliedrT   s          r6   _auth_user_password_legacyz2StandardSecurityHandler._auth_user_password_legacyz  s    mZ
2<<<%7$*dj#& &"ss &9	

%& &"s !2#2# 6#CRCJ J.33r8   c                 $   t          ||d          }| j        }t          ||j        | j                  }|t
          j        k    rt          || j                  }nH| j        }t          ddd          D ]-t          fd|D                       }t          ||          }.|}|                     ||          \  }	}|	r|| _        t          j        |fS |                     ||          \  }
}|
r|| _        t          j        |fS t          j        d fS )Nr      c              3   "   K   | ]	}|z  V  
d S rL   r?   )r`   ra   is     r6   rb   z?StandardSecurityHandler._authenticate_legacy.<locals>.<genexpr>  s'      33!A333333r8   )r   r   r   ry   r   rt   r   r   r   ranger<   r:  r   r   OWNERUSERFAILED)r|   r   r@   credr   rT   prp_userpassr}   new_keyowner_passworduser_passwordr?  s              @r6   _authenticate_legacyz,StandardSecurityHandler._authenticate_legacy  s1   "##F#FGG m)(CIt{KK2<<<&sDJ77LL*C2r2&& 0 03333s33333!'3//L"==c<PP 	)#D#S(( "<<S(KKs 	(#D?C'' $&&r8   c                 j   t          |t                    rt          j        |          }t          |t          t
          t          f          s%t          j        dt          |           d          t          |t                    r|d         j
        }|d         j
        }| j        }|t          j        k    r|                     |          \  }}n>|t          j        d          t          |          }|                     ||          \  }}||| _        nd| _        t'          || j                  S )	a  
        Authenticate a user to this security handler.

        :param credential:
            The credential to use (a password in this case).
        :param id1:
            First part of the document ID. This is mandatory for legacy
            encryption handlers, but meaningless otherwise.
        :return:
            An :class:`AuthResult` object indicating the level of access
            obtained.
        z]Standard authentication credential must be a string, byte string or _PasswordCredential, not .r   r   Nz+id1 must be specified for legacy encryptionT)statuspermission_flags)rD   r&   r%   deserialiser   rE   r<   r   r   r  nativer   rt   r   _authenticate_r6r   rI  r   r   r   r   )r|   
credentialr   r   resrT   s         r6   authenticatez$StandardSecurityHandler.authenticate  sH    j"677 	H/;JGGJ*':C&GHH 	#+J''+ + +  
 j"566 	8U#*C#K07J m2999,,Z88HC{'A   -Z88J00jAAHC?"D $DtzBBBBr8   c                    t          |          }t                              | j                  }t                              | j                  }t          ||| j                  r)t          j        }t          ||| j	        | j                  }nAt          ||          r#t          j
        }t          ||| j                  }nt          j        d fS t          t          j        |          t!          j                              }|                                }|                    | j                  |                                z   }	|	dd         dk    }
|
| j        t/          j        d|	d d                   d         k    z  }
	 t2          |	d                  }|
|| j        k    z  }
n# t6          $ r d}
Y nw xY w|
st9          j        d	          t=          d
|i          | _        ||fS )N	      r   z<irv   r   rg   FznFile decryption key didn't decrypt permission flags correctly -- file permissions may have been tampered with.r   ) rH   r*   r7   r   r   rO   r   rA  rY   r   rB  r   rC  r   r   r   r   r   	decryptorri   r   r   r   r   unpack_EXPECTED_PERMS_8r   r'  r   r  r   r   )r|   r@   rI   o_entry_splitu_entry_splitr   rT   r  rW  decrypted_p_entryperms_okdecr_metadata_flags               r6   rP  z(StandardSecurityHandler._authenticate_r6  s   #H--#..tz::#..tz::$X}djII 		+%F%-dj CC 'x?? 	+_F%ht{KKCC$d** 
s++UY[[99$$&&	T122Y5G5G5I5II 	
 %QrT*f4DJ&-6G6K"L"LQ"OOO	!23DQ3G!H*d.CCCHH 	 	 	HHH	  	-M   /X/FGGs{s   !F$ $F32F3c                 H    | j         }|t          | j        rdnd          |S )aQ  
        Retrieve the (global) file encryption key for this security handler.

        :return:
            The file encryption key as a :class:`bytes` object.
        :raise misc.PdfReadError:
            Raised if this security handler was instantiated from an encryption
            dictionary and no credential is available.
        NzAuthentication failed.z7No key available to decrypt, please authenticate first.)r   r"   r   )r|   rT   s     r6   r   z/StandardSecurityHandler.get_file_encryption_key  s?     ;)$O((N  
 
r8   )rw   )NNNTNTrL   )(r9   r:   r;   r   r   r   r   r   r   r   r=   r>   rE   r   r   rt   intr   r  staticmethodr  r$   r   r    r  r4  r(  r+  r2  r~   r<   r:  rI  r   rS  r	   r   rP  r   r   r   s   @r6   r   r      s        	 	 	5!!#F8$$ '
 '
 	8$$ '
 '
 	;'')L)L	J$w13EEF 	 	 	 / / / / [/   r r-r r r r [rh  X X X [Xt    \2 BF9" 9"'9" 39"
 9" &&>?9" 9" 9" 9" 9" 9"v '
"3'
	'
 '
 '
 ['
R 

"3

 

 

 [

  44e 4 4 4 4,' ' ' ' '6 26*C *C'*C	*C *C *C *CZ*E*huo2M,N * * * *X        r8   r   rL   )Nabcenumr   r   dataclassesr   hashlibr   r   r   typingr   r   r	   r
   
asn1cryptor   &cryptography.hazmat.primitives.ciphersr   r   r   pyhanko.pdf_utilsr   r   _legacyr   r   r   r   r   _utilr   r   r   r   apir   r   r   r   r   r    r!   r"   r#   r$   cred_serr%   r&   filter_mixinsr'   r(   r*   rE   r<   rH   rO   rY   rY  rd   rM   uniqueVersionEnumrt   Sequencer   ABCr   r   r   r   r   r   r   r4  r   registerr   r?   r8   r6   <module>rt     s   



    ! ! ! ! ! ! * * * * * * * * * * / / / / / / / / / / / /       L L L L L L L L L L + + + + + + + +              L K K K K K K K K K K K                        C B B B B B B B C C C C C C C C C C C C C C C CuS%Z0 U     EI. ..'.2:5/. . . .  $	
 


 
 e_	
 
 
 
  u-- /e / / / / FJ #(3;E?
   < : : : : :t'7 : : :4Q Q Q Q Q$-)? Q Q Q*    +sw   >	 	 	 	 	02E 	 	 		 	 	 	 	02E 	 	 	 
	H	%	%    ;$; ; ; ; c c c c co c c cL     3 4 4 4 4 4r8   