summaryrefslogtreecommitdiffstats
path: root/third_party/tlslite/tlslite/constants.py
blob: 23e3dcb79386c0a1ed19c081484e94362ca50f88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
"""Constants used in various places."""

class CertificateType:
    x509 = 0
    openpgp = 1
    cryptoID = 2

class ClientCertificateType:
    rsa_sign = 1
    dss_sign = 2
    rsa_fixed_dh = 3
    dss_fixed_dh = 4

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
    encrypted_extensions = 203

class ContentType:
    change_cipher_spec = 20
    alert = 21
    handshake = 22
    application_data = 23
    all = (20,21,22,23)

class ExtensionType:
    signed_cert_timestamps = 18  # signed_certificate_timestamp in RFC 6962
    channel_id = 30031

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
    inappropriate_fallback = 86
    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 = range(101,104)

    badVerifyMessage = 601
    clientCertFaults = range(601,602)

    badPremasterPadding = 501
    shortPremasterSecret = 502
    clientNoAuthFaults = range(501,503)

    badIdentifier = 401
    badSharedKey = 402
    clientSharedKeyFaults = range(401,403)

    badB = 201
    serverFaults = range(201,202)

    badFinished = 300
    badMAC = 301
    badPadding = 302
    genericFaults = 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"
        }