Bd\Rc@sdZddlTddlmZddlmZmZddlmZddl Tde fdYZ dZ d d Zd d d YZd S(s$Id$i(t*(tnumber(t bytes_to_longt long_to_bytes(tSHAterrorcBseZRS((t__name__t __module__(((s;/usr/lib64/python2.7/site-packages/Crypto/PublicKey/_DSA.pyR$scCs/|d}tj|j}tjtt|dj}td}xutddD]d}t||t||A}|dkr|dB}n|dkr|dB}n|d|}qbWxt|s|d}qWt dd|kot dd knr||fSt d dS( NiiiiiiillsBad q value generated( RtnewtdigestRRtbignumtrangetbordtisPrimetpowt RuntimeError(trandfunctSthash1thash2tqtitc((s;/usr/lib64/python2.7/site-packages/Crypto/PublicKey/_DSA.pyt generateQ's  %     . cCs|dkrtdnt}|r7|dnxt|\}|_t|ddd}ddi}}}|jd?d@} ttd| } ttd|d} x|d krxNtd|dD]9} tt j |t |t | j || || } q>W| | }||d|jd}| |krt |rPn|d||d}}qW|d krPn|r:|d q:q:||_t|d|jd}|r|d nx_t|||d}t|||}d|ko\|dknr|dkrPqq||_|r|dnx8t|d}d|ko|jknrPqq|t||||_|_|S(sgenerate(bits:int, randfunc:callable, progress_func:callable) Generate a DSA key of length 'bits', using 'randfunc' to get random data and 'progress_func', if present, to display the progress of the key generation. isKey length < 160 bitssp,q iiiiiiils4096 multiples failed sh,g sx,y i(t ValueErrortDSAobjRRtdivmodRR R RRRtbstrR R tptgtxty(tbitsRt progress_functobjRtntCtNtVtbtpowbtpowL1tktWtXRtpowerthRR((s;/usr/lib64/python2.7/site-packages/Crypto/PublicKey/_DSA.pyt generate_py9sZ   7    ,  RcBseZRS((RR(((s;/usr/lib64/python2.7/site-packages/Crypto/PublicKey/_DSA.pyRqsN((t __revision__tCrypto.PublicKey.pubkeyt Crypto.UtilRtCrypto.Util.numberRRt Crypto.HashRtCrypto.Util.py3compatt ExceptionRRtNoneR/R(((s;/usr/lib64/python2.7/site-packages/Crypto/PublicKey/_DSA.pyts    8