3 lá˜_bã@s¤ddlmZmZmZddlZddlmZddlmZddl m Z ddl m Z ddl mZdd „Zdd d „Zd d „Zddd„Zddd„Zddd„ZGdd„deƒZdS)é)Úabsolute_importÚdivisionÚprint_functionN)Ú _get_backend)ÚCipher)ÚAES)ÚECB)Úbytes_eqc Cs²tt|ƒtƒ|ƒjƒ}t|ƒ}xttdƒD]h}xbt|ƒD]V}|j|||ƒ}tjdtj d|dd…ƒd|||dAƒ}|dd…||<q6Wq(W|j ƒdks¤t ‚|dj |ƒS)Néz>Qéréóiøÿÿÿ) rrrÚ encryptorÚlenÚrangeÚupdateÚstructÚpackÚunpackÚfinalizeÚAssertionErrorÚjoin) Ú wrapping_keyÚaÚrÚbackendrÚnÚjÚiÚb©r ú/usr/lib64/python3.6/keywrap.pyÚ _wrap_cores,r"csxt|ƒ}t|ƒd krtdƒ‚tˆƒdkr0tdƒ‚tˆƒddkrHtdƒ‚d }‡fd d „tdtˆƒdƒDƒ}t||||ƒS) Nééé z/The wrapping key must be a valid AES key lengthz)The key to wrap must be at least 16 bytesr rz-The key to wrap must be a multiple of 8 bytess¦¦¦¦¦¦¦¦csg|]}ˆ||d…‘qS)r r )Ú.0r)Ú key_to_wrapr r!ú 1sz aes_key_wrap..)r#r$r%)rrÚ ValueErrorrr")rr'rrrr )r'r!Ú aes_key_wrap%s  r*c Cs¸tt|ƒtƒ|ƒjƒ}t|ƒ}x€ttdƒƒD]p}xjtt|ƒƒD]Z}tjdtj d|ƒd|||dAƒ||}|j |ƒ} | dd…}| dd…||<q>Wq,W|j ƒdks°t ‚||fS)Nr z>Qrr r r iøÿÿÿ) rrrÚ decryptorrÚreversedrrrrrrr) rrrrr+rrrZatrrr r r!Ú _unwrap_core5s"   r-csÄt|ƒ}t|ƒd krtdƒ‚dtjdtˆƒƒ}dtˆƒdd}ˆd|‰tˆƒdkr”tt|ƒtƒ|ƒjƒ}|j |ˆƒ}|j ƒd ks�t ‚|S‡fd d „t d tˆƒdƒDƒ}t ||||ƒSdS)Nr#r$r%z/The wrapping key must be a valid AES key lengths¦YY¦z>ir ór csg|]}ˆ||d…‘qS)r r )r&r)r'r r!r(\sz-aes_key_wrap_with_padding..r)r#r$r%)rrr)rrrrrrrrrrr")rr'rÚaivZpadrrrr )r'r!Úaes_key_wrap_with_paddingLs   r0c s„t|ƒ}tˆƒdkrtdƒ‚t|ƒdkr0tdƒ‚tˆƒdkrŠtt|ƒtƒ|ƒjƒ}|jˆƒ}|j ƒdkslt ‚|dd…}|dd…}d}nL‡fd d „t d tˆƒdƒDƒ}|j d ƒ} t|ƒ}t || ||ƒ\}}dj|ƒ}tjd |d d…ƒ\} d|| }t|dd …dƒ �s^d|d| k�o.d|kn �s^|d k�rdt|| d…d|ƒ �rdtƒ‚|d k�rr|S|d| …SdS)Nr#zMust be at least 16 bytesr$r%z/The wrapping key must be a valid AES key lengthr r r csg|]}ˆ||d…‘qS)r r )r&r)Ú wrapped_keyr r!r(qsz/aes_key_unwrap_with_padding..rz>Iés¦YY¦r.)r#r$r%)rrÚ InvalidUnwrapr)rrrr+rrrrÚpopr-rrrr ) rr1rr+rrÚdatarrZ encrypted_aivZmlir )r1r!Úaes_key_unwrap_with_padding`s4         *& r6cs t|ƒ}tˆƒdkrtdƒ‚tˆƒddkr4tdƒ‚t|ƒd krHtdƒ‚d }‡fd d „tdtˆƒdƒDƒ}|jdƒ}t||||ƒ\}}t||ƒs–tƒ‚d j|ƒS)Nr$zMust be at least 24 bytesr rz-The wrapped key must be a multiple of 8 bytesr#r%z/The wrapping key must be a valid AES key lengths¦¦¦¦¦¦¦¦csg|]}ˆ||d…‘qS)r r )r&r)r1r r!r(—sz"aes_key_unwrap..r )r#r$r%) rrr3r)rr4r-r r)rr1rr/rrr )r1r!Úaes_key_unwrap‹s    r7c@s eZdZdS)r3N)Ú__name__Ú __module__Ú __qualname__r r r r!r3 sr3)N)N)N)N)Z __future__rrrrZcryptography.hazmat.backendsrZ&cryptography.hazmat.primitives.ciphersrZ1cryptography.hazmat.primitives.ciphers.algorithmsrZ,cryptography.hazmat.primitives.ciphers.modesrZ,cryptography.hazmat.primitives.constant_timer r"r*r-r0r6r7Ú Exceptionr3r r r r!Ús        +