§
    pïgì#  ã                   óø   — d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	m
Z
mZmZmZ d dlmZ  G d„ dej        ¦  «        Z G d„ d	ej        ¦  «        Z G d
„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚciphersÚcmacÚconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                   ó   — e Zd ZdZdS )ÚModeÚctrN)Ú__name__Ú
__module__Ú__qualname__ÚCounterMode© ó    úJ/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr   r      s   € € € € € Ø€K€K€Kr   r   c                   ó   — e Zd ZdZdZdZdS )ÚCounterLocationÚbefore_fixedÚafter_fixedÚmiddle_fixedN)r   r   r   ÚBeforeFixedÚ
AfterFixedÚMiddleFixedr   r   r   r   r      s   € € € € € Ø €KØ€JØ €K€K€Kr   r   c                   óö   — e Zd Zdej        dedededej        e         dedej        e         dej        e	         d	ej        e	         d
ej        e	         fd„Z
ededefd„¦   «         Zde	dede	fd„Zde	fd„ZdS )Ú_KBKDFDeriverÚprfÚmodeÚlengthÚrlenÚllenÚlocationÚbreak_locationÚlabelÚcontextÚfixedc                 ó˜  — t          |¦  «        sJ ‚t          |t          ¦  «        st          d¦  «        ‚t          |t          ¦  «        st          d¦  «        ‚|€|t          j        u rt          d¦  «        ‚|�|t          j        k    rt          d¦  «        ‚|�$t          |t          ¦  «        st          d¦  «        ‚|�|dk     rt          d¦  «        ‚|s|	r|
rt          d¦  «        ‚|�|                      |¦  «        st          d	¦  «        ‚|€|
€t          d
¦  «        ‚|�$t          |t          ¦  «        st          d¦  «        ‚|€d}|	€d}	t          j
        d|¦  «         t          j
        d|	¦  «         || _        || _        || _        || _        || _        || _        || _        || _        |	| _        d| _        |
| _        d S )Nzmode must be of type Modez(location must be of type CounterLocationzPlease specify a break_locationzJbreak_location is ignored when location is not CounterLocation.MiddleFixedz!break_location must be an integerr   z)break_location must be a positive integerz9When supplying fixed data, label and context are ignored.zrlen must be between 1 and 4zPlease specify an llenzllen must be an integerr   r)   r*   F)ÚcallableÚ
isinstancer   Ú	TypeErrorr   r   Ú
ValueErrorÚintÚ_valid_byte_lengthr   Ú_check_bytesÚ_prfÚ_modeÚ_lengthÚ_rlenÚ_llenÚ	_locationÚ_break_locationÚ_labelÚ_contextÚ_usedÚ_fixed_data)Úselfr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   s              r   Ú__init__z_KBKDFDeriver.__init__#   s  € õ ˜‰}Œ}ÐÐÐå˜$¥Ñ%Ô%ð 	9ÝÐ7Ñ8Ô8Ð8å˜(¥OÑ4Ô4ð 	HÝÐFÑGÔGÐGàÐ! hµ/Ô2MÐ&MÐ&MÝÐ>Ñ?Ô?Ð?ð Ð&Ø�OÔ7Ò7Ð7åð/ñô ð ð
 Ð%­j¸ÍÑ.MÔ.MÐ%ÝÐ?Ñ@Ô@Ð@àÐ%¨.¸1Ò*<Ð*<ÝÐHÑIÔIÐIàð 	�Wð 	 %ð 	ÝØNñô ð ð ˆ<˜t×6Ò6°tÑ<Ô<ˆ<ÝÐ;Ñ<Ô<Ð<àˆ<˜E˜MÝÐ5Ñ6Ô6Ð6àÐ¥J¨tµSÑ$9Ô$9ÐÝÐ5Ñ6Ô6Ð6àˆ=ØˆEàˆ?ØˆGåÔ˜7 EÑ*Ô*Ð*ÝÔ˜9 gÑ.Ô.Ð.ØˆŒ	ØˆŒ
ØˆŒØˆŒ
ØˆŒ
Ø!ˆŒØ-ˆÔØˆŒØˆŒØˆŒ
Ø ˆÔÐÐr   ÚvalueÚreturnc                 ó´   — t          | t          ¦  «        st          d¦  «        ‚t          j        d| ¦  «        }dt          |¦  «        cxk    rdk    sn dS dS )Nzvalue must be of type inté   é   FT)r.   r1   r/   r   Úint_to_bytesÚlen)rA   Ú	value_bins     r   r2   z _KBKDFDeriver._valid_byte_lengthl   sd   € å˜%¥Ñ%Ô%ð 	9ÝÐ7Ñ8Ô8Ð8åÔ& q¨%Ñ0Ô0ˆ	Ø•C˜	‘N”NÐ'Ð'Ò'Ð' aÒ'Ð'Ð'Ð'Ø�5Øˆtr   Úkey_materialÚprf_output_sizec                 ó¸  — | j         rt          ‚t          j        d|¦  «         d| _         | j         |z   }dg}t          j        d| j        ¦  «        }|t          dt          |¦  «        dz  ¦  «        dz
  k    rt          d¦  «        ‚|  
                    ¦   «         }| j        t          j        k    rd}|}ny| j        t          j        k    r|}d}n_t          | j        t"          ¦  «        r'| j        t          |¦  «        k    rt          d¦  «        ‚|d | j        …         }|| j        d …         }t%          d|dz   ¦  «        D ]u}	|                      |¦  «        }
t          j        |	| j        ¦  «        }||z   |z   }|
                     |¦  «         |                     |
                     ¦   «         ¦  «         Œvd                     |¦  «        d | j        …         S )	NrI   Tr   rD   é   é   zThere are too many iterations.z"break_location offset > len(fixed))r=   r   r   Ú_check_bytesliker6   rF   r7   ÚpowrG   r0   Ú_generate_fixed_inputr9   r   r   r   r.   r:   r1   Úranger4   ÚupdateÚappendÚfinalizeÚjoin)r?   rI   rJ   ÚroundsÚoutputÚr_binr+   Údata_before_ctrÚdata_after_ctrÚiÚhÚcounterÚ
input_datas                r   Úderivez_KBKDFDeriver.derivev   sÙ  € ØŒ:ð 	#Ý"Ð"åÔ˜~¨|Ñ<Ô<Ð<ØˆŒ
ð ”L�= OÑ3Ð4ˆà�ˆõ Ô" 1 d¤jÑ1Ô1ˆØ•C˜�3˜u™:œ:¨™>Ñ*Ô*¨QÑ.Ò.Ð.ÝÐ=Ñ>Ô>Ð>à×*Ò*Ñ,Ô,ˆàŒ>�_Ô8Ò8Ð8Ø!ˆOØ"ˆNˆNØŒ^�Ô9Ò9Ð9Ø#ˆOØ ˆNˆNåØÔ$¥cñô ð GàÔ&­¨U©¬Ò3Ð3Ý Ð!EÑFÔFÐFØ#Ð$: dÔ&:Ð$:Ô;ˆOØ" 4Ô#7Ð#9Ð#9Ô:ˆNå�q˜& 1™*Ñ%Ô%ð 	(ð 	(ˆAØ—	’	˜,Ñ'Ô'ˆAåÔ(¨¨D¬JÑ7Ô7ˆGØ(¨7Ñ2°^ÑCˆJà�HŠH�ZÑ Ô Ð à�MŠM˜!Ÿ*š*™,œ,Ñ'Ô'Ð'Ð'à�xŠx˜ÑÔ  $¤, Ô/Ð/r   c                 óÜ   — | j         r!t          | j         t          ¦  «        r| j         S t          j        | j        dz  | j        ¦  «        }d                     | j        d| j	        |g¦  «        S )NrM   r   ó    )
r>   r.   Úbytesr   rF   r6   r8   rU   r;   r<   )r?   Úl_vals     r   rP   z#_KBKDFDeriver._generate_fixed_input¦   sd   € ØÔð 	$¥
¨4Ô+;½UÑ CÔ Cð 	$ØÔ#Ð#åÔ" 4¤<°!Ñ#3°T´ZÑ@Ô@ˆà�xŠx˜œ g¨t¬}¸eÐDÑEÔEÐEr   N)r   r   r   ÚtypingÚCallabler   r1   ÚOptionalr   rb   r@   ÚstaticmethodÚboolr2   r_   rP   r   r   r   r!   r!   "   s8  € € € € € ðG!àŒ_ðG!ð ðG!ð ð	G!ð
 ðG!ð Œo˜cÔ"ðG!ð "ðG!ð œ¨Ô,ðG!ð Œ˜uÔ%ðG!ð ” Ô'ðG!ð Œ˜uÔ%ðG!ð G!ð G!ð G!ðR ð #ð ¨$ð ð ð ñ „\ðð.0 5ð .0¸3ð .0À5ð .0ð .0ð .0ð .0ð`F uð Fð Fð Fð Fð Fð Fr   r!   c                   ó  — e Zd Z	 dddœdej        dedededej        e         de	d	ej        e
         d
ej        e
         dej        e
         dej        dej        e         fd„Zde
dej        fd„Zde
de
fd„Zde
de
ddfd„ZdS )Ú	KBKDFHMACN©r(   Ú	algorithmr#   r$   r%   r&   r'   r)   r*   r+   Úbackendr(   c                ó*  — t          |t          j        ¦  «        st          dt          j        ¦  «        ‚ddlm} |                     |¦  «        st          dt          j        ¦  «        ‚|| _	        t          | j        |||||||||	¦
  «
        | _        d S )Nz5Algorithm supplied is not a supported hash algorithm.r   ©rm   z5Algorithm supplied is not a supported hmac algorithm.)r.   r   ÚHashAlgorithmr   r   ÚUNSUPPORTED_HASHÚ,cryptography.hazmat.backends.openssl.backendrm   Úhmac_supportedÚ
_algorithmr!   r4   Ú_deriver)r?   rl   r#   r$   r%   r&   r'   r)   r*   r+   rm   r(   Úossls                r   r@   zKBKDFHMAC.__init__°   sÃ   € õ ˜)¥VÔ%9Ñ:Ô:ð 	Ý&ØGÝÔ)ñô ð ð
	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ×"Ò" 9Ñ-Ô-ð 	Ý&ØGÝÔ)ñô ð ð
 $ˆŒå%ØŒIØØØØØØØØØñ
ô 
ˆŒˆˆr   rI   rB   c                 ó6   — t          j        || j        ¦  «        S ©N)r   ÚHMACrt   ©r?   rI   s     r   r4   zKBKDFHMAC._prfÞ   s   € ÝŒy˜ t¤Ñ7Ô7Ð7r   c                 óL   — | j                              || j        j        ¦  «        S rx   )ru   r_   rt   Údigest_sizerz   s     r   r_   zKBKDFHMAC.deriveá   s   € ØŒ}×#Ò# L°$´/Ô2MÑNÔNÐNr   Úexpected_keyc                 ód   — t          j        |                      |¦  «        |¦  «        st          ‚d S rx   ©r
   Úbytes_eqr_   r   ©r?   rI   r}   s      r   ÚverifyzKBKDFHMAC.verifyä   ó3   € ÝÔ% d§k¢k°,Ñ&?Ô&?ÀÑNÔNð 	ÝÐð	ð 	r   rx   )r   r   r   r   rp   r   r1   rd   rf   r   rb   ÚAnyr@   r   ry   r4   r_   r‚   r   r   r   rj   rj   ¯   sK  € € € € € ð #ð,
ð 04ð,
ð ,
ð ,
àÔ'ð,
ð ð,
ð ð	,
ð
 ð,
ð Œo˜cÔ"ð,
ð "ð,
ð Œ˜uÔ%ð,
ð ” Ô'ð,
ð Œ˜uÔ%ð,
ð ”ð,
ð œ¨Ô,ð,
ð ,
ð ,
ð ,
ð\8 ð 8¨4¬9ð 8ð 8ð 8ð 8ðO 5ð O¨Uð Oð Oð Oð Oð 5ð ¸ð À$ð ð ð ð ð ð r   rj   c                   óþ   — e Zd Z	 dddœdedededej        e         dedej        e         d	ej        e         d
ej        e         dej	        dej        e         fd„Z
dedej        fd„Zdedefd„Zdededdfd„ZdS )Ú	KBKDFCMACNrk   r#   r$   r%   r&   r'   r)   r*   r+   rm   r(   c                ó  — t          |t          j        ¦  «        rt          |t          j        ¦  «        st	          dt
          j        ¦  «        ‚|| _        d | _        t          | j
        |||||||||	¦
  «
        | _        d S )Nú7Algorithm supplied is not a supported cipher algorithm.)Ú
issubclassr   ÚBlockCipherAlgorithmÚCipherAlgorithmr   r   ÚUNSUPPORTED_CIPHERrt   Ú_cipherr!   r4   ru   )r?   rl   r#   r$   r%   r&   r'   r)   r*   r+   rm   r(   s               r   r@   zKBKDFCMAC.__init__ê   s•   € õ Ø•wÔ3ñ
ô 
ð 	å˜I¥wÔ'>Ñ?Ô?ð	õ 'ØIÝÔ+ñô ð ð
 $ˆŒØFJˆŒå%ØŒIØØØØØØØØØñ
ô 
ˆŒˆˆr   Ú_rB   c                 óF   — | j         €J ‚t          j        | j         ¦  «        S rx   )r�   r	   ÚCMAC)r?   rŽ   s     r   r4   zKBKDFCMAC._prf  s"   € ØŒ|Ð'Ð'Ð'åŒy˜œÑ&Ô&Ð&r   rI   c                 ó  — |                       |¦  «        | _        | j        €J ‚ddlm} |                     | j        ¦  «        st          dt          j        ¦  «        ‚| j         	                    || j        j
        dz  ¦  «        S )Nr   ro   rˆ   rM   )rt   r�   rr   rm   Úcmac_algorithm_supportedr   r   rŒ   ru   r_   Ú
block_size)r?   rI   rv   s      r   r_   zKBKDFCMAC.derive  sš   € Ø—’ |Ñ4Ô4ˆŒàŒ|Ð'Ð'Ð'ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ×,Ò,¨T¬\Ñ:Ô:ð 	Ý&ØIÝÔ+ñô ð ð
 Œ}×#Ò# L°$´,Ô2IÈQÑ2NÑOÔOÐOr   r}   c                 ód   — t          j        |                      |¦  «        |¦  «        st          ‚d S rx   r   r�   s      r   r‚   zKBKDFCMAC.verify'  rƒ   r   rx   )r   r   r   r   r1   rd   rf   r   rb   r„   r@   r	   r�   r4   r_   r‚   r   r   r   r†   r†   é   s@  € € € € € ð #ð%
ð 04ð%
ð %
ð %
ð ð%
ð ð	%
ð
 ð%
ð Œo˜cÔ"ð%
ð "ð%
ð Œ˜uÔ%ð%
ð ” Ô'ð%
ð Œ˜uÔ%ð%
ð ”ð%
ð œ¨Ô,ð%
ð %
ð %
ð %
ðN'�eð ' ¤	ð 'ð 'ð 'ð 'ð
P 5ð P¨Uð Pð Pð Pð Pð" 5ð ¸ð À$ð ð ð ð ð ð r   r†   )rd   Úcryptographyr   Úcryptography.exceptionsr   r   r   r   Úcryptography.hazmat.primitivesr   r	   r
   r   r   Ú"cryptography.hazmat.primitives.kdfr   ÚEnumr   r   r!   rj   r†   r   r   r   ú<module>rš      sµ  ðð
 €€€à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ˆ5Œ:ñ ô ð ð!ð !ð !ð !ð !�e”jñ !ô !ð !ðJFð JFð JFð JFð JFñ JFô JFð JFðZ7ð 7ð 7ð 7ð 7Ð%ñ 7ô 7ð 7ðt@ð @ð @ð @ð @Ð%ñ @ô @ð @ð @ð @r   