File: //opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/random.pyo
�
Bd\Rc           @   s�   d  Z  d Z d d d d d d d g Z d	 d
 l m Z d	 d l Z e j d d
 k rv e j d d k rv d	 d l Tn  d e f d �  �  YZ	 e	 �  Z
 e
 j Z e
 j Z e
 j
 Z
 e
 j Z e
 j Z e
 j Z d	 d l m Z m Z m Z m Z d S(   sH   A cryptographically strong version of Python's standard "random" module.s   $Id$t   StrongRandomt   getrandbitst	   randranget   randintt   choicet   shufflet   samplei����(   t   RandomNi    i   i   (   t   *c           B   sM   e  Z d d d  � Z d �  Z d �  Z d �  Z d �  Z d �  Z d �  Z	 RS(   c         C   s   | d  k r$ | d  k r$ d  |  _ nW | d  k	 rH | d  k rH | |  _ n3 | d  k ro | d  k	 ro | j |  _ n t d � � d  S(   Ns(   Cannot specify both 'rng' and 'randfunc'(   t   Nonet	   _randfunct   readt
   ValueError(   t   selft   rngt   randfunc(    (    sG   /opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/random.pyt   __init__$   s    c         C   sR   |  j  d k r$ t j �  j |  _  n  d | >d } | t |  j  t | d � � � @S(   s0   Return a python long integer with k random bits.l    i   i   N(   R
   R	   R   t   newR   t
   bytes_to_longt   ceil_div(   R
   t   kt   mask(    (    sG   /opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/random.pyR   .   s    c         G   s�  t  | � d k r$ | \ } } } nj t  | � d k rK | \ } } d } nC t  | � d k ru | \ } d } d } n t d t  | � f � � t | t t f � s� t | t t f � s� t | t t f � r� t d � � n  | d k r� t d � � n  t | | | � } | d k  r"d } n  | d k  rJt d | | | f � � n  | } x% | | k rw|  j t | � � } qSW| | | S(	   sk   randrange([start,] stop[, step]):
        Return a randomly-selected element from range(start, stop, step).i   i   i   i    s.   randrange expected at most 3 arguments, got %ds$   randrange requires integer argumentss(   randrange step argument must not be zeros%   empty range for randrange(%r, %r, %r)(	   t   lent	   TypeErrort
   isinstancet   intt   longR   R   R   t   size(   R
   t   argst   startt   stopt   stept   num_choicest   r(    (    sG   /opt/alt/python27/lib64/python2.7/site-packages/Crypto/Random/random.pyR   5   s2    				c         C   sU   t  | t t f � s, t  | t t f � r; t d � � n  |  j | | d � } | S(   s0   Return a random integer N such that a <= N <= b.s"