+
    Hßºi)7 ã                  óp  a € 0 t $ ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHtHt ^ RIHt ^ RIHtHtHt ]P$                  R[8¼  d   ^ RIHt M0]P$                  R\8  d   ]P(                  ! R4      tR	 R
 ltM^ RIHt ^ RIHtHt ^ RIHtHtHtHtHt ^ RI H!t! ^ RI H"t# ^ RI H$t% ^ RI H&t' ^ RI H(t) ^ RI H*t+ ^ RI H,t- . R]Ot.]]P^                  ]P`                  ]Pb                  ]Pd                  ]Pf                  3,          t4]]Pj                  ]Pl                  ]Pn                  ]Pp                  ]Pr                  3,          t:]]4]:3,          t;]]<]R$]<3,          3,          t=])P|                  t?R%]@R&   ])P‚                  tBR%]@R&   R^tC])Pˆ                  tER%]@R&   ])PŒ                  tGR%]@R&   ])P�                  tIR%]@R&&   ])P”                  tKR%]@R'&    ! R( R]L4      tM]! ]%]M4      tN]+! ]M4      tOR_R) R* lltPR+ R, ltQR- R. ltRR/ R0 ltSR1 R2 ltT ! R3 R44      tU ! R5 R4      tV ! R6 R74      tW]! R84      R9 R: l4       tX]! R;4      R< R= l4       tY]P´                   ! R> R4      4       t[]! R?4       ! R@ R4      4       t\]! RA4       ! RB R4      4       t] ! RC R4      t^ ! RD R!4      t_ ! RE R4      t` ! RF R ]L4      ta ! RG R4      tbRH RI ltcRJ RK ltdRL RM lteR`RN RO lltf ! RP RQ4      tgRR RS lthR_RT RU lltiRV RW ltj]jtk]P&                  ! ]j]lRA]mR"RX7       RY RZ ltn]nto]P&                  ! ]n]lRA]mR#RX7       R# )aé    )ÚannotationsN)Ú	b16encode)ÚIterableÚSequence)Úpartial)ÚAnyÚCallableÚUnion)Ú
deprecatedÚTc               ó$   € V ^8„  d   QhRRRRRR/# )é   ÚmsgÚstrÚkwargsÚobjectÚreturnzCallable[[_T], _T]© )Úformats   "Ú0/usr/lib/python3/dist-packages/OpenSSL/crypto.pyÚ__annotate__r      s"   € ÷ ñ ˜ð  vð Ð2Dñ ó    c                ó   € R  # )c                ó   € V # ©Nr   )Úfs   &r   Ú<lambda>Údeprecated.<locals>.<lambda>   s   € ™r   r   )r   r   s   &,r   r   r      s   € ÙÐr   )ÚutilsÚx509)ÚdsaÚecÚed448Úed25519Úrsa)ÚStrOrBytesPath)Úbyte_string)Úexception_from_error_queue)Úffi)Úlib)Úmake_assert)Ú
path_bytesÚFILETYPE_ASN1ÚFILETYPE_PEMÚTYPE_DSAÚTYPE_RSAÚX509ÚErrorÚPKeyÚX509ExtensionÚX509NameÚX509ReqÚ	X509StoreÚX509StoreContextÚX509StoreContextErrorÚX509StoreFlagsÚdump_certificate_requestÚload_certificate_request.ÚintÚTYPE_DHÚTYPE_ECc                  ó   € ] tR t^ttRtRtR# )r2   z/
An error occurred in an `OpenSSL.crypto` API.
r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   r   r   r2   r2   t   s   † õr   c               ó    € V ^8„  d   QhRRRR/# )r   Úbufferúbytes | Noner   r   r   )r   s   "r   r   r   ~   s   € ÷ ñ ˜ð °ñ r   c                óf  € V f;   \         P                  ! \         P                  ! 4       4      p\         P                  pM@\        P
                  ! RV 4      p\         P                  ! V\        V 4      4      pV3R R llp\        V\        P                  8g  4       \        P                  ! W4      pV# )zÅ
Allocate a new OpenSSL memory BIO.

Arrange for the garbage collector to clean it up automatically.

:param buffer: None or some bytes to use to put into the BIO so that they
    can be read out.
úchar[]c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úbior   Úrefr   r   )r   s   "r   r   Ú"_new_mem_buf.<locals>.__annotate__�   s!   € ÷ 	&ñ 	&�cð 	& ð 	&¨sñ 	&r   c                ó.   € \         P                  ! V 4      # r   )Ú_libÚBIO_free)rM   rN   s   &&r   ÚfreeÚ_new_mem_buf.<locals>.free�   s   € Ü—=’= Ó%Ð%r   )rQ   ÚBIO_newÚ	BIO_s_memrR   Ú_ffiÚnewÚBIO_new_mem_bufÚlenÚ_openssl_assertÚNULLÚgc)rH   rM   rS   Údatas   &   r   Ú_new_mem_bufr_   ~   s}   € ð ‚~Ü�lŠlœ4Ÿ>š>Ó+Ó,ˆÜ�}‰}‰ä�xŠx˜ &Ó)ˆÜ×"Ò" 4¬¨V«Ó5ˆð '+÷ 	&ô �Cœ4Ÿ9™9Ñ$Ô%ä
�'Š'�#Ó
€CØ€Jr   c               ó    € V ^8„  d   QhRRRR/# )r   rM   r   r   Úbytesr   )r   s   "r   r   r   ˜   s   € ÷ ;ñ ;˜ð ; ñ ;r   c                ó¤   € \         P                  ! R4      p\        P                  ! W4      p\         P                  ! V^ ,          V4      R,          # )zG
Copy the contents of an OpenSSL BIO object into a Python byte string.
zchar**ºNNN)rW   rX   rQ   ÚBIO_get_mem_datarH   )rM   Úresult_bufferÚbuffer_lengths   &  r   Ú_bio_to_stringrg   ˜   s=   € ô —H’H˜XÓ&€MÜ×)Ò)¨#Ó=€MÜ�;Š;�} QÕ'¨Ó7¸Õ:Ð:r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úboundaryr   Úwhenra   r   ÚNoner   )r   s   "r   r   r   ¡   s!   € ÷ +ñ +˜Sð +¨ð +°$ñ +r   c                óÐ   € \        V\        4      '       g   \        R4      h\        V \        P
                  8g  4       \        P                  ! W4      pV^ 8X  d   \        R4      hR# )aÌ  
The the time value of an ASN1 time object.

@param boundary: An ASN1_TIME pointer (or an object safely
    castable to that type) which will have its value set.
@param when: A string representation of the desired time value.

@raise TypeError: If C{when} is not a L{bytes} string.
@raise ValueError: If C{when} does not represent a time in the required
    format.
@raise RuntimeError: If the time value cannot be set for some other
    (unspecified) reason.
zwhen must be a byte stringzInvalid stringN)	Ú
isinstancera   Ú	TypeErrorr[   rW   r\   rQ   ÚASN1_TIME_set_stringÚ
ValueError)ri   rj   Ú
set_results   && r   Ú_set_asn1_timerr   ¡   sX   € ô �dœE×"Ò"ÜÐ4Ó5Ð5ô �H¤§	¡	Ñ)Ô*ä×*Ò*¨8Ó:€JØ�Q„ÜÐ)Ó*Ð*ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   rj   ra   r   r   r   )r   s   "r   r   r   º   s   € ÷ ñ ˜ð  3ñ r   c                óÈ   € \         P                  ! 4       p\        V\        P                  8g  4       \        P
                  ! V\         P                  4      p\        W4       V# )al  
Behaves like _set_asn1_time but returns a new ASN1_TIME object.

@param when: A string representation of the desired time value.

@raise TypeError: If C{when} is not a L{bytes} string.
@raise ValueError: If C{when} does not represent a time in the required
    format.
@raise RuntimeError: If the time value cannot be set for some other
    (unspecified) reason.
)rQ   ÚASN1_TIME_newr[   rW   r\   r]   ÚASN1_TIME_freerr   )rj   Úrets   & r   Ú_new_asn1_timerx   º   sF   € ô ×
Ò
Ó
€CÜ�Cœ4Ÿ9™9Ñ$Ô%Ü
�'Š'�#”t×*Ñ*Ó
+€CÜ�3ÔØ€Jr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	timestampr   r   rI   r   )r   s   "r   r   r   Í   s   € ÷ ñ ˜cð  lñ r   c                ó€  € \         P                  ! RV 4      p\        P                  ! V4      ^ 8X  d   R# \        P                  ! V4      \        P
                  8X  d+   \         P                  ! \        P                  ! V4      4      # \         P                  ! R4      p\        P                  ! W4       \        V^ ,          \         P                  8g  4       \         P                  ! RV^ ,          4      p\        P                  ! V4      p\         P                  ! V4      p\        P                  ! V^ ,          4       V# )aE  
Retrieve the time value of an ASN1 time object.

@param timestamp: An ASN1_GENERALIZEDTIME* (or an object safely castable to
    that type) from which the time value will be retrieved.

@return: The time value from C{timestamp} as a L{bytes} string in a certain
    format.  Or C{None} if the object contains no time value.
úASN1_STRING*NzASN1_GENERALIZEDTIME**)rW   ÚcastrQ   ÚASN1_STRING_lengthÚASN1_STRING_typeÚV_ASN1_GENERALIZEDTIMEÚstringÚASN1_STRING_get0_datarX   ÚASN1_TIME_to_generalizedtimer[   r\   ÚASN1_GENERALIZEDTIME_free)rz   Ústring_timestampÚgeneralized_timestampÚstring_dataÚstring_results   &    r   Ú_get_asn1_timer‰   Í   sæ   € ô —y’y °Ó;ÐÜ×ÒÐ/Ó0°AÔ5Ùä×ÒÐ.Ó/´4×3NÑ3NÔNä�{Š{œ4×5Ò5Ð6FÓGÓHÐHä $§¢Ð)AÓ BÐÜ×)Ò)¨)ÔKÜÐ-¨aÕ0´D·I±IÑ=Ô>äŸ9š9 ^Ð5JÈ1Õ5MÓNÐÜ×0Ò0Ð1AÓBˆÜŸš KÓ0ˆÜ×&Ò&Ð'<¸QÕ'?Ô@ØÐr   c                  ó:   € ] tR t^êtR R ltR R ltR R ltRtR# )	Ú_X509NameInvalidatorc               ó   € V ^8„  d   QhRR/# ©r   r   rk   r   )r   s   "r   r   Ú!_X509NameInvalidator.__annotate__ë   s   € ÷ )ñ )˜$ñ )r   c                	ó   € . V n         R # r   ©Ú_names©Úselfs   &r   Ú__init__Ú_X509NameInvalidator.__init__ë   s	   € Ø&(ˆŽr   c               ó    € V ^8„  d   QhRRRR/# ©r   Únamer5   r   rk   r   )r   s   "r   r   rŽ   î   s   € ÷ !ñ !˜ð ! Tñ !r   c                	ó<   € V P                   P                  V4       R # r   )r‘   Úappend©r“   r˜   s   &&r   ÚaddÚ_X509NameInvalidator.addî   s   € Ø�‰×Ñ˜4Ö r   c               ó   € V ^8„  d   QhRR/# r�   r   )r   s   "r   r   rŽ   ñ   s   € ÷ ñ �tñ r   c                	ó0   € V P                    F  pV=K  	  R # r   )r‘   Ú_namer›   s   & r   ÚclearÚ_X509NameInvalidator.clearñ   s   € Ø—K”KˆDà’
ó  r   r�   N)rA   rB   rC   rD   r”   rœ   r¡   rF   r   r   r   r‹   r‹   ê   s   † õ)õ!÷ñ r   r‹   c                  ó€   € ] tR t^÷tRtRtRtR R ltR R lt]	R R	 l4       t
R
 R ltR R ltR R ltR R ltRtR# )r3   z<
A class representing an DSA or RSA public key or key pair.
FTc               ó   € V ^8„  d   QhRR/# r�   r   )r   s   "r   r   ÚPKey.__annotate__ÿ   s   € ÷ "ñ "˜$ñ "r   c                	ó’   € \         P                  ! 4       p\        P                  ! V\         P                  4      V n        R V n        R# )FN)rQ   ÚEVP_PKEY_newrW   r]   ÚEVP_PKEY_freeÚ_pkeyÚ_initialized©r“   Úpkeys   & r   r”   ÚPKey.__init__ÿ   s0   € Ü× Ò Ó"ˆÜ—W’W˜T¤4×#5Ñ#5Ó6ˆŒ
Ø!ˆÖr   c               ó   € V ^8„  d   QhRR/# )r   r   Ú_Keyr   )r   s   "r   r   r¥     s   € ÷ Oñ O Tñ Or   c                óþ   € ^ RI HpHp V P                  '       d2   \	        \
        V 4      p\        P                  ! \        V! V4      4      # \        \
        V 4      p\        P                  ! \        V! VRR7      4      # )zç
Export as a ``cryptography`` key.

:rtype: One of ``cryptography``'s `key interfaces`_.

.. _key interfaces: https://cryptography.io/en/latest/hazmat/            primitives/asymmetric/rsa/#key-interfaces

.. versionadded:: 16.1.0
)Úload_der_private_keyÚload_der_public_keyN)Úpassword)
Ú,cryptography.hazmat.primitives.serializationr±   r²   Ú_only_publicÚdump_publickeyr-   Útypingr}   r¯   Údump_privatekey)r“   r±   r²   Úders   &   r   Úto_cryptography_keyÚPKey.to_cryptography_key  s]   € ÷	
ð
 ××ÐÜ ¤°Ó5ˆCÜ—;’;œtÑ%8¸Ó%=Ó>Ð>ä!¤-°Ó6ˆCÜ—;’;œtÑ%9¸#ÈÔ%MÓNÐNr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
crypto_keyr¯   r   r3   r   )r   s   "r   r   r¥     s   € ÷ 77ñ 77¨tð 77¸ñ 77r   c                ó  € \        V\        P                  \        P                  \        P
                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  3
4      '       g   \!        R4      h^ RIHpHpHpHp \        V\        P                  \        P                  \        P                  \        P                  \        P                  34      '       d5   \-        \.        VP1                  VP2                  VP4                  4      4      # VP7                  VP2                  VP8                  V! 4       4      p\;        \.        V4      # )zÈ
Construct based on a ``cryptography`` *crypto_key*.

:param crypto_key: A ``cryptography`` key.
:type crypto_key: One of ``cryptography``'s `key interfaces`_.

:rtype: PKey

.. versionadded:: 16.1.0
zUnsupported key type)ÚEncodingÚNoEncryptionÚPrivateFormatÚPublicFormat)rm   r!   ÚDSAPrivateKeyÚDSAPublicKeyr"   ÚEllipticCurvePrivateKeyÚEllipticCurvePublicKeyr$   ÚEd25519PrivateKeyÚEd25519PublicKeyr#   ÚEd448PrivateKeyÚEd448PublicKeyr%   ÚRSAPrivateKeyÚRSAPublicKeyrn   r´   r¿   rÀ   rÁ   rÂ   Úload_publickeyr-   Úpublic_bytesÚDERÚSubjectPublicKeyInfoÚprivate_bytesÚPKCS8Úload_privatekey)Úclsr½   r¿   rÀ   rÁ   rÂ   r¹   s   &&     r   Úfrom_cryptography_keyÚPKey.from_cryptography_key  s2  € ô Øä×!Ñ!Ü× Ñ Ü×*Ñ*Ü×)Ñ)Ü×)Ñ)Ü×(Ñ(Ü×%Ñ%Ü×$Ñ$Ü×!Ñ!Ü× Ñ ð÷
ò 
ô Ð2Ó3Ð3÷	
ó 	
ô Øä× Ñ Ü×)Ñ)Ü×(Ñ(Ü×$Ñ$Ü× Ñ ð÷	
ò 	
ô "ÜØ×'Ñ'Ø—L‘L ,×"CÑ"Cóóð ð ×*Ñ*Ø—‘˜m×1Ñ1±<³>óˆCô #¤=°#Ó6Ð6r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útyper=   Úbitsr   rk   r   )r   s   "r   r   r¥   U  s!   € ÷ 6!ñ 6! ð 6!¨Cð 6!°Dñ 6!r   c           	     óÀ  € \        V\        4      '       g   \        R4      h\        V\        4      '       g   \        R4      hV\        8X  dì   V^ 8:  d   \	        R4      h\
        P                  ! 4       p\        P                  ! V\
        P                  4      p\
        P                  ! V\
        P                  4       \
        P                  ! 4       p\
        P                  ! WBV\        P                  4      p\        V^8H  4       \
        P                   ! V P"                  V4      p\        V^8H  4       EMV\$        8X  Ed   \
        P&                  ! 4       p\        V\        P                  8g  4       \        P                  ! V\
        P(                  4      p\
        P*                  ! Wb\        P                  ^ \        P                  \        P                  \        P                  4      p\        V^8H  4       \        \
        P,                  ! V4      ^8H  4       \        \
        P.                  ! V P"                  V4      ^8H  4       M\1        R4      hRV n        R# )aÓ  
Generate a key pair of the given type, with the given number of bits.

This generates a key "into" the this object.

:param type: The key type.
:type type: :py:data:`TYPE_RSA` or :py:data:`TYPE_DSA`
:param bits: The number of bits.
:type bits: :py:data:`int` ``>= 0``
:raises TypeError: If :py:data:`type` or :py:data:`bits` isn't
    of the appropriate type.
:raises ValueError: If the number of bits isn't an integer of
    the appropriate size.
:return: ``None``
ztype must be an integerzbits must be an integerzInvalid number of bitszNo such key typeTN)rm   r=   rn   r0   rp   rQ   ÚBN_newrW   r]   ÚBN_freeÚBN_set_wordÚRSA_F4ÚRSA_newÚRSA_generate_key_exr\   r[   ÚEVP_PKEY_assign_RSAr©   r/   ÚDSA_newÚDSA_freeÚDSA_generate_parameters_exÚDSA_generate_keyÚEVP_PKEY_set1_DSAr2   rª   )r“   rØ   rÙ   Úexponentr%   Úresultr!   Úress   &&&     r   Úgenerate_keyÚPKey.generate_keyU  s”  € ô  ˜$¤×$Ò$ÜÐ5Ó6Ð6ä˜$¤×$Ò$ÜÐ5Ó6Ð6à”8ÔØ�qŒyÜ Ð!9Ó:Ð:ô —{’{“}ˆHÜ—w’w˜x¬¯©Ó6ˆHÜ×Ò˜X¤t§{¡{Ô3ä—,’,“.ˆCä×-Ò-¨c¸Ä4Ç9Á9ÓMˆFÜ˜F a™KÔ(ä×-Ò-¨d¯j©j¸#Ó>ˆFÜ˜F a™KÖ(à”XÕÜ—,’,“.ˆCÜ˜C¤4§9¡9Ñ,Ô-ä—'’'˜#œtŸ}™}Ó-ˆCÜ×1Ò1Øœ4Ÿ9™9 a¬¯©´D·I±I¼t¿y¹yóˆCô ˜C 1™HÔ%äœD×1Ò1°#Ó6¸!Ñ;Ô<ÜœD×2Ò2°4·:±:¸sÓCÀqÑHÕIäÐ*Ó+Ð+à ˆÖr   c               ó   € V ^8„  d   QhRR/# ©r   r   Úboolr   )r   s   "r   r   r¥   �  s   € ÷ ñ �tñ r   c                ó   € V P                   '       d   \        R4      h\        P                  ! V P	                  4       4      \        P
                  8w  d   \        R4      h\        P                  ! V P                  4      p\        P                  ! V\        P                  4      p\        P                  ! V4      pV^8X  d   R# \        4        R# )a@  
Check the consistency of an RSA private key.

This is the Python equivalent of OpenSSL's ``RSA_check_key``.

:return: ``True`` if key is consistent.

:raise OpenSSL.crypto.Error: if the key is inconsistent.

:raise TypeError: if the key is of a type which cannot be checked.
    Only RSA keys can currently be checked.
zpublic key onlyz'Only RSA keys can currently be checked.TN)rµ   rn   rQ   ÚEVP_PKEY_typerØ   ÚEVP_PKEY_RSAÚEVP_PKEY_get1_RSAr©   rW   r]   ÚRSA_freeÚRSA_check_keyÚ_raise_current_error)r“   r%   rè   s   &  r   ÚcheckÚ
PKey.check�  s�   € ð ××ÐÜÐ-Ó.Ð.ä×Ò˜dŸi™i›kÓ*¬d×.?Ñ.?Ô?ÜÐEÓFÐFä×$Ò$ T§Z¡ZÓ0ˆÜ�gŠg�cœ4Ÿ=™=Ó)ˆÜ×#Ò# CÓ(ˆØ�QŒ;ÙÜÖr   c               ó   € V ^8„  d   QhRR/# ©r   r   r=   r   )r   s   "r   r   r¥   §  s   € ÷ ,ñ ,�cñ ,r   c                óB   € \         P                  ! V P                  4      # )z<
Returns the type of the key

:return: The type of the key.
)rQ   ÚEVP_PKEY_idr©   r’   s   &r   rØ   Ú	PKey.type§  s   € ô ×Ò §
¡
Ó+Ð+r   c               ó   € V ^8„  d   QhRR/# rù   r   )r   s   "r   r   r¥   ¯  s   € ÷ .ñ .�cñ .r   c                óB   € \         P                  ! V P                  4      # )zP
Returns the number of bits of the key

:return: The number of bits of the key.
)rQ   ÚEVP_PKEY_bitsr©   r’   s   &r   rÙ   Ú	PKey.bits¯  s   € ô ×!Ò! $§*¡*Ó-Ð-r   )rª   r©   N)rA   rB   rC   rD   rE   rµ   rª   r”   rº   ÚclassmethodrÕ   rê   rö   rØ   rÙ   rF   r   r   r   r3   r3   ÷   sM   † ñð €LØ€Lõ"õ
Oð. ô77ó ð77õr6!õpõ4,÷.ñ .r   c                  óœ   a € ] tR tRtRtRtR V 3R llt]R R l4       t]R R	 l4       t	]R
 R l4       t
R R ltR R ltR R ltRtV ;t# )Ú_EllipticCurvei¸  aB  
A representation of a supported elliptic curve.

@cvar _curves: :py:obj:`None` until an attempt is made to load the curves.
    Thereafter, a :py:type:`set` containing :py:type:`_EllipticCurve`
    instances each of which represents one curve supported by the system.
@type _curves: :py:type:`NoneType` or :py:type:`set`
Nc               ó    € V ^8„  d   QhRRRR/# ©r   Úotherr   r   rî   r   )r   s   "r   r   Ú_EllipticCurve.__annotate__Ä  s   € ÷ 	ñ 	˜Cð 	 Dñ 	r   c                óZ   <€ \        V\        4      '       d   \        SV `  V4      # \        # )z—
Implement cooperation with the right-hand side argument of ``!=``.

Python 3 seems to have dropped this cooperation in this very narrow
circumstance.
)rm   r  ÚsuperÚ__ne__ÚNotImplemented)r“   r  Ú	__class__s   &&€r   r
  Ú_EllipticCurve.__ne__Ä  s'   ø€ ô �eœ^×,Ò,Ü‘7‘> %Ó(Ð(ÜÐr   c               ó    € V ^8„  d   QhRRRR/# ©r   r*   r   r   úset[_EllipticCurve]r   )r   s   "r   r   r  Ð  s   € ÷ Eñ E¨ð EÐ0Cñ Er   c                óÂ   a a€ SP                  \        P                  ^ 4      p\        P                  ! RV4      pSP                  W24       \	        V V3R lV 4       4      # )zÔ
Get the curves supported by OpenSSL.

:param lib: The OpenSSL library binding object.

:return: A :py:type:`set` of ``cls`` instances giving the names of the
    elliptic curves the underlying library supports.
zEC_builtin_curve[]c              3  ó\   <"  € T F!  pSP                  SVP                  4      x € K#  	  R # 5ir   )Úfrom_nidÚnid)Ú.0ÚcrÔ   r*   s   & €€r   Ú	<genexpr>Ú7_EllipticCurve._load_elliptic_curves.<locals>.<genexpr>ß  s#   øé € ÐD±^°�3—<‘<  Q§U¡U×+Ð+³^ùs   ƒ),)ÚEC_get_builtin_curvesrW   r\   rX   Úset)rÔ   r*   Ú
num_curvesÚbuiltin_curvess   ff  r   Ú_load_elliptic_curvesÚ$_EllipticCurve._load_elliptic_curvesÏ  sM   ù€ ð ×.Ñ.¬t¯y©y¸!Ó<ˆ
ÜŸšÐ"6¸
ÓCˆð 	×!Ñ! .Ô=ÜÕD±^ÓDÓDÐDr   c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   r  â  s   € ÷ ñ  sð Ð/Bñ r   c                ób   € V P                   f   V P                  V4      V n         V P                   # )zç
Get, cache, and return the curves supported by OpenSSL.

:param lib: The OpenSSL library binding object.

:return: A :py:type:`set` of ``cls`` instances giving the names of the
    elliptic curves the underlying library supports.
)Ú_curvesr  )rÔ   r*   s   &&r   Ú_get_elliptic_curvesÚ#_EllipticCurve._get_elliptic_curvesá  s*   € ð �;‰;ÒØ×3Ñ3°CÓ8ˆCŒKØ�{‰{Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r*   r   r  r=   r   r  r   )r   s   "r   r   r  ð  s&   € ÷ Oñ O˜3ð O Sð O¨^ñ Or   c           	     óx   € V ! W\         P                  ! VP                  V4      4      P                  R4      4      # )aƒ  
Instantiate a new :py:class:`_EllipticCurve` associated with the given
OpenSSL NID.

:param lib: The OpenSSL library binding object.

:param nid: The OpenSSL NID the resulting curve object will represent.
    This must be a curve NID (and not, for example, a hash NID) or
    subsequent operations will fail in unpredictable ways.
:type nid: :py:class:`int`

:return: The curve object.
Úascii)rW   r�   Ú
OBJ_nid2snÚdecode)rÔ   r*   r  s   &&&r   r  Ú_EllipticCurve.from_nidï  s.   € ñ �3œTŸ[š[¨¯©¸Ó)<Ó=×DÑDÀWÓMÓNÐNr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r*   r   r  r=   r˜   r   r   rk   r   )r   s   "r   r   r     s(   € ÷ ñ ˜Cð  cð °ð ¸ñ r   c                ó*   € Wn         W n        W0n        R# )aA  
:param _lib: The :py:mod:`cryptography` binding instance used to
    interface with OpenSSL.

:param _nid: The OpenSSL NID identifying the curve this object
    represents.
:type _nid: :py:class:`int`

:param name: The OpenSSL short name identifying the curve this object
    represents.
:type name: :py:class:`unicode`
N©rQ   Ú_nidr˜   )r“   r*   r  r˜   s   &&&&r   r”   Ú_EllipticCurve.__init__   s   € ð Œ	ØŒ	ØŽ	r   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r    s   € ÷ (ñ (˜#ñ (r   c                	ó$   € R V P                   : R2# )z<Curve Ú>©r˜   r’   s   &r   Ú__repr__Ú_EllipticCurve.__repr__  s   € Ø˜Ÿ™™ QÐ'Ð'r   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r    s   € ÷ .ñ .˜Cñ .r   c                ó–   € V P                   P                  V P                  4      p\        P                  ! V\         P
                  4      # )z¥
Create a new OpenSSL EC_KEY structure initialized to use this curve.

The structure is automatically garbage collected when the Python object
is garbage collected.
)rQ   ÚEC_KEY_new_by_curve_namer-  rW   r]   ÚEC_KEY_free)r“   Úkeys   & r   Ú
_to_EC_KEYÚ_EllipticCurve._to_EC_KEY  s3   € ð �i‰i×0Ñ0°·±Ó;ˆÜ�wŠw�sœD×,Ñ,Ó-Ð-r   r,  )rA   rB   rC   rD   rE   r!  r
  r  r  r"  r  r”   r4  r<  rF   Ú__classcell__©r  s   @r   r  r  ¸  sm   ø† ñð €G÷	ð 	ð ôEó ðEð" ôó ðð ôOó ðOõ õ"(÷.ó .r   r  zSget_elliptic_curves is deprecated. You should use the APIs in cryptography instead.c               ó   € V ^8„  d   QhRR/# )r   r   r  r   )r   s   "r   r   r   #  s   € ÷ 5ñ 5Ð0ñ 5r   c                 ó4   € \         P                  \        4      # )as  
Return a set of objects representing the elliptic curves supported in the
OpenSSL build in use.

The curve objects have a :py:class:`unicode` ``name`` attribute by which
they identify themselves.

The curve objects are useful as values for the argument accepted by
:py:meth:`Context.set_tmp_ecdh` to specify which elliptical curve should be
used for ECDHE key exchange.
)r  r"  rQ   r   r   r   Úget_elliptic_curvesrB    s   € ô  ×.Ñ.¬tÓ4Ð4r   zRget_elliptic_curve is deprecated. You should use the APIs in cryptography instead.c               ó    € V ^8„  d   QhRRRR/# )r   r˜   r   r   r  r   )r   s   "r   r   r   6  s   € ÷ 1ñ 1˜Sð 1 ^ñ 1r   c                óf   € \        4        F  pVP                  V 8X  g   K  Vu # 	  \        RV 4      h)a8  
Return a single curve object selected by name.

See :py:func:`get_elliptic_curves` for information about curve objects.

:param name: The OpenSSL short name identifying the curve object to
    retrieve.
:type name: :py:class:`unicode`

If the named curve is not supported then :py:class:`ValueError` is raised.
zunknown curve name)rB  r˜   rp   )r˜   Úcurves   & r   Úget_elliptic_curverF  2  s2   € ô  %Ö&ˆØ�:‰:˜ÖØŠLñ 'ô Ð)¨4Ó
0Ð0r   c                  ó’   a € ] tR tRtRtR R ltR V 3R lltR R ltR	 R
 ltR R lt	R R lt
R R ltR R ltR R ltRtV ;t# )r5   iH  aÉ  
An X.509 Distinguished Name.

:ivar countryName: The country of the entity.
:ivar C: Alias for  :py:attr:`countryName`.

:ivar stateOrProvinceName: The state or province of the entity.
:ivar ST: Alias for :py:attr:`stateOrProvinceName`.

:ivar localityName: The locality of the entity.
:ivar L: Alias for :py:attr:`localityName`.

:ivar organizationName: The organization name of the entity.
:ivar O: Alias for :py:attr:`organizationName`.

:ivar organizationalUnitName: The organizational unit of the entity.
:ivar OU: Alias for :py:attr:`organizationalUnitName`

:ivar commonName: The common name of the entity.
:ivar CN: Alias for :py:attr:`commonName`.

:ivar emailAddress: The e-mail address of the entity.
c               ó    € V ^8„  d   QhRRRR/# r—   r   )r   s   "r   r   ÚX509Name.__annotate__b  s   € ÷ =ñ =˜Xð =¨$ñ =r   c                óš   € \         P                  ! VP                  4      p\        P                  ! V\         P
                  4      V n        R# )z~
Create a new X509Name, copying the given X509Name instance.

:param name: The name to copy.
:type name: :py:class:`X509Name`
N)rQ   ÚX509_NAME_dupr    rW   r]   ÚX509_NAME_freer›   s   &&r   r”   ÚX509Name.__init__b  s0   € ô ×!Ò! $§*¡*Ó-ˆÜŸ'š' $¬×(;Ñ(;Ó<ˆŽ
r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r˜   r   Úvaluer   r   rk   r   )r   s   "r   r   rI  l  s!   € ÷ %#ñ %# ð %#¨Cð %#°Dñ %#r   c           	     	óÎ  <€ VP                  R 4      '       d   \        S	V `	  W4      # \        V4      \        Jd$   \        R\        V4      P                  R R24      h\        P                  ! \        V4      4      pV\        P                  8X  d    \        4        \        R4      h\        \        P                  ! V P                   4      4       F�  p\        P"                  ! V P                   V4      p\        P$                  ! V4      p\        P&                  ! V4      pW78X  g   KX  \        P(                  ! V P                   V4      p\        P*                  ! V4        M	  \-        V\        4      '       d   VP/                  R4      p\        P0                  ! V P                   V\        P2                  VRR^ 4      pV'       g   \        4        R# R#   \         d     ELFi ; i)Ú_z$attribute name must be string, not 'z.200Ú'úNo such attributeúutf-8Néÿÿÿÿ)Ú
startswithr	  Ú__setattr__rØ   r   rn   rA   rQ   ÚOBJ_txt2nidÚ_byte_stringÚ	NID_undefrõ   r2   ÚAttributeErrorÚrangeÚX509_NAME_entry_countr    ÚX509_NAME_get_entryÚX509_NAME_ENTRY_get_objectÚOBJ_obj2nidÚX509_NAME_delete_entryÚX509_NAME_ENTRY_freerm   ÚencodeÚX509_NAME_add_entry_by_NIDÚMBSTRING_UTF8)
r“   r˜   rO  r  ÚiÚentÚent_objÚent_nidÚ
add_resultr  s
   &&&      €r   rW  ÚX509Name.__setattr__l  sƒ  ø€ Ø�?‰?˜3×ÒÜ‘7Ñ& tÓ3Ð3ô �‹:œSÓ ÜðÜ˜“K×(Ñ(¨Ð.¨að1óð ô
 ×Òœ|¨DÓ1Ó2ˆØ”$—.‘.Ô ðÜ$Ô&ô !Ð!4Ó5Ð5ô ”t×1Ò1°$·*±*Ó=Ö>ˆAÜ×*Ò*¨4¯:©:°qÓ9ˆCÜ×5Ò5°cÓ:ˆGÜ×&Ò& wÓ/ˆGØŽ~Ü×1Ò1°$·*±*¸aÓ@�Ü×)Ò)¨#Ô.Ùñ ?ô �eœS×!Ò!Ø—L‘L Ó)ˆEä×4Ò4Ø�J‰J˜œT×/Ñ/°¸¸BÀó
ˆ
÷ Ü Ö"ñ øô) ô Úðús   Â
G ÇG$Ç#G$c               ó    € V ^8„  d   QhRRRR/# )r   r˜   r   r   ú
str | Noner   )r   s   "r   r   rI  “  s   € ÷ &ñ & ð &¨
ñ &r   c                óÞ  € \         P                  ! \        V4      4      pV\         P                  8X  d    \	        4        \        R4      h\         P                  ! V P                  VR4      pVR8X  d   R# \         P                  ! V P                  V4      p\         P                  ! V4      p\        P                  ! R4      p\         P                  ! We4      p\        V^ 8¬  4        \        P                  ! V^ ,          V4      R,          P!                  R4      p\         P"                  ! V^ ,          4       V#   \
         d     EL	i ; i  \         P"                  ! T^ ,          4       i ; i)zâ
Find attribute. An X509Name object has the following attributes:
countryName (alias C), stateOrProvince (alias ST), locality (alias L),
organization (alias O), organizationalUnit (alias OU), commonName
(alias CN) and more...
rS  Núunsigned char**rc   rT  rU  )rQ   rX  rY  rZ  rõ   r2   r[  ÚX509_NAME_get_index_by_NIDr    r^  ÚX509_NAME_ENTRY_get_datarW   rX   ÚASN1_STRING_to_UTF8r[   rH   r(  ÚOPENSSL_free)	r“   r˜   r  Úentry_indexÚentryr^   re   Údata_lengthrè   s	   &&       r   Ú__getattr__ÚX509Name.__getattr__“  s$  € ô ×Òœ|¨DÓ1Ó2ˆØ”$—.‘.Ô ðÜ$Ô&ô !Ð!4Ó5Ð5ä×5Ò5°d·j±jÀ#ÀrÓJˆØ˜"ÔÙä×(Ò(¨¯©°[ÓAˆÜ×,Ò,¨UÓ3ˆäŸšÐ!2Ó3ˆÜ×.Ò.¨}ÓCˆÜ˜ qÑ(Ô)ð	0Ü—[’[ ¨qÕ!1°;Ó?ÀÕB×IÑIØóˆFô
 ×Ò˜m¨AÕ.Ô/Øˆøô- ô Úðûô* ×Ò˜m¨AÕ.Õ/ús   ¶
D; Ã(4E Ä;E
Å	E
ÅE,c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   rI  »  s   € ÷ @ñ @˜Cð @ Dñ @r   c                	ó–   € \        V\        4      '       g   \        # \        P                  ! V P
                  VP
                  4      ^ 8H  # ©r   ©rm   r5   r  rQ   ÚX509_NAME_cmpr    ©r“   r  s   &&r   Ú__eq__ÚX509Name.__eq__»  s5   € Ü˜%¤×*Ò*Ü!Ð!ä×!Ò! $§*¡*¨e¯k©kÓ:¸aÑ?Ð?r   c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   rI  Á  s   € ÷ ?ñ ?˜Cð ? Dñ ?r   c                	ó–   € \        V\        4      '       g   \        # \        P                  ! V P
                  VP
                  4      ^ 8  # r{  r|  r~  s   &&r   Ú__lt__ÚX509Name.__lt__Á  s5   € Ü˜%¤×*Ò*Ü!Ð!ä×!Ò! $§*¡*¨e¯k©kÓ:¸QÑ>Ð>r   c               ó   € V ^8„  d   QhRR/# r0  r   )r   s   "r   r   rI  Ç  s   € ÷ 
ñ 
˜#ñ 
r   c                ó&  € \         P                  ! RR4      p\        P                  ! V P                  V\        V4      4      p\        V\         P                  8g  4       RP                  \         P                  ! V4      P                  R4      4      # )z&
String representation of an X509Name
rK   i   z<X509Name object '{}'>rT  )rW   rX   rQ   ÚX509_NAME_oneliner    rZ   r[   r\   r   r�   r(  )r“   re   Úformat_results   &  r   r4  ÚX509Name.__repr__Ç  sq   € ô Ÿš ¨3Ó/ˆÜ×.Ò.Ø�J‰J˜¤s¨=Ó'9ó
ˆô 	˜¬¯©Ñ2Ô3à'×.Ñ.Ü�KŠK˜Ó&×-Ñ-¨gÓ6ó
ð 	
r   c               ó   € V ^8„  d   QhRR/# rù   r   )r   s   "r   r   rI  Õ  s   € ÷ 
/ñ 
/�cñ 
/r   c                óB   € \         P                  ! V P                  4      # )zö
Return an integer representation of the first four bytes of the
MD5 digest of the DER representation of the name.

This is the Python equivalent of OpenSSL's ``X509_NAME_hash``.

:return: The (integer) hash of this name.
:rtype: :py:class:`int`
)rQ   ÚX509_NAME_hashr    r’   s   &r   ÚhashÚX509Name.hashÕ  s   € ô ×"Ò" 4§:¡:Ó.Ð.r   c               ó   € V ^8„  d   QhRR/# ©r   r   ra   r   )r   s   "r   r   rI  á  s   € ÷ ñ �Uñ r   c                ó  € \         P                  ! R4      p\        P                  ! V P                  V4      p\        V^ 8¬  4       \         P                  ! V^ ,          V4      R,          p\        P                  ! V^ ,          4       V# )zn
Return the DER encoding of this name.

:return: The DER encoded form of this name.
:rtype: :py:class:`bytes`
ro  rc   )rW   rX   rQ   Úi2d_X509_NAMEr    r[   rH   rs  )r“   re   Úencode_resultrˆ   s   &   r   r¹   ÚX509Name.derá  si   € ô ŸšÐ!2Ó3ˆÜ×*Ò*¨4¯:©:°}ÓEˆÜ˜¨Ñ*Ô+äŸš M°!Õ$4°mÓDÀQÕGˆÜ×Ò˜-¨Õ*Ô+ØÐr   c               ó   € V ^8„  d   QhRR/# )r   r   zlist[tuple[bytes, bytes]]r   )r   s   "r   r   rI  ð  s   € ÷ ñ Ð 9ñ r   c                ó6  € . p\        \        P                  ! V P                  4      4       Fé  p\        P                  ! V P                  V4      p\        P
                  ! V4      p\        P                  ! V4      p\        P                  ! V4      p\        P                  ! V4      p\        P                  ! \        P                  ! V4      \        P                  ! V4      4      R,          pVP                  \        P                  ! V4      V34       Kë  	  V# )zœ
Returns the components of this name, as a sequence of 2-tuples.

:return: The components of this name.
:rtype: :py:class:`list` of ``name, value`` tuples.
rc   )r\  rQ   r]  r    r^  r_  rq  r`  r'  rW   rH   r‚   r~   rš   r�   )	r“   rè   rf  rg  ÚfnameÚfvalr  r˜   rO  s	   &        r   Úget_componentsÚX509Name.get_componentsð  sÑ   € ð ˆÜ”t×1Ò1°$·*±*Ó=Ö>ˆAÜ×*Ò*¨4¯:©:°qÓ9ˆCä×3Ò3°CÓ8ˆEÜ×0Ò0°Ó5ˆDä×"Ò" 5Ó)ˆCÜ—?’? 3Ó'ˆDô —K’KÜ×*Ò*¨4Ó0´$×2IÒ2IÈ$Ó2OóàõˆEð �M‰Mœ4Ÿ;š; tÓ,¨eÐ4Ö5ñ ?ð  ˆr   )r    )rA   rB   rC   rD   rE   r”   rW  rw  r  rƒ  r4  r�  r¹   r™  rF   r>  r?  s   @r   r5   r5   H  sB   ø† ñõ0=÷%#ð %#õN&õP@õ?õ
õ
/õ÷ó r   zZX509Extension support in pyOpenSSL is deprecated. You should use the APIs in cryptography.c                  óÔ   € ] tR tRt$ RtRR R llt]R R l4       t]P                  R]P                  R	]P                  R
/tR]R&   R R ltR R ltR R ltR R ltR R ltRtR# )r4   i  ze
An X.509 v3 certificate extension.

.. deprecated:: 23.3.0
   Use cryptography's X509 APIs instead.
Nc               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   Ú	type_namera   Úcriticalrî   rO  ÚsubjectzX509 | NoneÚissuerr   rk   r   )r   s   "r   r   ÚX509Extension.__annotate__  sV   € ÷ CGñ CGàðCGð ðCGð ð	CGð
 ðCGð ðCGð 
ñCGr   c                óÜ  € \         P                  ! R4      p\        P                  ! V\         P                  \         P                  \         P                  \         P                  ^ 4       \        P
                  ! V4       Ve3   \        V\        4      '       g   \        R4      hVP                  Vn
        Ve3   \        V\        4      '       g   \        R4      hVP                  Vn        V'       d
   RV,           p\        P                  ! \         P                  WaV4      pV\         P                  8X  d   \        4        \         P                  ! V\        P                  4      V n        R# )ae  
Initializes an X509 extension.

:param type_name: The name of the type of extension_ to create.
:type type_name: :py:data:`bytes`

:param bool critical: A flag indicating whether this is a critical
    extension.

:param value: The OpenSSL textual representation of the extension's
    value.
:type value: :py:data:`bytes`

:param subject: Optional X509 certificate to use as subject.
:type subject: :py:class:`X509`

:param issuer: Optional X509 certificate to use as issuer.
:type issuer: :py:class:`X509`

.. _extension: https://www.openssl.org/docs/manmaster/man5/
    x509v3_config.html#STANDARD-EXTENSIONS
zX509V3_CTX*Nzissuer must be an X509 instancez subject must be an X509 instances	   critical,)rW   rX   rQ   ÚX509V3_set_ctxr\   ÚX509V3_set_ctx_nodbrm   r1   rn   Ú_x509Úissuer_certÚsubject_certÚX509V3_EXT_nconfrõ   r]   ÚX509_EXTENSION_freeÚ
_extension)r“   r�  rž  rO  rŸ  r   ÚctxÚ	extensions   &&&&&&  r   r”   ÚX509Extension.__init__  sô   € ô< �hŠh�}Ó%ˆô
 	×Ò˜C¤§¡¬D¯I©I´t·y±yÄ$Ç)Á)ÈQÔOô 	× Ò  Ô%ð ÒÜ˜f¤d×+Ò+ÜÐ AÓBÐBØ$Ÿl™lˆCŒOØÒÜ˜g¤t×,Ò,ÜÐ BÓCÐCØ&Ÿ}™}ˆCÔçð ! 5Õ(ˆEä×)Ò)¬$¯)©)°SÀUÓKˆ	ØœŸ	™	Ô!Ü Ô"ÜŸ'š' )¬T×-EÑ-EÓFˆŽr   c               ó   € V ^8„  d   QhRR/# r7  r   )r   s   "r   r   r¡  ]  s   € ÷ 
ñ 
�cñ 
r   c                	ój   € \         P                  ! \         P                  ! V P                  4      4      # r   )rQ   r`  ÚX509_EXTENSION_get_objectrª  r’   s   &r   r-  ÚX509Extension._nid\  s'   € ä×ÒÜ×*Ò*¨4¯?©?Ó;ó
ð 	
r   ÚemailÚDNSÚURIztyping.ClassVar[dict[int, str]]Ú	_prefixesc               ó   € V ^8„  d   QhRR/# r0  r   )r   s   "r   r   r¡  h  s   € ÷  ñ   sñ  r   c                	óX  € \         P                  ! R \        P                  ! V P                  4      4      p\         P
                  ! V\        P                  4      p. p\        \        P                  ! V4      4       F¿  p\        P                  ! W4      p V P                  VP                  ,          p\         P                  ! VP                  P                  P                  VP                  P                  P                   4      R,          P#                  R4      pVP%                  VR,           V,           4       KÁ  	  RP/                  V4      #   \&         dO    \)        4       p\        P*                  ! Yt4       TP%                  \-        T4      P#                  R4      4        EK,  i ; i)zGENERAL_NAMES*rc   rT  Ú:z, )rW   r}   rQ   ÚX509V3_EXT_d2irª  r]   ÚGENERAL_NAMES_freer\  Úsk_GENERAL_NAME_numÚsk_GENERAL_NAME_valuerµ  rØ   rH   ÚdÚia5r^   Úlengthr(  rš   ÚKeyErrorr_   ÚGENERAL_NAME_printrg   Újoin)r“   ÚnamesÚpartsrf  r˜   ÚlabelrO  rM   s   &       r   Ú_subjectAltNameStringÚ#X509Extension._subjectAltNameStringh  s1  € Ü—	’	Øœd×1Ò1°$·/±/ÓBó
ˆô —’˜œt×6Ñ6Ó7ˆØˆÜ”t×/Ò/°Ó6Ö7ˆAÜ×-Ò-¨eÓ7ˆDð
2ØŸ™ t§y¡yÕ1�ô Ÿš D§F¡F§J¡J§O¡O°T·V±V·Z±Z×5FÑ5FÓGØõç‘&˜“/ð ð —‘˜U S�[¨5Õ0Ö1ñ 8ð �y‰y˜ÓÐøô ô BÜ"“n�Ü×'Ò'¨Ô2Ø—‘œ^¨CÓ0×7Ñ7¸Ó@×AÐAðBús   ÂEÅAF)Æ(F)c               ó   € V ^8„  d   QhRR/# r0  r   )r   s   "r   r   r¡  ~  s   € ÷ 3ñ 3˜ñ 3r   c                ó  € \         P                  V P                  8X  d   V P                  4       # \	        4       p\         P
                  ! WP                  ^ ^ 4      p\        V^ 8g  4       \        V4      P                  R4      # )z6
:return: a nice text representation of the extension
rT  )
rQ   ÚNID_subject_alt_namer-  rÆ  r_   ÚX509V3_EXT_printrª  r[   rg   r(  )r“   rM   Úprint_results   &  r   Ú__str__ÚX509Extension.__str__~  sg   € ô ×$Ñ$¨¯	©	Ô1Ø×-Ñ-Ó/Ð/ä‹nˆÜ×,Ò,¨S·/±/À1ÀaÓHˆÜ˜¨Ñ)Ô*ä˜cÓ"×)Ñ)¨'Ó2Ð2r   c               ó   € V ^8„  d   QhRR/# rí   r   )r   s   "r   r   r¡  ‹  s   € ÷ Añ A˜dñ Ar   c                óB   € \         P                  ! V P                  4      # )zS
Returns the critical field of this X.509 extension.

:return: The critical field.
)rQ   ÚX509_EXTENSION_get_criticalrª  r’   s   &r   Úget_criticalÚX509Extension.get_critical‹  s   € ô ×/Ò/°·±Ó@Ð@r   c               ó   € V ^8„  d   QhRR/# r�  r   )r   s   "r   r   r¡  “  s   € ÷ ñ  ñ r   c                óô   € \         P                  ! V P                  4      p\         P                  ! V4      p\         P                  ! V4      pV\
        P                  8w  d   \
        P                  ! V4      # R# )zÌ
Returns the short type name of this X.509 extension.

The result is a byte string such as :py:const:`b"basicConstraints"`.

:return: The short type name.
:rtype: :py:data:`bytes`

.. versionadded:: 0.12
s   UNDEF)rQ   r°  rª  r`  r'  rW   r\   r�   )r“   Úobjr  Úbufs   &   r   Úget_short_nameÚX509Extension.get_short_name“  sV   € ô ×,Ò,¨T¯_©_Ó=ˆÜ×Ò˜sÓ#ˆô �oŠo˜cÓ"ˆØ”$—)‘)ÔÜ—;’;˜sÓ#Ð#ár   c               ó   € V ^8„  d   QhRR/# r�  r   )r   s   "r   r   r¡  ©  s   € ÷ :ñ :˜%ñ :r   c                ó  € \         P                  ! V P                  4      p\        P                  ! RV4      p\         P
                  ! V4      p\         P                  ! V4      p\        P                  ! W44      R,          # )z¥
Returns the data of the X509 extension, encoded as ASN.1.

:return: The ASN.1 encoded data of this X509 extension.
:rtype: :py:data:`bytes`

.. versionadded:: 0.12
r|   rc   )rQ   ÚX509_EXTENSION_get_datarª  rW   r}   r‚   r~   rH   )r“   Úoctet_resultrˆ   Úchar_resultÚresult_lengths   &    r   Úget_dataÚX509Extension.get_data©  s\   € ô ×3Ò3°D·O±OÓDˆÜŸ	š	 .°,Ó?ˆÜ×0Ò0°Ó?ˆÜ×/Ò/°Ó>ˆÜ�{Š{˜;Ó6°qÕ9Ð9r   )rª  ©NN)rA   rB   rC   rD   rE   r”   Úpropertyr-  rQ   Ú	GEN_EMAILÚGEN_DNSÚGEN_URIrµ  Ú__annotations__rÆ  rÍ  rÒ  rØ  rà  rF   r   r   r   r4   r4     sn   ‡ ñ
÷CGðJ ô
ó ð
ð 	�‰˜Ø�‰�eØ�‰�eð2€IÐ.ó õ õ,3õAõ÷,:ñ :r   zPCSR support in pyOpenSSL is deprecated. You should use the APIs in cryptography.c                  ó´   € ] tR tRtRtR R ltR R lt]R R l4       tR	 R
 lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltRtR# )r6   i¹  z~
An X.509 certificate signing requests.

.. deprecated:: 24.2.0
   Use `cryptography.x509.CertificateSigningRequest` instead.
c               ó   € V ^8„  d   QhRR/# r�   r   )r   s   "r   r   ÚX509Req.__annotate__Å  s   € ÷ ñ ˜$ñ r   c                	ó¦   € \         P                  ! 4       p\        P                  ! V\         P                  4      V n        V P                  ^ 4       R# ©r   N)rQ   ÚX509_REQ_newrW   r]   ÚX509_REQ_freeÚ_reqÚset_version)r“   Úreqs   & r   r”   ÚX509Req.__init__Å  s6   € Ü×ÒÓ!ˆÜ—G’G˜C¤×!3Ñ!3Ó4ˆŒ	à×Ñ˜Ör   c               ó   € V ^8„  d   QhRR/# )r   r   úx509.CertificateSigningRequestr   )r   s   "r   r   rê  Ë  s   € ÷ &ñ &Ð!?ñ &r   c                ó>   € ^ RI Hp \        \        V 4      pV! V4      # )zŽ
Export as a ``cryptography`` certificate signing request.

:rtype: ``cryptography.x509.CertificateSigningRequest``

.. versionadded:: 17.1.0
)Úload_der_x509_csr)Úcryptography.x509rö  Ú"_dump_certificate_request_internalr-   )r“   rö  r¹   s   &  r   Úto_cryptographyÚX509Req.to_cryptographyË  s   € õ 	8ä0´ÀÓEˆá  Ó%Ð%r   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
crypto_reqrô  r   r6   r   )r   s   "r   r   rê  Ú  s    € ÷ Fñ FØ7ðFà	ñFr   c                óº   € \        V\        P                  4      '       g   \        R4      h^ RIHp VP                  VP                  4      p\        \        V4      # )zë
Construct based on a ``cryptography`` *crypto_req*.

:param crypto_req: A ``cryptography`` X.509 certificate signing request
:type crypto_req: ``cryptography.x509.CertificateSigningRequest``

:rtype: X509Req

.. versionadded:: 17.1.0
z%Must be a certificate signing request©r¿   )
rm   r    ÚCertificateSigningRequestrn   r´   r¿   rÎ   rÏ   Ú"_load_certificate_request_internalr-   )rÔ   rü  r¿   r¹   s   &&  r   Úfrom_cryptographyÚX509Req.from_cryptographyÙ  sG   € ô ˜*¤d×&DÑ&D×EÒEÜÐCÓDÐDåIà×%Ñ% h§l¡lÓ3ˆÜ1´-ÀÓEÐEr   c               ó    € V ^8„  d   QhRRRR/# ©r   r¬   r3   r   rk   r   )r   s   "r   r   rê  ï  s   € ÷ 
)ñ 
)˜tð 
)¨ñ 
)r   c                óx   € \         P                  ! V P                  VP                  4      p\	        V^8H  4       R# )z�
Set the public key of the certificate signing request.

:param pkey: The public key to use.
:type pkey: :py:class:`PKey`

:return: ``None``
N)rQ   ÚX509_REQ_set_pubkeyrï  r©   r[   ©r“   r¬   rq   s   && r   Ú
set_pubkeyÚX509Req.set_pubkeyï  s*   € ô ×-Ò-¨d¯i©i¸¿¹ÓDˆ
Ü˜
 a™Ö(r   c               ó   € V ^8„  d   QhRR/# ©r   r   r3   r   )r   s   "r   r   rê  û  s   € ÷ ñ ˜Dñ r   c                óD  € \         P                  \         4      p\        P                  ! V P                  4      Vn        \        VP
                  \        P                  8g  4       \        P                  ! VP
                  \        P                  4      Vn        RVn        V# )zk
Get the public key of the certificate signing request.

:return: The public key.
:rtype: :py:class:`PKey`
T)r3   Ú__new__rQ   ÚX509_REQ_get_pubkeyrï  r©   r[   rW   r\   r]   r¨   rµ   r«   s   & r   Ú
get_pubkeyÚX509Req.get_pubkeyû  sf   € ô �|‰|œDÓ!ˆÜ×-Ò-¨d¯i©iÓ8ˆŒ
Ü˜Ÿ
™
¤d§i¡iÑ/Ô0Ü—W’W˜TŸZ™Z¬×);Ñ);Ó<ˆŒ
Ø ˆÔØˆr   c               ó    € V ^8„  d   QhRRRR/# ©r   Úversionr=   r   rk   r   )r   s   "r   r   rê  	  s   € ÷ )ñ ) 3ð )¨4ñ )r   c                óÊ   € \        V\        4      '       g   \        R4      hV^ 8w  d   \        R4      h\        P
                  ! V P                  V4      p\        V^8H  4       R# )z‰
Set the version subfield (RFC 2986, section 4.1) of the certificate
request.

:param int version: The version number.
:return: ``None``
zversion must be an intz9Invalid version. The only valid version for X509Req is 0.N)rm   r=   rn   rp   rQ   ÚX509_REQ_set_versionrï  r[   )r“   r  rq   s   && r   rð  ÚX509Req.set_version	  sX   € ô ˜'¤3×'Ò'ÜÐ4Ó5Ð5Ø�aŒ<ÜØKóð ô ×.Ò.¨t¯y©y¸'ÓBˆ
Ü˜
 a™Ö(r   c               ó   € V ^8„  d   QhRR/# rù   r   )r   s   "r   r   rê    s   € ÷ 4ñ 4˜Sñ 4r   c                óB   € \         P                  ! V P                  4      # )z—
Get the version subfield (RFC 2459, section 4.1.2.1) of the certificate
request.

:return: The value of the version subfield.
:rtype: :py:class:`int`
)rQ   ÚX509_REQ_get_versionrï  r’   s   &r   Úget_versionÚX509Req.get_version  s   € ô ×(Ò(¨¯©Ó3Ð3r   c               ó   € V ^8„  d   QhRR/# ©r   r   r5   r   )r   s   "r   r   rê  $  s   € ÷ ñ ˜Xñ r   c                óÚ   € \         P                  \         4      p\        P                  ! V P                  4      Vn        \        VP
                  \        P                  8g  4       Wn	        V# )a�  
Return the subject of this certificate signing request.

This creates a new :class:`X509Name` that wraps the underlying subject
name field on the certificate signing request. Modifying it will modify
the underlying signing request, and will have the effect of modifying
any other :class:`X509Name` that refers to this subject.

:return: The subject of this certificate signing request.
:rtype: :class:`X509Name`
)
r5   r  rQ   ÚX509_REQ_get_subject_namerï  r    r[   rW   r\   Ú_ownerr›   s   & r   Úget_subjectÚX509Req.get_subject$  sK   € ô ×Ñ¤Ó)ˆÜ×3Ò3°D·I±IÓ>ˆŒ
Ü˜Ÿ
™
¤d§i¡iÑ/Ô0ð Œàˆr   c               ó    € V ^8„  d   QhRRRR/# ©r   Ú
extensionszIterable[X509Extension]r   rk   r   )r   s   "r   r   rê  :  s   € ÷ )ñ )Ð)@ð )ÀTñ )r   c                óÞ  € \         P                  ! R\        ^R7       \        P                  ! 4       p\        V\        P                  8g  4       \        P                  ! V\        P                  4      pV FD  p\        V\        4      '       g   \        R4      h\        P                  ! W#P                  4       KF  	  \        P                  ! V P                   V4      p\        V^8H  4       R# )z¯
Add extensions to the certificate signing request.

:param extensions: The X.509 extensions to add.
:type extensions: iterable of :py:class:`X509Extension`
:return: ``None``
úƒThis API is deprecated and will be removed in a future version of pyOpenSSL. You should use pyca/cryptography's X.509 APIs instead.©Ú
stacklevelú+One of the elements is not an X509ExtensionN)ÚwarningsÚwarnÚDeprecationWarningrQ   Úsk_X509_EXTENSION_new_nullr[   rW   r\   r]   Úsk_X509_EXTENSION_freerm   r4   rp   Úsk_X509_EXTENSION_pushrª  ÚX509_REQ_add_extensionsrï  )r“   r%  ÚstackÚextrj  s   &&   r   Úadd_extensionsÚX509Req.add_extensions:  s¯   € ô 	�Šð&ô Øõ	
ô ×/Ò/Ó1ˆÜ˜¤§¡Ñ*Ô+ä—’˜œt×:Ñ:Ó;ˆãˆCÜ˜c¤=×1Ò1Ü Ð!NÓOÐOô ×'Ò'¨¯~©~Ö>ñ ô ×1Ò1°$·)±)¸UÓCˆ
Ü˜
 a™Ö(r   c               ó   € V ^8„  d   QhRR/# )r   r   zlist[X509Extension]r   )r   s   "r   r   rê  [  s   € ÷ $ñ $Ð 3ñ $r   c                óü  € \         P                  ! R\        ^R7       . p\        P                  ! V P
                  4      p\        P                  ! VR 4      p\        \        P                  ! V4      4       F�  p\        P                  \        4      p\        P                  ! \        P                  ! W#4      4      p\        P                  ! V\        P                  4      Vn        VP!                  V4       Kƒ  	  V# )zÁ
Get X.509 extensions in the certificate signing request.

:return: The X.509 extensions in this request.
:rtype: :py:class:`list` of :py:class:`X509Extension` objects.

.. versionadded:: 0.15
r'  r(  c                óv   € \         P                  ! V \        P                  ! \         P                  R 4      4      # )r©  )rQ   Úsk_X509_EXTENSION_pop_freerW   Ú	addressofÚ_original_lib)Úxs   &r   r   Ú(X509Req.get_extensions.<locals>.<lambda>r  s'   € ”d×5Ò5ØÜ—’œt×1Ñ1Ð3HÓIôr   )r+  r,  r-  rQ   ÚX509_REQ_get_extensionsrï  rW   r]   r\  Úsk_X509_EXTENSION_numr4   r  ÚX509_EXTENSION_dupÚsk_X509_EXTENSION_valuer©  rª  rš   )r“   ÚextsÚnative_exts_objrf  r3  r¬  s   &     r   Úget_extensionsÚX509Req.get_extensions[  sÆ   € ô 	�Šð&ô Øõ	
ð ˆÜ×6Ò6°t·y±yÓAˆÜŸ'š'Øñó
ˆô ”t×1Ò1°/ÓBÖCˆAÜ×'Ñ'¬Ó6ˆCÜ×/Ò/Ü×,Ò,¨_Ó@óˆIô "ŸWšW Y´×0HÑ0HÓIˆCŒNØ�K‰K˜Öñ Dð ˆr   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r¬   r3   Údigestr   r   rk   r   )r   s   "r   r   rê  �  s!   € ÷ )ñ )˜ð ) sð )¨tñ )r   c                ól  € VP                   '       d   \        R4      hVP                  '       g   \        R4      h\        P                  ! \        V4      4      pV\        P                  8X  d   \        R4      h\        P                  ! V P                  VP                  V4      p\        V^ 8„  4       R# )a!  
Sign the certificate signing request with this key and digest type.

:param pkey: The key pair to sign with.
:type pkey: :py:class:`PKey`
:param digest: The name of the message digest to use for the signature,
    e.g. :py:data:`"sha256"`.
:type digest: :py:class:`str`
:return: ``None``
zKey has only public partúKey is uninitializedúNo such digest methodN)rµ   rp   rª   rQ   ÚEVP_get_digestbynamerY  rW   r\   ÚX509_REQ_signrï  r©   r[   )r“   r¬   rH  Ú
digest_objÚsign_results   &&&  r   ÚsignÚX509Req.sign�  s‰   € ð ××ÐÜÐ7Ó8Ð8à× × Ð ÜÐ3Ó4Ð4ä×.Ò.¬|¸FÓ/CÓDˆ
ØœŸ™Ô"ÜÐ4Ó5Ð5ä×(Ò(¨¯©°D·J±JÀ
ÓKˆÜ˜ a™Ö(r   c               ó    € V ^8„  d   QhRRRR/# )r   r¬   r3   r   rî   r   )r   s   "r   r   rê  ™  s   € ÷ ñ ˜4ð  Dñ r   c                óÀ   € \        V\        4      '       g   \        R4      h\        P                  ! V P
                  VP                  4      pV^ 8:  d   \        4        V# )a  
Verifies the signature on this certificate signing request.

:param PKey key: A public key.

:return: ``True`` if the signature is correct.
:rtype: bool

:raises OpenSSL.crypto.Error: If the signature is invalid or there is a
    problem verifying the signature.
úpkey must be a PKey instance)rm   r3   rn   rQ   ÚX509_REQ_verifyrï  r©   rõ   )r“   r¬   rè   s   && r   ÚverifyÚX509Req.verify™  sI   € ô ˜$¤×%Ò%ÜÐ:Ó;Ð;ä×%Ò% d§i¡i°·±Ó<ˆØ�QŒ;Ü Ô"àˆr   )rï  N)rA   rB   rC   rD   rE   r”   rù  r  r  r  r  rð  r  r!  r4  rD  rP  rV  rF   r   r   r   r6   r6   ¹  s[   † ñ
õõ&ð ôFó ðFõ*
)õõ)õ"4õõ,)õB$õL)÷0ñ r   c                  ó®  € ] tR tRtRtR R lt]R R l4       tR R lt]R	 R
 l4       t	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* ltR+ R, ltR- R. ltR/ R0 ltR1 R2 ltR3 R4 ltR5 R6 ltR7 R8 lt R9 R: lt!R; R< lt"R= R> lt#R? R@ lt$RA RB lt%RCt&RD# )Er1   i¯  z
An X.509 certificate.
c               ó   € V ^8„  d   QhRR/# r�   r   )r   s   "r   r   ÚX509.__annotate__´  s   € ÷ ;ñ ;˜$ñ ;r   c                	óø   € \         P                  ! 4       p\        V\        P                  8g  4       \        P
                  ! V\         P                  4      V n        \        4       V n	        \        4       V n
        R # r   )rQ   ÚX509_newr[   rW   r\   r]   Ú	X509_freer¥  r‹   Ú_issuer_invalidatorÚ_subject_invalidator)r“   r    s   & r   r”   ÚX509.__init__´  sJ   € Ü�}Š}‹ˆÜ˜¤§	¡	Ñ)Ô*Ü—W’W˜T¤4§>¡>Ó2ˆŒ
ä#7Ó#9ˆÔ Ü$8Ó$:ˆÖ!r   c               ó    € V ^8„  d   QhRRRR/# )r   r    r   r   r1   r   )r   s   "r   r   rZ  ½  s   € ÷ ñ  cð ¨dñ r   c                	ó¸   € V P                  V 4      p\        P                  ! V\        P                  4      Vn        \        4       Vn        \        4       Vn        V# r   )	r  rW   r]   rQ   r]  r¥  r‹   r^  r_  )rÔ   r    Úcerts   && r   Ú_from_raw_x509_ptrÚX509._from_raw_x509_ptr¼  sA   € à�{‰{˜3ÓˆÜ—W’W˜T¤4§>¡>Ó2ˆŒ
Ü#7Ó#9ˆÔ Ü$8Ó$:ˆÔ!Øˆr   c               ó   € V ^8„  d   QhRR/# )r   r   úx509.Certificater   )r   s   "r   r   rZ  Ä  s   € ÷ .ñ .Ð!1ñ .r   c                ó>   € ^ RI Hp \        \        V 4      pV! V4      # )zp
Export as a ``cryptography`` certificate.

:rtype: ``cryptography.x509.Certificate``

.. versionadded:: 17.1.0
)Úload_der_x509_certificate)r÷  ri  Údump_certificater-   )r“   ri  r¹   s   &  r   rù  ÚX509.to_cryptographyÄ  s   € õ 	@äœ}¨dÓ3ˆÙ(¨Ó-Ð-r   c               ó    € V ^8„  d   QhRRRR/# )r   Úcrypto_certrg  r   r1   r   )r   s   "r   r   rZ  Ò  s   € ÷ 4ñ 4Ð,<ð 4Àñ 4r   c                óº   € \        V\        P                  4      '       g   \        R4      h^ RIHp VP                  VP                  4      p\        \        V4      # )zÌ
Construct based on a ``cryptography`` *crypto_cert*.

:param crypto_key: A ``cryptography`` X.509 certificate.
:type crypto_key: ``cryptography.x509.Certificate``

:rtype: X509

.. versionadded:: 17.1.0
zMust be a certificaterþ  )
rm   r    ÚCertificatern   r´   r¿   rÎ   rÏ   Úload_certificater-   )rÔ   rm  r¿   r¹   s   &&  r   r  ÚX509.from_cryptographyÑ  sG   € ô ˜+¤t×'7Ñ'7×8Ò8ÜÐ3Ó4Ð4åIà×&Ñ& x§|¡|Ó4ˆÜ¤¨sÓ3Ð3r   c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   rZ  å  s   € ÷ Iñ I 3ð I¨4ñ Ir   c                ó¢   € \        V\        4      '       g   \        R4      h\        \        P
                  ! V P                  V4      ^8H  4       R# )zÙ
Set the version number of the certificate. Note that the
version value is zero-based, eg. a value of 0 is V1.

:param version: The version number of the certificate.
:type version: :py:class:`int`

:return: ``None``
zversion must be an integerN)rm   r=   rn   r[   rQ   ÚX509_set_versionr¥  )r“   r  s   &&r   rð  ÚX509.set_versionå  s;   € ô ˜'¤3×'Ò'ÜÐ8Ó9Ð9äœ×-Ò-¨d¯j©j¸'ÓBÀaÑGÖHr   c               ó   € V ^8„  d   QhRR/# rù   r   )r   s   "r   r   rZ  ô  s   € ÷ 1ñ 1˜Sñ 1r   c                óB   € \         P                  ! V P                  4      # )zx
Return the version number of the certificate.

:return: The version number of the certificate.
:rtype: :py:class:`int`
)rQ   ÚX509_get_versionr¥  r’   s   &r   r  ÚX509.get_versionô  s   € ô ×$Ò$ T§Z¡ZÓ0Ð0r   c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   rZ  ý  s   € ÷ ñ ˜Dñ r   c                óJ  € \         P                  \         4      p\        P                  ! V P                  4      Vn        VP
                  \        P                  8X  d   \        4        \        P                  ! VP
                  \        P                  4      Vn        RVn        V# )z[
Get the public key of the certificate.

:return: The public key.
:rtype: :py:class:`PKey`
T)r3   r  rQ   ÚX509_get_pubkeyr¥  r©   rW   r\   rõ   r]   r¨   rµ   r«   s   & r   r  ÚX509.get_pubkeyý  sg   € ô �|‰|œDÓ!ˆÜ×)Ò)¨$¯*©*Ó5ˆŒ
Ø�:‰:œŸ™Ô"Ü Ô"Ü—W’W˜TŸZ™Z¬×);Ñ);Ó<ˆŒ
Ø ˆÔØˆr   c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   rZ    s   € ÷ )ñ )˜tð )¨ñ )r   c                óº   € \        V\        4      '       g   \        R4      h\        P                  ! V P
                  VP                  4      p\        V^8H  4       R# )z}
Set the public key of the certificate.

:param pkey: The public key.
:type pkey: :py:class:`PKey`

:return: :py:data:`None`
rT  N)rm   r3   rn   rQ   ÚX509_set_pubkeyr¥  r©   r[   r  s   && r   r  ÚX509.set_pubkey  sC   € ô ˜$¤×%Ò%ÜÐ:Ó;Ð;ä×)Ò)¨$¯*©*°d·j±jÓAˆ
Ü˜
 a™Ö(r   c               ó$   € V ^8„  d   QhRRRRRR/# rG  r   )r   s   "r   r   rZ    s!   € ÷ )ñ )˜ð ) sð )¨tñ )r   c                ó®  € \        V\        4      '       g   \        R4      hVP                  '       d   \	        R4      hVP
                  '       g   \	        R4      h\        P                  ! \        V4      4      pV\        P                  8X  d   \	        R4      h\        P                  ! V P                  VP                  V4      p\        V^ 8„  4       R# )zå
Sign the certificate with this key and digest type.

:param pkey: The key to sign with.
:type pkey: :py:class:`PKey`

:param digest: The name of the message digest to use.
:type digest: :py:class:`str`

:return: :py:data:`None`
rT  zKey only has public partrJ  rK  N)rm   r3   rn   rµ   rp   rª   rQ   rL  rY  rW   r\   Ú	X509_signr¥  r©   r[   )r“   r¬   rH  Úevp_mdrO  s   &&&  r   rP  Ú	X509.sign  s    € ô ˜$¤×%Ò%ÜÐ:Ó;Ð;à××ÐÜÐ7Ó8Ð8à× × Ð ÜÐ3Ó4Ð4ä×*Ò*¬<¸Ó+?Ó@ˆØ”T—Y‘YÔÜÐ4Ó5Ð5ä—n’n T§Z¡Z°·±¸VÓDˆÜ˜ a™Ö(r   c               ó   € V ^8„  d   QhRR/# r�  r   )r   s   "r   r   rZ  7  s   € ÷ 1ñ 1¨ñ 1r   c                ó¦  € \         P                  ! V P                  4      p\        P                  ! R4      p\         P
                  ! V\        P                  \        P                  V4       \         P                  ! V^ ,          4      pV\         P                  8X  d   \        R4      h\        P                  ! \         P                  ! V4      4      # )zÎ
Return the signature algorithm used in the certificate.

:return: The name of the algorithm.
:rtype: :py:class:`bytes`

:raises ValueError: If the signature algorithm is undefined.

.. versionadded:: 0.13
zASN1_OBJECT **zUndefined signature algorithm)rQ   ÚX509_get0_tbs_sigalgr¥  rW   rX   ÚX509_ALGOR_get0r\   r`  rZ  rp   r�   Ú
OBJ_nid2ln)r“   Úsig_algÚalgr  s   &   r   Úget_signature_algorithmÚX509.get_signature_algorithm7  s‡   € ô ×+Ò+¨D¯J©JÓ7ˆÜ�hŠhÐ'Ó(ˆÜ×Ò˜S¤$§)¡)¬T¯Y©Y¸Ô@Ü×Ò˜s 1�vÓ&ˆØ”$—.‘.Ô ÜÐ<Ó=Ð=Ü�{Š{œ4Ÿ?š?¨3Ó/Ó0Ð0r   c               ó    € V ^8„  d   QhRRRR/# )r   Údigest_namer   r   ra   r   )r   s   "r   r   rZ  J  s   € ÷ 
ñ 
 #ð 
¨%ñ 
r   c                ó$  € \         P                  ! \        V4      4      pV\        P                  8X  d   \        R4      h\        P                  ! R\         P                  4      p\        P                  ! R^4      p\        V4      V^ &   \         P                  ! V P                  W#V4      p\        V^8H  4       RP                  \        P                  ! W4^ ,          4       Uu. uF  p\        V4      P                  4       NK  	  up4      # u upi )zý
Return the digest of the X509 object.

:param digest_name: The name of the digest algorithm to use.
:type digest_name: :py:class:`str`

:return: The digest of the object, formatted as
    :py:const:`b":"`-delimited hex pairs.
:rtype: :py:class:`bytes`
rK  zunsigned char[]zunsigned int[]ó   :)rQ   rL  rY  rW   r\   rp   rX   ÚEVP_MAX_MD_SIZErZ   ÚX509_digestr¥  r[   rÂ  rH   r   Úupper)r“   r‘  rH  re   rß  Údigest_resultÚchs   &&     r   rH  ÚX509.digestJ  sà   € ô ×*Ò*¬<¸Ó+DÓEˆØ”T—Y‘YÔÜÐ4Ó5Ð5äŸšÐ!2´D×4HÑ4HÓIˆÜŸšÐ!1°1Ó5ˆÜ˜}Ó-ˆ�aÑä×(Ò(Ø�J‰J˜¨}ó
ˆô 	˜¨Ñ*Ô+à�y‰yô Ÿ+š+ mÀ1Õ5EÔFóáF�Bô ˜"“×#Ñ#Ö%ÙFñó
ð 	
ùòs   Ã$"Dc               ó   € V ^8„  d   QhRR/# rù   r   )r   s   "r   r   rZ  i  s   € ÷ 7ñ 7 3ñ 7r   c                óB   € \         P                  ! V P                  4      # )za
Return the hash of the X509 subject.

:return: The hash of the subject.
:rtype: :py:class:`int`
)rQ   ÚX509_subject_name_hashr¥  r’   s   &r   Úsubject_name_hashÚX509.subject_name_hashi  s   € ô ×*Ò*¨4¯:©:Ó6Ð6r   c               ó    € V ^8„  d   QhRRRR/# )r   Úserialr=   r   rk   r   )r   s   "r   r   rZ  r  s   € ÷ )ñ )¨ð )°ñ )r   c                ó�  € \        V\        4      '       g   \        R4      h\        V4      R,          pVP	                  R4      p\
        P                  ! R4      p\        P                  ! WC4      p\        V\
        P                  8g  4       \        P                  ! V^ ,          \
        P                  4      p\        P                  ! V^ ,          4       \        V\
        P                  8g  4       \
        P                  ! V\        P                  4      p\        P                  ! V P                   V4      p\        V^8H  4       R# )z‰
Set the serial number of the certificate.

:param serial: The new serial number.
:type serial: :py:class:`int`

:return: :py:data`None`
zserial must be an integer:r   NNr&  zBIGNUM**N)rm   r=   rn   Úhexrc  rW   rX   rQ   Ú	BN_hex2bnr[   r\   ÚBN_to_ASN1_INTEGERrÜ   r]   ÚASN1_INTEGER_freeÚX509_set_serialNumberr¥  )r“   r   Ú
hex_serialÚhex_serial_bytesÚbignum_serialrè   Úasn1_serialrq   s   &&      r   Úset_serial_numberÚX509.set_serial_numberr  sß   € ô ˜&¤#×&Ò&ÜÐ7Ó8Ð8ä˜“[ •_ˆ
Ø%×,Ñ,¨WÓ5ÐäŸš Ó,ˆô —’ Ó@ˆÜ˜¤$§)¡)Ñ+Ô,ä×-Ò-¨m¸AÕ.>ÄÇ	Á	ÓJˆÜ�Š�] 1Õ%Ô&Ü˜¤t§y¡yÑ0Ô1Ü—g’g˜k¬4×+AÑ+AÓBˆÜ×/Ò/°·
±
¸KÓHˆ
Ü˜
 a™Ö(r   c               ó   € V ^8„  d   QhRR/# rù   r   )r   s   "r   r   rZ  Ž  s   € ÷ (ñ ( 3ñ (r   c                óÈ  € \         P                  ! V P                  4      p\         P                  ! V\        P
                  4      p \         P                  ! V4      p \        P                  ! V4      p\        V^4      pV\         P                  ! V4       \         P                  ! V4       #   \         P                  ! T4       i ; i  \         P                  ! T4       i ; i)zX
Return the serial number of this certificate.

:return: The serial number.
:rtype: int
)rQ   ÚX509_get_serialNumberr¥  ÚASN1_INTEGER_to_BNrW   r\   Ú	BN_bn2hexr�   r=   rs  rÜ   )r“   rª  r©  r§  Úhexstring_serialr   s   &     r   Úget_serial_numberÚX509.get_serial_numberŽ  sž   € ô ×0Ò0°·±Ó<ˆÜ×/Ò/°¼T¿Y¹YÓGˆð		(ÜŸš¨Ó6ˆJð.Ü#'§;¢;¨zÓ#:Ð ÜÐ-¨rÓ2�Øä×!Ò! *Ô-ä�LŠL˜Õ'øô ×!Ò! *Õ-ûä�LŠL˜Õ'ús$   ÁC	 Á#B. ÂC	 Â.CÃC	 Ã	C!c               ó    € V ^8„  d   QhRRRR/# ©r   Úamountr=   r   rk   r   )r   s   "r   r   rZ  ¢  s   € ÷ /ñ /¨#ð /°$ñ /r   c                ó´   € \        V\        4      '       g   \        R4      h\        P                  ! V P
                  4      p\        P                  ! W!4       R# )z¥
Adjust the time stamp on which the certificate stops being valid.

:param int amount: The number of seconds by which to adjust the
    timestamp.
:return: ``None``
úamount must be an integerN)rm   r=   rn   rQ   ÚX509_getm_notAfterr¥  ÚX509_gmtime_adj)r“   r·  ÚnotAfters   && r   Úgmtime_adj_notAfterÚX509.gmtime_adj_notAfter¢  s?   € ô ˜&¤#×&Ò&ÜÐ7Ó8Ð8ä×*Ò*¨4¯:©:Ó6ˆÜ×Ò˜XÖ.r   c               ó    € V ^8„  d   QhRRRR/# r¶  r   )r   s   "r   r   rZ  °  s   € ÷ 0ñ 0¨3ð 0°4ñ 0r   c                ó´   € \        V\        4      '       g   \        R4      h\        P                  ! V P
                  4      p\        P                  ! W!4       R# )z�
Adjust the timestamp on which the certificate starts being valid.

:param amount: The number of seconds by which to adjust the timestamp.
:return: ``None``
r¹  N)rm   r=   rn   rQ   ÚX509_getm_notBeforer¥  r»  )r“   r·  Ú	notBefores   && r   Úgmtime_adj_notBeforeÚX509.gmtime_adj_notBefore°  s?   € ô ˜&¤#×&Ò&ÜÐ7Ó8Ð8ä×,Ò,¨T¯Z©ZÓ8ˆ	Ü×Ò˜YÖ/r   c               ó   € V ^8„  d   QhRR/# rí   r   )r   s   "r   r   rZ  ½  s   € ÷ "ñ "˜Tñ "r   c                ó<  € V P                  4       pVf   \        R4      hVP                  R4      p\        P                  P	                  VR4      p\        P
                  P                  p\        P                  P                  V4      P                  RR7      pW58  # )z�
Check whether the certificate has expired.

:return: ``True`` if the certificate has expired, ``False`` otherwise.
:rtype: bool
NzUnable to determine notAfterrT  z%Y%m%d%H%M%SZ)Útzinfo)	Úget_notAfterrp   r(  ÚdatetimeÚstrptimeÚtimezoneÚutcÚnowÚreplace)r“   Ú
time_bytesÚtime_stringÚ	not_afterÚUTCÚutcnows   &     r   Úhas_expiredÚX509.has_expired½  sŠ   € ð ×&Ñ&Ó(ˆ
ØÒÜÐ;Ó<Ð<Ø ×'Ñ'¨Ó0ˆÜ×%Ñ%×.Ñ.¨{¸OÓLˆ	ä×Ñ×#Ñ#ˆÜ×"Ñ"×&Ñ& sÓ+×3Ñ3¸4Ð3Ó@ˆØÑ!Ð!r   c               ó    € V ^8„  d   QhRRRR/# )r   Úwhichr   r   rI   r   )r   s   "r   r   rZ  Î  s   € ÷ 1ñ 1¨ð 1°ñ 1r   c                	ó8   € \        V! V P                  4      4      # r   )r‰   r¥  )r“   r×  s   &&r   Ú_get_boundary_timeÚX509._get_boundary_timeÎ  s   € Ü™e D§J¡JÓ/Ó0Ð0r   c               ó   € V ^8„  d   QhRR/# ©r   r   rI   r   )r   s   "r   r   rZ  Ñ  s   € ÷ Añ A˜|ñ Ar   c                ó@   € V P                  \        P                  4      # )zÚ
Get the timestamp at which the certificate starts being valid.

The timestamp is formatted as an ASN.1 TIME::

    YYYYMMDDhhmmssZ

:return: A timestamp string, or ``None`` if there is none.
:rtype: bytes or NoneType
)rÙ  rQ   rÁ  r’   s   &r   Úget_notBeforeÚX509.get_notBeforeÑ  s   € ð ×&Ñ&¤t×'?Ñ'?Ó@Ð@r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r×  zCallable[..., Any]rj   ra   r   rk   r   )r   s   "r   r   rZ  Þ  s$   € ÷ 7ñ 7Ø'ð7Ø/4ð7à	ñ7r   c                	ó:   € \        V! V P                  4      V4      # r   )rr   r¥  )r“   r×  rj   s   &&&r   Ú_set_boundary_timeÚX509._set_boundary_timeÞ  s   € ô ™e D§J¡JÓ/°Ó6Ð6r   c               ó    € V ^8„  d   QhRRRR/# ©r   rj   ra   r   rk   r   )r   s   "r   r   rZ  ã  s   € ÷ Gñ G %ð G¨Dñ Gr   c                óB   € V P                  \        P                  V4      # )z¾
Set the timestamp at which the certificate starts being valid.

The timestamp is formatted as an ASN.1 TIME::

    YYYYMMDDhhmmssZ

:param bytes when: A timestamp string.
:return: ``None``
)râ  rQ   rÁ  ©r“   rj   s   &&r   Úset_notBeforeÚX509.set_notBeforeã  s   € ð ×&Ñ&¤t×'?Ñ'?ÀÓFÐFr   c               ó   € V ^8„  d   QhRR/# rÜ  r   )r   s   "r   r   rZ  ð  s   € ÷ @ñ @˜lñ @r   c                ó@   € V P                  \        P                  4      # )zÙ
Get the timestamp at which the certificate stops being valid.

The timestamp is formatted as an ASN.1 TIME::

    YYYYMMDDhhmmssZ

:return: A timestamp string, or ``None`` if there is none.
:rtype: bytes or NoneType
)rÙ  rQ   rº  r’   s   &r   rÈ  ÚX509.get_notAfterð  s   € ð ×&Ñ&¤t×'>Ñ'>Ó?Ð?r   c               ó    € V ^8„  d   QhRRRR/# rå  r   )r   s   "r   r   rZ  ý  s   € ÷ Fñ F ð F¨4ñ Fr   c                óB   € V P                  \        P                  V4      # )z½
Set the timestamp at which the certificate stops being valid.

The timestamp is formatted as an ASN.1 TIME::

    YYYYMMDDhhmmssZ

:param bytes when: A timestamp string.
:return: ``None``
)râ  rQ   rº  rç  s   &&r   Úset_notAfterÚX509.set_notAfterý  s   € ð ×&Ñ&¤t×'>Ñ'>ÀÓEÐEr   c               ó    € V ^8„  d   QhRRRR/# )r   r×  r   r   r5   r   )r   s   "r   r   rZ  
  s   € ÷ 	ñ 	˜sð 	 xñ 	r   c                	ó¾   € \         P                  \         4      pV! V P                  4      Vn        \	        VP                  \
        P                  8g  4       Wn        V# r   )r5   r  r¥  r    r[   rW   r\   r   )r“   r×  r˜   s   && r   Ú	_get_nameÚX509._get_name
  sC   € Ü×Ñ¤Ó)ˆÙ˜4Ÿ:™:Ó&ˆŒ
Ü˜Ÿ
™
¤d§i¡iÑ/Ô0ð Œàˆr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r×  r   r˜   r5   r   rk   r   )r   s   "r   r   rZ    s!   € ÷ )ñ )˜sð )¨(ð )°tñ )r   c                	óž   € \        V\        4      '       g   \        R 4      hV! V P                  VP                  4      p\        V^8H  4       R# )zname must be an X509NameN)rm   r5   rn   r¥  r    r[   )r“   r×  r˜   rq   s   &&& r   Ú	_set_nameÚX509._set_name  s;   € Ü˜$¤×)Ò)ÜÐ6Ó7Ð7Ù˜4Ÿ:™: t§z¡zÓ2ˆ
Ü˜
 a™Ö(r   c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   rZ    s   € ÷ ñ ˜Hñ r   c                óz   € V P                  \        P                  4      pV P                  P	                  V4       V# )ae  
Return the issuer of this certificate.

This creates a new :class:`X509Name` that wraps the underlying issuer
name field on the certificate. Modifying it will modify the underlying
certificate, and will have the effect of modifying any other
:class:`X509Name` that refers to this issuer.

:return: The issuer of this certificate.
:rtype: :class:`X509Name`
)ró  rQ   ÚX509_get_issuer_namer^  rœ   r›   s   & r   Ú
get_issuerÚX509.get_issuer  s1   € ð �~‰~œd×7Ñ7Ó8ˆØ× Ñ ×$Ñ$ TÔ*Øˆr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r5   r   rk   r   )r   s   "r   r   rZ  +  s   € ÷ 
)ñ 
) ð 
)¨dñ 
)r   c                óz   € V P                  \        P                  V4       V P                  P	                  4        R# )zw
Set the issuer of this certificate.

:param issuer: The issuer.
:type issuer: :py:class:`X509Name`

:return: ``None``
N)r÷  rQ   ÚX509_set_issuer_namer^  r¡   )r“   r   s   &&r   Ú
set_issuerÚX509.set_issuer+  s*   € ð 	�‰”t×0Ñ0°&Ô9Ø× Ñ ×&Ñ&Ö(r   c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   rZ  7  s   € ÷ ñ ˜Xñ r   c                óz   € V P                  \        P                  4      pV P                  P	                  V4       V# )ai  
Return the subject of this certificate.

This creates a new :class:`X509Name` that wraps the underlying subject
name field on the certificate. Modifying it will modify the underlying
certificate, and will have the effect of modifying any other
:class:`X509Name` that refers to this subject.

:return: The subject of this certificate.
:rtype: :class:`X509Name`
)ró  rQ   ÚX509_get_subject_namer_  rœ   r›   s   & r   r!  ÚX509.get_subject7  s1   € ð �~‰~œd×8Ñ8Ó9ˆØ×!Ñ!×%Ñ% dÔ+Øˆr   c               ó    € V ^8„  d   QhRRRR/# )r   rŸ  r5   r   rk   r   )r   s   "r   r   rZ  G  s   € ÷ 
*ñ 
* 8ð 
*°ñ 
*r   c                óz   € V P                  \        P                  V4       V P                  P	                  4        R# )z{
Set the subject of this certificate.

:param subject: The subject.
:type subject: :py:class:`X509Name`

:return: ``None``
N)r÷  rQ   ÚX509_set_subject_namer_  r¡   )r“   rŸ  s   &&r   Úset_subjectÚX509.set_subjectG  s*   € ð 	�‰”t×1Ñ1°7Ô;Ø×!Ñ!×'Ñ'Ö)r   c               ó   € V ^8„  d   QhRR/# rù   r   )r   s   "r   r   rZ  S  s   € ÷ 	3ñ 	3 Sñ 	3r   c                óB   € \         P                  ! V P                  4      # )z‡
Get the number of extensions on this certificate.

:return: The number of extensions.
:rtype: :py:class:`int`

.. versionadded:: 0.12
)rQ   ÚX509_get_ext_countr¥  r’   s   &r   Úget_extension_countÚX509.get_extension_countS  s   € ô ×&Ò& t§z¡zÓ2Ð2r   c               ó    € V ^8„  d   QhRRRR/# r$  r   )r   s   "r   r   rZ  ^  s   € ÷ -ñ -Ð)@ð -ÀTñ -r   c                ó  € \         P                  ! R\        ^R7       V F^  p\        V\        4      '       g   \        R4      h\        P                  ! V P                  VP                  R4      p\        V^8H  4       K`  	  R# )z¥
Add extensions to the certificate.

:param extensions: The extensions to add.
:type extensions: An iterable of :py:class:`X509Extension` objects.
:return: ``None``
r'  r(  r*  NrU  )r+  r,  r-  rm   r4   rp   rQ   ÚX509_add_extr¥  rª  r[   )r“   r%  r3  rj  s   &&  r   r4  ÚX509.add_extensions^  sj   € ô 	�Šð&ô Øõ	
ó ˆCÜ˜c¤=×1Ò1Ü Ð!NÓOÐOä×*Ò*¨4¯:©:°s·~±~ÀrÓJˆJÜ˜J¨!™OÖ,ó r   c               ó    € V ^8„  d   QhRRRR/# )r   Úindexr=   r   r4   r   )r   s   "r   r   rZ  w  s   € ÷ ñ  3ð ¨=ñ r   c                ó¦  € \         P                  ! R\        ^R7       \        P	                  \        4      p\
        P                  ! V P                  V4      Vn        VP                  \        P                  8X  d   \        R4      h\
        P                  ! VP                  4      p\        P                  ! V\
        P                  4      Vn        V# )a‡  
Get a specific extension of the certificate by index.

Extensions on a certificate are kept in order. The index
parameter selects which extension will be returned.

:param int index: The index of the extension to retrieve.
:return: The extension at the specified index.
:rtype: :py:class:`X509Extension`
:raises IndexError: If the extension index was out of bounds.

.. versionadded:: 0.12
r'  r(  zextension index out of bounds)r+  r,  r-  r4   r  rQ   ÚX509_get_extr¥  rª  rW   r\   Ú
IndexErrorr@  r]   r©  )r“   r  r3  r¬  s   &&  r   Úget_extensionÚX509.get_extensionw  s”   € ô 	�Šð&ô Øõ	
ô ×#Ñ#¤MÓ2ˆÜ×*Ò*¨4¯:©:°uÓ=ˆŒØ�>‰>œTŸY™YÔ&ÜÐ<Ó=Ð=ä×+Ò+¨C¯N©NÓ;ˆ	ÜŸš ¬D×,DÑ,DÓEˆŒØˆ
r   )r^  r_  r¥  N)'rA   rB   rC   rD   rE   r”   r  rd  rù  r  rð  r  r  r  rP  rŽ  rH  r�  r«  r³  r½  rÃ  rÔ  rÙ  rÞ  râ  rè  rÈ  rï  ró  r÷  rü  r  r!  r
  r  r4  r  rF   r   r   r   r1   r1   ¯  sÏ   † ñõ;ð ôó ðõ.ð ô4ó ð4õ&Iõ1õõ)õ)õ81õ&
õ>7õ)õ8(õ(/õ0õ"õ"1õAõ7õ
Gõ@õFõ	õ)õõ 
)õõ 
*õ	3õ-÷2ñ r   c                  óp  € ] tR tRt$ Rt]P                  tR]R&   ]P                  t
R]R&   ]P                  tR]R&   ]P                  tR]R&   ]P                  tR]R&   ]P"                  tR]R	&   ]P&                  tR]R
&   ]P*                  tR]R&   ]P.                  tR]R&   ]P2                  tR]R&   RtR# )r:   i™  zó
Flags for X509 verification, used to change the behavior of
:class:`X509Store`.

See `OpenSSL Verification Flags`_ for details.

.. _OpenSSL Verification Flags:
    https://www.openssl.org/docs/manmaster/man3/X509_VERIFY_PARAM_set_flags.html
r=   Ú	CRL_CHECKÚCRL_CHECK_ALLÚIGNORE_CRITICALÚX509_STRICTÚALLOW_PROXY_CERTSÚPOLICY_CHECKÚEXPLICIT_POLICYÚINHIBIT_MAPÚCHECK_SS_SIGNATUREÚPARTIAL_CHAINr   N)rA   rB   rC   rD   rE   rQ   ÚX509_V_FLAG_CRL_CHECKr  rç  ÚX509_V_FLAG_CRL_CHECK_ALLr  ÚX509_V_FLAG_IGNORE_CRITICALr  ÚX509_V_FLAG_X509_STRICTr   ÚX509_V_FLAG_ALLOW_PROXY_CERTSr!  ÚX509_V_FLAG_POLICY_CHECKr"  ÚX509_V_FLAG_EXPLICIT_POLICYr#  ÚX509_V_FLAG_INHIBIT_MAPr$  ÚX509_V_FLAG_CHECK_SS_SIGNATUREr%  ÚX509_V_FLAG_PARTIAL_CHAINr&  rF   r   r   r   r:   r:   ™  s«   ‡ ñð ×/Ñ/€IˆsÓ/Ø×7Ñ7€M�3Ó7Ø×;Ñ;€O�SÓ;Ø×3Ñ3€K�Ó3Ø!×?Ñ?Ð�sÓ?Ø×5Ñ5€L�#Ó5Ø×;Ñ;€O�SÓ;Ø×3Ñ3€K�Ó3Ø"×AÑAÐ˜ÓAØ×7Ñ7€M�3×7r   c                  óf   € ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	RR R llt
RtR# )r7   i°  a–  
An X.509 store.

An X.509 store is used to describe a context in which to verify a
certificate. A description of a context may include a set of certificates
to trust, a set of certificate revocation lists, verification flags and
more.

An X.509 store, being only a description, cannot be used by itself to
verify a certificate. To carry out the actual verification process, see
:class:`X509StoreContext`.
c               ó   € V ^8„  d   QhRR/# r�   r   )r   s   "r   r   ÚX509Store.__annotate__¾  s   € ÷ ;ñ ;˜$ñ ;r   c                	ó„   € \         P                  ! 4       p\        P                  ! V\         P                  4      V n        R # r   )rQ   ÚX509_STORE_newrW   r]   ÚX509_STORE_freeÚ_store©r“   Ústores   & r   r”   ÚX509Store.__init__¾  s(   € Ü×#Ò#Ó%ˆÜ—g’g˜e¤T×%9Ñ%9Ó:ˆŽr   c               ó    € V ^8„  d   QhRRRR/# )r   rc  r1   r   rk   r   )r   s   "r   r   r3  Â  s   € ÷ "ñ "˜Tð " dñ "r   c                ó¸   € \        V\        4      '       g   \        4       h\        P                  ! V P
                  VP                  4      p\        V^8H  4       R# )aŒ  
Adds a trusted certificate to this store.

Adding a certificate with this method adds this certificate as a
*trusted* certificate.

:param X509 cert: The certificate to add to this store.

:raises TypeError: If the certificate is not an :class:`X509`.

:raises OpenSSL.crypto.Error: If OpenSSL was unhappy with your
    certificate.

:return: ``None`` if the certificate was added successfully.
N)rm   r1   rn   rQ   ÚX509_STORE_add_certr7  r¥  r[   )r“   rc  ré   s   && r   Úadd_certÚX509Store.add_certÂ  s?   € ô  ˜$¤×%Ò%Ü“+Ðä×&Ò& t§{¡{°D·J±JÓ?ˆÜ˜˜q™Ö!r   c               ó    € V ^8„  d   QhRRRR/# )r   Úcrlzx509.CertificateRevocationListr   rk   r   )r   s   "r   r   r3  Ø  s   € ÷ Hñ HÐ9ð H¸dñ Hr   c                óØ  € \        V\        P                  4      '       d’   ^ RIHp \        VP                  VP                  4      4      p\        P                  ! V\        P                  4      p\        V\        P                  8g  4       \        P                  ! V\        P                  4      pM\        R4      h\        \        P                   ! V P"                  V4      ^ 8g  4       R# )a®  
Add a certificate revocation list to this store.

The certificate revocation lists added to a store will only be used if
the associated flags are configured to check certificate revocation
lists.

.. versionadded:: 16.1.0

:param crl: The certificate revocation list to add to this store.
:type crl: ``cryptography.x509.CertificateRevocationList``
:return: ``None`` if the certificate revocation list was added
    successfully.
rþ  z?CRL must be of type cryptography.x509.CertificateRevocationListN)rm   r    ÚCertificateRevocationListr´   r¿   r_   rÎ   rÏ   rQ   Úd2i_X509_CRL_biorW   r\   r[   r]   ÚX509_CRL_freern   ÚX509_STORE_add_crlr7  )r“   rA  r¿   rM   Úopenssl_crls   &&   r   Úadd_crlÚX509Store.add_crlØ  s¢   € ô �cœ4×9Ñ9×:Ò:ÝMä˜s×/Ñ/°·±Ó=Ó>ˆCÜ×/Ò/°´T·Y±YÓ?ˆKÜ˜K¬4¯9©9Ñ4Ô5Ü—'’'˜+¤t×'9Ñ'9Ó:‰Cäð>óð ô
 	œ×/Ò/°·±¸SÓAÀQÑFÖGr   c               ó    € V ^8„  d   QhRRRR/# )r   Úflagsr=   r   rk   r   )r   s   "r   r   r3  ö  s   € ÷ Lñ L˜sð L tñ Lr   c                ó`   € \        \        P                  ! V P                  V4      ^ 8g  4       R# )ab  
Set verification flags to this store.

Verification flags can be combined by oring them together.

.. note::

  Setting a verification flag sometimes requires clients to add
  additional information to the store, otherwise a suitable error will
  be raised.

  For example, in setting flags to enable CRL checking a
  suitable CRL must be added to the store otherwise an error will be
  raised.

.. versionadded:: 16.1.0

:param int flags: The verification flags to set on this store.
    See :class:`X509StoreFlags` for available constants.
:return: ``None`` if the verification flags were successfully set.
N)r[   rQ   ÚX509_STORE_set_flagsr7  )r“   rK  s   &&r   Ú	set_flagsÚX509Store.set_flagsö  s"   € ô, 	œ×1Ò1°$·+±+¸uÓEÈÑJÖKr   c               ó    € V ^8„  d   QhRRRR/# )r   Úvfy_timezdatetime.datetimer   rk   r   )r   s   "r   r   r3    s   € ÷ Mñ MÐ!2ð M°tñ Mr   c                óF  € \         P                  ! 4       p\        P                  ! V\         P                  4      p\         P
                  ! V\        P                  ! VP                  4       4      4       \        \         P                  ! V P                  V4      ^ 8g  4       R# )a\  
Set the time against which the certificates are verified.

Normally the current time is used.

.. note::

  For example, you can determine if a certificate was valid at a given
  time.

.. versionadded:: 17.0.0

:param datetime vfy_time: The verification time to set on this store.
:return: ``None`` if the verification time was successfully set.
N)rQ   ÚX509_VERIFY_PARAM_newrW   r]   ÚX509_VERIFY_PARAM_freeÚX509_VERIFY_PARAM_set_timeÚcalendarÚtimegmÚ	timetupler[   ÚX509_STORE_set1_paramr7  )r“   rQ  Úparams   && r   Úset_timeÚX509Store.set_time  sm   € ô  ×*Ò*Ó,ˆÜ—’˜œt×:Ñ:Ó;ˆä×'Ò'Ø”8—?’? 8×#5Ñ#5Ó#7Ó8ô	
ô 	œ×2Ò2°4·;±;ÀÓFÈ!ÑKÖLr   Nc               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚcafilezStrOrBytesPath | NoneÚcapathr   rk   r   )r   s   "r   r   r3  &  s(   € ÷ 1#ñ 1#à%ð1#ð &ð1#ð 
ñ	1#r   c                óð   € Vf   \         P                  pM\        V4      pVf   \         P                  pM\        V4      p\        P                  ! V P
                  W4      pV'       g   \        4        R# R# )aè  
Let X509Store know where we can find trusted certificates for the
certificate chain.  Note that the certificates have to be in PEM
format.

If *capath* is passed, it must be a directory prepared using the
``c_rehash`` tool included with OpenSSL.  Either, but not both, of
*cafile* or *capath* may be ``None``.

.. note::

  Both *cafile* and *capath* may be set simultaneously.

  Call this method multiple times to add more than one location.
  For example, CA certificates, and certificate revocation list bundles
  may be passed in *cafile* in subsequent calls to this method.

.. versionadded:: 20.0

:param cafile: In which file we can find the certificates (``bytes`` or
               ``unicode``).
:param capath: In which directory we can find the certificates
               (``bytes`` or ``unicode``).

:return: ``None`` if the locations were set successfully.

:raises OpenSSL.crypto.Error: If both *cafile* and *capath* is ``None``
    or the locations could not be set for any reason.

N)rW   r\   Ú_path_bytesrQ   ÚX509_STORE_load_locationsr7  rõ   )r“   r^  r_  Úload_results   &&& r   Úload_locationsÚX509Store.load_locations&  s^   € ðF Š>Ü—Y‘Y‰Fä  Ó(ˆFàŠ>Ü—Y‘Y‰Fä  Ó(ˆFä×4Ò4Ø�K‰K˜ó
ˆ÷ Ü Ö"ñ r   ©r7  r   )rA   rB   rC   rD   rE   r”   r>  rH  rN  r[  rd  rF   r   r   r   r7   r7   °  s-   † ñõ;õ"õ,Hõ<Lõ0M÷01#ó 1#r   c                  ó2   a € ] tR tRtRtR V 3R lltRtV ;t# )r9   iZ  zå
An exception raised when an error occurred while verifying a certificate
using `OpenSSL.X509StoreContext.verify_certificate`.

:ivar certificate: The certificate which caused verificate failure.
:type certificate: :class:`X509`
c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úmessager   Úerrorsz	list[Any]Úcertificater1   r   rk   r   )r   s   "r   r   Ú"X509StoreContextError.__annotate__c  s,   € ÷ 'ñ 'Øð'Ø$-ð'Ø<@ð'à	ñ'r   c                	ó>   <€ \         SV `  V4       W n        W0n        R # r   )r	  r”   rj  rk  )r“   ri  rj  rk  r  s   &&&&€r   r”   ÚX509StoreContextError.__init__c  s   ø€ ô 	‰Ñ˜Ô!ØŒØ&Ör   )rk  rj  )rA   rB   rC   rD   rE   r”   rF   r>  r?  s   @r   r9   r9   Z  s   ø† ñ÷'ö 'r   c                  ó†   € ] tR tRtRtRR R llt]R R l4       t]R R	 l4       tR
 R lt	R R lt
R R ltR R ltRtR# )r8   ik  a  
An X.509 store context.

An X.509 store context is used to carry out the actual verification process
of a certificate in a described context. For describing such a context, see
:class:`X509Store`.

:param X509Store store: The certificates which will be trusted for the
    purposes of any verifications.
:param X509 certificate: The certificate to be verified.
:param chain: List of untrusted certificates that may be used for building
    the certificate chain. May be ``None``.
:type chain: :class:`list` of :class:`X509`
Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r9  r7   rk  r1   ÚchainúSequence[X509] | Noner   rk   r   )r   s   "r   r   ÚX509StoreContext.__annotate__{  s2   € ÷ ;ñ ;àð;ð ð;ð %ð	;ð
 
ñ;r   c                	óJ   € Wn         W n        V P                  V4      V n        R # r   )r7  Ú_certÚ_build_certificate_stackÚ_chain)r“   r9  rk  rq  s   &&&&r   r”   ÚX509StoreContext.__init__{  s    € ð ŒØ Œ
Ø×3Ñ3°EÓ:ˆŽr   c               ó    € V ^8„  d   QhRRRR/# )r   Úcertificatesrr  r   rk   r   )r   s   "r   r   rs  †  s   € ÷ ñ Ø+ðà	ñr   c                	ó6  € R  R lpV e   \        V 4      ^ 8X  d   \        P                  # \        P                  ! 4       p\        V\        P                  8g  4       \        P                  ! W!4      pV  F¡  p\        V\        4      '       g   \        R4      h\        \        P                  ! VP                  4      ^ 8„  4       \        P                  ! W#P                  4      ^ 8:  g   Kw  \        P                  ! VP                  4       \        4        K£  	  V# )c               ó    € V ^8„  d   QhRRRR/# )r   Úsr   r   rk   r   )r   s   "r   r   Ú?X509StoreContext._build_certificate_stack.<locals>.__annotate__‰  s   € ÷ 	!ñ 	!�sð 	!˜tñ 	!r   c                óÖ   € \        \        P                  ! V 4      4       F/  p\        P                  ! W4      p\        P                  ! V4       K1  	  \        P
                  ! V 4       R # r   )r\  rQ   Úsk_X509_numÚsk_X509_valuer]  Úsk_X509_free)r}  rf  r<  s   &  r   ÚcleanupÚ:X509StoreContext._build_certificate_stack.<locals>.cleanup‰  sJ   € ô œ4×+Ò+¨AÓ.Ö/�Ü×&Ò& qÓ,�Ü—’˜qÖ!ñ 0ô ×Ò˜aÖ r   z+One of the elements is not an X509 instance)rZ   rW   r\   rQ   Úsk_X509_new_nullr[   r]   rm   r1   rn   ÚX509_up_refr¥  Úsk_X509_pushr]  rõ   )rz  rƒ  r2  rc  s   &   r   rv  Ú)X509StoreContext._build_certificate_stack…  sÅ   € õ	!ð Ò¤3 |Ó#4¸Ô#9Ü—9‘9Ðä×%Ò%Ó'ˆÜ˜¤§¡Ñ*Ô+Ü—’˜Ó'ˆã ˆDÜ˜d¤D×)Ò)ÜÐ MÓNÐNäœD×,Ò,¨T¯Z©ZÓ8¸1Ñ<Ô=Ü× Ò  ¯
©
Ó3°qÖ8Ü—’˜tŸz™zÔ*Ü$Ö&ñ !ð ˆr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	store_ctxr   r   r9   r   )r   s   "r   r   rs  ¤  s   € ÷ >ñ >¨3ð >Ð3Hñ >r   c                ó�  € \         P                  ! \        P                  ! \        P                  ! V 4      4      4      P                  R4      p\        P                  ! V 4      \        P                  ! V 4      V.p\        P                  ! V 4      p\        P                  ! V4      p\        P                  V4      p\        WV4      # )zÒ
Convert an OpenSSL native context error failure into a Python
exception.

When a call to native OpenSSL X509_verify_cert fails, additional
information about the failure can be obtained from the store context.
rT  )rW   r�   rQ   ÚX509_verify_cert_error_stringÚX509_STORE_CTX_get_errorr(  ÚX509_STORE_CTX_get_error_depthÚX509_STORE_CTX_get_current_certÚX509_dupr1   rd  r9   )rŠ  ri  rj  r¥  ru  Úpycerts   &     r   Ú_exception_from_contextÚ(X509StoreContext._exception_from_context£  s¡   € ô —+’+Ü×.Ò.Ü×-Ò-¨iÓ8óó
÷ ‰&�‹/ð	 	ô ×)Ò)¨)Ó4Ü×/Ò/°	Ó:Øð
ˆô ×4Ò4°YÓ?ˆÜ—’˜eÓ$ˆÜ×(Ñ(¨Ó/ˆÜ$ W°fÓ=Ð=r   c               ó   € V ^8„  d   QhRR/# r7  r   )r   s   "r   r   rs  ½  s   € ÷ ñ  Sñ r   c                ó¾  € \         P                  ! 4       p\        V\        P                  8g  4       \        P
                  ! V\         P                  4      p\         P                  ! WP                  P                  V P                  P                  V P                  4      p\        V^8H  4       \         P                  ! V4      pV^ 8:  d   V P                  V4      hV# )a  
Verifies the certificate and runs an X509_STORE_CTX containing the
results.

:raises X509StoreContextError: If an error occurred when validating a
  certificate in the context. Sets ``certificate`` attribute to
  indicate which certificate caused the error.
)rQ   ÚX509_STORE_CTX_newr[   rW   r\   r]   ÚX509_STORE_CTX_freeÚX509_STORE_CTX_initr7  ru  r¥  rw  ÚX509_verify_certr’  )r“   rŠ  rw   s   &  r   Ú_verify_certificateÚ$X509StoreContext._verify_certificate½  s¤   € ô ×+Ò+Ó-ˆ	Ü˜	¤T§Y¡YÑ.Ô/Ü—G’G˜I¤t×'?Ñ'?Ó@ˆ	ä×&Ò&Ø—{‘{×)Ñ)¨4¯:©:×+;Ñ+;¸T¿[¹[ó
ˆô 	˜˜q™Ô!ä×#Ò# IÓ.ˆØ�!Œ8Ø×.Ñ.¨yÓ9Ð9àÐr   c               ó    € V ^8„  d   QhRRRR/# )r   r9  r7   r   rk   r   )r   s   "r   r   rs  Õ  s   € ÷ 	ñ 	˜yð 	¨Tñ 	r   c                ó   € Wn         R# )z®
Set the context's X.509 store.

.. versionadded:: 0.15

:param X509Store store: The store description which will be used for
    the purposes of any *future* verifications.
Nrf  r8  s   &&r   Ú	set_storeÚX509StoreContext.set_storeÕ  s	   € ð Žr   c               ó   € V ^8„  d   QhRR/# r�   r   )r   s   "r   r   rs  à  s   € ÷ 
#ñ 
# Dñ 
#r   c                ó&   € V P                  4        R# )zò
Verify a certificate in a context.

.. versionadded:: 0.15

:raises X509StoreContextError: If an error occurred when validating a
  certificate in the context. Sets ``certificate`` attribute to
  indicate which certificate caused the error.
N)rš  r’   s   &r   Úverify_certificateÚ#X509StoreContext.verify_certificateà  s   € ð 	× Ñ Ö"r   c               ó   € V ^8„  d   QhRR/# )r   r   z
list[X509]r   )r   s   "r   r   rs  ì  s   € ÷ ñ  Jñ r   c                ó¶  € V P                  4       p\        P                  ! V4      p\        V\        P
                  8g  4       . p\        \        P                  ! V4      4       F[  p\        P                  ! W$4      p\        V\        P
                  8g  4       \        P                  V4      pVP                  V4       K]  	  \        P                  ! V4       V# )a  
Verify a certificate in a context and return the complete validated
chain.

:raises X509StoreContextError: If an error occurred when validating a
  certificate in the context. Sets ``certificate`` attribute to
  indicate which certificate caused the error.

.. versionadded:: 20.0
)rš  rQ   ÚX509_STORE_CTX_get1_chainr[   rW   r\   r\  r€  r�  r1   rd  rš   r‚  )r“   rŠ  Ú
cert_stackrè   rf  rc  r‘  s   &      r   Úget_verified_chainÚ#X509StoreContext.get_verified_chainì  s¦   € ð ×,Ñ,Ó.ˆ	ô ×3Ò3°IÓ>ˆ
Ü˜
¤d§i¡iÑ/Ô0àˆÜ”t×'Ò'¨
Ó3Ö4ˆAÜ×%Ò% jÓ4ˆDÜ˜D¤D§I¡IÑ-Ô.Ü×,Ñ,¨TÓ2ˆFØ�M‰M˜&Ö!ñ	 5ô 	×Ò˜*Ô%Øˆr   )ru  rw  r7  r   )rA   rB   rC   rD   rE   r”   Ústaticmethodrv  r’  rš  rž  r¢  r¨  rF   r   r   r   r8   r8   k  sM   † ñ÷;ð ôó ðð: ô>ó ð>õ2õ0	õ
#÷ñ r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ   r=   rH   ra   r   r1   r   )r   s   "r   r   r   	  s!   € ÷ )ñ )˜3ð )¨ð )°$ñ )r   c                óä  € \        V\        4      '       d   VP                  R4      p\        V4      pV \        8X  dE   \
        P                  ! V\        P                  \        P                  \        P                  4      pM<V \        8X  d'   \
        P                  ! V\        P                  4      pM\        R4      hV\        P                  8X  d   \        4        \        P                  V4      # )zë
Load a certificate (X509) from the string *buffer* encoded with the
type *type*.

:param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)

:param bytes buffer: The buffer the certificate is stored in

:return: The X509 object
r&  ú3type argument must be FILETYPE_PEM or FILETYPE_ASN1)rm   r   rc  r_   r.   rQ   ÚPEM_read_bio_X509rW   r\   r-   Úd2i_X509_biorp   rõ   r1   rd  )rØ   rH   rM   r    s   &&  r   rp  rp  	  s    € ô �&œ#×ÒØ—‘˜wÓ'ˆä
�vÓ
€CàŒ|ÔÜ×%Ò% c¬4¯9©9´d·i±iÄÇÁÓK‰Ø	”Ô	Ü× Ò  ¤d§i¡iÓ0‰äÐNÓOÐOàŒt�y‰yÔÜÔä×"Ñ" 4Ó(Ð(r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ   r=   rc  r1   r   ra   r   )r   s   "r   r   r   &  s!   € ÷ ñ ˜3ð  dð ¨uñ r   c                ój  € \        4       pV \        8X  d"   \        P                  ! W!P                  4      pMeV \
        8X  d"   \        P                  ! W!P                  4      pM9V \        8X  d$   \        P                  ! W!P                  ^ ^ 4      pM\        R4      h\        V^8H  4       \        V4      # )zÿ
Dump the certificate *cert* into a buffer string encoded with the type
*type*.

:param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1, or
    FILETYPE_TEXT)
:param cert: The certificate to dump
:return: The buffer with the dumped certificate in
úCtype argument must be FILETYPE_PEM, FILETYPE_ASN1, or FILETYPE_TEXT)r_   r.   rQ   ÚPEM_write_bio_X509r¥  r-   Úi2d_X509_bioÚFILETYPE_TEXTÚX509_print_exrp   r[   rg   )rØ   rc  rM   Úresult_codes   &&  r   rj  rj  &  s�   € ô ‹.€CàŒ|ÔÜ×-Ò-¨c·:±:Ó>‰Ø	”Ô	Ü×'Ò'¨¯Z©ZÓ8‰Ø	”Ô	Ü×(Ò(¨¯j©j¸!¸QÓ?‰äðó
ð 	
ô
 �K 1Ñ$Ô%Ü˜#ÓÐr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ   r=   r¬   r3   r   ra   r   )r   s   "r   r   r   B  s!   € ÷ ñ ˜ð  Dð ¨Uñ r   c                óø   € \        4       pV \        8X  d   \        P                  pM'V \        8X  d   \        P
                  pM\        R4      hV! W!P                  4      pV^8w  d   \        4        \        V4      # )zÞ
Dump a public key to a buffer.

:param type: The file type (one of :data:`FILETYPE_PEM` or
    :data:`FILETYPE_ASN1`).
:param PKey pkey: The public key to dump
:return: The buffer with the dumped key in it.
:rtype: bytes
r­  )
r_   r.   rQ   ÚPEM_write_bio_PUBKEYr-   Úi2d_PUBKEY_biorp   r©   rõ   rg   )rØ   r¬   rM   Ú	write_bior·  s   &&   r   r¶   r¶   B  sd   € ô ‹.€CØŒ|ÔÜ×-Ñ-‰	Ø	”Ô	Ü×'Ñ'‰	äÐNÓOÐOá˜C§¡Ó,€KØ�aÔÜÔä˜#ÓÐr   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   rØ   r=   r¬   r3   Úcipherrm  Ú
passphraseúPassphraseCallableT | Noner   ra   r   )r   s   "r   r   r   [  sA   € ÷ Bñ BØ
ðBà
ðBð ðBð +ð	Bð
 ñBr   c           	     óä  € \        4       p\        V\        4      '       g   \        R4      hVeP   Vf   \        R4      h\        P
                  ! \        V4      4      pV\        P                  8X  d   \        R4      hM\        P                  p\        W4      pV \        8X  dZ   \        P                  ! VVP                  V\        P                  ^ VP                  VP                  4      pVP!                  4        MÛV \"        8X  d"   \        P$                  ! WAP                  4      pM¯V \&        8X  dš   \        P(                  ! VP                  4      \        P*                  8w  d   \        R4      h\        P,                  ! \        P.                  ! VP                  4      \        P0                  4      p\        P2                  ! WH^ 4      pM\        R4      h\5        V^ 8g  4       \7        V4      # )aU  
Dump the private key *pkey* into a buffer string encoded with the type
*type*.  Optionally (if *type* is :const:`FILETYPE_PEM`) encrypting it
using *cipher* and *passphrase*.

:param type: The file type (one of :const:`FILETYPE_PEM`,
    :const:`FILETYPE_ASN1`, or :const:`FILETYPE_TEXT`)
:param PKey pkey: The PKey to dump
:param cipher: (optional) if encrypted PEM format, the cipher to use
:param passphrase: (optional) if encrypted PEM format, this can be either
    the passphrase to use, or a callback for providing the passphrase.

:return: The buffer with the dumped key in
:rtype: bytes
zpkey must be a PKeyzDif a value is given for cipher one must also be given for passphrasezInvalid cipher namez-Only RSA keys are supported for FILETYPE_TEXTr²  )r_   rm   r3   rn   rQ   ÚEVP_get_cipherbynamerY  rW   r\   rp   Ú_PassphraseHelperr.   ÚPEM_write_bio_PrivateKeyr©   ÚcallbackÚcallback_argsÚraise_if_problemr-   Úi2d_PrivateKey_biorµ  rû   rñ   r]   rò   ró   Ú	RSA_printr[   rg   )	rØ   r¬   r¾  r¿  rM   Ú
cipher_objÚhelperr·  r%   s	   &&&&     r   r¸   r¸   [  s„  € ô* ‹.€Cä�dœD×!Ò!ÜÐ-Ó.Ð.àÒØÒÜð8óð ô ×.Ò.¬|¸FÓ/CÓDˆ
ØœŸ™Ô"ÜÐ2Ó3Ð3ð #ô —Y‘Yˆ
ä˜tÓ0€FØŒ|ÔÜ×3Ò3ØØ�J‰JØÜ�I‰IØØ�O‰OØ× Ñ ó
ˆð 	×ÑÕ!Ø	”Ô	Ü×-Ò-¨c·:±:Ó>‰Ø	”Ô	Ü×Ò˜DŸJ™JÓ'¬4×+<Ñ+<Ô<ÜÐKÓLÐLä�gŠg”d×,Ò,¨T¯Z©ZÓ8¼$¿-¹-ÓHˆÜ—n’n S¨qÓ1‰äðó
ð 	
ô
 �K 1Ñ$Ô%ä˜#ÓÐr   c                  óp   € ] tR tRtRR R llt]R R l4       t]R R l4       t]3R R	 llt	R
 R lt
RtR# )rÃ  i   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   rØ   r=   r¿  rÀ  Ú	more_argsrî   Útruncater   rk   r   )r   s   "r   r   Ú_PassphraseHelper.__annotate__¡  s<   € ÷ -ñ -àð-ð /ð-ð ð	-ð
 ð-ð 
ñ-r   c                	ól   € V\         8w  d   Ve   \        R4      hW n        W0n        W@n        . V n        R # )Nz0only FILETYPE_PEM key format supports encryption)r.   rp   Ú_passphraseÚ
_more_argsÚ	_truncateÚ	_problems)r“   rØ   r¿  rÎ  rÏ  s   &&&&&r   r”   Ú_PassphraseHelper.__init__¡  s:   € ð ”<Ô JÒ$:ÜØBóð ð &ÔØ#ŒØ!ŒØ*,ˆŽr   c               ó   € V ^8„  d   QhRR/# r7  r   )r   s   "r   r   rÐ  ²  s   € ÷ ñ ˜#ñ r   c                	ó  € V P                   f   \        P                  # \        V P                   \        4      '       g   \        V P                   4      '       d"   \        P                  ! RV P                  4      # \        R4      h)NÚpem_password_cbú2Last argument must be a byte string or a callable.)	rÒ  rW   r\   rm   ra   ÚcallablerÅ  Ú_read_passphrasern   r’   s   &r   rÅ  Ú_PassphraseHelper.callback±  sc   € à×ÑÒ#Ü—9‘9ÐÜ˜×(Ñ(¬%×0Ò0´H¸T×=MÑ=M×4NÒ4NÜ—=’=Ð!2°D×4IÑ4IÓJÐJäØDóð r   c               ó   € V ^8„  d   QhRR/# r7  r   )r   s   "r   r   rÐ  ½  s   € ÷ ñ ˜sñ r   c                	óê   € V P                   f   \        P                  # \        V P                   \        4      '       g   \        V P                   4      '       d   \        P                  # \        R4      h)NrÚ  )rÒ  rW   r\   rm   ra   rÛ  rn   r’   s   &r   rÆ  Ú_PassphraseHelper.callback_args¼  sU   € à×ÑÒ#Ü—9‘9ÐÜ˜×(Ñ(¬%×0Ò0´H¸T×=MÑ=M×4NÒ4NÜ—9‘9ÐäØDóð r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚexceptionTypeztype[Exception]r   rk   r   )r   s   "r   r   rÐ  Ç  s   € ÷ (ñ (¨oð (È$ñ (r   c                	ó’   € V P                   '       d(    \        V4       V P                   P                  ^ 4      hR#   T d     L&i ; irì  )rÕ  Ú_exception_from_error_queueÚpop)r“   râ  s   &&r   rÇ  Ú"_PassphraseHelper.raise_if_problemÇ  sH   € Ø�>�>ˆ>ðÜ+¨MÔ:ð —.‘.×$Ñ$ QÓ'Ð'ñ øð !ô Ùðús   ”< ¼AÁAc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   r×  r   Úsizer=   ÚrwflagÚuserdatar   r   )r   s   "r   r   rÐ  Ñ  s4   € ÷ ñ ØðØ!ðØ+.ðØ:=ðà	ñr   c                	óV  €  \        V P                  4      '       d8   V P                  '       d   V P                  W#V4      pM.V P                  V4      pMV P                  f   Q hV P                  p\        V\        4      '       g   \        R4      h\        V4      V8”  d$   V P                  '       d   VR V pM\        R4      h\        \        V4      4       F  pWVV^,            W&   K  	  \        V4      #   \         d'   pT P                  P                  T4        R p?^ # R p?ii ; i)NzBytes expectedz+passphrase returned by callback is too long)rÛ  rÒ  rÓ  rm   ra   rp   rZ   rÔ  r\  Ú	ExceptionrÕ  rš   )r“   r×  rè  ré  rê  rè   rf  Úes   &&&&&   r   rÜ  Ú"_PassphraseHelper._read_passphraseÑ  sý   € ð	Ü˜×(Ñ(×)Ò)Ø—?—?�?Ø!×-Ñ-¨d¸HÓE‘Fà!×-Ñ-¨fÓ5‘Fà×'Ñ'Ò3Ð3Ð3Ø×)Ñ)�Ü˜f¤e×,Ò,Ü Ð!1Ó2Ð2Ü�6‹{˜TÔ!Ø—>—>�>Ø# E T˜]‘Fä$ØEóð ô œ3˜v›;Ö'�Ø A¨¥EÐ*�“ñ (ä�v“;ÐøÜô 	Ø�N‰N×!Ñ! !Ô$Ýûð	ús$   ‚,C7 ¯BC7 Â3AC7 Ã7D(ÄD#Ä#D()rÓ  rÒ  rÕ  rÔ  N)FF)rA   rB   rC   rD   r”   rã  rÅ  rÆ  r2   rÇ  rÜ  rF   r   r   r   rÃ  rÃ     sE   † ÷-ð  ôó ðð ôó ðð AF÷ (÷ñ r   rÃ  c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ   r=   rH   ústr | bytesr   r3   r   )r   s   "r   r   r   î  s!   € ÷ ñ ˜ð  kð °dñ r   c                óR  € \        V\        4      '       d   VP                  R4      p\        V4      pV \        8X  dE   \
        P                  ! V\        P                  \        P                  \        P                  4      pM<V \        8X  d'   \
        P                  ! V\        P                  4      pM\        R4      hV\        P                  8X  d   \        4        \        P                  \        4      p\        P                  ! V\
        P                   4      Vn        RVn        V# )a  
Load a public key from a buffer.

:param type: The file type (one of :data:`FILETYPE_PEM`,
    :data:`FILETYPE_ASN1`).
:param buffer: The buffer the key is stored in.
:type buffer: A Python string object, either unicode or bytestring.
:return: The PKey object.
:rtype: :class:`PKey`
r&  r­  T)rm   r   rc  r_   r.   rQ   ÚPEM_read_bio_PUBKEYrW   r\   r-   Úd2i_PUBKEY_biorp   rõ   r3   r  r]   r¨   r©   rµ   )rØ   rH   rM   Úevp_pkeyr¬   s   &&   r   rÍ   rÍ   î  sÇ   € ô �&œ#×ÒØ—‘˜wÓ'ˆä
�vÓ
€CàŒ|ÔÜ×+Ò+Ø”—‘œDŸI™I¤t§y¡yó
‰ð 
”Ô	Ü×&Ò& s¬D¯I©IÓ6‰äÐNÓOÐOà”4—9‘9ÔÜÔä�<‰<œÓ€DÜ—’˜¤4×#5Ñ#5Ó6€D„JØ€DÔØ€Kr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rØ   r=   rH   rð  r¿  rÀ  r   r3   r   )r   s   "r   r   r   	  s0   € ÷ &ñ &Ø
ð&àð&ð +ð&ð 
ñ	&r   c                ój  € \        V\        4      '       d   VP                  R4      p\        V4      p\	        W4      pV \
        8X  dM   \        P                  ! V\        P                  VP                  VP                  4      pVP                  4        M<V \        8X  d'   \        P                  ! V\        P                  4      pM\        R4      hV\        P                  8X  d   \!        4        \"        P%                  \"        4      p\        P&                  ! V\        P(                  4      Vn        V# )a�  
Load a private key (PKey) from the string *buffer* encoded with the type
*type*.

:param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)
:param buffer: The buffer the key is stored in
:param passphrase: (optional) if encrypted PEM format, this can be
                   either the passphrase to use, or a callback for
                   providing the passphrase.

:return: The PKey object
r&  r­  )rm   r   rc  r_   rÃ  r.   rQ   ÚPEM_read_bio_PrivateKeyrW   r\   rÅ  rÆ  rÇ  r-   Úd2i_PrivateKey_biorp   rõ   r3   r  r]   r¨   r©   )rØ   rH   r¿  rM   rË  rô  r¬   s   &&&    r   rÓ   rÓ   	  s×   € ô" �&œ#×ÒØ—‘˜wÓ'ˆä
�vÓ
€Cä˜tÓ0€FØŒ|ÔÜ×/Ò/Ø”—‘˜FŸO™O¨V×-AÑ-Aó
ˆð 	×ÑÕ!Ø	”Ô	Ü×*Ò*¨3´·	±	Ó:‰äÐNÓOÐOà”4—9‘9ÔÜÔä�<‰<œÓ€DÜ—’˜¤4×#5Ñ#5Ó6€D„JØ€Kr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ   r=   rñ  r6   r   ra   r   )r   s   "r   r   r   9	  s!   € ÷ ñ  3ð ¨Wð ¸ñ r   c                ój  € \        4       pV \        8X  d"   \        P                  ! W!P                  4      pMeV \
        8X  d"   \        P                  ! W!P                  4      pM9V \        8X  d$   \        P                  ! W!P                  ^ ^ 4      pM\        R4      h\        V^ 8g  4       \        V4      # )aV  
Dump the certificate request *req* into a buffer string encoded with the
type *type*.

:param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)
:param req: The certificate request to dump
:return: The buffer with the dumped certificate request in


.. deprecated:: 24.2.0
   Use `cryptography.x509.CertificateSigningRequest` instead.
r²  )r_   r.   rQ   ÚPEM_write_bio_X509_REQrï  r-   Úi2d_X509_REQ_biorµ  ÚX509_REQ_print_exrp   r[   rg   )rØ   rñ  rM   r·  s   &&  r   r;   r;   9	  s�   € ô ‹.€CàŒ|ÔÜ×1Ò1°#·x±xÓ@‰Ø	”Ô	Ü×+Ò+¨C·±Ó:‰Ø	”Ô	Ü×,Ò,¨S·(±(¸A¸qÓA‰äðó
ð 	
ô
 �K 1Ñ$Ô%ä˜#ÓÐr   r3  c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ   r=   rH   ra   r   r6   r   )r   s   "r   r   r   g	  s!   € ÷ ñ  3ð °ð ¸'ñ r   c                ó>  € \        V\        4      '       d   VP                  R4      p\        V4      pV \        8X  dE   \
        P                  ! V\        P                  \        P                  \        P                  4      pM<V \        8X  d'   \
        P                  ! V\        P                  4      pM\        R4      h\        V\        P                  8g  4       \        P                  \        4      p\        P                  ! V\
        P                   4      Vn        V# )as  
Load a certificate request (X509Req) from the string *buffer* encoded with
the type *type*.

:param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)
:param buffer: The buffer the certificate request is stored in
:return: The X509Req object

.. deprecated:: 24.2.0
   Use `cryptography.x509.load_der_x509_csr` or
   `cryptography.x509.load_pem_x509_csr` instead.
r&  r­  )rm   r   rc  r_   r.   rQ   ÚPEM_read_bio_X509_REQrW   r\   r-   Úd2i_X509_REQ_biorp   r[   r6   r  r]   rî  rï  )rØ   rH   rM   rñ  Úx509reqs   &&   r   r<   r<   g	  s¹   € ô �&œ#×ÒØ—‘˜wÓ'ˆä
�vÓ
€CàŒ|ÔÜ×(Ò(¨¬d¯i©i¼¿¹ÄDÇIÁIÓN‰Ø	”Ô	Ü×#Ò# C¬¯©Ó3‰äÐNÓOÐOä�Cœ4Ÿ9™9Ñ$Ô%ä�o‰oœgÓ&€GÜ—7’7˜3¤× 2Ñ 2Ó3€G„LØ€Nr   )é   é   )r  é   )r-   r.   rµ  r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   rj  r;   r¸   r¶   rF  rB  rp  r<   rÓ   rÍ   iÿÿ  r   râ  )pÚ__conditional_annotations__Ú
__future__r   rV  rÉ  Ú	functoolsÚsysr·   r+  Úbase64r   Úcollections.abcr   r   r   r   r	   r
   Úversion_infor   ÚTypeVarÚ_TÚtyping_extensionsÚcryptographyr   r    Ú)cryptography.hazmat.primitives.asymmetricr!   r"   r#   r$   r%   ÚOpenSSL._utilr&   r'   rY  r(   rä  r)   rW   r*   rQ   r+   Ú_make_assertr,   ra  Ú__all__rÃ   rÅ   rÇ   rÉ   rË   Ú_PrivateKeyrÄ   rÆ   rÈ   rÊ   rÌ   Ú
_PublicKeyr¯   ra   ÚPassphraseCallableTÚSSL_FILETYPE_PEMr.   rç  ÚSSL_FILETYPE_ASN1r-   rµ  rñ   r0   ÚEVP_PKEY_DSAr/   ÚEVP_PKEY_DHr>   ÚEVP_PKEY_ECr?   rì  r2   rõ   r[   r_   rg   rr   rx   r‰   r‹   r3   r  rB  rF  Útotal_orderingr5   r4   r6   r1   r:   r7   r9   r8   rp  rj  r¶   r¸   rÃ  rÍ   rÓ   r;   rø  rA   r-  r<   r   )r  s   @r   Ú<module>r     sŠ  øðß "Ð "ã Û Û Û 
Û Û Ý ß .Ý ÷ñ ð ×Ñ�wÔÞ#Ø×Ñ˜ÔØ	�Š˜Ó	€Böõ -ç $÷õ õ )õõõõõõò€ð: Ø×ÑØ×ÑØ×ÑØ	×ÑØ×Ñð	õ€ð Ø×ÑØ×ÑØ×ÑØ	×ÑØ×Ñð	õ€
ð ˆ[˜*Ð$Õ%€Ø˜E 8¨C°¨JÕ#7Ð7Õ8Ð ð ×)Ñ)€ˆcÓ )Ø×+Ñ+€ˆsÓ +ð €à×!Ñ!€ˆ#Ó !Ø×!Ñ!€ˆ#Ó !Ø×Ñ€ˆÓ Ø×Ñ€ˆÓ ôˆIô ñ Ð:¸EÓBÐ Ù˜uÓ%€÷õ4;õ+õ2õ&÷:
ñ 
÷~.ñ ~.÷Bd.ñ d.ñN ðóô5ó	ð5ñ ðóô1ó	ð1ð$ ×Ñ÷ð ó ðñD ðó÷g:ð g:ó	ðg:ñT ðó÷oð oó	ðo÷dgñ g÷T8ñ 8÷.g#ñ g#ôT'˜Iô '÷"[ñ [õ|)õ:õ8÷2B÷JKñ Kõ\÷D&õRð@ &>Ð "à × Ò ØØð	ð Ø	#õ	õð@ &>Ð "à × Ò ØØð	ð Ø	#÷	r   