U
    ;ßôg3  ã                   @   sŒ   d dl mZmZmZmZ d dlZddlmZ ddlm	Z	m
Z
 ejdkrTddlmZ n$ejdkrlddlmZ nddlmZ d	d
gZdd	„ ZdS )é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úpretty_message)Ú	type_nameÚbyte_clsÚdarwin)Ú
rand_bytesÚwin32Úconstant_comparer   c                 C   sž   t | tƒsttdt| ƒƒƒ‚t |tƒs8ttdt|ƒƒƒ‚t| ƒt|ƒkrLdS tjdk rrdd„ | D ƒ} dd„ |D ƒ}d}t| |ƒD ]\}}|||A O }q€|dkS )	zê
    Compares two byte strings in constant time to see if they are equal

    :param a:
        The first byte string

    :param b:
        The second byte string

    :return:
        A boolean if the two byte strings are equal
    z9
            a must be a byte string, not %s
            z9
            b must be a byte string, not %s
            F)é   c                 S   s   g | ]}t |ƒ‘qS © ©Úord©Ú.0Úcharr   r   ú1/tmp/pip-unpacked-wheel-x1gypflw/oscrypto/util.pyÚ
<listcomp>9   s     z$constant_compare.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r   r   r   r   r   r   r   :   s     r   )	Ú
isinstancer	   Ú	TypeErrorr   r   ÚlenÚsysÚversion_infoÚzip)ÚaÚbÚresultÚxÚyr   r   r   r      s&    
ü
ü
)Ú
__future__r   r   r   r   r   Ú_errorsr   Ú_typesr   r	   ÚplatformZ	_mac.utilr   Z	_win.utilZ_openssl.utilÚ__all__r   r   r   r   r   Ú<module>   s   

þ