3 L]V@sddlmZmZmZddlZddlmZddlmZddl m Z ddl m Z ddZ d d Zd d Zd dZddZddZGdddeZdS))absolute_importdivisionprint_functionN)Cipher)AES)ECB)bytes_eqc Cstt|t|j}t|}xttdD]h}xbt|D]V}|j|||}tjdtj d|ddd|||dA}|dd||<q6Wq(W|j dkst |dj |S)Nz>Qri) rrr encryptorlenrangeupdatestructpackunpackfinalizeAssertionErrorjoin) wrapping_keyarbackendr njibrP/tmp/pip-install-wfra5znf/cryptography/cryptography/hazmat/primitives/keywrap.py _wrap_cores,r!cspt|d krtdtdkr(tdtddkr@tdd }fd d tdtdD}t||||S) N z/The wrapping key must be a valid AES key lengthz)The key to wrap must be at least 16 bytesr rz-The key to wrap must be a multiple of 8 bytesscsg|]}||dqS)r r).0r) key_to_wraprr /sz aes_key_wrap..)r"r#r$)r ValueErrorrr!)rr&rrrr)r&r aes_key_wrap$s  r)c Cstt|t|j}t|}xttdD]p}xjtt|D]Z}tjdtj d|d|||dA||}|j |} | dd}| dd||<q>Wq,W|j dkst ||fS)Nr z>Qrr r r i) rrr decryptorrreversedrrrrrrr) rrrrr*rrrZatrrrrr _unwrap_core3s"   r,cst|d krtddtjdt}dtdd}d|tdkrtt|t|j}|j|}|j d kst |Sfd d t d tdD}t ||||SdS)Nr"r#r$z/The wrapping key must be a valid AES key lengthsYYz>ir r csg|]}||dqS)r r)r%r)r&rr r'Vsz-aes_key_wrap_with_padding..r)r"r#r$) rr(rrrrrr rrrrr!)rr&raivpadr rrr)r&r aes_key_wrap_with_paddingGs   r0c s|tdkrtdt|dkr(tdtdkrtt|t|j}|j}|jdksdt |dd}|dd}d}nLfd d t d tdD}|j d } t|}t || ||\}}dj |}tjd |d d\} d|| }t|dd d sVd|d| ko&d|kn sV|d kr\t|| dd| r\t|d krj|S|d| SdS)Nr"zMust be at least 16 bytesr#r$z/The wrapping key must be a valid AES key lengthr r r csg|]}||dqS)r r)r%r) wrapped_keyrr r'jsz/aes_key_unwrap_with_padding..rz>IsYYr-)r"r#r$)r InvalidUnwrapr(rrrr*rrrrpopr,rrrr) rr1rr*rrdatarrZ encrypted_aivZmlir)r1r aes_key_unwrap_with_paddingZs2         *& r6cstdkrtdtddkr,tdt|d kr@tdd }fd d tdtdD}|jd}t||||\}}t||std j|S)Nr#zMust be at least 24 bytesr rz-The wrapped key must be a multiple of 8 bytesr"r$z/The wrapping key must be a valid AES key lengthscsg|]}||dqS)r r)r%r)r1rr r'sz"aes_key_unwrap..r )r"r#r$)rr3r(rr4r,rr)rr1rr.rrr)r1r aes_key_unwraps    r7c@s eZdZdS)r3N)__name__ __module__ __qualname__rrrr r3sr3) __future__rrrrZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerr!r)r,r0r6r7 Exceptionr3rrrr s    +