File manager - Edit - /opt/saltstack/salt/lib/python3.10/site-packages/Cryptodome/Math/__pycache__/Primality.cpython-310.pyc
Back
o ;j{, � @ s| d Z ddlmZ ddlmZ ddlmZ dZdZddd�Z d d � Z ddlmZ ee dd� �Zdd d�Zdd� Zdd� ZdS )zHFunctions to create and test prime numbers. :undocumented: __package__ � )�Random)�Integer)� iter_range� Nc C s< t | t�s t| �} | dv rtS | �� rtS td�}t| d �}|du r(t�� j}t|�}d}|�� r>|dL }|d7 }|�� s2t|�D ]Y}d}|||fv rltj d| d |d�}d| krc| d ksfJ � J �|||fv sLt ||| �} | ||fv ryqBtd|�D ]} t | d| �} | |kr� n| |kr�t S q~t S qBtS )a: Perform a Miller-Rabin primality test on an integer. The test is specified in Section C.3.1 of `FIPS PUB 186-4`__. :Parameters: candidate : integer The number to test for primality. iterations : integer The maximum number of iterations to perform before declaring a candidate a probable prime. randfunc : callable An RNG function where bases are taken from. :Returns: ``Primality.COMPOSITE`` or ``Primality.PROBABLY_PRIME``. .. __: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf �r � � � r Nr r )Z min_inclusiveZ max_inclusive�randfunc)� isinstancer �PROBABLY_PRIME�is_even� COMPOSITEr �new�readr Zrandom_range�pow)� candidateZ iterationsr ZoneZ minus_one�m�a�i�base�z�j� r �M/opt/saltstack/salt/lib/python3.10/site-packages/Cryptodome/Math/Primality.py�miller_rabin_test- sL �� ���r c C s� t | t�s t| �} | dv rtS | �� s| �� rtS dd� }|� D ]}| || fv r*q t�|| �}|dkr8t S |dkr> nq | d }|�� d }td�}td�}td�}td�} t|d dd�D ]v} |� |� ||9 }|| ; }| � |� | |9 } | |9 } | � ||� | �� r�| | 7 } | dL } | | ; } |�| �r�|� |� || 7 }|�� r�|| 7 }|dL }|| ; }|� | � |� ||� |�� r�|| 7 }|dL }|| ; }qa|� |� |� | � qa|dkr�tS tS )a_ Perform a Lucas primality test on an integer. The test is specified in Section C.3.3 of `FIPS PUB 186-4`__. :Parameters: candidate : integer The number to test for primality. :Returns: ``Primality.COMPOSITE`` or ``Primality.PROBABLY_PRIME``. .. __: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf r c s s0 � d} | V | dkr| d7 } n| d8 } | } q)Nr Tr r r )�valuer r r � alternate� s � �zlucas_test.<locals>.alternater ���r ) r r r r Zis_perfect_squarer Z jacobi_symbol�size_in_bitsr �setZmultiply_accumulateZis_oddZget_bit)r r �DZjs�K�rZU_iZV_iZU_tempZV_tempr r r r � lucas_testw sh � r$ )� sieve_base�d c s� |du r t �� j}t| t�st| �} t| �tv rtS zt| j t� W n t y- t Y S w d}| �� � zt t� fdd�|��d d }W n tyP d}Y nw t| ||d�tkr\tS t| �tkrdtS tS )a� Test if a number is prime. A number is qualified as prime if it passes a certain number of Miller-Rabin tests (dependent on the size of the number, but such that probability of a false positive is less than 10^-30) and a single Lucas test. For instance, a 1024-bit candidate will need to pass 4 Miller-Rabin tests. :Parameters: candidate : integer The number to test for primality. randfunc : callable The routine to draw random bytes from to select Miller-Rabin bases. :Returns: ``PROBABLE_PRIME`` if the number if prime with very high probability. ``COMPOSITE`` if the number is a composite. For efficiency reasons, ``COMPOSITE`` is also returned for small primes. N) )�� � )i � )i� � )i � )il � )i� � )iz r )i� � )i� r )it r c s � | d k S )Nr r ��x�Zbit_sizer r �<lambda> s z%test_probable_prime.<locals>.<lambda>r r �r )r r r r r �int�_sieve_baser �mapZfail_if_divisible_by� ValueErrorr r �list�filter� IndexErrorr r$ )r r Z mr_rangesZ mr_iterationsr r1 r �test_probable_prime� sB �������r; c K s� | � dd�}| � dd�}| � ddd� �}| rtd| �� ��|du r&td��|d k r.td ��|du r7t�� j}t}|tkrTtj||d�dB }||�sKq9t ||�}|tks=|S ) ax Generate a random probable prime. The prime will not have any specific properties (e.g. it will not be a *strong* prime). Random numbers are evaluated for primality until one passes all tests, consisting of a certain number of Miller-Rabin tests with random bases followed by a single Lucas test. The number of Miller-Rabin iterations is chosen such that the probability that the output number is a non-prime is less than 1E-30 (roughly 2^{-100}). This approach is compliant to `FIPS PUB 186-4`__. :Keywords: exact_bits : integer The desired size in bits of the probable prime. It must be at least 160. randfunc : callable An RNG function where candidate primes are taken from. prime_filter : callable A function that takes an Integer as parameter and returns True if the number can be passed to further primality tests, False if it should be immediately discarded. :Return: A probable prime in the range 2^exact_bits > p > 2^(exact_bits-1). .. __: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf � exact_bitsNr �prime_filterc S s dS )NTr r/ r r r r2 < s z)generate_probable_prime.<locals>.<lambda>�Unknown parameters: zMissing exact_bits parameter� zPrime number is not big enough.�r<