§
    8·tc  ã                   óp   — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d„ Zd„ Zd	„ Zd
„ Zd„ ZdS )é    N)ÚAES)ÚSHA512)Ú_bcrypt_hash)Ústrxor)ÚtostrÚbchrÚbordc                 ó¤   — t          | ¦  «        dk     rt          d¦  «        ‚t          j        d| d d…         ¦  «        d         }|| dd …         fS )Né   zInsufficient dataú>Ir   )ÚlenÚ
ValueErrorÚstructÚunpack)ÚdataÚvalues     ú?/usr/lib/python3/dist-packages/Cryptodome/PublicKey/_openssh.pyÚ	read_int4r   (   sP   € Ý
ˆ4�y„y�1‚}€}ÝÐ,Ñ-Ô-Ð-ÝŒM˜$  R a R¤Ñ)Ô)¨!Ô,€EØ�$�q�r�r”(ˆ?Ðó    c                 ó’   — t          | ¦  «        \  }} t          | ¦  «        |k     rt          d¦  «        ‚| d |…         | |d …         fS )NzInsufficient data (V))r   r   r   )r   Úsizes     r   Ú
read_bytesr   /   sL   € Ý˜4‘”�J€Dˆ$Ý
ˆ4�y„y�4ÒÐÝÐ0Ñ1Ô1Ð1Ø���Œ;˜˜T˜U˜UœÐ#Ð#r   c                 óH   — t          | ¦  «        \  }}t          |¦  «        |fS )N)r   r   )r   ÚsÚds      r   Úread_stringr   6   s#   € Ý�dÑÔ�D€A€qÝ�‰8Œ8�Qˆ;Ðr   c                 ó€   — t          | ¦  «        D ]-\  }}t          |¦  «        |dz   dz  k    rt          d¦  «        ‚Œ.d S )Né   éÿ   zIncorrect padding)Ú	enumerater	   r   )ÚpadÚvÚxs      r   Úcheck_paddingr$   ;   sR   € Ý˜#‘”ð 2ð 2‰ˆˆ1Ý�‰7Œ7˜˜A™ ‘~Ò&Ð&ÝÐ0Ñ1Ô1Ð1ð 'ð2ð 2r   c           	      ó   — |                       d¦  «        st          d¦  «        ‚| dd …         } t          | ¦  «        \  }} t          | ¦  «        \  }} t          | ¦  «        \  }} t	          | ¦  «        \  }} |dk    rt          d¦  «        ‚t          | ¦  «        \  }} t          | ¦  «        \  }} | rt          d¦  «        ‚t          |¦  «        dz  dk    rt          d	¦  «        ‚|d
k    r|}�nA||fdk    rt          d|›d|›�¦  «        ‚t          |¦  «        \  }	}t	          |¦  «        \  }
}t          |	¦  «        dk    rt          d¦  «        ‚|rt          d¦  «        ‚t          j        |¦  «                             ¦   «         }g }d}t          dd¦  «        D �]$}t          j        |	t          j        d|¦  «        z   ¦  «                             ¦   «         }t          |d||d¦  «        }t          j        dgt          j        d|¦  «        ¢R Ž }t          |¦  «        }t          d|
¦  «        D ]p}t          |dt          j        |¦  «                             ¦   «         |d¦  «        }t          j        dgt          j        d|¦  «        ¢R Ž }t          |||¬¦  «         Œq|                     |d d…         ¦  «         �Œ&d                     d„ t%          |Ž D ¦   «         ¦  «        }t'          j        |d d…         t&          j        d|dd…         ¬¦  «        }|                     |¦  «        }t	          |¦  «        \  }}t	          |¦  «        \  }}||k    rt          d¦  «        ‚t          |¦  «        \  }}||fS ) Ns   openssh-key-v1 zIncorrect magic valueé   r   zWe only handle 1 key at a timezToo much dataé   r   zIncorrect payload lengthÚnone)z
aes256-ctrÚbcryptzUnsupported encryption scheme ú/é   zIncorrect salt lengthzToo much data in kdfoptionss    OxychromaticBlowfishSwatDynamiteé   r   é   Fz	<IIIIIIIIz	>IIIIIIII)Úoutputé   r   c                 óR   — g | ]$\  }}t          |¦  «        t          |¦  «        z   ‘Œ%S © )r   )Ú.0ÚaÚbs      r   ú
<listcomp>z2import_openssh_private_generic.<locals>.<listcomp>y   s,   € ÐGÐGÐG©v°°1�4 ™7œ7¥4¨¡7¤7™?ÐGÐGÐGr   é    é0   )ÚnonceÚinitial_valuezIncorrect checksum)Ú
startswithr   r   r   r   r   r   ÚnewÚdigestÚranger   Úpackr   r   Ú	bytearrayr   ÚappendÚjoinÚzipr   ÚMODE_CTRÚdecrypt)r   ÚpasswordÚ
ciphernameÚkdfnameÚ
kdfoptionsÚnumber_of_keysÚ_Ú	encryptedÚ	decryptedÚsaltÚ
iterationsÚ
pwd_sha512ÚstripesÚconstantÚcountÚsalt_sha512Úout_leÚoutÚaccÚresultÚcipherÚ	checkint1Ú	checkint2Ússh_names                           r   Úimport_openssh_private_genericr\   A   s˜  € ð �?Š?Ð0Ñ1Ô1ð 2ÝÐ0Ñ1Ô1Ð1Ø���Œ9€Då" 4Ñ(Ô(Ñ€J�Ý Ñ%Ô%�M€GˆTÝ! $Ñ'Ô'Ñ€J�Ý$ T™?œ?Ñ€N�Dà˜ÒÐÝÐ9Ñ:Ô:Ð:å˜$ÑÔ�G€A€tÝ  Ñ&Ô&�O€IˆtØð *Ý˜Ñ)Ô)Ð)å
ˆ9�~„~˜Ñ˜QÒÐÝÐ3Ñ4Ô4Ð4ð �VÒÐØˆ	‰	à˜Ð Ð$<Ò<Ð<Ý�*ÀjÀjÀjÐRYÐRYÐZÑ[Ô[Ð[å% jÑ1Ô1ÑˆˆjÝ!*¨:Ñ!6Ô!6Ñˆ
�Jåˆt‰9Œ9˜Š?ˆ?ÝÐ4Ñ5Ô5Ð5Øð 	<ÝÐ:Ñ;Ô;Ð;å”Z Ñ)Ô)×0Ò0Ñ2Ô2ˆ
àˆØ6ˆÝ˜1˜a‘[”[ð 		%ñ 		%ˆEÝ œ* T­F¬K¸¸eÑ,DÔ,DÑ%DÑEÔE×LÒLÑNÔNˆKÝ! *¨a°¸hÈÑNÔNˆFÝ”+˜kÐO­F¬M¸+ÀvÑ,NÔ,NÐOÐOÐOˆCÝ˜C‘.”.ˆCÝ˜1˜jÑ)Ô)ð -ð -�Ý% j°!µV´ZÀ±_´_×5KÒ5KÑ5MÔ5MÈxÐY^Ñ_Ô_�Ý”k +ÐSµ´¸kÈ6Ñ0RÔ0RÐSÐSÐS�Ý�s˜C¨Ð,Ñ,Ô,Ð,Ð,Ø�NŠN˜3˜s ˜sœ8Ñ$Ô$Ð$Ñ$à—’ÐGÐG½¸g¸ÐGÑGÔGÑHÔHˆå”˜   œÝœØ"Ø'-¨b°¨hÔ'7ð9ñ 9ô 9ˆð —N’N 9Ñ-Ô-ˆ	å$ YÑ/Ô/Ñ€IˆyÝ$ YÑ/Ô/Ñ€IˆyØ�IÒÐÝÐ-Ñ.Ô.Ð.Ý% iÑ0Ô0Ñ€Hˆià�YÐÐr   )r   ÚCryptodome.Cipherr   ÚCryptodome.Hashr   ÚCryptodome.Protocol.KDFr   ÚCryptodome.Util.strxorr   ÚCryptodome.Util.py3compatr   r   r	   r   r   r   r$   r\   r1   r   r   ú<module>rb      sÐ   ðð> €€€à !Ð !Ð !Ð !Ð !Ð !Ø "Ð "Ð "Ð "Ð "Ð "Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð$ð $ð $ðð ð ð
2ð 2ð 2ðFð Fð Fð Fð Fr   