U e]V@sddlmZmZmZddlZddlmZddlmZddl m Z ddl m Z ddZ d d Zd d Zd dZddZddZGdddeZdS))absolute_importdivisionprint_functionN)Cipher)AES)ECB)bytes_eqc Cstt|t|}t|}tdD]d}t|D]V}||||}tdt d|ddd|||dA}|dd||<q2q&| dkst |d |S)N>Qr) rrr encryptorlenrangeupdatestructpackunpackfinalizeAssertionErrorjoin) wrapping_keyarbackendrnjibr!H/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/keywrap.py _wrap_cores  &r#cspt|dkrtdtdkr(tdtddkr@tdd}fd d tdtdD}t||||S) N /The wrapping key must be a valid AES key lengthr%z)The key to wrap must be at least 16 bytesr rz-The key to wrap must be a multiple of 8 bytescsg|]}||dqSr r!.0r key_to_wrapr!r" /sz aes_key_wrap..)r ValueErrorrr#)rr.rrrr!r-r" aes_key_wrap$s  r1c Cstt|t|}t|}ttdD]l}tt|D]Z}tdt d|d|||dA||}| |} | dd}| dd||<q:q*| dkst ||fS)Nr r rr r r r) rrr decryptorrreversedrrrrrrr) rrrrr2rrrZatrr r!r!r" _unwrap_core3s  r4cst|dkrtddtdt}dtdd}d|tdkrtt|t|}||}| dkst |Sfdd t d tdD}t ||||SdS) Nr$r(YYz>ir rcsg|]}||dqSr*r!r+r-r!r"r/Vsz-aes_key_wrap_with_padding..r) rr0rrrrrrrrrrr#)rr.raivZpadrr rr!r-r"aes_key_wrap_with_paddingGs   r8c svtdkrtdt|dkr(tdtdkrtt|t|}|}|dksdt |dd}|dd}d}nLfdd t d tdD}| d } t|}t || ||\}}d |}td |d d\} d|| }t|dd d rPd|d| kr(d|krPnn$|d krVt|| dd|sVt|d krd|S|d| SdS)Nr%zMust be at least 16 bytesr$r(rr r csg|]}||dqSr*r!r+ wrapped_keyr!r"r/jsz/aes_key_unwrap_with_padding..rz>Ir5r6)r InvalidUnwrapr0rrrr2rrrrpopr4rrrr) rr:rr2r rdatarrZ encrypted_aivZmlir!r9r"aes_key_unwrap_with_paddingZsB             r?cstdkrtdtddkr,tdt|dkr@tdd}fd d tdtdD}|d}t||||\}}t||std |S) Nr&zMust be at least 24 bytesr rz-The wrapped key must be a multiple of 8 bytesr$r(r)csg|]}||dqSr*r!r+r9r!r"r/sz"aes_key_unwrap..r)rr<r0rr=r4rr)rr:rr7rrr!r9r"aes_key_unwraps    r@c@s eZdZdS)r<N)__name__ __module__ __qualname__r!r!r!r"r<sr<)Z __future__rrrrZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerr#r1r4r8r?r@ Exceptionr<r!r!r!r"s    +