Ë
    ¹2ÚiÒ,  ã                  ó0  — d dl mZ d dlZd dlmZmZmZ d dlmZm	Z	 d dl
mZ d dlmZ ej                  rd dlmZ 	 	 	 	 dd„Zdd	„Zdd
„Zdd„Zdd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Z G d„ dej0                  «      Z G d„ dej4                  «      Zy)é    )ÚannotationsN)ÚInvalidSignatureÚUnsupportedAlgorithmÚ_Reasons)Ú_calculate_digest_and_algorithmÚ_evp_pkey_derive)Úserialization)Úec)ÚBackendc                ól   — t        | t        j                  «      st        dt        j
                  «      ‚y )Nz/Unsupported elliptic curve signature algorithm.)Ú
isinstancer
   ÚECDSAr   r   Ú UNSUPPORTED_PUBLIC_KEY_ALGORITHM)Úsignature_algorithms    ú^/var/www/html/acx/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ec.pyÚ_check_signature_algorithmr      s1   € ô Ð)¬2¯8©8Ô4Ü"Ø=Ü×5Ñ5ó
ð 	
ð 5ó    c                ób  — | j                   j                  |«      }| j                  || j                  j                  k7  «       | j                   j                  |«      }|| j                   j                  k(  rt        d«      ‚| j                   j                  s)| j                   j                  |«      dk(  rt        d«      ‚| j                   j                  |«      }| j                  || j                  j                  k7  «       | j                  j                  |«      j                  d«      }|S )Nz@ECDSA keys with explicit parameters are unsupported at this timer   Úascii)Ú_libÚEC_KEY_get0_groupÚopenssl_assertÚ_ffiÚNULLÚEC_GROUP_get_curve_nameÚ	NID_undefÚ
ValueErrorÚCRYPTOGRAPHY_IS_LIBRESSLÚEC_GROUP_get_asn1_flagÚ
OBJ_nid2snÚstringÚdecode)ÚbackendÚec_keyÚgroupÚnidÚ
curve_nameÚsns         r   Ú_ec_key_curve_snr)   #   sø   € Ø�L‰L×*Ñ*¨6Ó2€EØ×Ñ˜5 G§L¡L×$5Ñ$5Ñ5Ô6à
�,‰,×
.Ñ
.¨uÓ
5€Cð ˆg�l‰l×$Ñ$Ò$ÜØNó
ð 	
ð �L‰L×1Ò1Ø�L‰L×/Ñ/°Ó6¸!Ò;äØNó
ð 	
ð —‘×(Ñ(¨Ó-€JØ×Ñ˜:¨¯©×):Ñ):Ñ:Ô;à	�‰×	Ñ	˜ZÓ	(×	/Ñ	/°Ó	8€BØ€Ir   c                ód   — | j                   j                  || j                   j                  «       y)z¡
    Set the named curve flag on the EC_KEY. This causes OpenSSL to
    serialize EC keys along with their curve OID which makes
    deserialization easier.
    N)r   ÚEC_KEY_set_asn1_flagÚOPENSSL_EC_NAMED_CURVE)r#   Úec_cdatas     r   Ú_mark_asn1_named_ec_curver.   A   s%   € ð ‡L�L×%Ñ%Ø�'—,‘,×5Ñ5õr   c                ó^  — | j                   j                  |«      }| j                  || j                  j                  k7  «       | j                   j                  |«      }| j                  || j                  j                  k7  «       | j                   j                  ||«      rt        d«      ‚y )Nz;Cannot load an EC public key where the point is at infinity)r   ÚEC_KEY_get0_public_keyr   r   r   r   ÚEC_POINT_is_at_infinityr   )r#   r-   Úpointr%   s       r   Ú_check_key_infinityr3   M   s�   € Ø�L‰L×/Ñ/°Ó9€EØ×Ñ˜5 G§L¡L×$5Ñ$5Ñ5Ô6Ø�L‰L×*Ñ*¨8Ó4€EØ×Ñ˜5 G§L¡L×$5Ñ$5Ñ5Ô6Ø‡|�|×+Ñ+¨E°5Ô9ÜØIó
ð 	
ð :r   c                ó†   — 	 t        j                  |   «       S # t        $ r t        |› d�t        j
                  «      ‚w xY w)Nz" is not a supported elliptic curve)r
   Ú_CURVE_TYPESÚKeyErrorr   r   ÚUNSUPPORTED_ELLIPTIC_CURVE)r#   r(   s     r   Ú_sn_to_elliptic_curver8   X   sI   € ð
Ü�‰˜rÑ"Ó$Ð$øÜò 
Ü"ØˆdÐ4Ð5Ü×/Ñ/ó
ð 	
ð
ús	   ‚ ™'A Ú_EllipticCurvePrivateKeyc                ó´  — | j                   j                  |j                  «      }| j                  |dkD  «       | j                  j                  d|«      }| j                  j                  dd«      }| j                   j                  d|t        |«      |||j                  «      }| j                  |dk(  «       | j                  j                  |«      d |d    S )Nr   zunsigned char[]zunsigned int[]é   )	r   Ú
ECDSA_sizeÚ_ec_keyr   r   ÚnewÚ
ECDSA_signÚlenÚbuffer)r#   Úprivate_keyÚdataÚmax_sizeÚsigbufÚ
siglen_ptrÚress          r   Ú_ecdsa_sig_signrH   b   s½   € ð �|‰|×&Ñ& {×':Ñ':Ó;€HØ×Ñ˜8 a™<Ô(à�\‰\×ÑÐ/°Ó:€FØ—‘×!Ñ!Ð"2°AÓ6€JØ
�,‰,×
!Ñ
!Ø	ˆ4”�T“˜F J°×0CÑ0Có€Cð ×Ñ˜3 !™8Ô$Ø�<‰<×Ñ˜vÓ& ¨°A©Ð7Ð7r   Ú_EllipticCurvePublicKeyc           	     ó²   — | j                   j                  d|t        |«      |t        |«      |j                  «      }|dk7  r| j	                  «        t
        ‚y )Nr   r;   )r   ÚECDSA_verifyr@   r=   Ú_consume_errorsr   )r#   Ú
public_keyÚ	signaturerC   rG   s        r   Ú_ecdsa_sig_verifyrO   q   sS   € ð �,‰,×
#Ñ
#Ø	ˆ4”�T“˜I¤s¨9£~°z×7IÑ7Ió€Cð ˆa‚xØ×ÑÔ!ÜÐð r   c                  óˆ   — e Zd Zd
d„Zedd„«       Zedd„«       Z	 	 	 	 	 	 dd„Zdd„Zdd„Z		 	 	 	 	 	 	 	 dd„Z
	 	 	 	 	 	 dd„Zy	)r9   c                ó˜   — || _         || _        || _        t        ||«      }t	        ||«      | _        t        ||«       t        ||«       y ©N©Ú_backendr=   Ú	_evp_pkeyr)   r8   Ú_curver.   r3   ©Úselfr#   Úec_key_cdataÚevp_pkeyr(   s        r   Ú__init__z!_EllipticCurvePrivateKey.__init__€   óE   € ØˆŒØ#ˆŒØ!ˆŒä˜g |Ó4ˆÜ+¨G°RÓ8ˆŒÜ! '¨<Ô8Ü˜G \Õ2r   c                ó   — | j                   S rR   ©rV   ©rX   s    r   Úcurvez_EllipticCurvePrivateKey.curveŠ   ó   € à�{‰{Ðr   c                ó.   — | j                   j                  S rR   ©r`   Úkey_sizer_   s    r   rd   z!_EllipticCurvePrivateKey.key_sizeŽ   ó   € à�z‰z×"Ñ"Ð"r   c                ó4  — | j                   j                  || j                  «      st        dt        j
                  «      ‚|j                  j                  | j                  j                  k7  rt        d«      ‚t        | j                   | j                  |«      S )Nz1This backend does not support the ECDH algorithm.z2peer_public_key and self are not on the same curve)
rT   Ú+elliptic_curve_exchange_algorithm_supportedr`   r   r   ÚUNSUPPORTED_EXCHANGE_ALGORITHMÚnamer   r   rU   )rX   Ú	algorithmÚpeer_public_keys      r   Úexchangez!_EllipticCurvePrivateKey.exchange’   s�   € ð �M‰M×EÑEØ˜4Ÿ:™:ôô 'ØCÜ×7Ñ7óð ð
 × Ñ ×%Ñ%¨¯©¯©Ò8ÜØDóð ô   §¡¨t¯~©~¸ÓOÐOr   c                ó  — | j                   j                  j                  | j                  «      }| j                   j	                  || j                   j
                  j                  k7  «       | j                   j                  j                  |«      }| j                   j                  |«      }| j                   j                  j                  | j                  «      }| j                   j	                  || j                   j
                  j                  k7  «       | j                   j                  j                  ||«      }| j                   j	                  |dk(  «       | j                   j                  |«      }t        | j                   ||«      S ©Nr;   )rT   r   r   r=   r   r   r   r   Ú_ec_key_new_by_curve_nidr0   ÚEC_KEY_set_public_keyÚ_ec_cdata_to_evp_pkeyrI   )rX   r%   Ú	curve_nidÚpublic_ec_keyr2   rG   rZ   s          r   rM   z#_EllipticCurvePrivateKey.public_key¦   s  € Ø—‘×"Ñ"×4Ñ4°T·\±\ÓBˆØ�‰×$Ñ$ U¨d¯m©m×.@Ñ.@×.EÑ.EÑ%EÔFà—M‘M×&Ñ&×>Ñ>¸uÓEˆ	ØŸ™×>Ñ>¸yÓIˆà—‘×"Ñ"×9Ñ9¸$¿,¹,ÓGˆØ�‰×$Ñ$ U¨d¯m©m×.@Ñ.@×.EÑ.EÑ%EÔFà�m‰m× Ñ ×6Ñ6°}ÀeÓLˆØ�‰×$Ñ$ S¨A¡XÔ.à—=‘=×6Ñ6°}ÓEˆä& t§}¡}°mÀXÓNÐNr   c                óü   — | j                   j                  j                  | j                  «      }| j                   j	                  |«      }t        j                  || j                  «       j                  «       ¬«      S )N)Úprivate_valueÚpublic_numbers)	rT   r   ÚEC_KEY_get0_private_keyr=   Ú
_bn_to_intr
   ÚEllipticCurvePrivateNumbersrM   rv   )rX   Úbnru   s      r   Úprivate_numbersz(_EllipticCurvePrivateKey.private_numbers·   s]   € Ø�]‰]×Ñ×7Ñ7¸¿¹ÓEˆØŸ™×0Ñ0°Ó4ˆÜ×-Ñ-Ø'ØŸ?™?Ó,×;Ñ;Ó=ô
ð 	
r   c                ój   — | j                   j                  |||| | j                  | j                  «      S rR   )rT   Ú_private_key_bytesrU   r=   )rX   ÚencodingÚformatÚencryption_algorithms       r   Úprivate_bytesz&_EllipticCurvePrivateKey.private_bytes¿   s5   € ð �}‰}×/Ñ/ØØØ ØØ�N‰NØ�L‰Ló
ð 	
r   c                óx   — t        |«       t        ||j                  «      \  }}t        | j                  | |«      S rR   )r   r   rj   rH   rT   )rX   rC   r   Ú_s       r   Úsignz_EllipticCurvePrivateKey.signÎ   s<   € ô
 	#Ð#6Ô7Ü1ØØ×)Ñ)ó
‰ˆˆaô ˜tŸ}™}¨d°DÓ9Ð9r   N©r#   r   ©Úreturnúec.EllipticCurve©r‡   Úint)rj   zec.ECDHrk   úec.EllipticCurvePublicKeyr‡   Úbytes)r‡   r‹   )r‡   zec.EllipticCurvePrivateNumbers)r~   úserialization.Encodingr   zserialization.PrivateFormatr€   z(serialization.KeySerializationEncryptionr‡   rŒ   )rC   rŒ   r   ú"ec.EllipticCurveSignatureAlgorithmr‡   rŒ   )Ú__name__Ú
__module__Ú__qualname__r[   Úpropertyr`   rd   rl   rM   r{   r�   r„   © r   r   r9   r9      s©   „ ó3ð òó ðð ò#ó ð#ðPØ ðPØ3LðPà	óPó(Oó"
ð
à(ð
ð ,ð
ð Gð	
ð
 
ó
ð
:àð
:ð @ð
:ð 
ô	
:r   c                  ó|   — e Zd Zd
d„Zedd„«       Zedd„«       Zdd„Zdd„Zdd„Z		 	 	 	 	 	 dd„Z
	 	 	 	 	 	 	 	 dd„Zy	)rI   c                ó˜   — || _         || _        || _        t        ||«      }t	        ||«      | _        t        ||«       t        ||«       y rR   rS   rW   s        r   r[   z _EllipticCurvePublicKey.__init__Ü   r\   r   c                ó   — | j                   S rR   r^   r_   s    r   r`   z_EllipticCurvePublicKey.curveæ   ra   r   c                ó.   — | j                   j                  S rR   rc   r_   s    r   rd   z _EllipticCurvePublicKey.key_sizeê   re   r   c                ó¨   — t        |t        «      st        S | j                  j                  j                  | j                  |j                  «      dk(  S rn   )r   rI   ÚNotImplementedrT   r   ÚEVP_PKEY_cmprU   )rX   Úothers     r   Ú__eq__z_EllipticCurvePublicKey.__eq__î   sD   € Ü˜%Ô!8Ô9Ü!Ð!ð �M‰M×Ñ×+Ñ+¨D¯N©N¸E¿O¹OÓLØñð	
r   c                óÞ  — | j                   j                  j                  | j                  «      }| j                   j	                  || j                   j
                  j                  k7  «       | j                   j                  j                  | j                  «      }| j                   j	                  || j                   j
                  j                  k7  «       | j                   j                  «       5 }| j                   j                  j                  |«      }| j                   j                  j                  |«      }| j                   j                  j                  |||||«      }| j                   j	                  |dk(  «       | j                   j                  |«      }| j                   j                  |«      }d d d «       t        j                  | j                  ¬«      S # 1 sw Y   Œ+xY w)Nr;   )ÚxÚyr`   )rT   r   r   r=   r   r   r   r0   Ú_tmp_bn_ctxÚ
BN_CTX_getÚEC_POINT_get_affine_coordinatesrx   r
   ÚEllipticCurvePublicNumbersrV   )	rX   r%   r2   Úbn_ctxÚbn_xÚbn_yrG   rž   rŸ   s	            r   rv   z&_EllipticCurvePublicKey.public_numbers÷   sg  € Ø—‘×"Ñ"×4Ñ4°T·\±\ÓBˆØ�‰×$Ñ$ U¨d¯m©m×.@Ñ.@×.EÑ.EÑ%EÔFà—‘×"Ñ"×9Ñ9¸$¿,¹,ÓGˆØ�‰×$Ñ$ U¨d¯m©m×.@Ñ.@×.EÑ.EÑ%EÔFà�]‰]×&Ñ&Ó(ð 
	/¨FØ—=‘=×%Ñ%×0Ñ0°Ó8ˆDØ—=‘=×%Ñ%×0Ñ0°Ó8ˆDà—-‘-×$Ñ$×DÑDØ�u˜d D¨&óˆCð �M‰M×(Ñ(¨°©Ô2à—‘×(Ñ(¨Ó.ˆAØ—‘×(Ñ(¨Ó.ˆA÷
	/ô ×,Ñ,¨q°A¸T¿[¹[ÔIÐI÷
	/ð 
	/ús   Ã1CG#Ç#G,c           	     óú  — |t         j                  j                  u r!| j                  j                  j
                  }n>|t         j                  j                  u sJ ‚| j                  j                  j                  }| j                  j                  j                  | j                  «      }| j                  j                  || j                  j                  j                  k7  «       | j                  j                  j                  | j                  «      }| j                  j                  || j                  j                  j                  k7  «       | j                  j                  «       5 }| j                  j                  j                  |||| j                  j                  j                  d|«      }| j                  j                  |dkD  «       | j                  j                  j!                  d|«      }| j                  j                  j                  ||||||«      }| j                  j                  ||k(  «       d d d «       | j                  j                  j#                  «      d d  S # 1 sw Y   Œ1xY w)Nr   zchar[])r	   ÚPublicFormatÚCompressedPointrT   r   ÚPOINT_CONVERSION_COMPRESSEDÚUncompressedPointÚPOINT_CONVERSION_UNCOMPRESSEDr   r=   r   r   r   r0   r    ÚEC_POINT_point2octr>   rA   )	rX   r   Ú
conversionr%   r2   r¤   ÚbuflenÚbufrG   s	            r   Ú_encode_pointz%_EllipticCurvePublicKey._encode_point  s×  € Ø”]×/Ñ/×?Ñ?Ñ?ØŸ™×+Ñ+×GÑG‰Jàœ]×7Ñ7×IÑIÑIÐIÐIØŸ™×+Ñ+×IÑIˆJà—‘×"Ñ"×4Ñ4°T·\±\ÓBˆØ�‰×$Ñ$ U¨d¯m©m×.@Ñ.@×.EÑ.EÑ%EÔFØ—‘×"Ñ"×9Ñ9¸$¿,¹,ÓGˆØ�‰×$Ñ$ U¨d¯m©m×.@Ñ.@×.EÑ.EÑ%EÔFØ�]‰]×&Ñ&Ó(ð 		8¨FØ—]‘]×'Ñ'×:Ñ:Ø�u˜j¨$¯-©-×*<Ñ*<×*AÑ*AÀ1ÀfóˆFð �M‰M×(Ñ(¨°!©Ô4Ø—-‘-×$Ñ$×(Ñ(¨°6Ó:ˆCØ—-‘-×$Ñ$×7Ñ7Ø�u˜j¨#¨v°vóˆCð �M‰M×(Ñ(¨°3©Ô7÷		8ð �}‰}×!Ñ!×(Ñ(¨Ó-©aÐ0Ð0÷		8ð 		8ús   Å,CI1É1I:c                óØ  — |t         j                  j                  u s8|t         j                  j                  u s|t         j                  j
                  u rn|t         j                  j                  us6|t         j                  j                  t         j                  j
                  fvrt        d«      ‚| j                  |«      S | j                  j                  ||| | j                  d «      S )NzKX962 encoding must be used with CompressedPoint or UncompressedPoint format)r	   ÚEncodingÚX962r¨   r©   r«   r   r±   rT   Ú_public_key_bytesrU   )rX   r~   r   s      r   Úpublic_bytesz$_EllipticCurvePublicKey.public_bytes$  sÌ   € ð œ×.Ñ.×3Ñ3Ñ3Øœ×3Ñ3×CÑCÑCØœ×3Ñ3×EÑEÑEàœ}×5Ñ5×:Ñ:Ñ:¸fÜ×*Ñ*×:Ñ:Ü×*Ñ*×<Ñ<ðMñ ?ô !ð/óð ð
 ×%Ñ% fÓ-Ð-à—=‘=×2Ñ2Ø˜& $¨¯©¸óð r   c                ó|   — t        |«       t        ||j                  «      \  }}t        | j                  | ||«       y rR   )r   r   rj   rO   rT   )rX   rN   rC   r   rƒ   s        r   Úverifyz_EllipticCurvePublicKey.verify=  s;   € ô 	#Ð#6Ô7Ü1ØØ×)Ñ)ó
‰ˆˆaô 	˜$Ÿ-™-¨¨y¸$Õ?r   Nr…   r†   r‰   )r›   Úobjectr‡   Úbool)r‡   zec.EllipticCurvePublicNumbers)r   úserialization.PublicFormatr‡   rŒ   )r~   r�   r   r»   r‡   rŒ   )rN   rŒ   rC   rŒ   r   rŽ   r‡   ÚNone)r�   r�   r‘   r[   r’   r`   rd   rœ   rv   r±   r¶   r¸   r“   r   r   rI   rI   Û   s‘   „ ó3ð òó ðð ò#ó ð#ó
óJó*1ð0à(ðð +ðð 
ó	ð2@àð@ð ð@ð @ð	@ð
 
ô@r   )r   rŽ   r‡   r¼   )r#   r   r‡   Ústrr…   )r#   r   r‡   r¼   )r#   r   r(   r½   r‡   rˆ   )r#   r   rB   r9   rC   rŒ   r‡   rŒ   )
r#   r   rM   rI   rN   rŒ   rC   rŒ   r‡   r¼   )Ú
__future__r   ÚtypingÚcryptography.exceptionsr   r   r   Ú*cryptography.hazmat.backends.openssl.utilsr   r   Úcryptography.hazmat.primitivesr	   Ú)cryptography.hazmat.primitives.asymmetricr
   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr   r   r)   r.   r3   r8   rH   rO   ÚEllipticCurvePrivateKeyr9   ÚEllipticCurvePublicKeyrI   r“   r   r   ú<module>rÈ      sÜ   ðõ
 #ã ÷ñ ÷
õ 9Ý 8à	×ÒÝDð
Ø;ð
à	ó
óó<	ó
ó
ð8Øð8Ø#;ð8ØCHð8à
ó8ðØðà'ðð ðð ð	ð
 
óôY:˜r×9Ñ9ô Y:ôxm@˜b×7Ñ7õ m@r   