| OLD | NEW | 
|---|
| 1 /* Private header file of libSSL. | 1 /* Private header file of libSSL. | 
| 2  * Various and sundry protocol constants. DON'T CHANGE THESE. These | 2  * Various and sundry protocol constants. DON'T CHANGE THESE. These | 
| 3  * values are defined by the SSL 3.0 protocol specification. | 3  * values are defined by the SSL 3.0 protocol specification. | 
| 4  * | 4  * | 
| 5  * This Source Code Form is subject to the terms of the Mozilla Public | 5  * This Source Code Form is subject to the terms of the Mozilla Public | 
| 6  * License, v. 2.0. If a copy of the MPL was not distributed with this | 6  * License, v. 2.0. If a copy of the MPL was not distributed with this | 
| 7  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 7  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 
| 8 | 8 | 
| 9 #ifndef __ssl3proto_h_ | 9 #ifndef __ssl3proto_h_ | 
| 10 #define __ssl3proto_h_ | 10 #define __ssl3proto_h_ | 
| 11 | 11 | 
| 12 typedef PRUint8 SSL3Opaque; | 12 typedef PRUint8 SSL3Opaque; | 
| 13 | 13 | 
| 14 typedef PRUint16 SSL3ProtocolVersion; | 14 typedef PRUint16 SSL3ProtocolVersion; | 
| 15 /* version numbers are defined in sslproto.h */ | 15 /* version numbers are defined in sslproto.h */ | 
| 16 | 16 | 
| 17 /* The TLS 1.3 draft version. Used to avoid negotiating | 17 /* The TLS 1.3 draft version. Used to avoid negotiating | 
| 18  * between incompatible pre-standard TLS 1.3 drafts. | 18  * between incompatible pre-standard TLS 1.3 drafts. | 
| 19  * TODO(ekr@rtfm.com): Remove when TLS 1.3 is published. */ | 19  * TODO(ekr@rtfm.com): Remove when TLS 1.3 is published. */ | 
| 20 #define TLS_1_3_DRAFT_VERSION  3 | 20 #define TLS_1_3_DRAFT_VERSION 11 | 
| 21 | 21 | 
| 22 typedef PRUint16 ssl3CipherSuite; | 22 typedef PRUint16 ssl3CipherSuite; | 
| 23 /* The cipher suites are defined in sslproto.h */ | 23 /* The cipher suites are defined in sslproto.h */ | 
| 24 | 24 | 
| 25 #define MAX_CERT_TYPES                  10 | 25 #define MAX_CERT_TYPES 10 | 
| 26 #define MAX_COMPRESSION_METHODS         10 | 26 #define MAX_COMPRESSION_METHODS 10 | 
| 27 #define MAX_MAC_LENGTH                  64 | 27 #define MAX_MAC_LENGTH 64 | 
| 28 #define MAX_PADDING_LENGTH              64 | 28 #define MAX_PADDING_LENGTH 64 | 
| 29 #define MAX_KEY_LENGTH                  64 | 29 #define MAX_KEY_LENGTH 64 | 
| 30 #define EXPORT_KEY_LENGTH                5 | 30 #define EXPORT_KEY_LENGTH 5 | 
| 31 #define SSL3_RANDOM_LENGTH              32 | 31 #define SSL3_RANDOM_LENGTH 32 | 
| 32 | 32 | 
| 33 #define SSL3_RECORD_HEADER_LENGTH        5 | 33 #define SSL3_RECORD_HEADER_LENGTH 5 | 
| 34 | 34 | 
| 35 /* SSL3_RECORD_HEADER_LENGTH + epoch/sequence_number */ | 35 /* SSL3_RECORD_HEADER_LENGTH + epoch/sequence_number */ | 
| 36 #define DTLS_RECORD_HEADER_LENGTH       13 | 36 #define DTLS_RECORD_HEADER_LENGTH 13 | 
| 37 | 37 | 
| 38 #define MAX_FRAGMENT_LENGTH          16384 | 38 #define MAX_FRAGMENT_LENGTH 16384 | 
| 39 | 39 | 
| 40 typedef enum { | 40 typedef enum { | 
| 41     content_change_cipher_spec = 20, | 41     content_change_cipher_spec = 20, | 
| 42     content_alert              = 21, | 42     content_alert = 21, | 
| 43     content_handshake          = 22, | 43     content_handshake = 22, | 
| 44     content_application_data   = 23 | 44     content_application_data = 23 | 
| 45 } SSL3ContentType; | 45 } SSL3ContentType; | 
| 46 | 46 | 
| 47 typedef struct { | 47 typedef struct { | 
| 48     SSL3ContentType     type; | 48     SSL3ContentType type; | 
| 49     SSL3ProtocolVersion version; | 49     SSL3ProtocolVersion version; | 
| 50     PRUint16            length; | 50     PRUint16 length; | 
| 51     SECItem             fragment; | 51     SECItem fragment; | 
| 52 } SSL3Plaintext; | 52 } SSL3Plaintext; | 
| 53 | 53 | 
| 54 typedef struct { | 54 typedef struct { | 
| 55     SSL3ContentType     type; | 55     SSL3ContentType type; | 
| 56     SSL3ProtocolVersion version; | 56     SSL3ProtocolVersion version; | 
| 57     PRUint16            length; | 57     PRUint16 length; | 
| 58     SECItem             fragment; | 58     SECItem fragment; | 
| 59 } SSL3Compressed; | 59 } SSL3Compressed; | 
| 60 | 60 | 
| 61 typedef struct { | 61 typedef struct { | 
| 62     SECItem    content; | 62     SECItem content; | 
| 63     SSL3Opaque MAC[MAX_MAC_LENGTH]; | 63     SSL3Opaque MAC[MAX_MAC_LENGTH]; | 
| 64 } SSL3GenericStreamCipher; | 64 } SSL3GenericStreamCipher; | 
| 65 | 65 | 
| 66 typedef struct { | 66 typedef struct { | 
| 67     SECItem    content; | 67     SECItem content; | 
| 68     SSL3Opaque MAC[MAX_MAC_LENGTH]; | 68     SSL3Opaque MAC[MAX_MAC_LENGTH]; | 
| 69     PRUint8    padding[MAX_PADDING_LENGTH]; | 69     PRUint8 padding[MAX_PADDING_LENGTH]; | 
| 70     PRUint8    padding_length; | 70     PRUint8 padding_length; | 
| 71 } SSL3GenericBlockCipher; | 71 } SSL3GenericBlockCipher; | 
| 72 | 72 | 
| 73 typedef enum { change_cipher_spec_choice = 1 } SSL3ChangeCipherSpecChoice; | 73 typedef enum { change_cipher_spec_choice = 1 } SSL3ChangeCipherSpecChoice; | 
| 74 | 74 | 
| 75 typedef struct { | 75 typedef struct { | 
| 76     SSL3ChangeCipherSpecChoice choice; | 76     SSL3ChangeCipherSpecChoice choice; | 
| 77 } SSL3ChangeCipherSpec; | 77 } SSL3ChangeCipherSpec; | 
| 78 | 78 | 
| 79 typedef enum { alert_warning = 1, alert_fatal = 2 } SSL3AlertLevel; | 79 typedef enum { alert_warning = 1, | 
|  | 80                alert_fatal = 2 } SSL3AlertLevel; | 
| 80 | 81 | 
| 81 typedef enum { | 82 typedef enum { | 
| 82     close_notify            = 0, | 83     close_notify = 0, | 
| 83     unexpected_message      = 10, | 84     unexpected_message = 10, | 
| 84     bad_record_mac          = 20, | 85     bad_record_mac = 20, | 
| 85     decryption_failed_RESERVED = 21,    /* do not send; see RFC 5246 */ | 86     decryption_failed_RESERVED = 21, /* do not send; see RFC 5246 */ | 
| 86     record_overflow         = 22,       /* TLS only */ | 87     record_overflow = 22,            /* TLS only */ | 
| 87     decompression_failure   = 30, | 88     decompression_failure = 30, | 
| 88     handshake_failure       = 40, | 89     handshake_failure = 40, | 
| 89     no_certificate          = 41,       /* SSL3 only, NOT TLS */ | 90     no_certificate = 41, /* SSL3 only, NOT TLS */ | 
| 90     bad_certificate         = 42, | 91     bad_certificate = 42, | 
| 91     unsupported_certificate = 43, | 92     unsupported_certificate = 43, | 
| 92     certificate_revoked     = 44, | 93     certificate_revoked = 44, | 
| 93     certificate_expired     = 45, | 94     certificate_expired = 45, | 
| 94     certificate_unknown     = 46, | 95     certificate_unknown = 46, | 
| 95     illegal_parameter       = 47, | 96     illegal_parameter = 47, | 
| 96 | 97 | 
| 97 /* All alerts below are TLS only. */ | 98     /* All alerts below are TLS only. */ | 
| 98     unknown_ca              = 48, | 99     unknown_ca = 48, | 
| 99     access_denied           = 49, | 100     access_denied = 49, | 
| 100     decode_error            = 50, | 101     decode_error = 50, | 
| 101     decrypt_error           = 51, | 102     decrypt_error = 51, | 
| 102     export_restriction      = 60, | 103     export_restriction = 60, | 
| 103     protocol_version        = 70, | 104     protocol_version = 70, | 
| 104     insufficient_security   = 71, | 105     insufficient_security = 71, | 
| 105     internal_error          = 80, | 106     internal_error = 80, | 
| 106     inappropriate_fallback  = 86,»      /* could also be sent for SSLv3 */ | 107     inappropriate_fallback = 86, /* could also be sent for SSLv3 */ | 
| 107     user_canceled           = 90, | 108     user_canceled = 90, | 
| 108     no_renegotiation        = 100, | 109     no_renegotiation = 100, | 
| 109 | 110 | 
| 110 /* Alerts for client hello extensions */ | 111     /* Alerts for client hello extensions */ | 
| 111     unsupported_extension           = 110, | 112     missing_extension = 109, | 
| 112     certificate_unobtainable        = 111, | 113     unsupported_extension = 110, | 
| 113     unrecognized_name               = 112, | 114     certificate_unobtainable = 111, | 
|  | 115     unrecognized_name = 112, | 
| 114     bad_certificate_status_response = 113, | 116     bad_certificate_status_response = 113, | 
| 115     bad_certificate_hash_value      = 114, | 117     bad_certificate_hash_value = 114, | 
| 116     no_application_protocol         = 120 | 118     no_application_protocol = 120 | 
| 117 | 119 | 
| 118 } SSL3AlertDescription; | 120 } SSL3AlertDescription; | 
| 119 | 121 | 
| 120 typedef struct { | 122 typedef struct { | 
| 121     SSL3AlertLevel       level; | 123     SSL3AlertLevel level; | 
| 122     SSL3AlertDescription description; | 124     SSL3AlertDescription description; | 
| 123 } SSL3Alert; | 125 } SSL3Alert; | 
| 124 | 126 | 
| 125 typedef enum { | 127 typedef enum { | 
| 126     hello_request       = 0, | 128     hello_request = 0, | 
| 127     client_hello        = 1, | 129     client_hello = 1, | 
| 128     server_hello        = 2, | 130     server_hello = 2, | 
| 129     hello_verify_request = 3, | 131     hello_verify_request = 3, | 
| 130     new_session_ticket  = 4, | 132     new_session_ticket = 4, | 
| 131     certificate         = 11, | 133     hello_retry_request = 6, | 
|  | 134     encrypted_extensions = 8, | 
|  | 135     certificate = 11, | 
| 132     server_key_exchange = 12, | 136     server_key_exchange = 12, | 
| 133     certificate_request = 13, | 137     certificate_request = 13, | 
| 134     server_hello_done   = 14, | 138     server_hello_done = 14, | 
| 135     certificate_verify  = 15, | 139     certificate_verify = 15, | 
| 136     client_key_exchange = 16, | 140     client_key_exchange = 16, | 
| 137     finished            = 20, | 141     finished = 20, | 
| 138     certificate_status  = 22, | 142     certificate_status = 22, | 
| 139     next_proto          = 67, | 143     next_proto = 67, | 
| 140     encrypted_extensions = 203, | 144     channelid_encrypted_extensions = 203 | 
| 141 } SSL3HandshakeType; | 145 } SSL3HandshakeType; | 
| 142 | 146 | 
| 143 typedef struct { | 147 typedef struct { | 
| 144     PRUint8 empty; | 148     PRUint8 empty; | 
| 145 } SSL3HelloRequest; | 149 } SSL3HelloRequest; | 
| 146 | 150 | 
| 147 typedef struct { | 151 typedef struct { | 
| 148     SSL3Opaque rand[SSL3_RANDOM_LENGTH]; | 152     SSL3Opaque rand[SSL3_RANDOM_LENGTH]; | 
| 149 } SSL3Random; | 153 } SSL3Random; | 
| 150 | 154 | 
| 151 typedef struct { | 155 typedef struct { | 
| 152     SSL3Opaque id[32]; | 156     SSL3Opaque id[32]; | 
| 153     PRUint8 length; | 157     PRUint8 length; | 
| 154 } SSL3SessionID; | 158 } SSL3SessionID; | 
| 155 | 159 | 
| 156 typedef struct { | 160 typedef struct { | 
| 157     SSL3ProtocolVersion   client_version; | 161     SSL3ProtocolVersion client_version; | 
| 158     SSL3Random            random; | 162     SSL3Random random; | 
| 159     SSL3SessionID         session_id; | 163     SSL3SessionID session_id; | 
| 160     SECItem               cipher_suites; | 164     SECItem cipher_suites; | 
| 161     PRUint8               cm_count; | 165     PRUint8 cm_count; | 
| 162     SSLCompressionMethod  compression_methods[MAX_COMPRESSION_METHODS]; | 166     SSLCompressionMethod compression_methods[MAX_COMPRESSION_METHODS]; | 
| 163 } SSL3ClientHello; | 167 } SSL3ClientHello; | 
| 164 | 168 | 
| 165 typedef struct  { | 169 typedef struct { | 
| 166     SSL3ProtocolVersion   server_version; | 170     SSL3ProtocolVersion server_version; | 
| 167     SSL3Random            random; | 171     SSL3Random random; | 
| 168     SSL3SessionID         session_id; | 172     SSL3SessionID session_id; | 
| 169     ssl3CipherSuite       cipher_suite; | 173     ssl3CipherSuite cipher_suite; | 
| 170     SSLCompressionMethod  compression_method; | 174     SSLCompressionMethod compression_method; | 
| 171 } SSL3ServerHello; | 175 } SSL3ServerHello; | 
| 172 | 176 | 
| 173 typedef struct { | 177 typedef struct { | 
| 174     SECItem list; | 178     SECItem list; | 
| 175 } SSL3Certificate; | 179 } SSL3Certificate; | 
| 176 | 180 | 
| 177 /* SSL3SignType moved to ssl.h */ | 181 /* SSL3SignType moved to ssl.h */ | 
| 178 | 182 | 
| 179 /* The SSL key exchange method used */ | 183 /* The SSL key exchange method used */ | 
| 180 typedef enum { | 184 typedef enum { | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 238 } SSL3Hashes; | 242 } SSL3Hashes; | 
| 239 | 243 | 
| 240 typedef struct { | 244 typedef struct { | 
| 241     union { | 245     union { | 
| 242         SSL3Opaque anonymous; | 246         SSL3Opaque anonymous; | 
| 243         SSL3Hashes certified; | 247         SSL3Hashes certified; | 
| 244     } u; | 248     } u; | 
| 245 } SSL3ServerKeyExchange; | 249 } SSL3ServerKeyExchange; | 
| 246 | 250 | 
| 247 typedef enum { | 251 typedef enum { | 
| 248     ct_RSA_sign         =  1, | 252     ct_RSA_sign = 1, | 
| 249     ct_DSS_sign         =  2, | 253     ct_DSS_sign = 2, | 
| 250     ct_RSA_fixed_DH     =  3, | 254     ct_RSA_fixed_DH = 3, | 
| 251     ct_DSS_fixed_DH     =  4, | 255     ct_DSS_fixed_DH = 4, | 
| 252     ct_RSA_ephemeral_DH =  5, | 256     ct_RSA_ephemeral_DH = 5, | 
| 253     ct_DSS_ephemeral_DH =  6, | 257     ct_DSS_ephemeral_DH = 6, | 
| 254     ct_ECDSA_sign       =  64, | 258     ct_ECDSA_sign = 64, | 
| 255     ct_RSA_fixed_ECDH   =  65, | 259     ct_RSA_fixed_ECDH = 65, | 
| 256     ct_ECDSA_fixed_ECDH =  66 | 260     ct_ECDSA_fixed_ECDH = 66 | 
| 257 | 261 | 
| 258 } SSL3ClientCertificateType; | 262 } SSL3ClientCertificateType; | 
| 259 | 263 | 
| 260 typedef SECItem *SSL3DistinquishedName; |  | 
| 261 |  | 
| 262 typedef struct { | 264 typedef struct { | 
| 263     SSL3Opaque client_version[2]; | 265     SSL3Opaque client_version[2]; | 
| 264     SSL3Opaque random[46]; | 266     SSL3Opaque random[46]; | 
| 265 } SSL3RSAPreMasterSecret; | 267 } SSL3RSAPreMasterSecret; | 
| 266 | 268 | 
| 267 typedef SECItem SSL3EncryptedPreMasterSecret; |  | 
| 268 |  | 
| 269 |  | 
| 270 typedef SSL3Opaque SSL3MasterSecret[48]; | 269 typedef SSL3Opaque SSL3MasterSecret[48]; | 
| 271 | 270 | 
| 272 typedef enum { implicit, explicit } SSL3PublicValueEncoding; |  | 
| 273 |  | 
| 274 typedef struct { |  | 
| 275     union { |  | 
| 276         SSL3Opaque implicit; |  | 
| 277         SECItem    explicit; |  | 
| 278     } dh_public; |  | 
| 279 } SSL3ClientDiffieHellmanPublic; |  | 
| 280 |  | 
| 281 typedef struct { |  | 
| 282     union { |  | 
| 283         SSL3EncryptedPreMasterSecret  rsa; |  | 
| 284         SSL3ClientDiffieHellmanPublic diffie_helman; |  | 
| 285     } exchange_keys; |  | 
| 286 } SSL3ClientKeyExchange; |  | 
| 287 |  | 
| 288 typedef SSL3Hashes SSL3PreSignedCertificateVerify; |  | 
| 289 |  | 
| 290 typedef SECItem SSL3CertificateVerify; |  | 
| 291 |  | 
| 292 typedef enum { | 271 typedef enum { | 
| 293     sender_client = 0x434c4e54, | 272     sender_client = 0x434c4e54, | 
| 294     sender_server = 0x53525652 | 273     sender_server = 0x53525652 | 
| 295 } SSL3Sender; | 274 } SSL3Sender; | 
| 296 | 275 | 
| 297 typedef SSL3HashesIndividually SSL3Finished; | 276 typedef SSL3HashesIndividually SSL3Finished; | 
| 298 | 277 | 
| 299 typedef struct { | 278 typedef struct { | 
| 300     SSL3Opaque verify_data[12]; | 279     SSL3Opaque verify_data[12]; | 
| 301 } TLSFinished; | 280 } TLSFinished; | 
| 302 | 281 | 
| 303 /* | 282 /* | 
| 304  * TLS extension related data structures and constants. | 283  * TLS extension related data structures and constants. | 
| 305  */ | 284  */ | 
| 306 | 285 | 
| 307 /* SessionTicket extension related data structures. */ | 286 /* SessionTicket extension related data structures. */ | 
| 308 | 287 | 
| 309 /* NewSessionTicket handshake message. */ | 288 /* NewSessionTicket handshake message. */ | 
| 310 typedef struct { | 289 typedef struct { | 
| 311     PRUint32 received_timestamp; | 290     PRUint32 received_timestamp; | 
| 312     PRUint32 ticket_lifetime_hint; | 291     PRUint32 ticket_lifetime_hint; | 
| 313     SECItem  ticket; | 292     SECItem ticket; | 
| 314 } NewSessionTicket; | 293 } NewSessionTicket; | 
| 315 | 294 | 
| 316 typedef enum { | 295 typedef enum { | 
| 317     CLIENT_AUTH_ANONYMOUS   = 0, | 296     CLIENT_AUTH_ANONYMOUS = 0, | 
| 318     CLIENT_AUTH_CERTIFICATE = 1 | 297     CLIENT_AUTH_CERTIFICATE = 1 | 
| 319 } ClientAuthenticationType; | 298 } ClientAuthenticationType; | 
| 320 | 299 | 
| 321 typedef struct { | 300 typedef struct { | 
| 322     ClientAuthenticationType client_auth_type; | 301     ClientAuthenticationType client_auth_type; | 
| 323     union { | 302     union { | 
| 324         SSL3Opaque *certificate_list; | 303         SSL3Opaque *certificate_list; | 
| 325     } identity; | 304     } identity; | 
| 326 } ClientIdentity; | 305 } ClientIdentity; | 
| 327 | 306 | 
| 328 #define SESS_TICKET_KEY_NAME_LEN       16 | 307 #define SESS_TICKET_KEY_NAME_LEN 16 | 
| 329 #define SESS_TICKET_KEY_NAME_PREFIX    "NSS!" | 308 #define SESS_TICKET_KEY_NAME_PREFIX "NSS!" | 
| 330 #define SESS_TICKET_KEY_NAME_PREFIX_LEN 4 | 309 #define SESS_TICKET_KEY_NAME_PREFIX_LEN 4 | 
| 331 #define SESS_TICKET_KEY_VAR_NAME_LEN   12 | 310 #define SESS_TICKET_KEY_VAR_NAME_LEN 12 | 
| 332 | 311 | 
| 333 typedef struct { | 312 typedef struct { | 
| 334     unsigned char *key_name; | 313     unsigned char *key_name; | 
| 335     unsigned char *iv; | 314     unsigned char *iv; | 
| 336     SECItem encrypted_state; | 315     SECItem encrypted_state; | 
| 337     unsigned char *mac; | 316     unsigned char *mac; | 
| 338 } EncryptedSessionTicket; | 317 } EncryptedSessionTicket; | 
| 339 | 318 | 
| 340 #define TLS_EX_SESS_TICKET_MAC_LENGTH 32 | 319 #define TLS_EX_SESS_TICKET_MAC_LENGTH 32 | 
| 341 | 320 | 
| 342 #define TLS_STE_NO_SERVER_NAME        -1 | 321 #define TLS_STE_NO_SERVER_NAME -1 | 
| 343 | 322 | 
| 344 #endif /* __ssl3proto_h_ */ | 323 #endif /* __ssl3proto_h_ */ | 
| OLD | NEW | 
|---|