Ńņ ”>c@s„dZddklZddkTddklZdefd„ƒYZdZd d„Z d „Z d eifd „ƒYZ e Z d S( s6$Id: qNEW.py,v 1.8 2003/04/04 15:13:35 akuchling Exp $i’’’’(tpubkey(t*(tSHAterrorcBseZRS((t__name__t __module__(((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyRsi cCsātƒ}|o|dƒnx­td|ƒ|_t|iƒ|_}ddh}}}|dt}|dt} d| >} ttdƒ|dƒ} x|djo÷xNtd|dƒD]9} t t i |t |ƒt | ƒƒi ƒƒ|| || } q"W| | } | | d|id} | | jot| ƒoPn|d||d}}qŸW|djoPn|o|d ƒq!q!| |_| d|i}|o|d ƒnxct ||ƒƒ| d}t||| ƒ}d|jo| djno|djoPqq||_|o|d ƒnx;t |d ƒƒ}d|jo |ijnoPq„q„|t||| ƒ|_|_|S( ségenerate(bits:int, randfunc:callable, progress_func:callable) Generate a qNEW key of length 'bits', using 'randfunc' to get random data and 'progress_func', if present, to display the progress of the key generation. sp,q i iiilii’’’’s4096 values of p tried sh,g sx,y i(tqNEWobjtgetPrimetqt long_to_bytestseedtHASHBITStpowtlongtranget bytes_to_longRtnewtstrtdigesttisPrimetptgtxty(tbitstrandfunct progress_functobjtStCtNtVtntbtpowbtpowL1tkRtpowerthRR((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pytgenerates^   7   / !cCsktƒ}t|ƒdjo td‚nx;tt|ƒƒD]'}|i|}t||||ƒq<W|S(s‚construct(tuple:(long,long,long,long)|(long,long,long,long,long) Construct a qNEW object from a 4- or 5-tuple of numbers. iis%argument for construct() wrong length(ii(RtlenRRtkeydatatsetattr(ttupleRtitfield((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyt constructks   RcBs_eZdddddgZdd„Zd„Zd„Zd „Zd „Zd „Zd „Z RS( RRRRRtcCs¦|i|jo td‚n|djo td‚n|tddƒjo td‚nt|i||iƒ|i}||||i|i|i}||fS(NsK is greater than qisIllegal value of M (<0)il”sIllegal value of M (too large)(RRR RRR(tselftMtKtrts((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyt_signzs    #cCsõ|\}}|djp-||ijp|djp||ijodS|djo td‚n|djp|tddƒjodSt|i||iƒ}t|i|||iƒ}|||i}||i}||jodSdS(NisIllegal value of M (<0)il”i(RRR RRR(R0R1tsigR3R4tv1tv2tv((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyt_verify„s :  #  cCsdS(sBReturn the maximum number of bits that can be handled by this key.i ((R0((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pytsize”scCs t|dƒS(sQReturn a Boolean denoting whether the object contains private components.R(thasattr(R0((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyt has_private˜scCsdS(sPReturn a Boolean value recording whether this algorithm can generate signatures.i((R0((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pytcan_signscCsdS(sIReturn a Boolean value recording whether this algorithm can encrypt data.i((R0((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyt can_encrypt”scCs"t|i|i|i|ifƒS(s?Return a new key object containing only the public information.(R.RRRR(R0((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyt publickey„s( RRR)R5R:R;R=R>R?R@(((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyRws     N(t __revision__tCrypto.PublicKeyRtCrypto.Util.numbert Crypto.HashRt ExceptionRR tNoneR'R.Rtobject(((s;/usr/lib64/python2.6/site-packages/Crypto/PublicKey/qNEW.pyt s  S 2