B \`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|}xttdD]h}xbt|D]V}||||}tdt d|ddd|||dA}|dd||<q6Wq(W| dkst |d |S)Nz>Qri) rrr encryptorlenrangeupdatestructpackunpackfinalizeAssertionErrorjoin) wrapping_keyarbackendr njibrY/opt/alt/python37/lib64/python3.7/site-packages/cryptography/hazmat/primitives/keywrap.py _wrap_cores,r!cspt|dkrtdtdkr(tdtddkr@tdd}fd d tdtdD}t||||S) N) z/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 bytesscsg|]}||dqS)r r).0r) key_to_wraprr /sz aes_key_wrap..)r ValueErrorrr!)rr&rrrr)r&r aes_key_wrap$s  r)c Cstt|t|}t|}xttdD]p}xjtt|D]Z}tdt d|d|||dA||}| |} | dd}| dd||<q>Wq,W| dkst ||fS)Nr z>Qrr r ir ) rrr decryptorrreversedrrrrrrr) rrrrr*rrrZatrrrrr _unwrap_core3s"   r,cst|dkrtddtdt}dtdd}d|tdkrtt|t|}||}| dkst |Sfdd t d tdD}t ||||SdS) N)r"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) rr(rrrrrr rrrrr!)rr&raivZpadr rrr)r&r aes_key_wrap_with_paddingGs   r/c 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 bytes)r"r#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 InvalidUnwrapr(rrrr*rrrrpopr,rrrr) rr0rr*rrdatarrZ encrypted_aivZmlir)r0r aes_key_unwrap_with_paddingZs2         ($ r5cstdkrtdtddkr,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 bytes)r"r#r$z/The wrapping key must be a valid AES key lengthscsg|]}||dqS)r r)r%r)r0rr r'sz"aes_key_unwrap..r )rr2r(rr3r,rr)rr0rr.rrr)r0r aes_key_unwraps    r6c@s eZdZdS)r2N)__name__ __module__ __qualname__rrrr r2sr2)Z __future__rrrrZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerr!r)r,r/r5r6 Exceptionr2rrrr s    +