
[XMc           @   s  d  Z  d d l Z d d l Z d d l Z e j d d e d d d   Z d   Z d	   Z d d
 l	 m
 Z
 m Z i d e
 6d e 6Z d Z d Z d e f d     YZ d dd     YZ d e f d     YZ d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
ddddddddddg Z d S(  s  
A One-Time Password System based on RFC 2289

The class Authenticator contains the hashing-logic, and the parser for the
readable output. It also contains challenge which returns a string describing
the authentication scheme for a client.

OTP is a password container for an user on a server.

NOTE: Does not take care of transmitting the shared secret password.

At the end there's a dict called dict which is dictionary contain 2048
words for storing pronouncable 11-bit values. Taken from RFC 1760.

Uses the MD5- and SHA-algorithms for hashing

Todo: RFC2444, SASL (perhaps), parsing hex-responses

This module is deprecated.  Consider using U{another Python OTP
library<http://labix.org/python-otp>} instead.
iNs3   twisted.python.otp is deprecated since Twisted 8.3.t   categoryt
   stackleveli   c         C   s/   d } x" |  D] } d | t  |  } q W| S(   s    Convert digest to long l    i   (   t   ord(   t   st   resultt   byte(    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   stringToLong%   s    c         C   sq   g  } xd t  t |   d  D]L } d } x& |  d D] } d | t |  } q4 W| j |  |  d  }  q W| S(   s0    Convert digest to a list of four 32-bits words i   l    ii   (   t   xranget   lenR   t   append(   R   R   t   at   tmpR   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   stringToDWords,   s    c         C   s;   d } x. |  d k r6 t  |  d  | } |  d }  q	 W| S(   s    Convert long to digest t    l    i   l    (   t   chr(   t   lR   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   longToString7   s
    (   t   md5t   sha1R   R   i  i2   t   Unauthorizedc           B   s   e  Z d  Z RS(   s   the Unauthorized exception

    This exception is raised when an action is not allowed, or a user is not
    authenticated properly.
    (   t   __name__t
   __module__t   __doc__(    (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyR   E   s   t   OTPAuthenticatorc           B   st   e  Z d  Z e d  Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z RS(   sF  
    A One Time Password System

    Based on RFC 2289, which is based on a the S/KEY Authentication-scheme.
    It uses the MD5- and SHA-algorithms for hashing

    The variable OTP is at all times a 64bit string.

    @ivar hash: An object which can be used to compute hashes.  This is either
        L{md5} or L{sha1}.
    c         C   s   | |  _  d S(   s"   Set the hash to either md5 or sha1N(   t   hash(   t   selfR   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   __init__X   s    c         C   sp   d } x0 t  d  D]" } | t t j d d   } q Wx0 t  d  D]" } | t t j d d   } qF W| S(   sA   Return a 10 char random seed, with 6 lowercase chars and 4 digitsR   i   ia   iz   i   i0   i9   (   t   rangeR   t   randomt	   randrange(   R   t   seedt   x(    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   generateSeed]   s      c         C   s<   |  j  t k r |  j |  S|  j  t k r8 |  j |  Sd  S(   N(   R   R   t   foldDigest128R   t   foldDigest160(   R   t   otp(    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt
   foldDigestf   s    c         C   s   t  |  } | d | d A} | d | d A} d } x2 t d  D]$ } t | d @ | } | d ?} qC Wx2 t d  D]$ } t | d @ | } | d ?} qx W| S(	   s   Fold a 128 bit digest to 64 biti    i   i   i   R   i   i   i   (   R   R   R   (   R   t   otp128t   regst   p0t   p1t   SR
   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyR!   l   s    c         C   s   t  |  } | d | d A} | d | d A} | d | d A} d } x2 t d  D]$ } t | d @ | } | d ?} qU Wx2 t d  D]$ } t | d @ | } | d ?} q W| S(	   s   Fold a 160 bit digest to 64 biti    i   i   i   i   R   i   i   (   R   R   R   (   R   t   otp160R&   R'   R(   R)   R
   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyR"   z   s    c         C   s"   |  j  |  } |  j | j    S(   s'   Run through the hash and fold to 64 bit(   R   R$   t   digest(   R   R+   t   h(    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt
   hashUpdate   s    c         C   sL   t  j |  } |  j | |  } x# t |  D] } |  j |  } q/ W| S(   s`   Return a 64 bit OTP based on inputs
        Run through makeReadable to get a 6 word pass-phrase(   t   stringt   lowerR-   R   (   R   R   t   passwdt   sequenceR#   R
   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   generateOTP   s
    c         C   s?   d } x2 t  d d d  D] } | | d @} | d ?} q W| S(   s%   Calculate the parity from a 64bit OTPi    i@   i   i   (   R   (   R   R#   t   parityt   i(    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   calculateParity   s
    c         C   s   t  |  } g  } |  j |  } x; t d d d  D]' } | j t | | d d ?d @ q4 W| j t | d >d @| d @B t j |  S(	   s-   Returns a 6 word pass-phrase from a 64bit OTPi   ii   i	   i  i   i  i   (   R   R5   R   R	   t   dictR.   t   join(   R   R#   R+   t   listR3   R4   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   makeReadable   s    %!c         C   s   d t  |  j | | f S(   s=   Return a challenge in the format otp-<hash> <sequence> <seed>s   otp-%s %i %s(   t   hashidR   (   R   R   R1   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt	   challenge   s    c         C   s   t  j |  } x1 t t |   D] } t  j | |  | | <q" Wd } xD t d d  D]3 } | t t j | |   d | d d >B} qY Wt j | d  } | | d @d ?B} | d	 @|  j |  k r t	 d
   n  t
 |  } | S(   s   Decode the phrase, and return a 64bit OTP
        I will raise Unauthorized if the parity is wrong
        TODO: Add support for hex (MUST) and the '2nd scheme'(SHOULD)l    i    i   i   l    l   	 i  i   i   s   Parity error(   R.   t   splitR   R   t   uppert   longR6   t   indexR5   R   R   (   R   t   phraset   wordsR4   t   bR   R+   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   parsePhrase   s    1(   R   R   R   R   R   R    R$   R!   R"   R-   R2   R5   R9   R;   RC   (    (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyR   L   s   										
	t   OTPc           B   sA   e  Z d  Z d Z d Z d Z e e d  Z	 d   Z
 d   Z RS(   s   An automatic version of the OTP-Authenticator

    Updates the sequence and the keeps last approved password on success
    On the next authentication, the stored password is hashed and checked
    up against the one given by the user. If they match, the sequencecounter
    is decreased and the circle is closed.

    This object should be glued to each user

    Note:
    It does NOT reset the sequence when the combinations left approach zero,
    This has to be done manuelly by instancing a new object
    i    c         C   sQ   t  j |  |  |  j   } t  j |  | | | d  |  _ | |  _ | |  _ d S(   s5   Initialize the OTP-Sequence, and discard the passwordi   N(   R   R   R    R2   t   lastotpR   R1   (   R   R0   R1   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyR      s
    	c         C   s   t  j |  |  j |  j  } | S(   s   Return a challenge string(   R   R;   R   R1   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyR;      s    c         C   s   yl |  j  |  } |  j |  } |  j | k r_ | |  _ |  j t k r[ |  j d |  _ n  d St d   Wn t k
 r } t |   n Xd S(   s1   Test the phrase against the last challenge issuedi   t   okt   FailedN(   RC   R-   RE   R1   t   MINIMUMSEQUENCER   (   R   R@   R+   t   hasheddigestt   msg(    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   authenticate   s    	N(   R   R   R   t   NoneR   R1   RE   t   INITIALSEQUENCER   R   R;   RK   (    (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyRD      s   		t   At   ABEt   ACEt   ACTt   ADt   ADAt   ADDt   AGOt   AIDt   AIMt   AIRt   ALLt   ALPt   AMt   AMYt   ANt   ANAt   ANDt   ANNt   ANTt   ANYt   APEt   APSt   APTt   ARCt   AREt   ARKt   ARMt   ARTt   ASt   ASHt   ASKt   ATt   ATEt   AUGt   AUKt   AVEt   AWEt   AWKt   AWLt   AWNt   AXt   AYEt   BADt   BAGt   BAHt   BAMt   BANt   BARt   BATt   BAYt   BEt   BEDt   BEEt   BEGt   BENt   BETt   BEYt   BIBt   BIDt   BIGt   BINt   BITt   BOBt   BOGt   BONt   BOOt   BOPt   BOWt   BOYt   BUBt   BUDt   BUGt   BUMt   BUNt   BUSt   BUTt   BUYt   BYt   BYEt   CABt   CALt   CAMt   CANt   CAPt   CARt   CATt   CAWt   CODt   COGt   COLt   CONt   COOt   COPt   COTt   COWt   COYt   CRYt   CUBt   CUEt   CUPt   CURt   CUTt   DABt   DADt   DAMt   DANt   DARt   DAYt   DEEt   DELt   DENt   DESt   DEWt   DIDt   DIEt   DIGt   DINt   DIPt   DOt   DOEt   DOGt   DONt   DOTt   DOWt   DRYt   DUBt   DUDt   DUEt   DUGt   DUNt   EARt   EATt   EDt   EELt   EGGt   EGOt   ELIt   ELKt   ELMt   ELYt   EMt   ENDt   ESTt   ETCt   EVAt   EVEt   EWEt   EYEt   FADt   FANt   FARt   FATt   FAYt   FEDt   FEEt   FEWt   FIBt   FIGt   FINt   FIRt   FITt   FLOt   FLYt   FOEt   FOGt   FORt   FRYt   FUMt   FUNt   FURt   GABt   GADt   GAGt   GALt   GAMt   GAPt   GASt   GAYt   GEEt   GELt   GEMt   GETt   GIGt   GILt   GINt   GOt   GOTt   GUMt   GUNt   GUSt   GUTt   GUYt   GYMt   GYPt   HAt   HADt   HALt   HAMt   HANt   HAPt   HASt   HATt   HAWt   HAYt   HEt   HEMt   HENt   HERt   HEWt   HEYt   HIt   HIDt   HIMt   HIPt   HISt   HITt   HOt   HOBt   HOCt   HOEt   HOGt   HOPt   HOTt   HOWt   HUBt   HUEt   HUGt   HUHt   HUMt   HUTt   It   ICYt   IDAt   IFt   IKEt   ILLt   INKt   INNt   IOt   IONt   IQt   IRAt   IREt   IRKt   ISt   ITt   ITSt   IVYt   JABt   JAGt   JAMt   JANt   JARt   JAWt   JAYt   JETt   JIGt   JIMt   JOt   JOBt   JOEt   JOGt   JOTt   JOYt   JUGt   JUTt   KAYt   KEGt   KENt   KEYt   KIDt   KIMt   KINt   KITt   LAt   LABt   LACt   LADt   LAGt   LAMt   LAPt   LAWt   LAYt   LEAt   LEDt   LEEt   LEGt   LENt   LEOt   LETt   LEWt   LIDt   LIEt   LINt   LIPt   LITt   LOt   LOBt   LOGt   LOPt   LOSt   LOTt   LOUt   LOWt   LOYt   LUGt   LYEt   MAt   MACt   MADt   MAEt   MANt   MAOt   MAPt   MATt   MAWt   MAYt   MEt   MEGt   MELt   MENt   METt   MEWt   MIDt   MINt   MITt   MOBt   MODt   MOEt   MOOt   MOPt   MOSt   MOTt   MOWt   MUDt   MUGt   MUMt   MYt   NABt   NAGt   NANt   NAPt   NATt   NAYt   NEt   NEDt   NEEt   NETt   NEWt   NIBt   NILt   NIPt   NITt   NOt   NOBt   NODt   NONt   NORt   NOTt   NOVt   NOWt   NUt   NUNt   NUTt   Ot   OAFt   OAKt   OARt   OATt   ODDt   ODEt   OFt   OFFt   OFTt   OHt   OILt   OKt   OLDt   ONt   ONEt   ORt   ORBt   OREt   ORRt   OSt   OTTt   OURt   OUTt   OVAt   OWt   OWEt   OWLt   OWNt   OXt   PAt   PADt   PALt   PAMt   PANt   PAPt   PARt   PATt   PAWt   PAYt   PEAt   PEGt   PENt   PEPt   PERt   PETt   PEWt   PHIt   PIt   PIEt   PINt   PITt   PLYt   POt   PODt   POEt   POPt   POTt   POWt   PROt   PRYt   PUBt   PUGt   PUNt   PUPt   PUTt   QUOt   RAGt   RAMt   RANt   RAPt   RATt   RAWt   RAYt   REBt   REDt   REPt   RETt   RIBt   RIDt   RIGt   RIMt   RIOt   RIPt   ROBt   RODt   ROEt   RONt   ROTt   ROWt   ROYt   RUBt   RUEt   RUGt   RUMt   RUNt   RYEt   SACt   SADt   SAGt   SALt   SAMt   SANt   SAPt   SATt   SAWt   SAYt   SEAt   SECt   SEEt   SENt   SETt   SEWt   SHEt   SHYt   SINt   SIPt   SIRt   SISt   SITt   SKIt   SKYt   SLYt   SOt   SOBt   SODt   SONt   SOPt   SOWt   SOYt   SPAt   SPYt   SUBt   SUDt   SUEt   SUMt   SUNt   SUPt   TABt   TADt   TAGt   TANt   TAPt   TARt   TEAt   TEDt   TEEt   TENt   THEt   THYt   TICt   TIEt   TIMt   TINt   TIPt   TOt   TOEt   TOGt   TOMt   TONt   TOOt   TOPt   TOWt   TOYt   TRYt   TUBt   TUGt   TUMt   TUNt   TWOt   UNt   UPt   USt   USEt   VANt   VATt   VETt   VIEt   WADt   WAGt   WARt   WASt   WAYt   WEt   WEBt   WEDt   WEEt   WETt   WHOt   WHYt   WINt   WITt   WOKt   WONt   WOOt   WOWt   WRYt   WUt   YAMt   YAPt   YAWt   YEt   YEAt   YESt   YETt   YOUt   ABEDt   ABELt   ABETt   ABLEt   ABUTt   ACHEt   ACIDt   ACMEt   ACREt   ACTAt   ACTSt   ADAMt   ADDSt   ADENt   AFARt   AFROt   AGEEt   AHEMt   AHOYt   AIDAt   AIDEt   AIDSt   AIRYt   AJARt   AKINt   ALANt   ALECt   ALGAt   ALIAt   ALLYt   ALMAt   ALOEt   ALSOt   ALTOt   ALUMt   ALVAt   AMENt   AMESt   AMIDt   AMMOt   AMOKt   AMOSt   AMRAt   ANDYt   ANEWt   ANNAt   ANNEt   ANTEt   ANTIt   AQUAt   ARABt   ARCHt   AREAt   ARGOt   ARIDt   ARMYt   ARTSt   ARTYt   ASIAt   ASKSt   ATOMt   AUNTt   AURAt   AUTOt   AVERt   AVIDt   AVISt   AVONt   AVOWt   AWAYt   AWRYt   BABEt   BABYt   BACHt   BACKt   BADEt   BAILt   BAITt   BAKEt   BALDt   BALEt   BALIt   BALKt   BALLt   BALMt   BANDt   BANEt   BANGt   BANKt   BARBt   BARDt   BAREt   BARKt   BARNt   BARRt   BASEt   BASHt   BASKt   BASSt   BATEt   BATHt   BAWDt   BAWLt   BEADt   BEAKt   BEAMt   BEANt   BEARt   BEATt   BEAUt   BECKt   BEEFt   BEENt   BEERt   BEETt   BELAt   BELLt   BELTt   BENDt   BENTt   BERGt   BERNt   BERTt   BESSt   BESTt   BETAt   BETHt   BHOYt   BIASt   BIDEt   BIENt   BILEt   BILKt   BILLt   BINDt   BINGt   BIRDt   BITEt   BITSt   BLABt   BLATt   BLEDt   BLEWt   BLOBt   BLOCt   BLOTt   BLOWt   BLUEt   BLUMt   BLURt   BOARt   BOATt   BOCAt   BOCKt   BODEt   BODYt   BOGYt   BOHRt   BOILt   BOLDt   BOLOt   BOLTt   BOMBt   BONAt   BONDt   BONEt   BONGt   BONNt   BONYt   BOOKt   BOOMt   BOONt   BOOTt   BOREt   BORGt   BORNt   BOSEt   BOSSt   BOTHt   BOUTt   BOWLt   BOYDt   BRADt   BRAEt   BRAGt   BRANt   BRAYt   BREDt   BREWt   BRIGt   BRIMt   BROWt   BUCKt   BUDDt   BUFFt   BULBt   BULKt   BULLt   BUNKt   BUNTt   BUOYt   BURGt   BURLt   BURNt   BURRt   BURTt   BURYt   BUSHt   BUSSt   BUSTt   BUSYt   BYTEt   CADYt   CAFEt   CAGEt   CAINt   CAKEt   CALFt   CALLt   CALMt   CAMEt   CANEt   CANTt   CARDt   CAREt   CARLt   CARRt   CARTt   CASEt   CASHt   CASKt   CASTt   CAVEt   CEILt   CELLt   CENTt   CERNt   CHADt   CHARt   CHATt   CHAWt   CHEFt   CHENt   CHEWt   CHICt   CHINt   CHOUt   CHOWt   CHUBt   CHUGt   CHUMt   CITEt   CITYt   CLADt   CLAMt   CLANt   CLAWt   CLAYt   CLODt   CLOGt   CLOTt   CLUBt   CLUEt   COALt   COATt   COCAt   COCKt   COCOt   CODAt   CODEt   CODYt   COEDt   COILt   COINt   COKEt   COLAt   COLDt   COLTt   COMAt   COMBt   COMEt   COOKt   COOLt   COONt   COOTt   CORDt   COREt   CORKt   CORNt   COSTt   COVEt   COWLt   CRABt   CRAGt   CRAMt   CRAYt   CREWt   CRIBt   CROWt   CRUDt   CUBAt   CUBEt   CUFFt   CULLt   CULTt   CUNYt   CURBt   CURDt   CUREt   CURLt   CURTt   CUTSt   DADEt   DALEt   DAMEt   DANAt   DANEt   DANGt   DANKt   DAREt   DARKt   DARNt   DARTt   DASHt   DATAt   DATEt   DAVEt   DAVYt   DAWNt   DAYSt   DEADt   DEAFt   DEALt   DEANt   DEARt   DEBTt   DECKt   DEEDt   DEEMt   DEERt   DEFTt   DEFYt   DELLt   DENTt   DENYt   DESKt   DIALt   DICEt   DIEDt   DIETt   DIMEt   DINEt   DINGt   DINTt   DIREt   DIRTt   DISCt   DISHt   DISKt   DIVEt   DOCKt   DOESt   DOLEt   DOLLt   DOLTt   DOMEt   DONEt   DOOMt   DOORt   DORAt   DOSEt   DOTEt   DOUGt   DOURt   DOVEt   DOWNt   DRABt   DRAGt   DRAMt   DRAWt   DREWt   DRUBt   DRUGt   DRUMt   DUALt   DUCKt   DUCTt   DUELt   DUETt   DUKEt   DULLt   DUMBt   DUNEt   DUNKt   DUSKt   DUSTt   DUTYt   EACHt   EARLt   EARNt   EASEt   EASTt   EASYt   EBENt   ECHOt   EDDYt   EDENt   EDGEt   EDGYt   EDITt   EDNAt   EGANt   ELANt   ELBAt   ELLAt   ELSEt   EMILt   EMITt   EMMAt   ENDSt   ERICt   EROSt   EVENt   EVERt   EVILt   EYEDt   FACEt   FACTt   FADEt   FAILt   FAINt   FAIRt   FAKEt   FALLt   FAMEt   FANGt   FARMt   FASTt   FATEt   FAWNt   FEARt   FEATt   FEEDt   FEELt   FEETt   FELLt   FELTt   FENDt   FERNt   FESTt   FEUDt   FIEFt   FIGSt   FILEt   FILLt   FILMt   FINDt   FINEt   FINKt   FIREt   FIRMt   FISHt   FISKt   FISTt   FITSt   FIVEt   FLAGt   FLAKt   FLAMt   FLATt   FLAWt   FLEAt   FLEDt   FLEWt   FLITt   FLOCt   FLOGt   FLOWt   FLUBt   FLUEt   FOALt   FOAMt   FOGYt   FOILt   FOLDt   FOLKt   FONDt   FONTt   FOODt   FOOLt   FOOTt   FORDt   FOREt   FORKt   FORMt   FORTt   FOSSt   FOULt   FOURt   FOWLt   FRAUt   FRAYt   FREDt   FREEt   FRETt   FREYt   FROGt   FROMt   FUELt   FULLt   FUMEt   FUNDt   FUNKt   FURYt   FUSEt   FUSSt   GAFFt   GAGEt   GAILt   GAINt   GAITt   GALAt   GALEt   GALLt   GALTt   GAMEt   GANGt   GARBt   GARYt   GASHt   GATEt   GAULt   GAURt   GAVEt   GAWKt   GEARt   GELDt   GENEt   GENTt   GERMt   GETSt   GIBEt   GIFTt   GILDt   GILLt   GILTt   GINAt   GIRDt   GIRLt   GISTt   GIVEt   GLADt   GLEEt   GLENt   GLIBt   GLOBt   GLOMt   GLOWt   GLUEt   GLUMt   GLUTt   GOADt   GOALt   GOATt   GOERt   GOESt   GOLDt   GOLFt   GONEt   GONGt   GOODt   GOOFt   GOREt   GORYt   GOSHt   GOUTt   GOWNt   GRABt   GRADt   GRAYt   GREGt   GREWt   GREYt   GRIDt   GRIMt   GRINt   GRITt   GROWt   GRUBt   GULFt   GULLt   GUNKt   GURUt   GUSHt   GUSTt   GWENt   GWYNt   HAAGt   HAASt   HACKt   HAILt   HAIRt   HALEt   HALFt   HALLt   HALOt   HALTt   HANDt   HANGt   HANKt   HANSt   HARDt   HARKt   HARMt   HARTt   HASHt   HASTt   HATEt   HATHt   HAULt   HAVEt   HAWKt   HAYSt   HEADt   HEALt   HEARt   HEATt   HEBEt   HECKt   HEEDt   HEELt   HEFTt   HELDt   HELLt   HELMt   HERBt   HERDt   HEREt   HEROt   HERSt   HESSt   HEWNt   HICKt   HIDEt   HIGHt   HIKEt   HILLt   HILTt   HINDt   HINTt   HIREt   HISSt   HIVEt   HOBOt   HOCKt   HOFFt   HOLDt   HOLEt   HOLMt   HOLTt   HOMEt   HONEt   HONKt   HOODt   HOOFt   HOOKt   HOOTt   HORNt   HOSEt   HOSTt   HOURt   HOVEt   HOWEt   HOWLt   HOYTt   HUCKt   HUEDt   HUFFt   HUGEt   HUGHt   HUGOt   HULKt   HULLt   HUNKt   HUNTt   HURDt   HURLt   HURTt   HUSHt   HYDEt   HYMNt   IBISt   ICONt   IDEAt   IDLEt   IFFYt   INCAt   INCHt   INTOt   IONSt   IOTAt   IOWAt   IRISt   IRMAt   IRONt   ISLEt   ITCHt   ITEMt   IVANt   JACKt   JADEt   JAILt   JAKEt   JANEt   JAVAt   JEANt   JEFFt   JERKt   JESSt   JESTt   JIBEt   JILLt   JILTt   JIVEt   JOANt   JOBSt   JOCKt   JOELt   JOEYt   JOHNt   JOINt   JOKEt   JOLTt   JOVEt   JUDDt   JUDEt   JUDOt   JUDYt   JUJUt   JUKEt   JULYt   JUNEt   JUNKt   JUNOt   JURYt   JUSTt   JUTEt   KAHNt   KALEt   KANEt   KANTt   KARLt   KATEt   KEELt   KEENt   KENOt   KENTt   KERNt   KERRt   KEYSt   KICKt   KILLt   KINDt   KINGt   KIRKt   KISSt   KITEt   KLANt   KNEEt   KNEWt   KNITt   KNOBt   KNOTt   KNOWt   KOCHt   KONGt   KUDOt   KURDt   KURTt   KYLEt   LACEt   LACKt   LACYt   LADYt   LAIDt   LAINt   LAIRt   LAKEt   LAMBt   LAMEt   LANDt   LANEt   LANGt   LARDt   LARKt   LASSt   LASTt   LATEt   LAUDt   LAVAt   LAWNt   LAWSt   LAYSt   LEADt   LEAFt   LEAKt   LEANt   LEARt   LEEKt   LEERt   LEFTt   LENDt   LENSt   LENTt   LEONt   LESKt   LESSt   LESTt   LETSt   LIARt   LICEt   LICKt   LIEDt   LIENt   LIESt   LIEUt   LIFEt   LIFTt   LIKEt   LILAt   LILTt   LILYt   LIMAt   LIMBt   LIMEt   LINDt   LINEt   LINKt   LINTt   LIONt   LISAt   LISTt   LIVEt   LOADt   LOAFt   LOAMt   LOANt   LOCKt   LOFTt   LOGEt   LOISt   LOLAt   LONEt   LONGt   LOOKt   LOONt   LOOTt   LORDt   LOREt   LOSEt   LOSSt   LOSTt   LOUDt   LOVEt   LOWEt   LUCKt   LUCYt   LUGEt   LUKEt   LULUt   LUNDt   LUNGt   LURAt   LUREt   LURKt   LUSHt   LUSTt   LYLEt   LYNNt   LYONt   LYRAt   MACEt   MADEt   MAGIt   MAIDt   MAILt   MAINt   MAKEt   MALEt   MALIt   MALLt   MALTt   MANAt   MANNt   MANYt   MARCt   MAREt   MARKt   MARSt   MARTt   MARYt   MASHt   MASKt   MASSt   MASTt   MATEt   MATHt   MAULt   MAYOt   MEADt   MEALt   MEANt   MEATt   MEEKt   MEETt   MELDt   MELTt   MEMOt   MENDt   MENUt   MERTt   MESHt   MESSt   MICEt   MIKEt   MILDt   MILEt   MILKt   MILLt   MILTt   MIMIt   MINDt   MINEt   MINIt   MINKt   MINTt   MIREt   MISSt   MISTt   MITEt   MITTt   MOANt   MOATt   MOCKt   MODEt   MOLDt   MOLEt   MOLLt   MOLTt   MONAt   MONKt   MONTt   MOODt   MOONt   MOORt   MOOTt   MOREt   MORNt   MORTt   MOSSt   MOSTt   MOTHt   MOVEt   MUCHt   MUCKt   MUDDt   MUFFt   MULEt   MULLt   MURKt   MUSHt   MUSTt   MUTEt   MUTTt   MYRAt   MYTHt   NAGYt   NAILt   NAIRt   NAMEt   NARYt   NASHt   NAVEt   NAVYt   NEALt   NEARt   NEATt   NECKt   NEEDt   NEILt   NELLt   NEONt   NEROt   NESSt   NESTt   NEWSt   NEWTt   NIBSt   NICEt   NICKt   NILEt   NINAt   NINEt   NOAHt   NODEt   NOELt   NOLLt   NONEt   NOOKt   NOONt   NORMt   NOSEt   NOTEt   NOUNt   NOVAt   NUDEt   NULLt   NUMBt   OATHt   OBEYt   OBOEt   ODINt   OHIOt   OILYt   OINTt   OKAYt   OLAFt   OLDYt   OLGAt   OLINt   OMANt   OMENt   OMITt   ONCEt   ONESt   ONLYt   ONTOt   ONUSt   ORALt   ORGYt   OSLOt   OTISt   OTTOt   OUCHt   OUSTt   OUTSt   OVALt   OVENt   OVERt   OWLYt   OWNSt   QUADt   QUITt   QUODt   RACEt   RACKt   RACYt   RAFTt   RAGEt   RAIDt   RAILt   RAINt   RAKEt   RANKt   RANTt   RAREt   RASHt   RATEt   RAVEt   RAYSt   READt   REALt   REAMt   REARt   RECKt   REEDt   REEFt   REEKt   REELt   REIDt   REINt   RENAt   RENDt   RENTt   RESTt   RICEt   RICHt   RICKt   RIDEt   RIFTt   RILLt   RIMEt   RINGt   RINKt   RISEt   RISKt   RITEt   ROADt   ROAMt   ROARt   ROBEt   ROCKt   RODEt   ROILt   ROLLt   ROMEt   ROODt   ROOFt   ROOKt   ROOMt   ROOTt   ROSAt   ROSEt   ROSSt   ROSYt   ROTHt   ROUTt   ROVEt   ROWEt   ROWSt   RUBEt   RUBYt   RUDEt   RUDYt   RUINt   RULEt   RUNGt   RUNSt   RUNTt   RUSEt   RUSHt   RUSKt   RUSSt   RUSTt   RUTHt   SACKt   SAFEt   SAGEt   SAIDt   SAILt   SALEt   SALKt   SALTt   SAMEt   SANDt   SANEt   SANGt   SANKt   SARAt   SAULt   SAVEt   SAYSt   SCANt   SCARt   SCATt   SCOTt   SEALt   SEAMt   SEARt   SEATt   SEEDt   SEEKt   SEEMt   SEENt   SEESt   SELFt   SELLt   SENDt   SENTt   SETSt   SEWNt   SHAGt   SHAMt   SHAWt   SHAYt   SHEDt   SHIMt   SHINt   SHODt   SHOEt   SHOTt   SHOWt   SHUNt   SHUTt   SICKt   SIDEt   SIFTt   SIGHt   SIGNt   SILKt   SILLt   SILOt   SILTt   SINEt   SINGt   SINKt   SIREt   SITEt   SITSt   SITUt   SKATt   SKEWt   SKIDt   SKIMt   SKINt   SKITt   SLABt   SLAMt   SLATt   SLAYt   SLEDt   SLEWt   SLIDt   SLIMt   SLITt   SLOBt   SLOGt   SLOTt   SLOWt   SLUGt   SLUMt   SLURt   SMOGt   SMUGt   SNAGt   SNOBt   SNOWt   SNUBt   SNUGt   SOAKt   SOARt   SOCKt   SODAt   SOFAt   SOFTt   SOILt   SOLDt   SOMEt   SONGt   SOONt   SOOTt   SOREt   SORTt   SOULt   SOURt   SOWNt   STABt   STAGt   STANt   STARt   STAYt   STEMt   STEWt   STIRt   STOWt   STUBt   STUNt   SUCHt   SUDSt   SUITt   SULKt   SUMSt   SUNGt   SUNKt   SUREt   SURFt   SWABt   SWAGt   SWAMt   SWANt   SWATt   SWAYt   SWIMt   SWUMt   TACKt   TACTt   TAILt   TAKEt   TALEt   TALKt   TALLt   TANKt   TASKt   TATEt   TAUTt   TEALt   TEAMt   TEARt   TECHt   TEEMt   TEENt   TEETt   TELLt   TENDt   TENTt   TERMt   TERNt   TESSt   TESTt   THANt   THATt   THEEt   THEMt   THENt   THEYt   THINt   THISt   THUDt   THUGt   TICKt   TIDEt   TIDYt   TIEDt   TIERt   TILEt   TILLt   TILTt   TIMEt   TINAt   TINEt   TINTt   TINYt   TIREt   TOADt   TOGOt   TOILt   TOLDt   TOLLt   TONEt   TONGt   TONYt   TOOKt   TOOLt   TOOTt   TOREt   TORNt   TOTEt   TOURt   TOUTt   TOWNt   TRAGt   TRAMt   TRAYt   TREEt   TREKt   TRIGt   TRIMt   TRIOt   TRODt   TROTt   TROYt   TRUEt   TUBAt   TUBEt   TUCKt   TUFTt   TUNAt   TUNEt   TUNGt   TURFt   TURNt   TUSKt   TWIGt   TWINt   TWITt   ULANt   UNITt   URGEt   USEDt   USERt   USESt   UTAHt   VAILt   VAINt   VALEt   VARYt   VASEt   VASTt   VEALt   VEDAt   VEILt   VEINt   VENDt   VENTt   VERBt   VERYt   VETOt   VICEt   VIEWt   VINEt   VISEt   VOIDt   VOLTt   VOTEt   WACKt   WADEt   WAGEt   WAILt   WAITt   WAKEt   WALEt   WALKt   WALLt   WALTt   WANDt   WANEt   WANGt   WANTt   WARDt   WARMt   WARNt   WARTt   WASHt   WASTt   WATSt   WATTt   WAVEt   WAVYt   WAYSt   WEAKt   WEALt   WEANt   WEARt   WEEDt   WEEKt   WEIRt   WELDt   WELLt   WELTt   WENTt   WEREt   WERTt   WESTt   WHAMt   WHATt   WHEEt   WHENt   WHETt   WHOAt   WHOMt   WICKt   WIFEt   WILDt   WILLt   WINDt   WINEt   WINGt   WINKt   WINOt   WIREt   WISEt   WISHt   WITHt   WOLFt   WONTt   WOODt   WOOLt   WORDt   WOREt   WORKt   WORMt   WORNt   WOVEt   WRITt   WYNNt   YALEt   YANGt   YANKt   YARDt   YARNt   YAWLt   YAWNt   YEAHt   YEARt   YELLt   YOGAt   YOKE(    (   R   t   warningsR.   R   t   warnt   DeprecationWarningR   R   R   t   twisted.python.hashlibR   R   R:   RM   RH   t	   ExceptionR   R   RD   R6   (    (    (    s6   /usr/lib/python2.7/dist-packages/twisted/python/otp.pyt   <module>   s$  			r2