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$|d |S)N>Qr) rrr encryptorlenrangeupdatestructpackunpackjoin)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.0rrrr 7rz aes_key_wrap..)r ValueErrorrr)rrr rrrr*r aes_key_wrap(s  r-c Cstt|t}t|}ttdD]l}tt|D]Z}tdt d|d|||dA||}| |}|dd}|dd||<q8q(||fS)Nr r rr r r) rrr decryptorrreversedrrrrr) rrrr.rrrZatrrrrr _unwrap_core;s   r0cst|dvrtddtdt}dtdd}d|tdkrztt|t}||}|Sfddt d tdD}t |||SdS) Nr!r%YYz>ir csg|]}||dqSr'rr(r*rrr+irz-aes_key_wrap_with_padding..r) rr,rrrrrrrrr)rrr aivZpadrrrrr*raes_key_wrap_with_paddingVs   r4)r wrapped_keyr r c sbtdkrtdt|dvr(tdtdkrptt|t}|}|dd}|dd}d}nJfddtd tdD}| d } t|}t || |\}}d |}t d |d d\} d|| }t|dd d r.rrz>Ir1r2)r InvalidUnwrapr,rrrr.rrpopr0rrrr) rr5r r.rrdatarrZ encrypted_aivZmlirr6raes_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(r6rrr+rz"aes_key_unwrap..r)rr8r,rr9r0rr)rr5r r3rrrr6raes_key_unwraps    r<c@s eZdZdS)r8N)__name__ __module__ __qualname__rrrrr8sr8)N)N)N)N)rtypingZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerbytesListrAnyr-Tupler0r4r;r< Exceptionr8rrrrsX         1