o )%a' @sddlZddlZddlmZddlmZddlmZddlm Z ddl m Z de de d ej e d e fd d Z dde d e d e fddZde de d ej e d eje ej e ffddZ dde d e d e fddZ dde de d e fddZ dde de d e fddZGdddeZdS)N) _get_backend)Cipher)AES)ECB)bytes_eq wrapping_keyarreturnc Cstt|t|}t|}tdD]2}t|D]+}||||}tdt d|ddd|||dA}|dd||<qq| dksNJ|d |S)N>Qr) rrr encryptorlenrangeupdatestructpackunpackfinalizejoin) rrr backendrnjibrH/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/keywrap.py _wrap_cores  ( r! key_to_wrapcsxt|}t|dvrtdtdkrtdtddkr$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 bytescg|] }||dqSr r.0rr"rr 5z aes_key_wrap..)rr ValueErrorrr!)rr"rrr rr-r aes_key_wrap's  r1c Cstt|t|}t|}ttdD]6}tt|D]-}tdt d|d|||dA||}| |} | dd}| dd||<qq| dksTJ||fS)Nr r rrr rr) rrr decryptorrreversedrrrrrr) rrr rr2rrratrrrrr _unwrap_core9s    r5cst|}t|dvrtddtdt}dtdd}d|tdkrJtt|t|}| |}| dksHJ|Sfdd t d tdD}t ||||S) Nr#r'YYz>ir rcr)r*rr+r-rr r.dr/z-aes_key_wrap_with_padding..r) rrr0rrrrrrrrrr!)rr"raivpadrrr rr-r aes_key_wrap_with_paddingRs   r: wrapped_keyc srt|}tdkrtdt|dvrtdtdkrEtt|t|}|}| dks6J|dd}|dd}d}n&fdd t d tdD}| d } t|}t || ||\}}d |}td |d d\} d|| }t|dd d rd|d| krd|krnt|d krt|| dd|st|d kr|S|d| S)Nr$zMust be at least 16 bytesr#r'rr rcr)r*rr+r;rr r.{r/z/aes_key_unwrap_with_padding..rz>Ir6r7)rr InvalidUnwrapr0rrrr2rrrpopr5rrrr) rr;rr2rrdatarr encrypted_aivmlirr<r aes_key_unwrap_with_paddinghs8         " rCcst|}tdkrtdtddkrtdt|dvr$tdd}fd d tdtdD}|d}t||||\}}t||sKtd |S) Nr%zMust be at least 24 bytesr rz-The wrapped key must be a multiple of 8 bytesr#r'r(cr)r*rr+r<rr r.r/z"aes_key_unwrap..r) rrr>r0rr?r5rr)rr;rr8r rrr<r aes_key_unwraps     rDc@s eZdZdS)r>N)__name__ __module__ __qualname__rrrr r>sr>)N)rtypingcryptography.hazmat.backendsr&cryptography.hazmat.primitives.ciphersr1cryptography.hazmat.primitives.ciphers.algorithmsr,cryptography.hazmat.primitives.ciphers.modesr,cryptography.hazmat.primitives.constant_timerbytesListr!r1Tupler5r:rCrD Exceptionr>rrrr st          .