ó Bd\Rc@sñdZdZdddddddgZd d lmZd d lZejd d krvejddkrvd dlTndefd„ƒYZ e ƒZ e j Z e j Z e j Z e jZe jZe jZd dlmZmZmZmZd S(sHA cryptographically strong version of Python's standard "random" module.s$Id$t StrongRandomt getrandbitst randrangetrandinttchoicetshuffletsampleiÿÿÿÿ(tRandomNiii(t*cBsMeZddd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS(cCs|dkr$|dkr$d|_nW|dk rH|dkrH||_n3|dkro|dk ro|j|_n tdƒ‚dS(Ns(Cannot specify both 'rng' and 'randfunc'(tNonet _randfunctreadt ValueError(tselftrngtrandfunc((s:/usr/lib64/python2.7/site-packages/Crypto/Random/random.pyt__init__$s  cCsR|jdkr$tjƒj|_nd|>d}|t|jt|dƒƒƒ@S(s0Return a python long integer with k random bits.liiN(R R RtnewR t bytes_to_longtceil_div(R tktmask((s:/usr/lib64/python2.7/site-packages/Crypto/Random/random.pyR.scGs„t|ƒdkr$|\}}}njt|ƒdkrK|\}}d}nCt|ƒdkru|\}d}d}ntdt|ƒfƒ‚t|ttfƒ sÐt|ttfƒ sÐt|ttfƒ rßtdƒ‚n|dkrútdƒ‚nt|||ƒ}|dkr"d}n|dkrJtd|||fƒ‚n|}x%||krw|jt|ƒƒ}qSW|||S( skrandrange([start,] stop[, step]): Return a randomly-selected element from range(start, stop, step).iiiis.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)( tlent TypeErrort isinstancetinttlongR RRtsize(R targststarttstoptstept num_choicestr((s:/usr/lib64/python2.7/site-packages/Crypto/Random/random.pyR5s2        cCswt|ttfƒ s,t|ttfƒ r;tdƒ‚n|j||dƒ}||koh|knsst‚|S(s0Return a random integer N such that a <= N <= b.s"randint requires integer argumentsi(RRRRRtAssertionError(R tatbtN((s:/usr/lib64/python2.7/site-packages/Crypto/Random/random.pyRWs ,"cCs8t|ƒdkr!tdƒ‚n||jt|ƒƒS(srReturn a random element from a (non-empty) sequence. If the seqence is empty, raises IndexError. isempty sequence(Rt IndexErrorR(R tseq((s:/usr/lib64/python2.7/site-packages/Crypto/Random/random.pyR_scCsOt|ƒ}x<tt|ƒƒD](}|j|jt|ƒƒƒ||s & `