U q`'@sddlZddlZddlmZddlmZddlmZddlm Z ddl m Z e e ej e e ddd Zde e e d d d Ze e ej e eje ej e fdd dZde e e d ddZde e e dddZde e e dddZGdddeZdS)N) _get_backend)Cipher)AES)ECB)bytes_eq) wrapping_keyarreturnc Cstt|t|}t|}tdD]d}t|D]V}||||}tdt d|ddd|||dA}|dd||<q2q&| dkst |d |S)N>Qr) rrr encryptorlenrangeupdatestructpackunpackfinalizeAssertionErrorjoin) rrr backendrnjibr M/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/primitives/keywrap.py _wrap_cores  &r")r key_to_wrapr csxt|}t|dkrtdtdkr0tdtddkrHtdd}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! 5sz aes_key_wrap..)rr ValueErrorrr")rr#rrr r r-r! aes_key_wrap's  r0c Cstt|t|}t|}ttdD]l}tt|D]Z}tdt d|d|||dA||}| |} | dd}| dd||<q:q*| dkst ||fS)Nr r rrr rr) rrr decryptorrreversedrrrrrrr) rrr rr1rrrZatrrr r r! _unwrap_core9s   r3cst|}t|dkrtddtdt}dtdd}d|tdkrtt|t|}| |}| dkst |Sfdd t d tdD}t ||||SdS) Nr$r(YYz>ir rcsg|]}||dqSr*r r+r-r r!r.dsz-aes_key_wrap_with_padding..r)rrr/rrrrrrrrrrr")rr#raivpadrrr r r-r!aes_key_wrap_with_paddingRs   r8)r wrapped_keyr c s~t|}tdkrtdt|dkr0tdtdkrtt|t|}|}| dkslt |dd}|dd}d}nLfdd t d tdD}| d } t|}t || ||\}}d|}td |d d\} d|| }t|dd d rXd|d| kr0d|krXnn$|d kr^t|| dd|s^t|d krl|S|d| SdS)Nr%zMust be at least 16 bytesr$r(rr rcsg|]}||dqSr*r r+r9r r!r.{sz/aes_key_unwrap_with_padding..rz>Ir4r5)rr InvalidUnwrapr/rrrr1rrrrpopr3rrrr) rr9rr1rrdatarr Z encrypted_aivZmlir r:r!aes_key_unwrap_with_paddinghsD             r?cst|}tdkrtdtddkr4tdt|dkrHtdd}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!r.sz"aes_key_unwrap..r) rrr<r/rr=r3rr)rr9rr6r rr r:r!aes_key_unwraps    r@c@s eZdZdS)r<N)__name__ __module__ __qualname__r r r r!r<sr<)N)N)N)N)rtypingZcryptography.hazmat.backendsrZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerbytesListr"r0Tupler3r8r?r@ Exceptionr<r r r r!sR          .