a b @sddlZddlmZddlmZddlmZddlmZe e ej e e dddZ de e ej e d d d Z e e ej e eje ej e fdd d Zde e ej e d ddZde e ej e dddZde e ej e dddZGdddeZdS)N)Cipher)AES)ECB)bytes_eq) wrapping_keyarreturncCstt|t}t|}tdD]d}t|D]V}||||}tj|dddd|||dAj ddd}|dd||<q0q$| dksJ|d |S) Nbig byteorderlengthr) rrr encryptorlenrangeupdateint from_bytesto_bytesfinalizejoin)rrrrnjibr!M/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/keywrap.py _wrap_cores  $r#)r key_to_wrapbackendr csnt|dvrtdtdkr(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!.0rr$r!r" 5rz aes_key_wrap..)r ValueErrorrr#)rr$r%rrr!r/r" aes_key_wrap&s  r2c Cstt|t}t|}ttdD]l}tt|D]Z}tj|dd|||dAj ddd||}| |}|dd}|dd||<q8q(| dksJ||fS) Nr r r rr rrr) rrr decryptorrreversedrrrrrr) rrrr3rrrZatrr r!r!r" _unwrap_core9s  r5cst|dvrtddtjddd}dtdd}d|tdkrtt|t}||}|d ksJ|Sfd d t d tdD}t |||SdS) Nr&r*YYr rr rcsg|]}||dqSr,r!r-r/r!r"r0erz-aes_key_wrap_with_padding..r) rr1rrrrrrrrr#)rr$r%aivpadrr rr!r/r"aes_key_wrap_with_paddingPs    r;)r wrapped_keyr%r c srtdkrtdt|dvr(tdtdkrtt|t}|}|dksbJ|dd}|dd}d}nJfdd t d tdD}| d } t|}t || |\}}d |}t j|d dd d } d|| } t|dd drLd|d| kr$d|krLnn$| d krRt|| dd| sRt| d kr`|S|d| SdS)Nr'zMust be at least 16 bytesr&r*rr rcsg|]}||dqSr,r!r-r<r!r"r0}rz/aes_key_unwrap_with_padding..rr7r r r6r8)r InvalidUnwrapr1rrrr3rrrpopr5rrrr) rr<r%r3outrdatarrZ encrypted_aivZmlir r!r=r"aes_key_unwrap_with_paddingis@            rBcstdkrtdtddkr,tdt|dvr@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-r=r!r"r0rz"aes_key_unwrap..r)rr>r1rr?r5rr)rr<r%r9rrr!r=r"aes_key_unwraps    rCc@s eZdZdS)r>N)__name__ __module__ __qualname__r!r!r!r"r>sr>)N)N)N)N)typingZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerbytesListr#Anyr2Tupler5r;rBrC Exceptionr>r!r!r!r"sV         1