§
    8·tc|  ã                   óB  — d dl Z d dlmZmZmZmZ d dlmZmZ g d¢Z	dd„Z
 G d„ de¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )é    N)Úbyte_stringÚbÚbchrÚbord)Úlong_to_bytesÚbytes_to_long)Ú	DerObjectÚ
DerIntegerÚDerOctetStringÚDerNullÚDerSequenceÚDerObjectIdÚDerBitStringÚDerSetOfFc                 óH   — d}	 | |z   }n# t           $ r Y dS w xY w| p| dk    S )Nr   F)Ú	TypeError)ÚxÚonly_non_negativeÚtests      ú6/usr/lib/python3/dist-packages/Cryptodome/Util/asn1.pyÚ
_is_numberr   !   sK   € Ø€DðØ�4‰xˆˆøÝð ð ð Øˆuˆuðøøøà Ð Ð* A¨¢FÐ*s   „
 Š
—c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚBytesIO_EOFzeThis class differs from BytesIO in that a ValueError exception is
    raised whenever EOF is reached.c                 ó0   — || _         d| _        d | _        d S ©Nr   )Ú_bufferÚ_indexÚ	_bookmark)ÚselfÚinitial_bytess     r   Ú__init__zBytesIO_EOF.__init__.   s   € Ø$ˆŒØˆŒØˆŒˆˆó    c                 ó   — | j         | _        d S ©N)r   r   ©r   s    r   Úset_bookmarkzBytesIO_EOF.set_bookmark3   s   € ØœˆŒˆˆr"   c                 óF   — | j         €J ‚| j        | j         | j        …         S r$   )r   r   r   r%   s    r   Údata_since_bookmarkzBytesIO_EOF.data_since_bookmark6   s&   € ØŒ~Ð)Ð)Ð)ØŒ|˜DœN¨4¬;Ð6Ô7Ð7r"   c                 ó:   — t          | j        ¦  «        | j        z
  S r$   )Úlenr   r   r%   s    r   Úremaining_datazBytesIO_EOF.remaining_data:   s   € Ý�4”<Ñ Ô  4¤;Ñ.Ð.r"   c                 óÌ   — | j         |z   }|t          | j        ¦  «        k    r&t          d|t          | j        ¦  «        fz  ¦  «        ‚| j        | j         |…         }|| _         |S )Nz@Not enough data for DER decoding: expected %d bytes and found %d)r   r*   r   Ú
ValueError)r   ÚlengthÚ	new_indexÚresults       r   ÚreadzBytesIO_EOF.read=   sy   € Ø”K &Ñ(ˆ	Ø•s˜4œ<Ñ(Ô(Ò(Ð(ÝÐ_ÐclÕnqÐrvÔr~ÑnÔnð  cAñ  Añ  Bô  Bð  Bà”˜dœk¨)Ð3Ô4ˆØˆŒØˆr"   c                 óR   — t          |                      d¦  «        d         ¦  «        S )Né   r   )r   r1   r%   s    r   Ú	read_bytezBytesIO_EOF.read_byteF   s   € Ý�D—I’I˜a‘L”L ”OÑ$Ô$Ð$r"   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r&   r(   r+   r1   r4   © r"   r   r   r   *   sx   € € € € € ð'ð 'ðð ð ð
%ð %ð %ð8ð 8ð 8ð/ð /ð /ðð ð ð%ð %ð %ð %ð %r"   r   c                   óT   — e Zd ZdZ	 	 dd„Zd„ Zed„ ¦   «         Zd„ Zd	„ Z	dd
„Z
d„ ZdS )r	   zpBase class for defining a single DER object.

        This class should never be directly instantiated.
        Nr"   Fc                 óB  — |€	d| _         dS |                      |¦  «        }|| _        d||fvrt          d¦  «        ‚|�%dd|z  z  |                      |¦  «        z  | _         dS |�,d|                      |¦  «        z  | _         d|z  |z  | _        dS d|z  |z  | _         dS )a»  Initialize the DER object according to a specific ASN.1 type.

                :Parameters:
                  asn1Id : integer
                    The universal DER tag number for this object
                    (e.g. 0x10 for a SEQUENCE).
                    If None, the tag is not known yet.

                  payload : byte string
                    The initial payload of the object (that it,
                    the content octets).
                    If not specified, the payload is empty.

                  implicit : integer
                    The IMPLICIT tag number to use for the encoded object.
                    It overrides the universal tag *asn1Id*.

                  constructed : bool
                    True when the ASN.1 type is *constructed*.
                    False when it is *primitive*.

                  explicit : integer
                    The EXPLICIT tag number to use for the encoded object.
                Nz1Explicit and implicit tags are mutually exclusiveé€   é    é    )Ú
_tag_octetÚ_convertTagÚpayloadr-   Ú_inner_tag_octet)r   Úasn1IdrA   ÚimplicitÚconstructedÚexplicits         r   r!   zDerObject.__init__P   sÖ   € ð6 �>à&*�D”OØ�FØ×)Ò)¨&Ñ1Ô1�à&�”ð  ¨(Ð3Ð3Ð3Ý$ð &;ñ <ô <ð <ð Ð'Ø&*¨T°KÑ-?Ñ&?À$×BRÒBRÐS[ÑB\ÔB\Ñ&\�D”OØ�FàÐ'Ø&*¨T×-=Ò-=¸hÑ-GÔ-GÑ&G�D”OØ,0°;Ñ,>ÀÑ,G�DÔ)Ø�Fà"&¨Ñ"4°vÑ"=�”��r"   c                 óÎ   — t          |¦  «        s(t          |¦  «        dk    rt          |d         ¦  «        }t          |¦  «        rd|cxk    rdk     sn t          d¦  «        ‚|S )zvCheck if *tag* is a real DER tag.
                Convert it from a character to number if necessary.
                r3   r   é   zWrong DER tag)r   r*   r   r-   )r   Útags     r   r@   zDerObject._convertTag�   sg   € õ " #‘”ð +Ý˜3‘x”x 1’}�}Ý" 3 q¤6™lœl˜å" 3™œð 6¨A°¨O¨OªO¨O°tªO¨O¨O¨OÝ$ _Ñ5Ô5Ð5Ø�
r"   c                 óŽ   — | dk    r1t          | ¦  «        }t          t          |¦  «        dz   ¦  «        |z   S t          | ¦  «        S )zXBuild length octets according to BER/DER
                definite form.
                é   r<   )r   r   r*   )r.   Úencodings     r   Ú_definite_formzDerObject._definite_form›   sD   € ð
 ˜C’<�<Ý#0°Ñ#8Ô#8˜Ý#¥C¨¡M¤M°CÑ$7Ñ8Ô8¸8ÑCÐCÝ˜F‘|”|Ð#r"   c                 ó,  — | j         }t          | d¦  «        rDt          | j        ¦  «        |                      t          | j         ¦  «        ¦  «        z   | j         z   }t          | j        ¦  «        |                      t          |¦  «        ¦  «        z   |z   S )z?Return this DER element, fully encoded as a binary byte string.rB   )rA   Úhasattrr   rB   rM   r*   r?   )r   Úoutput_payloads     r   ÚencodezDerObject.encode¥   s–   € ð "&¤�õ ˜4Ð!3Ñ4Ô4ð 4Ý&*¨4Ô+@Ñ&AÔ&AØ&*×&9Ò&9½#¸d¼lÑ:KÔ:KÑ&LÔ&Lñ'Mà&*¤lñ'3�Nõ ˜Tœ_Ñ-Ô-Ø×+Ò+­C°Ñ,?Ô,?Ñ@Ô@ñAà&ñ'ð (r"   c                 ó  — |                      ¦   «         }|dk    rd|                     |dz  ¦  «        }t          |d         ¦  «        dk    rt          d¦  «        ‚t	          |¦  «        }|dk    rt          d¦  «        ‚|S )z%Decode DER length octets from a file.rK   r   z$Invalid DER: length has leading zeroz5Invalid DER: length in long form but smaller than 128)r4   r1   r   r-   r   )r   Úsr.   Úencoded_lengths       r   Ú
_decodeLenzDerObject._decodeLen¸   s€   € ð Ÿš™œ�à˜C’<�<Ø%&§V¢V¨F°T©MÑ%:Ô%:�NÝ˜N¨1Ô-Ñ.Ô.°!Ò3Ð3Ý(Ð)OÑPÔPÐPÝ*¨>Ñ:Ô:�FØ ’}�}Ý(Ð)`ÑaÔaÐaà�r"   c                 óÚ   — t          |¦  «        st          d¦  «        ‚t          |¦  «        }|                      ||¦  «         |                     ¦   «         dk    rt          d¦  «        ‚| S )a  Decode a complete DER element, and re-initializes this
                object with it.

                Args:
                  der_encoded (byte string): A complete DER element.

                Raises:
                  ValueError: in case of parsing errors.
                zInput is not a byte stringr   ú-Unexpected extra data after the DER structure)r   r-   r   Ú_decodeFromStreamr+   )r   Úder_encodedÚstrictrS   s       r   ÚdecodezDerObject.decodeÇ   st   € õ # ;Ñ/Ô/ð CÝ$Ð%AÑBÔBÐBå Ñ,Ô,�Ø×&Ò& q¨&Ñ1Ô1Ð1ð ×#Ò#Ñ%Ô%¨Ò)Ð)Ý$Ð%TÑUÔUÐUà�r"   c                 ó2  — |                      ¦   «         }| j        �|| j        k    rt          d¦  «        ‚n|| _        |                      |¦  «        }|                     |¦  «        | _        t          | d¦  «        r˜t          | j        ¦  «        }|                      ¦   «         }|| j        k    rt          d¦  «        ‚|                      |¦  «        }|                     |¦  «        | _        | 	                    ¦   «         dk    rt          d¦  «        ‚dS dS )z*Decode a complete DER element from a file.NzUnexpected DER tagrB   zUnexpected internal DER tagr   rW   )
r4   r?   r-   rU   r1   rA   rO   r   rB   r+   )r   rS   rZ   ÚidOctetr.   ÚpÚinner_octets          r   rX   zDerObject._decodeFromStreamÞ   s  € ð Ÿ+š+™-œ-�Ø”?Ð.Ø $¤/Ò1Ð1Ý(Ð)=Ñ>Ô>Ð>ð 2ð '.�D”OØŸš¨Ñ+Ô+�Ø Ÿvšv f™~œ~�”õ ˜4Ð!3Ñ4Ô4ð 
ZÝ# D¤LÑ1Ô1�AØ"#§+¢+¡-¤-�KØ" dÔ&;Ò;Ð;Ý(Ð)FÑGÔGÐGØ!Ÿ_š_¨QÑ/Ô/�FØ#$§6¢6¨&¡>¤>�D”Lð ×'Ò'Ñ)Ô)¨AÒ-Ð-Ý(Ð)XÑYÔYÐYð
Zð 
Zð .Ð-r"   )Nr"   NFN©F)r5   r6   r7   r8   r!   r@   ÚstaticmethodrM   rQ   rU   r[   rX   r9   r"   r   r	   r	   J   s¬   € € € € € ð	ð 	ð
 ?CØ15ð=	>ð =	>ð =	>ð =	>ð~
	ð 
	ð 
	ð 
ð	$ð 	$ñ 
Œð	$ð	(ð 	(ð 	(ð&	ð 	ð 	ð	ð 	ð 	ð 	ð.	Zð 	Zð 	Zð 	Zð 	Zr"   r	   c                   ó.   — e Zd ZdZd	d„Zd„ Zd
d„Zd„ ZdS )r
   aÌ  Class to model a DER INTEGER.

        An example of encoding is::

          >>> from Cryptodome.Util.asn1 import DerInteger
          >>> from binascii import hexlify, unhexlify
          >>> int_der = DerInteger(9)
          >>> print hexlify(int_der.encode())

        which will show ``020109``, the DER encoding of 9.

        And for decoding::

          >>> s = unhexlify(b'020109')
          >>> try:
          >>>   int_der = DerInteger()
          >>>   int_der.decode(s)
          >>>   print int_der.value
          >>> except ValueError:
          >>>   print "Not a valid DER INTEGER"

        the output will be ``9``.

        :ivar value: The integer value
        :vartype value: integer
        r   Nc                 óR   — t                                | dd|d|¦  «         || _        dS )aU  Initialize the DER object as an INTEGER.

                :Parameters:
                  value : integer
                    The value of the integer.

                  implicit : integer
                    The IMPLICIT tag to use for the encoded object.
                    It overrides the universal tag for INTEGER (2).
                é   r"   FN©r	   r!   Úvalue©r   rf   rD   rF   s       r   r!   zDerInteger.__init__  s4   € õ ×"Ò" 4¨¨s°HØ#(¨(ñ4ô 4ð 4à"�”
�
�
r"   c                 ó2  — | j         }d| _        	 t          t          |dz  ¦  «        ¦  «        | j        z   | _        d|cxk    rdk    rn nt          d¦  «        | j        z   | _        d|cxk    rdk    rn nn|dz  }Œot                               | ¦  «        S )zIReturn the DER INTEGER, fully encoded as a
                binary string.r"   Téÿ   r<   r   i€ÿÿÿé   )rf   rA   r   Úintr	   rQ   )r   Únumbers     r   rQ   zDerInteger.encode%  s¸   € ð œ�Ø"�”ð!Ý#'­¨F°S©LÑ(9Ô(9Ñ#:Ô#:¸T¼\Ñ#I�D”LØ˜fÐ+Ð+Ò+Ð+¨Ò+Ð+Ð+Ð+Ð+Ý'+¨D¡z¤z°D´LÑ'@˜œØ˜vÐ,Ð,Ò,Ð,¨Ò,Ð,Ð,Ð,Ð,ØØ˜q‘L�Fð!õ !×'Ò'¨Ñ-Ô-Ð-r"   Fc                 ó<   — t                                | ||¬¦  «        S )a!  Decode a complete DER INTEGER DER, and re-initializes this
                object with it.

                Args:
                  der_encoded (byte string): A complete INTEGER DER element.

                Raises:
                  ValueError: in case of parsing errors.
                ©rZ   ©r	   r[   ©r   rY   rZ   s      r   r[   zDerInteger.decode4  s   € õ !×'Ò'¨¨kÀ&Ð'ÑIÔIÐIr"   c                 ó0  — t                                | ||¦  «         |rzt          | j        ¦  «        dk    rt	          d¦  «        ‚t          | j        ¦  «        dk    r;t          j        d| j        dd…         ¦  «        d         dk     rt	          d¦  «        ‚d| _        d}| j        D ]4}| xj        d	z  c_        | xj        t          |¦  «        z  c_        |d
z  }Œ5| j        r/t          | j        d         ¦  «        dz  r| xj        |z  c_        dS dS dS )z*Decode a complete DER INTEGER from a file.r   z/Invalid encoding for DER INTEGER: empty payloadrd   z>HNr<   z.Invalid encoding for DER INTEGER: leading zeror3   é   rj   )	r	   rX   r*   rA   r-   ÚstructÚunpackrf   r   )r   rS   rZ   ÚbitsÚis        r   rX   zDerInteger._decodeFromStreamA  s4  € õ ×+Ò+¨D°!°VÑ<Ô<Ð<àð [Ý˜4œ<Ñ(Ô(¨AÒ-Ð-Ý(Ð)ZÑ[Ô[Ð[Ý˜4œ<Ñ(Ô(¨AÒ-Ð-µ&´-ÀÀdÄlÐSUÐTUÐSUÔFVÑ2WÔ2WÐXYÔ2ZÐ]aÒ2aÐ2aÝ(Ð)YÑZÔZÐZð �”
Ø�Øœð ð �AØ�J”J #Ñ%�J”JØ�J”J¥$ q¡'¤'Ñ)�J”JØ˜Q‘J�D�DØ”<ð '¥D¨¬°a¬Ñ$9Ô$9¸DÑ$@ð 'Ø�J”J $Ñ&�J”J�J�Jð'ð 'ð 'ð 'r"   )r   NNr`   ©r5   r6   r7   r8   r!   rQ   r[   rX   r9   r"   r   r
   r
   ù   sh   € € € € € ð	ð 	ð6	#ð 	#ð 	#ð 	#ð 	.ð 	.ð 	.ð	Jð 	Jð 	Jð 	Jð	'ð 	'ð 	'ð 	'ð 	'r"   r
   c                   ót   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zdd„Zdd„Zd„ Zdd„Zd„ ZdS )r   aÓ  Class to model a DER SEQUENCE.

        This object behaves like a dynamic Python sequence.

        Sub-elements that are INTEGERs behave like Python integers.

        Any other sub-element is a binary string encoded as a complete DER
        sub-element (TLV).

        An example of encoding is:

          >>> from Cryptodome.Util.asn1 import DerSequence, DerInteger
          >>> from binascii import hexlify, unhexlify
          >>> obj_der = unhexlify('070102')
          >>> seq_der = DerSequence([4])
          >>> seq_der.append(9)
          >>> seq_der.append(obj_der.encode())
          >>> print hexlify(seq_der.encode())

        which will show ``3009020104020109070102``, the DER encoding of the
        sequence containing ``4``, ``9``, and the object with payload ``02``.

        For decoding:

          >>> s = unhexlify(b'3009020104020109070102')
          >>> try:
          >>>   seq_der = DerSequence()
          >>>   seq_der.decode(s)
          >>>   print len(seq_der)
          >>>   print seq_der[0]
          >>>   print seq_der[:]
          >>> except ValueError:
          >>>   print "Not a valid DER SEQUENCE"

        the output will be::

          3
          4
          [4, 9, b'']

        Nc                 óf   — t                                | dd|d¦  «         |€	g | _        dS || _        dS )aŸ  Initialize the DER object as a SEQUENCE.

                :Parameters:
                  startSeq : Python sequence
                    A sequence whose element are either integers or
                    other DER objects.

                  implicit : integer
                    The IMPLICIT tag to use for the encoded object.
                    It overrides the universal tag for SEQUENCE (16).
                é   r"   TN)r	   r!   Ú_seq)r   ÚstartSeqrD   s      r   r!   zDerSequence.__init__ƒ  s<   € õ ×"Ò" 4¨¨s°H¸dÑCÔCÐCØÐ#Ø "�D”I�I�Ià (�D”I�I�Ir"   c                 ó   — | j         |= d S r$   ©r{   ©r   Úns     r   Ú__delitem__zDerSequence.__delitem__˜  s   € Ø”I˜a�L�L�Lr"   c                 ó   — | j         |         S r$   r~   r   s     r   Ú__getitem__zDerSequence.__getitem__›  s   € Ø”y ”|Ð#r"   c                 ó   — || j         |<   d S r$   r~   )r   Úkeyrf   s      r   Ú__setitem__zDerSequence.__setitem__ž  s   € Ø!&�”	˜#‘��r"   c                 ó   — || j         ||…<   d S r$   r~   )r   rv   ÚjÚsequences       r   Ú__setslice__zDerSequence.__setslice__¡  s   € Ø!)�”	˜!˜A˜#‘��r"   c                 ó   — | j         ||…= d S r$   r~   ©r   rv   rˆ   s      r   Ú__delslice__zDerSequence.__delslice__¤  s   € Ø”I˜a ˜c�N�N�Nr"   c                 óX   — | j         t          d|¦  «        t          d|¦  «        …         S r   )r{   ÚmaxrŒ   s      r   Ú__getslice__zDerSequence.__getslice__§  s$   € Ø”y¥ Q¨¡¤­3¨q°!©9¬9Ð!4Ô5Ð5r"   c                 ó*   — t          | j        ¦  «        S r$   ©r*   r{   r%   s    r   Ú__len__zDerSequence.__len__ª  s   € Ý˜4œ9‘~”~Ð%r"   c                 ó:   — | j                              |¦  «         | S r$   ©r{   Úappend©r   Úitems     r   Ú__iadd__zDerSequence.__iadd__­  ó   € Ø”	× Ò  Ñ&Ô&Ð&Ø�r"   c                 ó:   — | j                              |¦  «         | S r$   r•   r—   s     r   r–   zDerSequence.append±  rš   r"   Tc                 óH   ‡— ˆfd„| j         D ¦   «         }t          |¦  «        S )zìReturn the number of items in this sequence that are
                integers.

                Args:
                  only_non_negative (boolean):
                    If ``True``, negative integers are not counted in.
                c                 ó4   •— g | ]}t          |‰¦  «        ¯|‘ŒS r9   )r   )Ú.0r   r   s     €r   ú
<listcomp>z'DerSequence.hasInts.<locals>.<listcomp>¾  s)   ø€ ÐRÐRÐR˜qµ¸AÐ?PÑ1QÔ1QÐR˜ÐRÐRÐRr"   )r{   r*   )r   r   Úitemss    ` r   ÚhasIntszDerSequence.hasIntsµ  s-   ø€ ð SÐRÐRÐR D¤IÐRÑRÔR�Ý˜5‘z”zÐ!r"   c                 óf   — | j         o*|                      |¦  «        t          | j         ¦  «        k    S )a©  Return ``True`` if all items in this sequence are integers
                or non-negative integers.

                This function returns False is the sequence is empty,
                or at least one member is not an integer.

                Args:
                  only_non_negative (boolean):
                    If ``True``, the presence of negative integers
                    causes the method to return ``False``.)r{   r¡   r*   )r   r   s     r   ÚhasOnlyIntszDerSequence.hasOnlyIntsÁ  s+   € ð ”yÐV T§\¢\Ð2CÑ%DÔ%DÍÈDÌIÉÌÒ%VÐVr"   c                 óZ  — d| _         | j        D ]ƒ}t          |¦  «        r| xj         |z  c_         Œ"t          |¦  «        r0| xj         t	          |¦  «                             ¦   «         z  c_         Œa| xj         |                     ¦   «         z  c_         Œ„t                               | ¦  «        S )zùReturn this DER SEQUENCE, fully encoded as a
                binary string.

                Raises:
                  ValueError: if some elements in the sequence are neither integers
                              nor byte strings.
                r"   )rA   r{   r   r   r
   rQ   r	   r—   s     r   rQ   zDerSequence.encodeÎ  s¢   € ð  #�”Ø œIð 6ð 6�DÝ" 4Ñ(Ô(ð 6Ø˜œ¨Ñ,˜œ˜Ý# DÑ)Ô)ð 6Ø˜œ­
°4Ñ(8Ô(8×(?Ò(?Ñ(AÔ(AÑA˜œ˜à˜œ¨¯ª©¬Ñ5˜œ˜Ý ×'Ò'¨Ñ-Ô-Ð-r"   Fc                 ó˜   — || _         t                               | ||¬¦  «        }|r#|                      ¦   «         st	          d¦  «        ‚|S )a9  Decode a complete DER SEQUENCE, and re-initializes this
                object with it.

                Args:
                  der_encoded (byte string):
                    A complete SEQUENCE DER element.
                  nr_elements (None or integer or list of integers):
                    The number of members the SEQUENCE can have
                  only_ints_expected (boolean):
                    Whether the SEQUENCE is expected to contain only integers.
                  strict (boolean):
                    Whether decoding must check for strict DER compliancy.

                Raises:
                  ValueError: in case of parsing errors.

                DER INTEGERs are decoded into Python integers. Any other DER
                element is not decoded. Its validity is not checked.
                rn   zSome members are not INTEGERs)Ú_nr_elementsr	   r[   r£   r-   )r   rY   rZ   Únr_elementsÚonly_ints_expectedr0   s         r   r[   zDerSequence.decodeà  sW   € ð* %0�Ô!Ý"×)Ò)¨$°ÀFÐ)ÑKÔK�à%ð F¨d×.>Ò.>Ñ.@Ô.@ð FÝ$Ð%DÑEÔEÐEà�r"   c                 óV  — g | _         t                               | ||¦  «         t          | j        ¦  «        }|                     ¦   «         dk    rà|                     ¦   «          t          ¦   «         }|                     ||¦  «         |j        dk    r-| j                              | 	                    ¦   «         ¦  «         nXt          ¦   «         }| 	                    ¦   «         }|                     ||¬¦  «         | j                              |j        ¦  «         |                     ¦   «         dk    °àd}| j        �J	 t          | j         ¦  «        | j        v }n-# t          $ r  t          | j         ¦  «        | j        k    }Y nw xY w|s$t!          dt          | j         ¦  «        z  ¦  «        ‚dS )z+Decode a complete DER SEQUENCE from a file.r   rd   rn   TNz1Unexpected number of members (%d) in the sequence)r{   r	   rX   r   rA   r+   r&   r?   r–   r(   r
   r[   rf   r¦   r*   r   r-   )r   rS   rZ   r^   ÚderÚderIntÚdataÚoks           r   rX   zDerSequence._decodeFromStreamý  s¸  € ð �”	õ ×+Ò+¨D°!°VÑ<Ô<Ð<õ   ¤Ñ-Ô-�Ø×&Ò&Ñ(Ô(¨1Ò,Ð,Ø—N’NÑ$Ô$Ð$å#™+œ+�CØ×)Ò)¨!¨VÑ4Ô4Ð4ð ”~¨Ò-Ð-Øœ	×(Ò(¨×)>Ò)>Ñ)@Ô)@ÑAÔAÐAÐAå!+¡¤˜à ×4Ò4Ñ6Ô6˜ØŸš d°6˜Ñ:Ô:Ð:Øœ	×(Ò(¨¬Ñ6Ô6Ð6ð ×&Ò&Ñ(Ô(¨1Ò,Ð,ð  �ØÔ$Ð0ðAÝ  ¤™^œ^¨tÔ/@Ð@˜˜øÝ$ð Að Að AÝ  ¤™^œ^¨tÔ/@Ò@˜˜˜ðAøøøð ð JÝ$ð &8Ý:=¸d¼i¹.¼.ñ&Iñ Jô Jð JðJð Js   Ä:E Å'F Å?F ©NN)T)FNF)r5   r6   r7   r8   r!   r�   rƒ   r†   rŠ   r�   r�   r“   r™   r–   r¡   r£   rQ   r[   rX   r9   r"   r   r   r   X  s  € € € € € ð(	ð (	ðT	)ð 	)ð 	)ð 	)ð*	!ð 	!ð 	!ð	$ð 	$ð 	$ð	'ð 	'ð 	'ð	*ð 	*ð 	*ð	#ð 	#ð 	#ð	6ð 	6ð 	6ð	&ð 	&ð 	&ð	ð 	ð 	ð	ð 	ð 	ð
	"ð 
	"ð 
	"ð 
	"ð	Wð 	Wð 	Wð 	Wð	.ð 	.ð 	.ð$	ð 	ð 	ð 	ð:#	Jð #	Jð #	Jð #	Jð #	Jr"   r   c                   ó   — e Zd ZdZdd„ZdS )r   aæ  Class to model a DER OCTET STRING.

    An example of encoding is:

    >>> from Cryptodome.Util.asn1 import DerOctetString
    >>> from binascii import hexlify, unhexlify
    >>> os_der = DerOctetString(b'\xaa')
    >>> os_der.payload += b'\xbb'
    >>> print hexlify(os_der.encode())

    which will show ``0402aabb``, the DER encoding for the byte string
    ``b'\xAA\xBB'``.

    For decoding:

    >>> s = unhexlify(b'0402aabb')
    >>> try:
    >>>   os_der = DerOctetString()
    >>>   os_der.decode(s)
    >>>   print hexlify(os_der.payload)
    >>> except ValueError:
    >>>   print "Not a valid DER OCTET STRING"

    the output will be ``aabb``.

    :ivar payload: The content of the string
    :vartype payload: byte string
    r"   Nc                 óB   — t                                | d||d¦  «         dS )ah  Initialize the DER object as an OCTET STRING.

        :Parameters:
          value : byte string
            The initial payload of the object.
            If not specified, the payload is empty.

          implicit : integer
            The IMPLICIT tag to use for the encoded object.
            It overrides the universal tag for OCTET STRING (4).
        é   FN©r	   r!   )r   rf   rD   s      r   r!   zDerOctetString.__init__A  s&   € õ 	×Ò˜4  u¨h¸Ñ>Ô>Ð>Ð>Ð>r"   )r"   N©r5   r6   r7   r8   r!   r9   r"   r   r   r   #  s2   € € € € € ðð ð:?ð ?ð ?ð ?ð ?ð ?r"   r   c                   ó   — e Zd ZdZd„ ZdS )r   z"Class to model a DER NULL element.c                 óB   — t                                | dddd¦  «         dS )z$Initialize the DER object as a NULL.é   r"   NFr²   r%   s    r   r!   zDerNull.__init__S  s&   € õ 	×Ò˜4  s¨D°%Ñ8Ô8Ð8Ð8Ð8r"   Nr³   r9   r"   r   r   r   P  s)   € € € € € Ø,Ð,ð9ð 9ð 9ð 9ð 9r"   r   c                   ó.   — e Zd ZdZd	d„Zd„ Zd
d„Zd„ ZdS )r   a,  Class to model a DER OBJECT ID.

    An example of encoding is:

    >>> from Cryptodome.Util.asn1 import DerObjectId
    >>> from binascii import hexlify, unhexlify
    >>> oid_der = DerObjectId("1.2")
    >>> oid_der.value += ".840.113549.1.1.1"
    >>> print hexlify(oid_der.encode())

    which will show ``06092a864886f70d010101``, the DER encoding for the
    RSA Object Identifier ``1.2.840.113549.1.1.1``.

    For decoding:

    >>> s = unhexlify(b'06092a864886f70d010101')
    >>> try:
    >>>   oid_der = DerObjectId()
    >>>   oid_der.decode(s)
    >>>   print oid_der.value
    >>> except ValueError:
    >>>   print "Not a valid DER OBJECT ID"

    the output will be ``1.2.840.113549.1.1.1``.

    :ivar value: The Object ID (OID), a dot separated list of integers
    :vartype value: string
    Ú Nc                 óR   — t                                | dd|d|¦  «         || _        dS )a’  Initialize the DER object as an OBJECT ID.

        :Parameters:
          value : string
            The initial Object Identifier (e.g. "1.2.0.0.6.2").
          implicit : integer
            The IMPLICIT tag to use for the encoded object.
            It overrides the universal tag for OBJECT ID (6).
          explicit : integer
            The EXPLICIT tag to use for the encoded object.
        é   r"   FNre   rg   s       r   r!   zDerObjectId.__init__w  s-   € õ 	×Ò˜4  s¨H°e¸XÑFÔFÐFØˆŒ
ˆ
ˆ
r"   c                 ó  — d„ | j                              d¦  «        D ¦   «         }t          |¦  «        dk     rt          d¦  «        ‚t	          d|d         z  |d         z   ¦  «        | _        |dd…         D ]p}|dk    rdg}n7g }|r#|                     d|d	z  d
z  ¦  «         |dz  }|°#|dxx         d	z  cc<   | xj        d                     d„ |D ¦   «         ¦  «        z  c_        Œqt           	                    | ¦  «        S )zCReturn the DER OBJECT ID, fully encoded as a
        binary string.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r9   )rk   ©rž   r   s     r   rŸ   z&DerObjectId.encode.<locals>.<listcomp>Š  s   € Ð7Ð7Ð7˜A•�Q‘”Ð7Ð7Ð7r"   ú.rd   z$Not a valid Object Identifier stringé(   r   r3   NrK   r<   é   éÿÿÿÿr"   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r9   )r   r½   s     r   rŸ   z&DerObjectId.encode.<locals>.<listcomp>—  s   € Ð%;Ð%;Ð%;°!¥d¨1¡g¤gÐ%;Ð%;Ð%;r"   )
rf   Úsplitr*   r-   r   rA   ÚinsertÚjoinr	   rQ   )r   ÚcompsÚvÚencs       r   rQ   zDerObjectId.encode†  s#  € ð 8Ð7 ¤×!1Ò!1°#Ñ!6Ô!6Ð7Ñ7Ô7ˆÝˆu‰:Œ:˜Š>ˆ>ÝÐCÑDÔDÐDÝ˜B˜u Qœx™K¨¨a¬Ñ0Ñ1Ô1ˆŒØ�q�r�r”ð 		=ð 		=ˆAØ�AŠvˆvØ�c��à�Øð Ø—J’J˜q 1 t¡8¨tÑ"3Ñ4Ô4Ð4Ø˜!‘G�Að ð ð �B��”˜4‘��‘ØˆLŒL˜CŸHšHÐ%;Ð%;°sÐ%;Ñ%;Ô%;Ñ<Ô<Ñ<ˆLŒLˆLÝ×Ò Ñ%Ô%Ð%r"   Fc                 ó:   — t                                | ||¦  «        S )ab  Decode a complete DER OBJECT ID, and re-initializes this
        object with it.

        Args:
            der_encoded (byte string):
                A complete DER OBJECT ID.
            strict (boolean):
                Whether decoding must check for strict DER compliancy.

        Raises:
            ValueError: in case of parsing errors.
        ro   rp   s      r   r[   zDerObjectId.decodeš  s   € õ ×Ò  k°6Ñ:Ô:Ð:r"   c                 óÖ  — t                                | ||¦  «         t          | j        ¦  «        }d„ t	          |                     ¦   «         d¦  «        D ¦   «         }d}|                     ¦   «         r\|                     ¦   «         }|dz  |dz  z   }|dz  s$|                     t          |¦  «        ¦  «         d}|                     ¦   «         °\d 	                    |¦  «        | _
        dS )z,Decode a complete DER OBJECT ID from a file.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r9   )Ústrr½   s     r   rŸ   z1DerObjectId._decodeFromStream.<locals>.<listcomp>²  s   € Ð;Ð;Ð;˜A•�Q‘”Ð;Ð;Ð;r"   r¿   r   r<   rK   r¾   N)r	   rX   r   rA   Údivmodr4   r+   r–   rÌ   rÅ   rf   )r   rS   rZ   r^   rÆ   rÇ   Úcs          r   rX   zDerObjectId._decodeFromStreamª  sà   € õ 	×#Ò# D¨!¨VÑ4Ô4Ð4õ ˜œÑ%Ô%ˆØ;Ð;¥¨¯ª©¬°rÑ!:Ô!:Ð;Ñ;Ô;ˆØˆØ×ÒÑ Ô ð 	Ø—’‘”ˆAØ�#‘˜˜T™Ñ"ˆAØ˜‘Hð Ø—’�S ™VœVÑ$Ô$Ð$Ø�ð ×ÒÑ Ô ð 	ð —X’X˜e‘_”_ˆŒ
ˆ
ˆ
r"   )r¸   NNr`   rw   r9   r"   r   r   r   Y  sd   € € € € € ðð ð:ð ð ð ð&ð &ð &ð(;ð ;ð ;ð ;ð %ð %ð %ð %ð %r"   r   c                   ó.   — e Zd ZdZd	d„Zd„ Zd
d„Zd„ ZdS )r   a×  Class to model a DER BIT STRING.

    An example of encoding is:

    >>> from Cryptodome.Util.asn1 import DerBitString
    >>> from binascii import hexlify, unhexlify
    >>> bs_der = DerBitString(b'\xaa')
    >>> bs_der.value += b'\xbb'
    >>> print hexlify(bs_der.encode())

    which will show ``040300aabb``, the DER encoding for the bit string
    ``b'\xAA\xBB'``.

    For decoding:

    >>> s = unhexlify(b'040300aabb')
    >>> try:
    >>>   bs_der = DerBitString()
    >>>   bs_der.decode(s)
    >>>   print hexlify(bs_der.value)
    >>> except ValueError:
    >>>   print "Not a valid DER BIT STRING"

    the output will be ``aabb``.

    :ivar value: The content of the string
    :vartype value: byte string
    r"   Nc                 ó²   — t                                | dd|d|¦  «         t          |t           ¦  «        r|                     ¦   «         | _        dS || _        dS )aË  Initialize the DER object as a BIT STRING.

        :Parameters:
          value : byte string or DER object
            The initial, packed bit string.
            If not specified, the bit string is empty.
          implicit : integer
            The IMPLICIT tag to use for the encoded object.
            It overrides the universal tag for OCTET STRING (3).
          explicit : integer
            The EXPLICIT tag to use for the encoded object.
        é   r"   FN)r	   r!   Ú
isinstancerQ   rf   rg   s       r   r!   zDerBitString.__init__Û  sT   € õ 	×Ò˜4  s¨H°e¸XÑFÔFÐFõ �e�YÑ'Ô'ð 	ØŸš™œˆDŒJˆJˆJàˆDŒJˆJˆJr"   c                 óT   — d| j         z   | _        t                               | ¦  «        S )zDReturn the DER BIT STRING, fully encoded as a
        binary string.ó    )rf   rA   r	   rQ   r%   s    r   rQ   zDerBitString.encodeð  s&   € ð
  ¤Ñ+ˆŒÝ×Ò Ñ%Ô%Ð%r"   Fc                 ó:   — t                                | ||¦  «        S )aT  Decode a complete DER BIT STRING, and re-initializes this
        object with it.

        Args:
            der_encoded (byte string): a complete DER BIT STRING.
            strict (boolean):
                Whether decoding must check for strict DER compliancy.

        Raises:
            ValueError: in case of parsing errors.
        ro   rp   s      r   r[   zDerBitString.decodeø  s   € õ ×Ò  k°6Ñ:Ô:Ð:r"   c                 óî   — t                                | ||¦  «         | j        r-t          | j        d         ¦  «        dk    rt	          d¦  «        ‚d| _        | j        r| j        dd…         | _        dS dS )z1Decode a complete DER BIT STRING DER from a file.r   zNot a valid BIT STRINGr"   r3   N)r	   rX   rA   r   r-   rf   )r   rS   rZ   s      r   rX   zDerBitString._decodeFromStream  s€   € õ 	×#Ò# D¨!¨VÑ4Ô4Ð4àŒ<ð 	7�D ¤¨a¤Ñ1Ô1°QÒ6Ð6ÝÐ5Ñ6Ô6Ð6ð ˆŒ
àŒ<ð 	*Øœ a b bÔ)ˆDŒJˆJˆJð	*ð 	*r"   )r"   NNr`   rw   r9   r"   r   r   r   ½  sd   € € € € € ðð ð:ð ð ð ð*&ð &ð &ð;ð ;ð ;ð ;ð*ð *ð *ð *ð *r"   r   c                   óF   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zdd	„Z	d
„ Z
d„ ZdS )r   a‰  Class to model a DER SET OF.

    An example of encoding is:

    >>> from Cryptodome.Util.asn1 import DerBitString
    >>> from binascii import hexlify, unhexlify
    >>> so_der = DerSetOf([4,5])
    >>> so_der.add(6)
    >>> print hexlify(so_der.encode())

    which will show ``3109020104020105020106``, the DER encoding
    of a SET OF with items 4,5, and 6.

    For decoding:

    >>> s = unhexlify(b'3109020104020105020106')
    >>> try:
    >>>   so_der = DerSetOf()
    >>>   so_der.decode(s)
    >>>   print [x for x in so_der]
    >>> except ValueError:
    >>>   print "Not a valid DER SET OF"

    the output will be ``[4, 5, 6]``.
    Nc                 óš   — t                                | dd|d¦  «         g | _        d| _        |r|D ]}|                      |¦  «         ŒdS dS )a9  Initialize the DER object as a SET OF.

        :Parameters:
          startSet : container
            The initial set of integers or DER encoded objects.
          implicit : integer
            The IMPLICIT tag to use for the encoded object.
            It overrides the universal tag for SET OF (17).
        é   r"   TN)r	   r!   r{   Ú
_elemOctetÚadd)r   ÚstartSetrD   Úes       r   r!   zDerSetOf.__init__2  sl   € õ 	×Ò˜4  s¨H°dÑ;Ô;Ð;ØˆŒ	ð ˆŒàð 	Øð ð �Ø—’˜‘”��ð	ð 	ðð r"   c                 ó   — | j         |         S r$   r~   r   s     r   rƒ   zDerSetOf.__getitem__G  s   € ØŒy˜Œ|Ðr"   c                 ó*   — t          | j        ¦  «        S r$   )Úiterr{   r%   s    r   Ú__iter__zDerSetOf.__iter__J  s   € Ý�D”I‰ŒÐr"   c                 ó*   — t          | j        ¦  «        S r$   r’   r%   s    r   r“   zDerSetOf.__len__M  s   € Ý�4”9‰~Œ~Ðr"   c                 ó(  — t          |¦  «        rd}n2t          |t          ¦  «        r| j        }nt	          |d         ¦  «        }| j        |k    r| j        �t          d¦  «        ‚|| _        || j        vr| j                             |¦  «         dS dS )zâAdd an element to the set.

        Args:
            elem (byte string or integer):
              An element of the same type of objects already in the set.
              It can be an integer or a DER encoded object.
        rd   r   Nz&New element does not belong to the set)	r   rÒ   r	   r?   r   rÚ   r-   r{   r–   )r   ÚelemÚeos      r   rÛ   zDerSetOf.addP  s¡   € õ �dÑÔð 	ØˆBˆBÝ˜�iÑ(Ô(ð 	Ø”ˆBˆBå�d˜1”g‘”ˆBàŒ?˜bÒ Ð ØŒÐ*Ý Ð!IÑJÔJÐJØ ˆDŒOà�t”yÐ Ð ØŒI×Ò˜TÑ"Ô"Ð"Ð"Ð"ð !Ð r"   Fc                 ó:   — t                                | ||¦  «        S )aÞ  Decode a complete SET OF DER element, and re-initializes this
        object with it.

        DER INTEGERs are decoded into Python integers. Any other DER
        element is left undecoded; its validity is not checked.

        Args:
            der_encoded (byte string): a complete DER BIT SET OF.
            strict (boolean):
                Whether decoding must check for strict DER compliancy.

        Raises:
            ValueError: in case of parsing errors.
        ro   rp   s      r   r[   zDerSetOf.decodeh  s   € õ  ×Ò  k°6Ñ:Ô:Ð:r"   c                 ó°  — g | _         t                               | ||¦  «         t          | j        ¦  «        }d}|                     ¦   «         dk    �r|                     ¦   «          t          ¦   «         }|                     ||¦  «         |dk     r|j        }n||j        k    rt          d¦  «        ‚|dk    r-| j          	                    | 
                    ¦   «         ¦  «         nUt          ¦   «         }|                     | 
                    ¦   «         |¦  «         | j          	                    |j        ¦  «         |                     ¦   «         dk    �°dS dS )z)Decode a complete DER SET OF from a file.rÁ   r   z)Not all elements are of the same DER typerd   N)r{   r	   rX   r   rA   r+   r&   r?   r-   r–   r(   r
   r[   rf   )r   rS   rZ   r^   Ú
setIdOctetrª   r«   s          r   rX   zDerSetOf._decodeFromStreamz  sI  € ð ˆŒ	õ 	×#Ò# D¨!¨VÑ4Ô4Ð4õ ˜œÑ%Ô%ˆØˆ
Ø×ÒÑ Ô  1Ò$Ñ$Ø�NŠNÑÔÐå‘+”+ˆCØ×!Ò! ! VÑ,Ô,Ð,ð ˜AŠ~ˆ~Ø œ^�
�
à ¤Ò/Ð/Ý$Ð%PÑQÔQÐQð ˜TÒ!Ð!Ø”	× Ò  ×!6Ò!6Ñ!8Ô!8Ñ9Ô9Ð9Ð9å#™œ�Ø—’˜a×3Ò3Ñ5Ô5°vÑ>Ô>Ð>Ø”	× Ò  ¤Ñ.Ô.Ð.ð' ×ÒÑ Ô  1Ò$Ñ$Ð$Ð$Ð$Ð$r"   c                 óŽ  — g }| j         D ]t}t          |¦  «        r"t          |¦  «                             ¦   «         }n,t	          |t
          ¦  «        r|                     ¦   «         }n|}|                     |¦  «         Œu|                     ¦   «          d                     |¦  «        | _	        t
                               | ¦  «        S )zRReturn this SET OF DER element, fully encoded as a
        binary string.
        r"   )
r{   r   r
   rQ   rÒ   r	   r–   ÚsortrÅ   rA   )r   Úorderedr˜   Úbyss       r   rQ   zDerSetOf.encode›  s´   € ð ˆØ”Ið 	 ð 	 ˆDÝ˜$ÑÔð Ý  Ñ&Ô&×-Ò-Ñ/Ô/��Ý˜D¥)Ñ,Ô,ð Ø—k’k‘m”m��à�Ø�NŠN˜3ÑÔÐÐØ�Š‰ŒˆØ—x’x Ñ(Ô(ˆŒÝ×Ò Ñ%Ô%Ð%r"   r®   r`   )r5   r6   r7   r8   r!   rƒ   rá   r“   rÛ   r[   rX   rQ   r9   r"   r   r   r     s¡   € € € € € ðð ð4ð ð ð ð*ð ð ðð ð ðð ð ð#ð #ð #ð0;ð ;ð ;ð ;ð$/ð /ð /ðB&ð &ð &ð &ð &r"   r   r`   )rs   ÚCryptodome.Util.py3compatr   r   r   r   ÚCryptodome.Util.numberr   r   Ú__all__r   Úobjectr   r	   r
   r   r   r   r   r   r   r9   r"   r   ú<module>rñ      sA  ðð. €€€à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðEð Eð E€ð+ð +ð +ð +ð%ð %ð %ð %ð %�&ñ %ô %ð %ð@lZð lZð lZð lZð lZ�ñ lZô lZð lZð^\'ð \'ð \'ð \'ð \'�ñ \'ô \'ð \'ð~HJð HJð HJð HJð HJ�)ñ HJô HJð HJðV*?ð *?ð *?ð *?ð *?�Yñ *?ô *?ð *?ðZ9ð 9ð 9ð 9ð 9ˆiñ 9ô 9ð 9ða%ð a%ð a%ð a%ð a%�)ñ a%ô a%ð a%ðHW*ð W*ð W*ð W*ð W*�9ñ W*ô W*ð W*ðtU&ð U&ð U&ð U&ð U&ˆyñ U&ô U&ð U&ð U&ð U&r"   