a oe.@sddlmZddlZddlmZddlmZddlmZddl m Z ddddd d d Z dddd dd ddZ ddddd ddZ dddd dd ddZdddd ddddZdddd ddddZGdddeZdS) ) annotationsN)Cipher)AES)ECB)bytes_eqbytesztyping.List[bytes]) 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)rr r rnjibr#GC:\Program Files\Certbot\pkgs\cryptography\hazmat\primitives\keywrap.py _wrap_cores  $r%z typing.Any)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#.0r!r&r#r$ 6rz aes_key_wrap..)r ValueErrorrr%)rr&r'r r r#r1r$ aes_key_wrap's  r4z'typing.Tuple[bytes, typing.List[bytes]]c Cstt|t}t|}ttdD]l}tt|D]Z}tj|dd|||dAj ddd||}| |}|dd}|dd||<q8q(| dksJ||fS) Nr rrrr rrr) rrr decryptorrreversedrrrrrr) rr r r5rr r!Zatrr"r#r#r$ _unwrap_core:s  r7cst|dvrtddtjddd}dtdd}d|tdkrtt|t}||}|d ksJ|Sfd d t d tdD}t |||SdS) Nr(r,YYrrr rcsg|]}||dqSr.r#r/r1r#r$r2frz-aes_key_wrap_with_padding..r) rr3rrrrrrrrr%)rr&r'aivZpadrr"r r#r1r$aes_key_wrap_with_paddingQs    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$r2~rz/aes_key_unwrap_with_padding..rr9rrr8r:)r InvalidUnwrapr3rrrr5rrrpopr7rrrr) rr=r'r5outr datarr Z encrypted_aivZmlir"r#r>r$aes_key_unwrap_with_paddingjs@            rCcstdkrtdtddkr,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$r2rz"aes_key_unwrap..r)rr?r3rr@r7rr)rr=r'r;r r r#r>r$aes_key_unwraps    rDc@s eZdZdS)r?N)__name__ __module__ __qualname__r#r#r#r$r?sr?)N)N)N)N)Z __future__rtypingZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timerr%r4r7r<rCrD Exceptionr?r#r#r#r$s     1