text: """Constants used in various places."""
  
  class CertificateType:
      x509 = 0
      openpgp = 1
      cryptoID = 2
  
  class HandshakeType:
      hello_request = 0
      client_hello = 1
      server_hello = 2
      certificate = 11
      server_key_exchange = 12
      certificate_request = 13
      server_hello_done = 14
      certificate_verify = 15
      client_key_exchange = 16
      finished = 20
  
  class ContentType:
      change_cipher_spec = 20
      alert = 21
      handshake = 22
      application_data = 23
      all = (20,21,22,23)
  
  class AlertLevel:
      warning = 1
      fatal = 2
  
  class AlertDescription:
      """
      @cvar bad_record_mac: A TLS record failed to decrypt properly.
  
      If this occurs during a shared-key or SRP handshake it most likely
      indicates a bad password.  It may also indicate an implementation
      error, or some tampering with the data in transit.
  
      This alert will be signalled by the server if the SRP password is bad.  It
      may also be signalled by the server if the SRP username is unknown to the
      server, but it doesn't wish to reveal that fact.
  
      This alert will be signalled by the client if the shared-key username is
      bad.
  
      @cvar handshake_failure: A problem occurred while handshaking.
  
      This typically indicates a lack of common ciphersuites between client and
      server, or some other disagreement (about SRP parameters or key sizes,
      for example).
  
      @cvar protocol_version: The other party's SSL/TLS version was unacceptable.
  
      This indicates that the client and server couldn't agree on which version
      of SSL or TLS to use.
  
      @cvar user_canceled: The handshake is being cancelled for some reason.
  
      """
  
      close_notify = 0
      unexpected_message = 10
      bad_record_mac = 20
      decryption_failed = 21
      record_overflow = 22
      decompression_failure = 30
      handshake_failure = 40
      no_certificate = 41 #SSLv3
      bad_certificate = 42
      unsupported_certificate = 43
      certificate_revoked = 44
      certificate_expired = 45
      certificate_unknown = 46
      illegal_parameter = 47
      unknown_ca = 48
      access_denied = 49
      decode_error = 50
      decrypt_error = 51
      export_restriction = 60
      protocol_version = 70
      insufficient_security = 71
      internal_error = 80
      user_canceled = 90
      no_renegotiation = 100
      unknown_srp_username = 120
      missing_srp_username = 121
      untrusted_srp_parameters = 122
  
  class CipherSuite:
      TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA  = 0x0050
      TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0x0053
      TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0x0056
  
      TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0x0051
      TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0x0054
      TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0x0057
  
      TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A
      TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F
      TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035
      TLS_RSA_WITH_RC4_128_SHA = 0x0005
  
      srpSuites = []
      srpSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
      srpSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
      srpSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
      def getSrpSuites(ciphers):
          suites = []
          for cipher in ciphers:
              if cipher == "aes128":
                  suites.append(CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
              elif cipher == "aes256":
                  suites.append(CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
              elif cipher == "3des":
                  suites.append(CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
          return suites
      getSrpSuites = staticmethod(getSrpSuites)
  
      srpRsaSuites = []
      srpRsaSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA)
      srpRsaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
      srpRsaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
      def getSrpRsaSuites(ciphers):
          suites = []
          for cipher in ciphers:
              if cipher == "aes128":
                  suites.append(CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
              elif cipher == "aes256":
                  suites.append(CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
              elif cipher == "3des":
                  suites.append(CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA)
          return suites
      getSrpRsaSuites = staticmethod(getSrpRsaSuites)
  
      rsaSuites = []
      rsaSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA)
      rsaSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA)
      rsaSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA)
      rsaSuites.append(TLS_RSA_WITH_RC4_128_SHA)
      def getRsaSuites(ciphers):
          suites = []
          for cipher in ciphers:
              if cipher == "aes128":
                  suites.append(CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA)
              elif cipher == "aes256":
                  suites.append(CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA)
              elif cipher == "rc4":
                  suites.append(CipherSuite.TLS_RSA_WITH_RC4_128_SHA)
              elif cipher == "3des":
                  suites.append(CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA)
          return suites
      getRsaSuites = staticmethod(getRsaSuites)
  
      tripleDESSuites = []
      tripleDESSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
      tripleDESSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA)
      tripleDESSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA)
  
      aes128Suites = []
      aes128Suites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
      aes128Suites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
      aes128Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA)
  
      aes256Suites = []
      aes256Suites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
      aes256Suites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
      aes256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA)
  
      rc4Suites = []
      rc4Suites.append(TLS_RSA_WITH_RC4_128_SHA)
  
  
  class Fault:
      badUsername = 101
      badPassword = 102
      badA = 103
      clientSrpFaults = list(range(101,104))
  
      badVerifyMessage = 601
      clientCertFaults = list(range(601,602))
  
      badPremasterPadding = 501
      shortPremasterSecret = 502
      clientNoAuthFaults = list(range(501,503))
  
      badIdentifier = 401
      badSharedKey = 402
      clientSharedKeyFaults = list(range(401,403))
  
      badB = 201
      serverFaults = list(range(201,202))
  
      badFinished = 300
      badMAC = 301
      badPadding = 302
      genericFaults = list(range(300,303))
  
      faultAlerts = {\
          badUsername: (AlertDescription.unknown_srp_username, \
                        AlertDescription.bad_record_mac),\
          badPassword: (AlertDescription.bad_record_mac,),\
          badA: (AlertDescription.illegal_parameter,),\
          badIdentifier: (AlertDescription.handshake_failure,),\
          badSharedKey: (AlertDescription.bad_record_mac,),\
          badPremasterPadding: (AlertDescription.bad_record_mac,),\
          shortPremasterSecret: (AlertDescription.bad_record_mac,),\
          badVerifyMessage: (AlertDescription.decrypt_error,),\
          badFinished: (AlertDescription.decrypt_error,),\
          badMAC: (AlertDescription.bad_record_mac,),\
          badPadding: (AlertDescription.bad_record_mac,)
          }
  
      faultNames = {\
          badUsername: "bad username",\
          badPassword: "bad password",\
          badA: "bad A",\
          badIdentifier: "bad identifier",\
          badSharedKey: "bad sharedkey",\
          badPremasterPadding: "bad premaster padding",\
          shortPremasterSecret: "short premaster secret",\
          badVerifyMessage: "bad verify message",\
          badFinished: "bad finished message",\
          badMAC: "bad MAC",\
          badPadding: "bad padding"
          }
  