§
    pïg‘  ã                   óŒ   — d dl Z d dlmZ d dlmZ d dlmZmZ e j        rd dl	m
Z
 dZ G d„ de¦  «        Z G d	„ d
e¦  «        ZdS )é    N)Ú_evp_pkey_derive)Úserialization)ÚX25519PrivateKeyÚX25519PublicKey)ÚBackendé    c                   óJ   — e Zd Zd
d„Zdej        dej        defd„Zdefd„Z	d	S )Ú_X25519PublicKeyÚbackendr   c                 ó"   — || _         || _        d S ©N©Ú_backendÚ	_evp_pkey©Úselfr   Úevp_pkeys      úM/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/x25519.pyÚ__init__z_X25519PublicKey.__init__   ó   € ØˆŒØ!ˆŒˆˆó    ÚencodingÚformatÚreturnc                 ó&  — |t           j        j        u s|t           j        j        u rI|t           j        j        us|t           j        j        urt	          d¦  «        ‚|                      ¦   «         S | j                             ||| | j        d ¦  «        S )Nz3When using Raw both encoding and format must be Raw)	r   ÚEncodingÚRawÚPublicFormatÚ
ValueErrorÚ_raw_public_bytesr   Ú_public_key_bytesr   )r   r   r   s      r   Úpublic_bytesz_X25519PublicKey.public_bytes   sš   € ð �Ô.Ô2Ð2Ð2Ø�Ô3Ô7Ð7Ð7ð ¥Ô 6Ô :Ð:Ð:Ø¥Ô!;Ô!?Ð?Ð?å ØIñô ð ð ×)Ò)Ñ+Ô+Ð+àŒ}×.Ò.Ø�f˜d D¤N°Dñ
ô 
ð 	
r   c                 óæ  — | j         j                             d¦  «        }| j         j                             | j        |¦  «        }| j                              |dk    ¦  «         | j                              |d         | j         j        j        k    ¦  «         | j         j                             |d         | j         j        j	        ¦  «        }| j         j         
                    ||¦  «        d d …         S )Nzunsigned char **r   r   )r   Ú_ffiÚnewÚ_libÚEVP_PKEY_get1_tls_encodedpointr   Úopenssl_assertÚNULLÚgcÚOPENSSL_freeÚbuffer)r   ÚucharppÚresÚdatas       r   r    z"_X25519PublicKey._raw_public_bytes1   sÐ   € Ø”-Ô$×(Ò(Ð);Ñ<Ô<ˆØŒmÔ ×?Ò?ØŒN˜Gñ
ô 
ˆð 	Œ×$Ò$ S¨B¢YÑ/Ô/Ð/ØŒ×$Ò$ W¨Q¤Z°4´=Ô3EÔ3JÒ%JÑKÔKÐKØŒ}Ô!×$Ò$Ø�AŒJ˜œÔ*Ô7ñ
ô 
ˆð Œ}Ô!×(Ò(¨¨sÑ3Ô3°A°A°AÔ6Ð6r   N©r   r   )
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úbytesr"   r    © r   r   r
   r
      sy   € € € € € ð"ð "ð "ð "ð
àÔ(ð
ð Ô*ð
ð 
ð	
ð 
ð 
ð 
ð.
7 5ð 
7ð 
7ð 
7ð 
7ð 
7ð 
7r   r
   c                   ót   — e Zd Zdd„Zdefd„Zdedefd„Zdej	        d	ej
        d
ej        defd„Zdefd„ZdS )Ú_X25519PrivateKeyr   r   c                 ó"   — || _         || _        d S r   r   r   s      r   r   z_X25519PrivateKey.__init__?   r   r   r   c                 óú  — | j                              ¦   «         }| j         j                             || j        ¦  «        }| j                              |dk    ¦  «         | j         j                             || j         j        j        ¦  «        }| j                              || j         j        j        k    ¦  «         | j         j         	                    || j         j        j
        ¦  «        }t          | j         |¦  «        S )Né   )r   Ú_create_mem_bio_gcr&   Úi2d_PUBKEY_bior   r(   Úd2i_PUBKEY_bior$   r)   r*   ÚEVP_PKEY_freer
   )r   Úbior.   r   s       r   Ú
public_keyz_X25519PrivateKey.public_keyC   sÒ   € ØŒm×.Ò.Ñ0Ô0ˆØŒmÔ ×/Ò/°°T´^ÑDÔDˆØŒ×$Ò$ S¨A¢XÑ.Ô.Ð.Ø”=Ô%×4Ò4Ø�”Ô#Ô(ñ
ô 
ˆð 	Œ×$Ò$ X°´Ô1CÔ1HÒ%HÑIÔIÐIØ”=Ô%×(Ò(Ø�d”mÔ(Ô6ñ
ô 
ˆõ   ¤¨xÑ8Ô8Ð8r   Úpeer_public_keyc                 ó€   — t          |t          ¦  «        st          d¦  «        ‚t          | j        | j        |¦  «        S )Nz(peer_public_key must be X25519PublicKey.)Ú
isinstancer   Ú	TypeErrorr   r   r   )r   rA   s     r   Úexchangez_X25519PrivateKey.exchangeP   s:   € Ý˜/­?Ñ;Ô;ð 	HÝÐFÑGÔGÐGå ¤¨t¬~¸ÑOÔOÐOr   r   r   Úencryption_algorithmc                 ó\  — |t           j        j        u s|t           j        j        u rc|t           j        j        us-|t           j        j        ust          |t           j        ¦  «        st          d¦  «        ‚|                      ¦   «         S | j	         
                    |||| | j        d ¦  «        S )NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption())r   r   r   r   ÚPrivateFormatrC   ÚNoEncryptionr   Ú_raw_private_bytesr   Ú_private_key_bytesr   )r   r   r   rF   s       r   Úprivate_bytesz_X25519PrivateKey.private_bytesV   s¼   € ð �Ô.Ô2Ð2Ð2Ø�Ô3Ô7Ð7Ð7ð �mÔ9Ô=Ð=Ð=Ø¥=Ô#9Ô#=Ð=Ð=Ý!Ø(­-Ô*Dñô ð >õ
 !ðFñô ð ð
 ×*Ò*Ñ,Ô,Ð,àŒ}×/Ò/Ø�fÐ2°D¸$¼.È$ñ
ô 
ð 	
r   c           	      óæ  — | j                              ¦   «         }| j         j                             || j        | j         j        j        | j         j        j        d| j         j        j        | j         j        j        ¦  «        }| j                              |dk    ¦  «         | j                              |¦  «        }| j                              t          |¦  «        dk    ¦  «         |t           d …         S )Nr   r:   é0   )r   r;   r&   Úi2d_PKCS8PrivateKey_bior   r$   r)   r(   Ú_read_mem_bioÚlenÚ_X25519_KEY_SIZE)r   r?   r.   Úpkcs8s       r   rJ   z$_X25519PrivateKey._raw_private_bytesr   sÏ   € ð
 Œm×.Ò.Ñ0Ô0ˆØŒmÔ ×8Ò8ØØŒNØŒMÔÔ#ØŒMÔÔ#ØØŒMÔÔ#ØŒMÔÔ#ñ
ô 
ˆð 	Œ×$Ò$ S¨A¢XÑ.Ô.Ð.Ø”×+Ò+¨CÑ0Ô0ˆØŒ×$Ò$¥S¨¡Z¤Z°2Ò%5Ñ6Ô6Ð6ØÕ&Ð&Ð'Ð'Ô(Ð(r   Nr0   )r1   r2   r3   r   r   r@   r4   rE   r   r   rH   ÚKeySerializationEncryptionrL   rJ   r5   r   r   r7   r7   >   sÉ   € € € € € ð"ð "ð "ð "ð9˜Oð 9ð 9ð 9ð 9ðP¨ð P¸Eð Pð Pð Pð Pð
àÔ(ð
ð Ô+ð
ð ,ÔFð	
ð
 
ð
ð 
ð 
ð 
ð8) Eð )ð )ð )ð )ð )ð )r   r7   )ÚtypingÚ*cryptography.hazmat.backends.openssl.utilsr   Úcryptography.hazmat.primitivesr   Ú0cryptography.hazmat.primitives.asymmetric.x25519r   r   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr   rR   r
   r7   r5   r   r   ú<module>r[      sî   ðð
 €€€à GÐ GÐ GÐ GÐ GÐ GØ 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð
 
Ôð EØDÐDÐDÐDÐDÐDð Ð ð&7ð &7ð &7ð &7ð &7�ñ &7ô &7ð &7ðRF)ð F)ð F)ð F)ð F)Ð(ñ F)ô F)ð F)ð F)ð F)r   