a au@sddlZddlZddlmZddlmZddlmZddlm Z e e ej e e dddZ de e ej e d d d Ze 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_keyarreturnc Cstt|t}t|}tdD]d}t|D]V}||||}tdt d|ddd|||dA}|dd||<q0q$| dksJ|d |S)N>Qr) rrr encryptorlenrangeupdatestructpackunpackfinalizejoin)rrrrnjibrL/usr/lib64/python3.9/site-packages/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 rr 7rz aes_key_wrap..)r ValueErrorrr)rr r!rrrr+r aes_key_wrap(s  r.c Cstt|t}t|}ttdD]l}tt|D]Z}tdt d|d|||dA||}| |}|dd}|dd||<q8q(| dksJ||fS)Nr r rr r rr) rrr decryptorrreversedrrrrrr) rrrr/rrrZatrrrrr _unwrap_core;s   r1cst|dvrtddtdt}dtdd}d|tdkrtt|t}||}| dksJ|Sfdd t d tdD}t |||SdS) Nr"r&YYz>ir rcsg|]}||dqSr(rr)r+rrr,irz-aes_key_wrap_with_padding..r) rr-rrrrrrrrrr)rr r!aivZpadrrrrr+raes_key_wrap_with_paddingVs   r5)r wrapped_keyr!r c srtdkrtdt|dvr(tdtdkrtt|t}|}|dksbJ|dd}|dd}d}nJfdd t d tdD}| d } t|}t || |\}}d |}t d |d d\} d|| }t|dd d rLd|d| kr$d|krLnn$|d krRt|| dd|sRt|d kr`|S|d| SdS)Nr#zMust be at least 16 bytesr"r&rr r csg|]}||dqSr(rr)r6rrr,rz/aes_key_unwrap_with_padding..rz>Ir2r3)r InvalidUnwrapr-rrrr/rrrpopr1rrrr) rr6r!r/rrdatarrZ encrypted_aivZmlirr7raes_key_unwrap_with_paddingms@            r<cstdkrtdtddkr,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(rr)r7rrr,rz"aes_key_unwrap..r)rr9r-rr:r1rr)rr6r!r4rrrr7raes_key_unwraps    r=c@s eZdZdS)r9N)__name__ __module__ __qualname__rrrrr9sr9)N)N)N)N)rtypingZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerbytesListrAnyr.Tupler1r5r<r= Exceptionr9rrrrsX         1