
    Wwg                         d dl Z d dlmZ d dlmZmZ d dlmZ  ed       G d d             Z G d	 d
e j                        Z
y)    N)	dataclass)DictType)miscT)frozenc                   (    e Zd ZU dZeed<   	 eed<   y)SerialisedCredentialz*
    A credential in serialised form.
    credential_typedataN)__name__
__module____qualname____doc__str__annotations__bytes     W/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/pdf_utils/crypt/cred_ser.pyr	   r	      s      
 Kr   r	   c                       e Zd ZU dZ e       Zeeed    f   e	d<   e
defd       Zeded    fd       ZdefdZe
defd	       Zed
edd fd       ZdefdZy)SerialisableCredentialzA
    Class representing a credential that can be serialised.
    ._SerialisableCredential__registered_subclassesreturnc                     t         )z
        Get the type name of the credential, which will be embedded into
        serialised values and used on deserialisation.
        NotImplementedErrorclss    r   get_namezSerialisableCredential.get_name%   s
     "!r   r   c                 H    | t         j                  | j                         <   | S )a  
        Register a subclass into the credential serialisation registry, using
        the name returned by :meth:`get_name`. Can be used as a class decorator.

        :param cls:
            The subclass.
        :return:
            The subclass.
        )r   r   r   r   s    r   registerzSerialisableCredential.register-   s"     JM66s||~F
r   c                     t         )z
        Serialise a value to raw binary data. To be overridden by subclasses.

        :return:
            A byte string
        :raises misc.PdfWriteError:
            If a serialisation error occurs.
        r   selfs    r   
_ser_valuez!SerialisableCredential._ser_value;   s
     "!r   r   c                     t         )aH  
        Deserialise a value from raw binary data.

        :param data:
            The data to deserialise.
        :return:
            The deserialised value (an instance of a subclass of
            :class:`.SerialisableCredential`)
        :raises misc.PdfReadError:
            If a deserialisation error occurs.
        r   )r   r   s     r   _deser_valuez#SerialisableCredential._deser_valueF   s
     "!r   	ser_valuec                     | j                   }	 t        j                  |   }|j                  | j                        S # t        $ r t	        j
                  d| d      w xY w)a  
        Deserialise a :class:`.SerialisedCredential` value by looking up
        the proper subclass of :class:`.SerialisableCredential` and invoking
        its deserialisation method.

        :param ser_value:
            The value to deserialise.
        :return:
            The deserialised credential.
        :raises misc.PdfReadError:
            If a deserialisation error occurs.
        z3Failed to deserialise credential: credential type 'z' not known.)r
   r   r   KeyErrorr   PdfReadErrorr'   r   )r(   	cred_typer   s      r   deserialisez"SerialisableCredential.deserialiseV   sp      --		(@@KC 	//  	##$$-;l< 	s	   < #Ac                 h    t        | j                  j                         | j                               S )z
        Serialise a value to an annotated :class:`.SerialisedCredential` value.

        :return:
            A :class:`.SerialisedCredential` value.
        :raises misc.PdfWriteError:
            If a serialisation error occurs.
        )r
   r   )r	   	__class__r   r%   r#   s    r   	serialisez SerialisableCredential.serialisep   s*     $ NN335DOO<M
 	
r   N)r   r   r   r   dictr   r   r   r   r   classmethodr   staticmethodr!   r   r%   r'   r	   r-   r0   r   r   r   r   r      s     JNT#t,D'E"EFO" " " d34  	"E 	" " " " 0'0	!0 02
/ 
r   r   )abcdataclassesr   typingr   r   pyhanko.pdf_utilsr   r	   ABCr   r   r   r   <module>r9      sA    
 !  " $  "]
SWW ]
r   