security/nss/lib/ssl/sslimpl.h

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:685376e8e9d4
1 /*
2 * This file is PRIVATE to SSL and should be the first thing included by
3 * any SSL implementation file.
4 *
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
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8
9 #ifndef __sslimpl_h_
10 #define __sslimpl_h_
11
12 #ifdef DEBUG
13 #undef NDEBUG
14 #else
15 #undef NDEBUG
16 #define NDEBUG
17 #endif
18 #include "secport.h"
19 #include "secerr.h"
20 #include "sslerr.h"
21 #include "ssl3prot.h"
22 #include "hasht.h"
23 #include "nssilock.h"
24 #include "pkcs11t.h"
25 #if defined(XP_UNIX) || defined(XP_BEOS)
26 #include "unistd.h"
27 #endif
28 #include "nssrwlk.h"
29 #include "prthread.h"
30 #include "prclist.h"
31
32 #include "sslt.h" /* for some formerly private types, now public */
33
34 /* to make some of these old enums public without namespace pollution,
35 ** it was necessary to prepend ssl_ to the names.
36 ** These #defines preserve compatibility with the old code here in libssl.
37 */
38 typedef SSLKEAType SSL3KEAType;
39 typedef SSLMACAlgorithm SSL3MACAlgorithm;
40 typedef SSLSignType SSL3SignType;
41
42 #define sign_null ssl_sign_null
43 #define sign_rsa ssl_sign_rsa
44 #define sign_dsa ssl_sign_dsa
45 #define sign_ecdsa ssl_sign_ecdsa
46
47 #define calg_null ssl_calg_null
48 #define calg_rc4 ssl_calg_rc4
49 #define calg_rc2 ssl_calg_rc2
50 #define calg_des ssl_calg_des
51 #define calg_3des ssl_calg_3des
52 #define calg_idea ssl_calg_idea
53 #define calg_fortezza ssl_calg_fortezza /* deprecated, must preserve */
54 #define calg_aes ssl_calg_aes
55 #define calg_camellia ssl_calg_camellia
56 #define calg_seed ssl_calg_seed
57 #define calg_aes_gcm ssl_calg_aes_gcm
58
59 #define mac_null ssl_mac_null
60 #define mac_md5 ssl_mac_md5
61 #define mac_sha ssl_mac_sha
62 #define hmac_md5 ssl_hmac_md5
63 #define hmac_sha ssl_hmac_sha
64 #define hmac_sha256 ssl_hmac_sha256
65 #define mac_aead ssl_mac_aead
66
67 #define SET_ERROR_CODE /* reminder */
68 #define SEND_ALERT /* reminder */
69 #define TEST_FOR_FAILURE /* reminder */
70 #define DEAL_WITH_FAILURE /* reminder */
71
72 #if defined(DEBUG) || defined(TRACE)
73 #ifdef __cplusplus
74 #define Debug 1
75 #else
76 extern int Debug;
77 #endif
78 #else
79 #undef Debug
80 #endif
81
82 #if defined(DEBUG) && !defined(TRACE) && !defined(NISCC_TEST)
83 #define TRACE
84 #endif
85
86 #ifdef TRACE
87 #define SSL_TRC(a,b) if (ssl_trace >= (a)) ssl_Trace b
88 #define PRINT_BUF(a,b) if (ssl_trace >= (a)) ssl_PrintBuf b
89 #define DUMP_MSG(a,b) if (ssl_trace >= (a)) ssl_DumpMsg b
90 #else
91 #define SSL_TRC(a,b)
92 #define PRINT_BUF(a,b)
93 #define DUMP_MSG(a,b)
94 #endif
95
96 #ifdef DEBUG
97 #define SSL_DBG(b) if (ssl_debug) ssl_Trace b
98 #else
99 #define SSL_DBG(b)
100 #endif
101
102 #include "private/pprthred.h" /* for PR_InMonitor() */
103 #define ssl_InMonitor(m) PZ_InMonitor(m)
104
105 #define LSB(x) ((unsigned char) ((x) & 0xff))
106 #define MSB(x) ((unsigned char) (((unsigned)(x)) >> 8))
107
108 /************************************************************************/
109
110 typedef enum { SSLAppOpRead = 0,
111 SSLAppOpWrite,
112 SSLAppOpRDWR,
113 SSLAppOpPost,
114 SSLAppOpHeader
115 } SSLAppOperation;
116
117 #define SSL_MIN_MASTER_KEY_BYTES 5
118 #define SSL_MAX_MASTER_KEY_BYTES 64
119
120 #define SSL2_SESSIONID_BYTES 16
121 #define SSL3_SESSIONID_BYTES 32
122
123 #define SSL_MIN_CHALLENGE_BYTES 16
124 #define SSL_MAX_CHALLENGE_BYTES 32
125 #define SSL_CHALLENGE_BYTES 16
126
127 #define SSL_CONNECTIONID_BYTES 16
128
129 #define SSL_MIN_CYPHER_ARG_BYTES 0
130 #define SSL_MAX_CYPHER_ARG_BYTES 32
131
132 #define SSL_MAX_MAC_BYTES 16
133
134 #define SSL3_RSA_PMS_LENGTH 48
135 #define SSL3_MASTER_SECRET_LENGTH 48
136
137 /* number of wrap mechanisms potentially used to wrap master secrets. */
138 #define SSL_NUM_WRAP_MECHS 16
139
140 /* This makes the cert cache entry exactly 4k. */
141 #define SSL_MAX_CACHED_CERT_LEN 4060
142
143 #define NUM_MIXERS 9
144
145 /* Mask of the 25 named curves we support. */
146 #define SSL3_ALL_SUPPORTED_CURVES_MASK 0x3fffffe
147 /* Mask of only 3 curves, suite B */
148 #define SSL3_SUITE_B_SUPPORTED_CURVES_MASK 0x3800000
149
150 #ifndef BPB
151 #define BPB 8 /* Bits Per Byte */
152 #endif
153
154 #define EXPORT_RSA_KEY_LENGTH 64 /* bytes */
155
156 #define INITIAL_DTLS_TIMEOUT_MS 1000 /* Default value from RFC 4347 = 1s*/
157 #define MAX_DTLS_TIMEOUT_MS 60000 /* 1 minute */
158 #define DTLS_FINISHED_TIMER_MS 120000 /* Time to wait in FINISHED state */
159
160 typedef struct sslBufferStr sslBuffer;
161 typedef struct sslConnectInfoStr sslConnectInfo;
162 typedef struct sslGatherStr sslGather;
163 typedef struct sslSecurityInfoStr sslSecurityInfo;
164 typedef struct sslSessionIDStr sslSessionID;
165 typedef struct sslSocketStr sslSocket;
166 typedef struct sslSocketOpsStr sslSocketOps;
167
168 typedef struct ssl3StateStr ssl3State;
169 typedef struct ssl3CertNodeStr ssl3CertNode;
170 typedef struct ssl3BulkCipherDefStr ssl3BulkCipherDef;
171 typedef struct ssl3MACDefStr ssl3MACDef;
172 typedef struct ssl3KeyPairStr ssl3KeyPair;
173
174 struct ssl3CertNodeStr {
175 struct ssl3CertNodeStr *next;
176 CERTCertificate * cert;
177 };
178
179 typedef SECStatus (*sslHandshakeFunc)(sslSocket *ss);
180
181 /* This type points to the low layer send func,
182 ** e.g. ssl2_SendStream or ssl3_SendPlainText.
183 ** These functions return the same values as PR_Send,
184 ** i.e. >= 0 means number of bytes sent, < 0 means error.
185 */
186 typedef PRInt32 (*sslSendFunc)(sslSocket *ss, const unsigned char *buf,
187 PRInt32 n, PRInt32 flags);
188
189 typedef void (*sslSessionIDCacheFunc) (sslSessionID *sid);
190 typedef void (*sslSessionIDUncacheFunc)(sslSessionID *sid);
191 typedef sslSessionID *(*sslSessionIDLookupFunc)(const PRIPv6Addr *addr,
192 unsigned char* sid,
193 unsigned int sidLen,
194 CERTCertDBHandle * dbHandle);
195
196 /* registerable callback function that either appends extension to buffer
197 * or returns length of data that it would have appended.
198 */
199 typedef PRInt32 (*ssl3HelloExtensionSenderFunc)(sslSocket *ss, PRBool append,
200 PRUint32 maxBytes);
201
202 /* registerable callback function that handles a received extension,
203 * of the given type.
204 */
205 typedef SECStatus (* ssl3HelloExtensionHandlerFunc)(sslSocket *ss,
206 PRUint16 ex_type,
207 SECItem * data);
208
209 /* row in a table of hello extension senders */
210 typedef struct {
211 PRInt32 ex_type;
212 ssl3HelloExtensionSenderFunc ex_sender;
213 } ssl3HelloExtensionSender;
214
215 /* row in a table of hello extension handlers */
216 typedef struct {
217 PRInt32 ex_type;
218 ssl3HelloExtensionHandlerFunc ex_handler;
219 } ssl3HelloExtensionHandler;
220
221 extern SECStatus
222 ssl3_RegisterServerHelloExtensionSender(sslSocket *ss, PRUint16 ex_type,
223 ssl3HelloExtensionSenderFunc cb);
224
225 extern PRInt32
226 ssl3_CallHelloExtensionSenders(sslSocket *ss, PRBool append, PRUint32 maxBytes,
227 const ssl3HelloExtensionSender *sender);
228
229 extern unsigned int
230 ssl3_CalculatePaddingExtensionLength(unsigned int clientHelloLength);
231
232 extern PRInt32
233 ssl3_AppendPaddingExtension(sslSocket *ss, unsigned int extensionLen,
234 PRUint32 maxBytes);
235
236 /* Socket ops */
237 struct sslSocketOpsStr {
238 int (*connect) (sslSocket *, const PRNetAddr *);
239 PRFileDesc *(*accept) (sslSocket *, PRNetAddr *);
240 int (*bind) (sslSocket *, const PRNetAddr *);
241 int (*listen) (sslSocket *, int);
242 int (*shutdown)(sslSocket *, int);
243 int (*close) (sslSocket *);
244
245 int (*recv) (sslSocket *, unsigned char *, int, int);
246
247 /* points to the higher-layer send func, e.g. ssl_SecureSend. */
248 int (*send) (sslSocket *, const unsigned char *, int, int);
249 int (*read) (sslSocket *, unsigned char *, int);
250 int (*write) (sslSocket *, const unsigned char *, int);
251
252 int (*getpeername)(sslSocket *, PRNetAddr *);
253 int (*getsockname)(sslSocket *, PRNetAddr *);
254 };
255
256 /* Flags interpreted by ssl send functions. */
257 #define ssl_SEND_FLAG_FORCE_INTO_BUFFER 0x40000000
258 #define ssl_SEND_FLAG_NO_BUFFER 0x20000000
259 #define ssl_SEND_FLAG_USE_EPOCH 0x10000000 /* DTLS only */
260 #define ssl_SEND_FLAG_NO_RETRANSMIT 0x08000000 /* DTLS only */
261 #define ssl_SEND_FLAG_CAP_RECORD_VERSION \
262 0x04000000 /* TLS only */
263 #define ssl_SEND_FLAG_MASK 0x7f000000
264
265 /*
266 ** A buffer object.
267 */
268 struct sslBufferStr {
269 unsigned char * buf;
270 unsigned int len;
271 unsigned int space;
272 };
273
274 /*
275 ** SSL3 cipher suite policy and preference struct.
276 */
277 typedef struct {
278 #if !defined(_WIN32)
279 unsigned int cipher_suite : 16;
280 unsigned int policy : 8;
281 unsigned int enabled : 1;
282 unsigned int isPresent : 1;
283 #else
284 ssl3CipherSuite cipher_suite;
285 PRUint8 policy;
286 unsigned char enabled : 1;
287 unsigned char isPresent : 1;
288 #endif
289 } ssl3CipherSuiteCfg;
290
291 #ifndef NSS_DISABLE_ECC
292 #define ssl_V3_SUITES_IMPLEMENTED 61
293 #else
294 #define ssl_V3_SUITES_IMPLEMENTED 37
295 #endif /* NSS_DISABLE_ECC */
296
297 #define MAX_DTLS_SRTP_CIPHER_SUITES 4
298
299 typedef struct sslOptionsStr {
300 /* If SSL_SetNextProtoNego has been called, then this contains the
301 * list of supported protocols. */
302 SECItem nextProtoNego;
303
304 unsigned int useSecurity : 1; /* 1 */
305 unsigned int useSocks : 1; /* 2 */
306 unsigned int requestCertificate : 1; /* 3 */
307 unsigned int requireCertificate : 2; /* 4-5 */
308 unsigned int handshakeAsClient : 1; /* 6 */
309 unsigned int handshakeAsServer : 1; /* 7 */
310 unsigned int enableSSL2 : 1; /* 8 */
311 unsigned int unusedBit9 : 1; /* 9 */
312 unsigned int unusedBit10 : 1; /* 10 */
313 unsigned int noCache : 1; /* 11 */
314 unsigned int fdx : 1; /* 12 */
315 unsigned int v2CompatibleHello : 1; /* 13 */
316 unsigned int detectRollBack : 1; /* 14 */
317 unsigned int noStepDown : 1; /* 15 */
318 unsigned int bypassPKCS11 : 1; /* 16 */
319 unsigned int noLocks : 1; /* 17 */
320 unsigned int enableSessionTickets : 1; /* 18 */
321 unsigned int enableDeflate : 1; /* 19 */
322 unsigned int enableRenegotiation : 2; /* 20-21 */
323 unsigned int requireSafeNegotiation : 1; /* 22 */
324 unsigned int enableFalseStart : 1; /* 23 */
325 unsigned int cbcRandomIV : 1; /* 24 */
326 unsigned int enableOCSPStapling : 1; /* 25 */
327 unsigned int enableNPN : 1; /* 26 */
328 unsigned int enableALPN : 1; /* 27 */
329 unsigned int dummy : 1; /* 28 */
330 unsigned int enableFallbackSCSV : 1; /* 29 */
331 } sslOptions;
332
333 typedef enum { sslHandshakingUndetermined = 0,
334 sslHandshakingAsClient,
335 sslHandshakingAsServer
336 } sslHandshakingType;
337
338 typedef struct sslServerCertsStr {
339 /* Configuration state for server sockets */
340 CERTCertificate * serverCert;
341 CERTCertificateList * serverCertChain;
342 ssl3KeyPair * serverKeyPair;
343 unsigned int serverKeyBits;
344 } sslServerCerts;
345
346 #define SERVERKEY serverKeyPair->privKey
347
348 #define SSL_LOCK_RANK_SPEC 255
349 #define SSL_LOCK_RANK_GLOBAL NSS_RWLOCK_RANK_NONE
350
351 /* These are the valid values for shutdownHow.
352 ** These values are each 1 greater than the NSPR values, and the code
353 ** depends on that relation to efficiently convert PR_SHUTDOWN values
354 ** into ssl_SHUTDOWN values. These values use one bit for read, and
355 ** another bit for write, and can be used as bitmasks.
356 */
357 #define ssl_SHUTDOWN_NONE 0 /* NOT shutdown at all */
358 #define ssl_SHUTDOWN_RCV 1 /* PR_SHUTDOWN_RCV +1 */
359 #define ssl_SHUTDOWN_SEND 2 /* PR_SHUTDOWN_SEND +1 */
360 #define ssl_SHUTDOWN_BOTH 3 /* PR_SHUTDOWN_BOTH +1 */
361
362 /*
363 ** A gather object. Used to read some data until a count has been
364 ** satisfied. Primarily for support of async sockets.
365 ** Everything in here is protected by the recvBufLock.
366 */
367 struct sslGatherStr {
368 int state; /* see GS_ values below. */ /* ssl 2 & 3 */
369
370 /* "buf" holds received plaintext SSL records, after decrypt and MAC check.
371 * SSL2: recv'd ciphertext records are put here, then decrypted in place.
372 * SSL3: recv'd ciphertext records are put in inbuf (see below), then
373 * decrypted into buf.
374 */
375 sslBuffer buf; /*recvBufLock*/ /* ssl 2 & 3 */
376
377 /* number of bytes previously read into hdr or buf(ssl2) or inbuf (ssl3).
378 ** (offset - writeOffset) is the number of ciphertext bytes read in but
379 ** not yet deciphered.
380 */
381 unsigned int offset; /* ssl 2 & 3 */
382
383 /* number of bytes to read in next call to ssl_DefRecv (recv) */
384 unsigned int remainder; /* ssl 2 & 3 */
385
386 /* Number of ciphertext bytes to read in after 2-byte SSL record header. */
387 unsigned int count; /* ssl2 only */
388
389 /* size of the final plaintext record.
390 ** == count - (recordPadding + MAC size)
391 */
392 unsigned int recordLen; /* ssl2 only */
393
394 /* number of bytes of padding to be removed after decrypting. */
395 /* This value is taken from the record's hdr[2], which means a too large
396 * value could crash us.
397 */
398 unsigned int recordPadding; /* ssl2 only */
399
400 /* plaintext DATA begins this many bytes into "buf". */
401 unsigned int recordOffset; /* ssl2 only */
402
403 int encrypted; /* SSL2 session is now encrypted. ssl2 only */
404
405 /* These next two values are used by SSL2 and SSL3.
406 ** DoRecv uses them to extract application data.
407 ** The difference between writeOffset and readOffset is the amount of
408 ** data available to the application. Note that the actual offset of
409 ** the data in "buf" is recordOffset (above), not readOffset.
410 ** In the current implementation, this is made available before the
411 ** MAC is checked!!
412 */
413 unsigned int readOffset; /* Spot where DATA reader (e.g. application
414 ** or handshake code) will read next.
415 ** Always zero for SSl3 application data.
416 */
417 /* offset in buf/inbuf/hdr into which new data will be read from socket. */
418 unsigned int writeOffset;
419
420 /* Buffer for ssl3 to read (encrypted) data from the socket */
421 sslBuffer inbuf; /*recvBufLock*/ /* ssl3 only */
422
423 /* The ssl[23]_GatherData functions read data into this buffer, rather
424 ** than into buf or inbuf, while in the GS_HEADER state.
425 ** The portion of the SSL record header put here always comes off the wire
426 ** as plaintext, never ciphertext.
427 ** For SSL2, the plaintext portion is two bytes long. For SSl3 it is 5.
428 ** For DTLS it is 13.
429 */
430 unsigned char hdr[13]; /* ssl 2 & 3 or dtls */
431
432 /* Buffer for DTLS data read off the wire as a single datagram */
433 sslBuffer dtlsPacket;
434
435 /* the start of the buffered DTLS record in dtlsPacket */
436 unsigned int dtlsPacketOffset;
437 };
438
439 /* sslGather.state */
440 #define GS_INIT 0
441 #define GS_HEADER 1
442 #define GS_MAC 2
443 #define GS_DATA 3
444 #define GS_PAD 4
445
446
447
448 /*
449 ** ssl3State and CipherSpec structs
450 */
451
452 /* The SSL bulk cipher definition */
453 typedef enum {
454 cipher_null,
455 cipher_rc4,
456 cipher_rc4_40,
457 cipher_rc4_56,
458 cipher_rc2,
459 cipher_rc2_40,
460 cipher_des,
461 cipher_3des,
462 cipher_des40,
463 cipher_idea,
464 cipher_aes_128,
465 cipher_aes_256,
466 cipher_camellia_128,
467 cipher_camellia_256,
468 cipher_seed,
469 cipher_aes_128_gcm,
470 cipher_missing /* reserved for no such supported cipher */
471 /* This enum must match ssl3_cipherName[] in ssl3con.c. */
472 } SSL3BulkCipher;
473
474 typedef enum { type_stream, type_block, type_aead } CipherType;
475
476 #define MAX_IV_LENGTH 24
477
478 /*
479 * Do not depend upon 64 bit arithmetic in the underlying machine.
480 */
481 typedef struct {
482 PRUint32 high;
483 PRUint32 low;
484 } SSL3SequenceNumber;
485
486 typedef PRUint16 DTLSEpoch;
487
488 typedef void (*DTLSTimerCb)(sslSocket *);
489
490 #define MAX_MAC_CONTEXT_BYTES 400 /* 400 is large enough for MD5, SHA-1, and
491 * SHA-256. For SHA-384 support, increase
492 * it to 712. */
493 #define MAX_MAC_CONTEXT_LLONGS (MAX_MAC_CONTEXT_BYTES / 8)
494
495 #define MAX_CIPHER_CONTEXT_BYTES 2080
496 #define MAX_CIPHER_CONTEXT_LLONGS (MAX_CIPHER_CONTEXT_BYTES / 8)
497
498 typedef struct {
499 SSL3Opaque wrapped_master_secret[48];
500 PRUint16 wrapped_master_secret_len;
501 PRUint8 msIsWrapped;
502 PRUint8 resumable;
503 } ssl3SidKeys; /* 52 bytes */
504
505 typedef struct {
506 PK11SymKey *write_key;
507 PK11SymKey *write_mac_key;
508 PK11Context *write_mac_context;
509 SECItem write_key_item;
510 SECItem write_iv_item;
511 SECItem write_mac_key_item;
512 SSL3Opaque write_iv[MAX_IV_LENGTH];
513 PRUint64 cipher_context[MAX_CIPHER_CONTEXT_LLONGS];
514 } ssl3KeyMaterial;
515
516 typedef SECStatus (*SSLCipher)(void * context,
517 unsigned char * out,
518 int * outlen,
519 int maxout,
520 const unsigned char *in,
521 int inlen);
522 typedef SECStatus (*SSLAEADCipher)(
523 ssl3KeyMaterial * keys,
524 PRBool doDecrypt,
525 unsigned char * out,
526 int * outlen,
527 int maxout,
528 const unsigned char *in,
529 int inlen,
530 const unsigned char *additionalData,
531 int additionalDataLen);
532 typedef SECStatus (*SSLCompressor)(void * context,
533 unsigned char * out,
534 int * outlen,
535 int maxout,
536 const unsigned char *in,
537 int inlen);
538 typedef SECStatus (*SSLDestroy)(void *context, PRBool freeit);
539
540 /* The DTLS anti-replay window. Defined here because we need it in
541 * the cipher spec. Note that this is a ring buffer but left and
542 * right represent the true window, with modular arithmetic used to
543 * map them onto the buffer.
544 */
545 #define DTLS_RECVD_RECORDS_WINDOW 1024 /* Packets; approximate
546 * Must be divisible by 8
547 */
548 typedef struct DTLSRecvdRecordsStr {
549 unsigned char data[DTLS_RECVD_RECORDS_WINDOW/8];
550 PRUint64 left;
551 PRUint64 right;
552 } DTLSRecvdRecords;
553
554 /*
555 ** These are the "specs" in the "ssl3" struct.
556 ** Access to the pointers to these specs, and all the specs' contents
557 ** (direct and indirect) is protected by the reader/writer lock ss->specLock.
558 */
559 typedef struct {
560 const ssl3BulkCipherDef *cipher_def;
561 const ssl3MACDef * mac_def;
562 SSLCompressionMethod compression_method;
563 int mac_size;
564 SSLCipher encode;
565 SSLCipher decode;
566 SSLAEADCipher aead;
567 SSLDestroy destroy;
568 void * encodeContext;
569 void * decodeContext;
570 SSLCompressor compressor; /* Don't name these fields compress */
571 SSLCompressor decompressor; /* and uncompress because zconf.h */
572 /* may define them as macros. */
573 SSLDestroy destroyCompressContext;
574 void * compressContext;
575 SSLDestroy destroyDecompressContext;
576 void * decompressContext;
577 PRBool bypassCiphers; /* did double bypass (at least) */
578 PK11SymKey * master_secret;
579 SSL3SequenceNumber write_seq_num;
580 SSL3SequenceNumber read_seq_num;
581 SSL3ProtocolVersion version;
582 ssl3KeyMaterial client;
583 ssl3KeyMaterial server;
584 SECItem msItem;
585 unsigned char key_block[NUM_MIXERS * MD5_LENGTH];
586 unsigned char raw_master_secret[56];
587 SECItem srvVirtName; /* for server: name that was negotiated
588 * with a client. For client - is
589 * always set to NULL.*/
590 DTLSEpoch epoch;
591 DTLSRecvdRecords recvdRecords;
592 } ssl3CipherSpec;
593
594 typedef enum { never_cached,
595 in_client_cache,
596 in_server_cache,
597 invalid_cache /* no longer in any cache. */
598 } Cached;
599
600 struct sslSessionIDStr {
601 /* The global cache lock must be held when accessing these members when the
602 * sid is in any cache.
603 */
604 sslSessionID * next; /* chain used for client sockets, only */
605 Cached cached;
606 int references;
607 PRUint32 lastAccessTime; /* seconds since Jan 1, 1970 */
608
609 /* The rest of the members, except for the members of u.ssl3.locked, may
610 * be modified only when the sid is not in any cache.
611 */
612
613 CERTCertificate * peerCert;
614 SECItemArray peerCertStatus; /* client only */
615 const char * peerID; /* client only */
616 const char * urlSvrName; /* client only */
617 CERTCertificate * localCert;
618
619 PRIPv6Addr addr;
620 PRUint16 port;
621
622 SSL3ProtocolVersion version;
623
624 PRUint32 creationTime; /* seconds since Jan 1, 1970 */
625 PRUint32 expirationTime; /* seconds since Jan 1, 1970 */
626
627 SSLSignType authAlgorithm;
628 PRUint32 authKeyBits;
629 SSLKEAType keaType;
630 PRUint32 keaKeyBits;
631
632 union {
633 struct {
634 /* the V2 code depends upon the size of sessionID. */
635 unsigned char sessionID[SSL2_SESSIONID_BYTES];
636
637 /* Stuff used to recreate key and read/write cipher objects */
638 SECItem masterKey; /* never wrapped */
639 int cipherType;
640 SECItem cipherArg;
641 int keyBits;
642 int secretKeyBits;
643 } ssl2;
644 struct {
645 /* values that are copied into the server's on-disk SID cache. */
646 PRUint8 sessionIDLength;
647 SSL3Opaque sessionID[SSL3_SESSIONID_BYTES];
648
649 ssl3CipherSuite cipherSuite;
650 SSLCompressionMethod compression;
651 int policy;
652 ssl3SidKeys keys;
653 CK_MECHANISM_TYPE masterWrapMech;
654 /* mechanism used to wrap master secret */
655 SSL3KEAType exchKeyType;
656 /* key type used in exchange algorithm,
657 * and to wrap the sym wrapping key. */
658 #ifndef NSS_DISABLE_ECC
659 PRUint32 negotiatedECCurves;
660 #endif /* NSS_DISABLE_ECC */
661
662 /* The following values are NOT restored from the server's on-disk
663 * session cache, but are restored from the client's cache.
664 */
665 PK11SymKey * clientWriteKey;
666 PK11SymKey * serverWriteKey;
667
668 /* The following values pertain to the slot that wrapped the
669 ** master secret. (used only in client)
670 */
671 SECMODModuleID masterModuleID;
672 /* what module wrapped the master secret */
673 CK_SLOT_ID masterSlotID;
674 PRUint16 masterWrapIndex;
675 /* what's the key index for the wrapping key */
676 PRUint16 masterWrapSeries;
677 /* keep track of the slot series, so we don't
678 * accidently try to use new keys after the
679 * card gets removed and replaced.*/
680
681 /* The following values pertain to the slot that did the signature
682 ** for client auth. (used only in client)
683 */
684 SECMODModuleID clAuthModuleID;
685 CK_SLOT_ID clAuthSlotID;
686 PRUint16 clAuthSeries;
687
688 char masterValid;
689 char clAuthValid;
690
691 SECItem srvName;
692
693 /* This lock is lazily initialized by CacheSID when a sid is first
694 * cached. Before then, there is no need to lock anything because
695 * the sid isn't being shared by anything.
696 */
697 PRRWLock *lock;
698
699 /* The lock must be held while reading or writing these members
700 * because they change while the sid is cached.
701 */
702 struct {
703 /* The session ticket, if we have one, is sent as an extension
704 * in the ClientHello message. This field is used only by
705 * clients. It is protected by lock when lock is non-null
706 * (after the sid has been added to the client session cache).
707 */
708 NewSessionTicket sessionTicket;
709 } locked;
710 } ssl3;
711 } u;
712 };
713
714 typedef struct ssl3CipherSuiteDefStr {
715 ssl3CipherSuite cipher_suite;
716 SSL3BulkCipher bulk_cipher_alg;
717 SSL3MACAlgorithm mac_alg;
718 SSL3KeyExchangeAlgorithm key_exchange_alg;
719 } ssl3CipherSuiteDef;
720
721 /*
722 ** There are tables of these, all const.
723 */
724 typedef struct {
725 SSL3KeyExchangeAlgorithm kea;
726 SSL3KEAType exchKeyType;
727 SSL3SignType signKeyType;
728 PRBool is_limited;
729 int key_size_limit;
730 PRBool tls_keygen;
731 } ssl3KEADef;
732
733 /*
734 ** There are tables of these, all const.
735 */
736 struct ssl3BulkCipherDefStr {
737 SSL3BulkCipher cipher;
738 SSLCipherAlgorithm calg;
739 int key_size;
740 int secret_key_size;
741 CipherType type;
742 int iv_size;
743 int block_size;
744 int tag_size; /* authentication tag size for AEAD ciphers. */
745 int explicit_nonce_size; /* for AEAD ciphers. */
746 };
747
748 /*
749 ** There are tables of these, all const.
750 */
751 struct ssl3MACDefStr {
752 SSL3MACAlgorithm mac;
753 CK_MECHANISM_TYPE mmech;
754 int pad_size;
755 int mac_size;
756 };
757
758 typedef enum {
759 wait_client_hello,
760 wait_client_cert,
761 wait_client_key,
762 wait_cert_verify,
763 wait_change_cipher,
764 wait_finished,
765 wait_server_hello,
766 wait_certificate_status,
767 wait_server_cert,
768 wait_server_key,
769 wait_cert_request,
770 wait_hello_done,
771 wait_new_session_ticket,
772 idle_handshake
773 } SSL3WaitState;
774
775 /*
776 * TLS extension related constants and data structures.
777 */
778 typedef struct TLSExtensionDataStr TLSExtensionData;
779 typedef struct SessionTicketDataStr SessionTicketData;
780
781 struct TLSExtensionDataStr {
782 /* registered callbacks that send server hello extensions */
783 ssl3HelloExtensionSender serverSenders[SSL_MAX_EXTENSIONS];
784 /* Keep track of the extensions that are negotiated. */
785 PRUint16 numAdvertised;
786 PRUint16 numNegotiated;
787 PRUint16 advertised[SSL_MAX_EXTENSIONS];
788 PRUint16 negotiated[SSL_MAX_EXTENSIONS];
789
790 /* SessionTicket Extension related data. */
791 PRBool ticketTimestampVerified;
792 PRBool emptySessionTicket;
793 PRBool sentSessionTicketInClientHello;
794
795 /* SNI Extension related data
796 * Names data is not coppied from the input buffer. It can not be
797 * used outside the scope where input buffer is defined and that
798 * is beyond ssl3_HandleClientHello function. */
799 SECItem *sniNameArr;
800 PRUint32 sniNameArrSize;
801 };
802
803 typedef SECStatus (*sslRestartTarget)(sslSocket *);
804
805 /*
806 ** A DTLS queued message (potentially to be retransmitted)
807 */
808 typedef struct DTLSQueuedMessageStr {
809 PRCList link; /* The linked list link */
810 DTLSEpoch epoch; /* The epoch to use */
811 SSL3ContentType type; /* The message type */
812 unsigned char *data; /* The data */
813 PRUint16 len; /* The data length */
814 } DTLSQueuedMessage;
815
816 typedef enum {
817 handshake_hash_unknown = 0,
818 handshake_hash_combo = 1, /* The MD5/SHA-1 combination */
819 handshake_hash_single = 2 /* A single hash */
820 } SSL3HandshakeHashType;
821
822 /*
823 ** This is the "hs" member of the "ssl3" struct.
824 ** This entire struct is protected by ssl3HandshakeLock
825 */
826 typedef struct SSL3HandshakeStateStr {
827 SSL3Random server_random;
828 SSL3Random client_random;
829 SSL3WaitState ws;
830
831 /* This group of members is used for handshake running hashes. */
832 SSL3HandshakeHashType hashType;
833 sslBuffer messages; /* Accumulated handshake messages */
834 #ifndef NO_PKCS11_BYPASS
835 /* Bypass mode:
836 * SSL 3.0 - TLS 1.1 use both |md5_cx| and |sha_cx|. |md5_cx| is used for
837 * MD5 and |sha_cx| for SHA-1.
838 * TLS 1.2 and later use only |sha_cx|, for SHA-256. NOTE: When we support
839 * SHA-384, increase MAX_MAC_CONTEXT_BYTES to 712. */
840 PRUint64 md5_cx[MAX_MAC_CONTEXT_LLONGS];
841 PRUint64 sha_cx[MAX_MAC_CONTEXT_LLONGS];
842 const SECHashObject * sha_obj;
843 /* The function prototype of sha_obj->clone() does not match the prototype
844 * of the freebl <HASH>_Clone functions, so we need a dedicated function
845 * pointer for the <HASH>_Clone function. */
846 void (*sha_clone)(void *dest, void *src);
847 #endif
848 /* PKCS #11 mode:
849 * SSL 3.0 - TLS 1.1 use both |md5| and |sha|. |md5| is used for MD5 and
850 * |sha| for SHA-1.
851 * TLS 1.2 and later use only |sha|, for SHA-256. */
852 /* NOTE: On the client side, TLS 1.2 and later use |md5| as a backup
853 * handshake hash for generating client auth signatures. Confusingly, the
854 * backup hash function is SHA-1. */
855 #define backupHash md5
856 PK11Context * md5;
857 PK11Context * sha;
858
859 const ssl3KEADef * kea_def;
860 ssl3CipherSuite cipher_suite;
861 const ssl3CipherSuiteDef *suite_def;
862 SSLCompressionMethod compression;
863 sslBuffer msg_body; /* protected by recvBufLock */
864 /* partial handshake message from record layer */
865 unsigned int header_bytes;
866 /* number of bytes consumed from handshake */
867 /* message for message type and header length */
868 SSL3HandshakeType msg_type;
869 unsigned long msg_len;
870 SECItem ca_list; /* used only by client */
871 PRBool isResuming; /* are we resuming a session */
872 PRBool usedStepDownKey; /* we did a server key exchange. */
873 PRBool sendingSCSV; /* instead of empty RI */
874 sslBuffer msgState; /* current state for handshake messages*/
875 /* protected by recvBufLock */
876
877 /* The session ticket received in a NewSessionTicket message is temporarily
878 * stored in newSessionTicket until the handshake is finished; then it is
879 * moved to the sid.
880 */
881 PRBool receivedNewSessionTicket;
882 NewSessionTicket newSessionTicket;
883
884 PRUint16 finishedBytes; /* size of single finished below */
885 union {
886 TLSFinished tFinished[2]; /* client, then server */
887 SSL3Finished sFinished[2];
888 SSL3Opaque data[72];
889 } finishedMsgs;
890 #ifndef NSS_DISABLE_ECC
891 PRUint32 negotiatedECCurves; /* bit mask */
892 #endif /* NSS_DISABLE_ECC */
893
894 PRBool authCertificatePending;
895 /* Which function should SSL_RestartHandshake* call if we're blocked?
896 * One of NULL, ssl3_SendClientSecondRound, ssl3_FinishHandshake,
897 * or ssl3_AlwaysFail */
898 sslRestartTarget restartTarget;
899 /* Shared state between ssl3_HandleFinished and ssl3_FinishHandshake */
900 PRBool cacheSID;
901
902 PRBool canFalseStart; /* Can/did we False Start */
903
904 /* clientSigAndHash contains the contents of the signature_algorithms
905 * extension (if any) from the client. This is only valid for TLS 1.2
906 * or later. */
907 SSL3SignatureAndHashAlgorithm *clientSigAndHash;
908 unsigned int numClientSigAndHash;
909
910 /* This group of values is used for DTLS */
911 PRUint16 sendMessageSeq; /* The sending message sequence
912 * number */
913 PRCList lastMessageFlight; /* The last message flight we
914 * sent */
915 PRUint16 maxMessageSent; /* The largest message we sent */
916 PRUint16 recvMessageSeq; /* The receiving message sequence
917 * number */
918 sslBuffer recvdFragments; /* The fragments we have received in
919 * a bitmask */
920 PRInt32 recvdHighWater; /* The high water mark for fragments
921 * received. -1 means no reassembly
922 * in progress. */
923 unsigned char cookie[32]; /* The cookie */
924 unsigned char cookieLen; /* The length of the cookie */
925 PRIntervalTime rtTimerStarted; /* When the timer was started */
926 DTLSTimerCb rtTimerCb; /* The function to call on expiry */
927 PRUint32 rtTimeoutMs; /* The length of the current timeout
928 * used for backoff (in ms) */
929 PRUint32 rtRetries; /* The retry counter */
930 } SSL3HandshakeState;
931
932
933
934 /*
935 ** This is the "ssl3" struct, as in "ss->ssl3".
936 ** note:
937 ** usually, crSpec == cwSpec and prSpec == pwSpec.
938 ** Sometimes, crSpec == pwSpec and prSpec == cwSpec.
939 ** But there are never more than 2 actual specs.
940 ** No spec must ever be modified if either "current" pointer points to it.
941 */
942 struct ssl3StateStr {
943
944 /*
945 ** The following Specs and Spec pointers must be protected using the
946 ** Spec Lock.
947 */
948 ssl3CipherSpec * crSpec; /* current read spec. */
949 ssl3CipherSpec * prSpec; /* pending read spec. */
950 ssl3CipherSpec * cwSpec; /* current write spec. */
951 ssl3CipherSpec * pwSpec; /* pending write spec. */
952
953 CERTCertificate * clientCertificate; /* used by client */
954 SECKEYPrivateKey * clientPrivateKey; /* used by client */
955 CERTCertificateList *clientCertChain; /* used by client */
956 PRBool sendEmptyCert; /* used by client */
957
958 int policy;
959 /* This says what cipher suites we can do, and should
960 * be either SSL_ALLOWED or SSL_RESTRICTED
961 */
962 PLArenaPool * peerCertArena;
963 /* These are used to keep track of the peer CA */
964 void * peerCertChain;
965 /* chain while we are trying to validate it. */
966 CERTDistNames * ca_list;
967 /* used by server. trusted CAs for this socket. */
968 PRBool initialized;
969 SSL3HandshakeState hs;
970 ssl3CipherSpec specs[2]; /* one is current, one is pending. */
971
972 /* In a client: if the server supports Next Protocol Negotiation, then
973 * this is the protocol that was negotiated.
974 */
975 SECItem nextProto;
976 SSLNextProtoState nextProtoState;
977
978 PRUint16 mtu; /* Our estimate of the MTU */
979
980 /* DTLS-SRTP cipher suite preferences (if any) */
981 PRUint16 dtlsSRTPCiphers[MAX_DTLS_SRTP_CIPHER_SUITES];
982 PRUint16 dtlsSRTPCipherCount;
983 PRUint16 dtlsSRTPCipherSuite; /* 0 if not selected */
984 };
985
986 #define DTLS_MAX_MTU 1500 /* Ethernet MTU but without subtracting the
987 * headers, so slightly larger than expected */
988 #define IS_DTLS(ss) (ss->protocolVariant == ssl_variant_datagram)
989
990 typedef struct {
991 SSL3ContentType type;
992 SSL3ProtocolVersion version;
993 SSL3SequenceNumber seq_num; /* DTLS only */
994 sslBuffer * buf;
995 } SSL3Ciphertext;
996
997 struct ssl3KeyPairStr {
998 SECKEYPrivateKey * privKey;
999 SECKEYPublicKey * pubKey;
1000 PRInt32 refCount; /* use PR_Atomic calls for this. */
1001 };
1002
1003 typedef struct SSLWrappedSymWrappingKeyStr {
1004 SSL3Opaque wrappedSymmetricWrappingkey[512];
1005 CK_MECHANISM_TYPE symWrapMechanism;
1006 /* unwrapped symmetric wrapping key uses this mechanism */
1007 CK_MECHANISM_TYPE asymWrapMechanism;
1008 /* mechanism used to wrap the SymmetricWrappingKey using
1009 * server's public and/or private keys. */
1010 SSL3KEAType exchKeyType; /* type of keys used to wrap SymWrapKey*/
1011 PRInt32 symWrapMechIndex;
1012 PRUint16 wrappedSymKeyLen;
1013 } SSLWrappedSymWrappingKey;
1014
1015 typedef struct SessionTicketStr {
1016 PRUint16 ticket_version;
1017 SSL3ProtocolVersion ssl_version;
1018 ssl3CipherSuite cipher_suite;
1019 SSLCompressionMethod compression_method;
1020 SSLSignType authAlgorithm;
1021 PRUint32 authKeyBits;
1022 SSLKEAType keaType;
1023 PRUint32 keaKeyBits;
1024 /*
1025 * exchKeyType and msWrapMech contain meaningful values only if
1026 * ms_is_wrapped is true.
1027 */
1028 PRUint8 ms_is_wrapped;
1029 SSLKEAType exchKeyType; /* XXX(wtc): same as keaType above? */
1030 CK_MECHANISM_TYPE msWrapMech;
1031 PRUint16 ms_length;
1032 SSL3Opaque master_secret[48];
1033 ClientIdentity client_identity;
1034 SECItem peer_cert;
1035 PRUint32 timestamp;
1036 SECItem srvName; /* negotiated server name */
1037 } SessionTicket;
1038
1039 /*
1040 * SSL2 buffers used in SSL3.
1041 * writeBuf in the SecurityInfo maintained by sslsecur.c is used
1042 * to hold the data just about to be passed to the kernel
1043 * sendBuf in the ConnectInfo maintained by sslcon.c is used
1044 * to hold handshake messages as they are accumulated
1045 */
1046
1047 /*
1048 ** This is "ci", as in "ss->sec.ci".
1049 **
1050 ** Protection: All the variables in here are protected by
1051 ** firstHandshakeLock AND (in ssl3) ssl3HandshakeLock
1052 */
1053 struct sslConnectInfoStr {
1054 /* outgoing handshakes appended to this. */
1055 sslBuffer sendBuf; /*xmitBufLock*/ /* ssl 2 & 3 */
1056
1057 PRIPv6Addr peer; /* ssl 2 & 3 */
1058 unsigned short port; /* ssl 2 & 3 */
1059
1060 sslSessionID *sid; /* ssl 2 & 3 */
1061
1062 /* see CIS_HAVE defines below for the bit values in *elements. */
1063 char elements; /* ssl2 only */
1064 char requiredElements; /* ssl2 only */
1065 char sentElements; /* ssl2 only */
1066
1067 char sentFinished; /* ssl2 only */
1068
1069 /* Length of server challenge. Used by client when saving challenge */
1070 int serverChallengeLen; /* ssl2 only */
1071 /* type of authentication requested by server */
1072 unsigned char authType; /* ssl2 only */
1073
1074 /* Challenge sent by client to server in client-hello message */
1075 /* SSL3 gets a copy of this. See ssl3_StartHandshakeHash(). */
1076 unsigned char clientChallenge[SSL_MAX_CHALLENGE_BYTES]; /* ssl 2 & 3 */
1077
1078 /* Connection-id sent by server to client in server-hello message */
1079 unsigned char connectionID[SSL_CONNECTIONID_BYTES]; /* ssl2 only */
1080
1081 /* Challenge sent by server to client in request-certificate message */
1082 unsigned char serverChallenge[SSL_MAX_CHALLENGE_BYTES]; /* ssl2 only */
1083
1084 /* Information kept to handle a request-certificate message */
1085 unsigned char readKey[SSL_MAX_MASTER_KEY_BYTES]; /* ssl2 only */
1086 unsigned char writeKey[SSL_MAX_MASTER_KEY_BYTES]; /* ssl2 only */
1087 unsigned keySize; /* ssl2 only */
1088 };
1089
1090 /* bit values for ci->elements, ci->requiredElements, sentElements. */
1091 #define CIS_HAVE_MASTER_KEY 0x01
1092 #define CIS_HAVE_CERTIFICATE 0x02
1093 #define CIS_HAVE_FINISHED 0x04
1094 #define CIS_HAVE_VERIFY 0x08
1095
1096 /* Note: The entire content of this struct and whatever it points to gets
1097 * blown away by SSL_ResetHandshake(). This is "sec" as in "ss->sec".
1098 *
1099 * Unless otherwise specified below, the contents of this struct are
1100 * protected by firstHandshakeLock AND (in ssl3) ssl3HandshakeLock.
1101 */
1102 struct sslSecurityInfoStr {
1103 sslSendFunc send; /*xmitBufLock*/ /* ssl 2 & 3 */
1104 int isServer; /* Spec Lock?*/ /* ssl 2 & 3 */
1105 sslBuffer writeBuf; /*xmitBufLock*/ /* ssl 2 & 3 */
1106
1107 int cipherType; /* ssl 2 & 3 */
1108 int keyBits; /* ssl 2 & 3 */
1109 int secretKeyBits; /* ssl 2 & 3 */
1110 CERTCertificate *localCert; /* ssl 2 & 3 */
1111 CERTCertificate *peerCert; /* ssl 2 & 3 */
1112 SECKEYPublicKey *peerKey; /* ssl3 only */
1113
1114 SSLSignType authAlgorithm;
1115 PRUint32 authKeyBits;
1116 SSLKEAType keaType;
1117 PRUint32 keaKeyBits;
1118
1119 /*
1120 ** Procs used for SID cache (nonce) management.
1121 ** Different implementations exist for clients/servers
1122 ** The lookup proc is only used for servers. Baloney!
1123 */
1124 sslSessionIDCacheFunc cache; /* ssl 2 & 3 */
1125 sslSessionIDUncacheFunc uncache; /* ssl 2 & 3 */
1126
1127 /*
1128 ** everything below here is for ssl2 only.
1129 ** This stuff is equivalent to SSL3's "spec", and is protected by the
1130 ** same "Spec Lock" as used for SSL3's specs.
1131 */
1132 PRUint32 sendSequence; /*xmitBufLock*/ /* ssl2 only */
1133 PRUint32 rcvSequence; /*recvBufLock*/ /* ssl2 only */
1134
1135 /* Hash information; used for one-way-hash functions (MD2, MD5, etc.) */
1136 const SECHashObject *hash; /* Spec Lock */ /* ssl2 only */
1137 void *hashcx; /* Spec Lock */ /* ssl2 only */
1138
1139 SECItem sendSecret; /* Spec Lock */ /* ssl2 only */
1140 SECItem rcvSecret; /* Spec Lock */ /* ssl2 only */
1141
1142 /* Session cypher contexts; one for each direction */
1143 void *readcx; /* Spec Lock */ /* ssl2 only */
1144 void *writecx; /* Spec Lock */ /* ssl2 only */
1145 SSLCipher enc; /* Spec Lock */ /* ssl2 only */
1146 SSLCipher dec; /* Spec Lock */ /* ssl2 only */
1147 void (*destroy)(void *, PRBool); /* Spec Lock */ /* ssl2 only */
1148
1149 /* Blocking information for the session cypher */
1150 int blockShift; /* Spec Lock */ /* ssl2 only */
1151 int blockSize; /* Spec Lock */ /* ssl2 only */
1152
1153 /* These are used during a connection handshake */
1154 sslConnectInfo ci; /* ssl 2 & 3 */
1155
1156 };
1157
1158 /*
1159 ** SSL Socket struct
1160 **
1161 ** Protection: XXX
1162 */
1163 struct sslSocketStr {
1164 PRFileDesc * fd;
1165
1166 /* Pointer to operations vector for this socket */
1167 const sslSocketOps * ops;
1168
1169 /* SSL socket options */
1170 sslOptions opt;
1171 /* Enabled version range */
1172 SSLVersionRange vrange;
1173
1174 /* State flags */
1175 unsigned long clientAuthRequested;
1176 unsigned long delayDisabled; /* Nagle delay disabled */
1177 unsigned long firstHsDone; /* first handshake is complete. */
1178 unsigned long enoughFirstHsDone; /* enough of the first handshake is
1179 * done for callbacks to be able to
1180 * retrieve channel security
1181 * parameters from the SSL socket. */
1182 unsigned long handshakeBegun;
1183 unsigned long lastWriteBlocked;
1184 unsigned long recvdCloseNotify; /* received SSL EOF. */
1185 unsigned long TCPconnected;
1186 unsigned long appDataBuffered;
1187 unsigned long peerRequestedProtection; /* from old renegotiation */
1188
1189 /* version of the protocol to use */
1190 SSL3ProtocolVersion version;
1191 SSL3ProtocolVersion clientHelloVersion; /* version sent in client hello. */
1192
1193 sslSecurityInfo sec; /* not a pointer any more */
1194
1195 /* protected by firstHandshakeLock AND (in ssl3) ssl3HandshakeLock. */
1196 const char *url; /* ssl 2 & 3 */
1197
1198 sslHandshakeFunc handshake; /*firstHandshakeLock*/
1199 sslHandshakeFunc nextHandshake; /*firstHandshakeLock*/
1200 sslHandshakeFunc securityHandshake; /*firstHandshakeLock*/
1201
1202 /* the following variable is only used with socks or other proxies. */
1203 char * peerID; /* String uniquely identifies target server. */
1204
1205 unsigned char * cipherSpecs;
1206 unsigned int sizeCipherSpecs;
1207 const unsigned char * preferredCipher;
1208
1209 ssl3KeyPair * stepDownKeyPair; /* RSA step down keys */
1210
1211 /* Callbacks */
1212 SSLAuthCertificate authCertificate;
1213 void *authCertificateArg;
1214 SSLGetClientAuthData getClientAuthData;
1215 void *getClientAuthDataArg;
1216 SSLSNISocketConfig sniSocketConfig;
1217 void *sniSocketConfigArg;
1218 SSLBadCertHandler handleBadCert;
1219 void *badCertArg;
1220 SSLHandshakeCallback handshakeCallback;
1221 void *handshakeCallbackData;
1222 SSLCanFalseStartCallback canFalseStartCallback;
1223 void *canFalseStartCallbackData;
1224 void *pkcs11PinArg;
1225 SSLNextProtoCallback nextProtoCallback;
1226 void *nextProtoArg;
1227
1228 PRIntervalTime rTimeout; /* timeout for NSPR I/O */
1229 PRIntervalTime wTimeout; /* timeout for NSPR I/O */
1230 PRIntervalTime cTimeout; /* timeout for NSPR I/O */
1231
1232 PZLock * recvLock; /* lock against multiple reader threads. */
1233 PZLock * sendLock; /* lock against multiple sender threads. */
1234
1235 PZMonitor * recvBufLock; /* locks low level recv buffers. */
1236 PZMonitor * xmitBufLock; /* locks low level xmit buffers. */
1237
1238 /* Only one thread may operate on the socket until the initial handshake
1239 ** is complete. This Monitor ensures that. Since SSL2 handshake is
1240 ** only done once, this is also effectively the SSL2 handshake lock.
1241 */
1242 PZMonitor * firstHandshakeLock;
1243
1244 /* This monitor protects the ssl3 handshake state machine data.
1245 ** Only one thread (reader or writer) may be in the ssl3 handshake state
1246 ** machine at any time. */
1247 PZMonitor * ssl3HandshakeLock;
1248
1249 /* reader/writer lock, protects the secret data needed to encrypt and MAC
1250 ** outgoing records, and to decrypt and MAC check incoming ciphertext
1251 ** records. */
1252 NSSRWLock * specLock;
1253
1254 /* handle to perm cert db (and implicitly to the temp cert db) used
1255 ** with this socket.
1256 */
1257 CERTCertDBHandle * dbHandle;
1258
1259 PRThread * writerThread; /* thread holds SSL_LOCK_WRITER lock */
1260
1261 PRUint16 shutdownHow; /* See ssl_SHUTDOWN defines below. */
1262
1263 PRUint16 allowedByPolicy; /* copy of global policy bits. */
1264 PRUint16 maybeAllowedByPolicy; /* copy of global policy bits. */
1265 PRUint16 chosenPreference; /* SSL2 cipher preferences. */
1266
1267 sslHandshakingType handshaking;
1268
1269 /* Gather object used for gathering data */
1270 sslGather gs; /*recvBufLock*/
1271
1272 sslBuffer saveBuf; /*xmitBufLock*/
1273 sslBuffer pendingBuf; /*xmitBufLock*/
1274
1275 /* Configuration state for server sockets */
1276 /* server cert and key for each KEA type */
1277 sslServerCerts serverCerts[kt_kea_size];
1278 /* each cert needs its own status */
1279 SECItemArray * certStatusArray[kt_kea_size];
1280
1281 ssl3CipherSuiteCfg cipherSuites[ssl_V3_SUITES_IMPLEMENTED];
1282 ssl3KeyPair * ephemeralECDHKeyPair; /* for ECDHE-* handshake */
1283
1284 /* SSL3 state info. Formerly was a pointer */
1285 ssl3State ssl3;
1286
1287 /*
1288 * TLS extension related data.
1289 */
1290 /* True when the current session is a stateless resume. */
1291 PRBool statelessResume;
1292 TLSExtensionData xtnData;
1293
1294 /* Whether we are doing stream or datagram mode */
1295 SSLProtocolVariant protocolVariant;
1296 };
1297
1298
1299
1300 /* All the global data items declared here should be protected using the
1301 ** ssl_global_data_lock, which is a reader/writer lock.
1302 */
1303 extern NSSRWLock * ssl_global_data_lock;
1304 extern char ssl_debug;
1305 extern char ssl_trace;
1306 extern FILE * ssl_trace_iob;
1307 extern FILE * ssl_keylog_iob;
1308 extern CERTDistNames * ssl3_server_ca_list;
1309 extern PRUint32 ssl_sid_timeout;
1310 extern PRUint32 ssl3_sid_timeout;
1311
1312 extern const char * const ssl_cipherName[];
1313 extern const char * const ssl3_cipherName[];
1314
1315 extern sslSessionIDLookupFunc ssl_sid_lookup;
1316 extern sslSessionIDCacheFunc ssl_sid_cache;
1317 extern sslSessionIDUncacheFunc ssl_sid_uncache;
1318
1319 /************************************************************************/
1320
1321 SEC_BEGIN_PROTOS
1322
1323 /* Internal initialization and installation of the SSL error tables */
1324 extern SECStatus ssl_Init(void);
1325 extern SECStatus ssl_InitializePRErrorTable(void);
1326
1327 /* Implementation of ops for default (non socks, non secure) case */
1328 extern int ssl_DefConnect(sslSocket *ss, const PRNetAddr *addr);
1329 extern PRFileDesc *ssl_DefAccept(sslSocket *ss, PRNetAddr *addr);
1330 extern int ssl_DefBind(sslSocket *ss, const PRNetAddr *addr);
1331 extern int ssl_DefListen(sslSocket *ss, int backlog);
1332 extern int ssl_DefShutdown(sslSocket *ss, int how);
1333 extern int ssl_DefClose(sslSocket *ss);
1334 extern int ssl_DefRecv(sslSocket *ss, unsigned char *buf, int len, int flags);
1335 extern int ssl_DefSend(sslSocket *ss, const unsigned char *buf,
1336 int len, int flags);
1337 extern int ssl_DefRead(sslSocket *ss, unsigned char *buf, int len);
1338 extern int ssl_DefWrite(sslSocket *ss, const unsigned char *buf, int len);
1339 extern int ssl_DefGetpeername(sslSocket *ss, PRNetAddr *name);
1340 extern int ssl_DefGetsockname(sslSocket *ss, PRNetAddr *name);
1341 extern int ssl_DefGetsockopt(sslSocket *ss, PRSockOption optname,
1342 void *optval, PRInt32 *optlen);
1343 extern int ssl_DefSetsockopt(sslSocket *ss, PRSockOption optname,
1344 const void *optval, PRInt32 optlen);
1345
1346 /* Implementation of ops for socks only case */
1347 extern int ssl_SocksConnect(sslSocket *ss, const PRNetAddr *addr);
1348 extern PRFileDesc *ssl_SocksAccept(sslSocket *ss, PRNetAddr *addr);
1349 extern int ssl_SocksBind(sslSocket *ss, const PRNetAddr *addr);
1350 extern int ssl_SocksListen(sslSocket *ss, int backlog);
1351 extern int ssl_SocksGetsockname(sslSocket *ss, PRNetAddr *name);
1352 extern int ssl_SocksRecv(sslSocket *ss, unsigned char *buf, int len, int flags);
1353 extern int ssl_SocksSend(sslSocket *ss, const unsigned char *buf,
1354 int len, int flags);
1355 extern int ssl_SocksRead(sslSocket *ss, unsigned char *buf, int len);
1356 extern int ssl_SocksWrite(sslSocket *ss, const unsigned char *buf, int len);
1357
1358 /* Implementation of ops for secure only case */
1359 extern int ssl_SecureConnect(sslSocket *ss, const PRNetAddr *addr);
1360 extern PRFileDesc *ssl_SecureAccept(sslSocket *ss, PRNetAddr *addr);
1361 extern int ssl_SecureRecv(sslSocket *ss, unsigned char *buf,
1362 int len, int flags);
1363 extern int ssl_SecureSend(sslSocket *ss, const unsigned char *buf,
1364 int len, int flags);
1365 extern int ssl_SecureRead(sslSocket *ss, unsigned char *buf, int len);
1366 extern int ssl_SecureWrite(sslSocket *ss, const unsigned char *buf, int len);
1367 extern int ssl_SecureShutdown(sslSocket *ss, int how);
1368 extern int ssl_SecureClose(sslSocket *ss);
1369
1370 /* Implementation of ops for secure socks case */
1371 extern int ssl_SecureSocksConnect(sslSocket *ss, const PRNetAddr *addr);
1372 extern PRFileDesc *ssl_SecureSocksAccept(sslSocket *ss, PRNetAddr *addr);
1373 extern PRFileDesc *ssl_FindTop(sslSocket *ss);
1374
1375 /* Gather funcs. */
1376 extern sslGather * ssl_NewGather(void);
1377 extern SECStatus ssl_InitGather(sslGather *gs);
1378 extern void ssl_DestroyGather(sslGather *gs);
1379 extern int ssl2_GatherData(sslSocket *ss, sslGather *gs, int flags);
1380 extern int ssl2_GatherRecord(sslSocket *ss, int flags);
1381 extern SECStatus ssl_GatherRecord1stHandshake(sslSocket *ss);
1382
1383 extern SECStatus ssl2_HandleClientHelloMessage(sslSocket *ss);
1384 extern SECStatus ssl2_HandleServerHelloMessage(sslSocket *ss);
1385
1386 extern SECStatus ssl_CreateSecurityInfo(sslSocket *ss);
1387 extern SECStatus ssl_CopySecurityInfo(sslSocket *ss, sslSocket *os);
1388 extern void ssl_ResetSecurityInfo(sslSecurityInfo *sec, PRBool doMemset);
1389 extern void ssl_DestroySecurityInfo(sslSecurityInfo *sec);
1390
1391 extern void ssl_PrintBuf(sslSocket *ss, const char *msg, const void *cp, int len);
1392 extern void ssl_DumpMsg(sslSocket *ss, unsigned char *bp, unsigned len);
1393
1394 extern int ssl_SendSavedWriteData(sslSocket *ss);
1395 extern SECStatus ssl_SaveWriteData(sslSocket *ss,
1396 const void* p, unsigned int l);
1397 extern SECStatus ssl2_BeginClientHandshake(sslSocket *ss);
1398 extern SECStatus ssl2_BeginServerHandshake(sslSocket *ss);
1399 extern int ssl_Do1stHandshake(sslSocket *ss);
1400
1401 extern SECStatus sslBuffer_Grow(sslBuffer *b, unsigned int newLen);
1402 extern SECStatus sslBuffer_Append(sslBuffer *b, const void * data,
1403 unsigned int len);
1404
1405 extern void ssl2_UseClearSendFunc(sslSocket *ss);
1406 extern void ssl_ChooseSessionIDProcs(sslSecurityInfo *sec);
1407
1408 extern sslSessionID *ssl3_NewSessionID(sslSocket *ss, PRBool is_server);
1409 extern sslSessionID *ssl_LookupSID(const PRIPv6Addr *addr, PRUint16 port,
1410 const char *peerID, const char *urlSvrName);
1411 extern void ssl_FreeSID(sslSessionID *sid);
1412
1413 extern int ssl3_SendApplicationData(sslSocket *ss, const PRUint8 *in,
1414 int len, int flags);
1415
1416 extern PRBool ssl_FdIsBlocking(PRFileDesc *fd);
1417
1418 extern PRBool ssl_SocketIsBlocking(sslSocket *ss);
1419
1420 extern void ssl3_SetAlwaysBlock(sslSocket *ss);
1421
1422 extern SECStatus ssl_EnableNagleDelay(sslSocket *ss, PRBool enabled);
1423
1424 extern void ssl_FinishHandshake(sslSocket *ss);
1425
1426 /* Returns PR_TRUE if we are still waiting for the server to respond to our
1427 * client second round. Once we've received any part of the server's second
1428 * round then we don't bother trying to false start since it is almost always
1429 * the case that the NewSessionTicket, ChangeCipherSoec, and Finished messages
1430 * were sent in the same packet and we want to process them all at the same
1431 * time. If we were to try to false start in the middle of the server's second
1432 * round, then we would increase the number of I/O operations
1433 * (SSL_ForceHandshake/PR_Recv/PR_Send/etc.) needed to finish the handshake.
1434 */
1435 extern PRBool ssl3_WaitingForStartOfServerSecondRound(sslSocket *ss);
1436
1437 extern SECStatus
1438 ssl3_CompressMACEncryptRecord(ssl3CipherSpec * cwSpec,
1439 PRBool isServer,
1440 PRBool isDTLS,
1441 PRBool capRecordVersion,
1442 SSL3ContentType type,
1443 const SSL3Opaque * pIn,
1444 PRUint32 contentLen,
1445 sslBuffer * wrBuf);
1446 extern PRInt32 ssl3_SendRecord(sslSocket *ss, DTLSEpoch epoch,
1447 SSL3ContentType type,
1448 const SSL3Opaque* pIn, PRInt32 nIn,
1449 PRInt32 flags);
1450
1451 #ifdef NSS_ENABLE_ZLIB
1452 /*
1453 * The DEFLATE algorithm can result in an expansion of 0.1% + 12 bytes. For a
1454 * maximum TLS record payload of 2**14 bytes, that's 29 bytes.
1455 */
1456 #define SSL3_COMPRESSION_MAX_EXPANSION 29
1457 #else /* !NSS_ENABLE_ZLIB */
1458 #define SSL3_COMPRESSION_MAX_EXPANSION 0
1459 #endif
1460
1461 /*
1462 * make sure there is room in the write buffer for padding and
1463 * other compression and cryptographic expansions.
1464 */
1465 #define SSL3_BUFFER_FUDGE 100 + SSL3_COMPRESSION_MAX_EXPANSION
1466
1467 #define SSL_LOCK_READER(ss) if (ss->recvLock) PZ_Lock(ss->recvLock)
1468 #define SSL_UNLOCK_READER(ss) if (ss->recvLock) PZ_Unlock(ss->recvLock)
1469 #define SSL_LOCK_WRITER(ss) if (ss->sendLock) PZ_Lock(ss->sendLock)
1470 #define SSL_UNLOCK_WRITER(ss) if (ss->sendLock) PZ_Unlock(ss->sendLock)
1471
1472 /* firstHandshakeLock -> recvBufLock */
1473 #define ssl_Get1stHandshakeLock(ss) \
1474 { if (!ss->opt.noLocks) { \
1475 PORT_Assert(PZ_InMonitor((ss)->firstHandshakeLock) || \
1476 !ssl_HaveRecvBufLock(ss)); \
1477 PZ_EnterMonitor((ss)->firstHandshakeLock); \
1478 } }
1479 #define ssl_Release1stHandshakeLock(ss) \
1480 { if (!ss->opt.noLocks) PZ_ExitMonitor((ss)->firstHandshakeLock); }
1481 #define ssl_Have1stHandshakeLock(ss) \
1482 (PZ_InMonitor((ss)->firstHandshakeLock))
1483
1484 /* ssl3HandshakeLock -> xmitBufLock */
1485 #define ssl_GetSSL3HandshakeLock(ss) \
1486 { if (!ss->opt.noLocks) { \
1487 PORT_Assert(!ssl_HaveXmitBufLock(ss)); \
1488 PZ_EnterMonitor((ss)->ssl3HandshakeLock); \
1489 } }
1490 #define ssl_ReleaseSSL3HandshakeLock(ss) \
1491 { if (!ss->opt.noLocks) PZ_ExitMonitor((ss)->ssl3HandshakeLock); }
1492 #define ssl_HaveSSL3HandshakeLock(ss) \
1493 (PZ_InMonitor((ss)->ssl3HandshakeLock))
1494
1495 #define ssl_GetSpecReadLock(ss) \
1496 { if (!ss->opt.noLocks) NSSRWLock_LockRead((ss)->specLock); }
1497 #define ssl_ReleaseSpecReadLock(ss) \
1498 { if (!ss->opt.noLocks) NSSRWLock_UnlockRead((ss)->specLock); }
1499 /* NSSRWLock_HaveReadLock is not exported so there's no
1500 * ssl_HaveSpecReadLock macro. */
1501
1502 #define ssl_GetSpecWriteLock(ss) \
1503 { if (!ss->opt.noLocks) NSSRWLock_LockWrite((ss)->specLock); }
1504 #define ssl_ReleaseSpecWriteLock(ss) \
1505 { if (!ss->opt.noLocks) NSSRWLock_UnlockWrite((ss)->specLock); }
1506 #define ssl_HaveSpecWriteLock(ss) \
1507 (NSSRWLock_HaveWriteLock((ss)->specLock))
1508
1509 /* recvBufLock -> ssl3HandshakeLock -> xmitBufLock */
1510 #define ssl_GetRecvBufLock(ss) \
1511 { if (!ss->opt.noLocks) { \
1512 PORT_Assert(!ssl_HaveSSL3HandshakeLock(ss)); \
1513 PORT_Assert(!ssl_HaveXmitBufLock(ss)); \
1514 PZ_EnterMonitor((ss)->recvBufLock); \
1515 } }
1516 #define ssl_ReleaseRecvBufLock(ss) \
1517 { if (!ss->opt.noLocks) PZ_ExitMonitor( (ss)->recvBufLock); }
1518 #define ssl_HaveRecvBufLock(ss) \
1519 (PZ_InMonitor((ss)->recvBufLock))
1520
1521 /* xmitBufLock -> specLock */
1522 #define ssl_GetXmitBufLock(ss) \
1523 { if (!ss->opt.noLocks) PZ_EnterMonitor((ss)->xmitBufLock); }
1524 #define ssl_ReleaseXmitBufLock(ss) \
1525 { if (!ss->opt.noLocks) PZ_ExitMonitor( (ss)->xmitBufLock); }
1526 #define ssl_HaveXmitBufLock(ss) \
1527 (PZ_InMonitor((ss)->xmitBufLock))
1528
1529 /* Placeholder value used in version ranges when SSL 3.0 and all
1530 * versions of TLS are disabled.
1531 */
1532 #define SSL_LIBRARY_VERSION_NONE 0
1533
1534 /* SSL_LIBRARY_VERSION_MAX_SUPPORTED is the maximum version that this version
1535 * of libssl supports. Applications should use SSL_VersionRangeGetSupported at
1536 * runtime to determine which versions are supported by the version of libssl
1537 * in use.
1538 */
1539 #define SSL_LIBRARY_VERSION_MAX_SUPPORTED SSL_LIBRARY_VERSION_TLS_1_2
1540
1541 /* Rename this macro SSL_ALL_VERSIONS_DISABLED when SSL 2.0 is removed. */
1542 #define SSL3_ALL_VERSIONS_DISABLED(vrange) \
1543 ((vrange)->min == SSL_LIBRARY_VERSION_NONE)
1544
1545 extern PRBool ssl3_VersionIsSupported(SSLProtocolVariant protocolVariant,
1546 SSL3ProtocolVersion version);
1547
1548 extern SECStatus ssl3_KeyAndMacDeriveBypass(ssl3CipherSpec * pwSpec,
1549 const unsigned char * cr, const unsigned char * sr,
1550 PRBool isTLS, PRBool isExport);
1551 extern SECStatus ssl3_MasterKeyDeriveBypass( ssl3CipherSpec * pwSpec,
1552 const unsigned char * cr, const unsigned char * sr,
1553 const SECItem * pms, PRBool isTLS, PRBool isRSA);
1554
1555 /* These functions are called from secnav, even though they're "private". */
1556
1557 extern int ssl2_SendErrorMessage(struct sslSocketStr *ss, int error);
1558 extern int SSL_RestartHandshakeAfterCertReq(struct sslSocketStr *ss,
1559 CERTCertificate *cert,
1560 SECKEYPrivateKey *key,
1561 CERTCertificateList *certChain);
1562 extern sslSocket *ssl_FindSocket(PRFileDesc *fd);
1563 extern void ssl_FreeSocket(struct sslSocketStr *ssl);
1564 extern SECStatus SSL3_SendAlert(sslSocket *ss, SSL3AlertLevel level,
1565 SSL3AlertDescription desc);
1566 extern SECStatus ssl3_DecodeError(sslSocket *ss);
1567
1568 extern SECStatus ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error);
1569
1570 /*
1571 * for dealing with SSL 3.0 clients sending SSL 2.0 format hellos
1572 */
1573 extern SECStatus ssl3_HandleV2ClientHello(
1574 sslSocket *ss, unsigned char *buffer, int length);
1575 extern SECStatus ssl3_StartHandshakeHash(
1576 sslSocket *ss, unsigned char *buf, int length);
1577
1578 /*
1579 * SSL3 specific routines
1580 */
1581 SECStatus ssl3_SendClientHello(sslSocket *ss, PRBool resending);
1582
1583 /*
1584 * input into the SSL3 machinery from the actualy network reading code
1585 */
1586 SECStatus ssl3_HandleRecord(
1587 sslSocket *ss, SSL3Ciphertext *cipher, sslBuffer *out);
1588
1589 int ssl3_GatherAppDataRecord(sslSocket *ss, int flags);
1590 int ssl3_GatherCompleteHandshake(sslSocket *ss, int flags);
1591 /*
1592 * When talking to export clients or using export cipher suites, servers
1593 * with public RSA keys larger than 512 bits need to use a 512-bit public
1594 * key, signed by the larger key. The smaller key is a "step down" key.
1595 * Generate that key pair and keep it around.
1596 */
1597 extern SECStatus ssl3_CreateRSAStepDownKeys(sslSocket *ss);
1598
1599 #ifndef NSS_DISABLE_ECC
1600 extern void ssl3_FilterECCipherSuitesByServerCerts(sslSocket *ss);
1601 extern PRBool ssl3_IsECCEnabled(sslSocket *ss);
1602 extern SECStatus ssl3_DisableECCSuites(sslSocket * ss,
1603 const ssl3CipherSuite * suite);
1604 extern PRUint32 ssl3_GetSupportedECCurveMask(sslSocket *ss);
1605
1606
1607 /* Macro for finding a curve equivalent in strength to RSA key's */
1608 #define SSL_RSASTRENGTH_TO_ECSTRENGTH(s) \
1609 ((s <= 1024) ? 160 \
1610 : ((s <= 2048) ? 224 \
1611 : ((s <= 3072) ? 256 \
1612 : ((s <= 7168) ? 384 : 521 ) ) ) )
1613
1614 /* Types and names of elliptic curves used in TLS */
1615 typedef enum { ec_type_explicitPrime = 1,
1616 ec_type_explicitChar2Curve = 2,
1617 ec_type_named
1618 } ECType;
1619
1620 typedef enum { ec_noName = 0,
1621 ec_sect163k1 = 1,
1622 ec_sect163r1 = 2,
1623 ec_sect163r2 = 3,
1624 ec_sect193r1 = 4,
1625 ec_sect193r2 = 5,
1626 ec_sect233k1 = 6,
1627 ec_sect233r1 = 7,
1628 ec_sect239k1 = 8,
1629 ec_sect283k1 = 9,
1630 ec_sect283r1 = 10,
1631 ec_sect409k1 = 11,
1632 ec_sect409r1 = 12,
1633 ec_sect571k1 = 13,
1634 ec_sect571r1 = 14,
1635 ec_secp160k1 = 15,
1636 ec_secp160r1 = 16,
1637 ec_secp160r2 = 17,
1638 ec_secp192k1 = 18,
1639 ec_secp192r1 = 19,
1640 ec_secp224k1 = 20,
1641 ec_secp224r1 = 21,
1642 ec_secp256k1 = 22,
1643 ec_secp256r1 = 23,
1644 ec_secp384r1 = 24,
1645 ec_secp521r1 = 25,
1646 ec_pastLastName
1647 } ECName;
1648
1649 extern SECStatus ssl3_ECName2Params(PLArenaPool *arena, ECName curve,
1650 SECKEYECParams *params);
1651 ECName ssl3_GetCurveWithECKeyStrength(PRUint32 curvemsk, int requiredECCbits);
1652
1653
1654 #endif /* NSS_DISABLE_ECC */
1655
1656 extern SECStatus ssl3_CipherPrefSetDefault(ssl3CipherSuite which, PRBool on);
1657 extern SECStatus ssl3_CipherPrefGetDefault(ssl3CipherSuite which, PRBool *on);
1658 extern SECStatus ssl2_CipherPrefSetDefault(PRInt32 which, PRBool enabled);
1659 extern SECStatus ssl2_CipherPrefGetDefault(PRInt32 which, PRBool *enabled);
1660
1661 extern SECStatus ssl3_CipherPrefSet(sslSocket *ss, ssl3CipherSuite which, PRBool on);
1662 extern SECStatus ssl3_CipherPrefGet(sslSocket *ss, ssl3CipherSuite which, PRBool *on);
1663 extern SECStatus ssl2_CipherPrefSet(sslSocket *ss, PRInt32 which, PRBool enabled);
1664 extern SECStatus ssl2_CipherPrefGet(sslSocket *ss, PRInt32 which, PRBool *enabled);
1665
1666 extern SECStatus ssl3_SetPolicy(ssl3CipherSuite which, PRInt32 policy);
1667 extern SECStatus ssl3_GetPolicy(ssl3CipherSuite which, PRInt32 *policy);
1668 extern SECStatus ssl2_SetPolicy(PRInt32 which, PRInt32 policy);
1669 extern SECStatus ssl2_GetPolicy(PRInt32 which, PRInt32 *policy);
1670
1671 extern void ssl2_InitSocketPolicy(sslSocket *ss);
1672 extern void ssl3_InitSocketPolicy(sslSocket *ss);
1673
1674 extern SECStatus ssl3_ConstructV2CipherSpecsHack(sslSocket *ss,
1675 unsigned char *cs, int *size);
1676
1677 extern SECStatus ssl3_RedoHandshake(sslSocket *ss, PRBool flushCache);
1678 extern SECStatus ssl3_HandleHandshakeMessage(sslSocket *ss, SSL3Opaque *b,
1679 PRUint32 length);
1680
1681 extern void ssl3_DestroySSL3Info(sslSocket *ss);
1682
1683 extern SECStatus ssl3_NegotiateVersion(sslSocket *ss,
1684 SSL3ProtocolVersion peerVersion,
1685 PRBool allowLargerPeerVersion);
1686
1687 extern SECStatus ssl_GetPeerInfo(sslSocket *ss);
1688
1689 #ifndef NSS_DISABLE_ECC
1690 /* ECDH functions */
1691 extern SECStatus ssl3_SendECDHClientKeyExchange(sslSocket * ss,
1692 SECKEYPublicKey * svrPubKey);
1693 extern SECStatus ssl3_HandleECDHServerKeyExchange(sslSocket *ss,
1694 SSL3Opaque *b, PRUint32 length);
1695 extern SECStatus ssl3_HandleECDHClientKeyExchange(sslSocket *ss,
1696 SSL3Opaque *b, PRUint32 length,
1697 SECKEYPublicKey *srvrPubKey,
1698 SECKEYPrivateKey *srvrPrivKey);
1699 extern SECStatus ssl3_SendECDHServerKeyExchange(sslSocket *ss,
1700 const SSL3SignatureAndHashAlgorithm *sigAndHash);
1701 #endif
1702
1703 extern SECStatus ssl3_ComputeCommonKeyHash(SECOidTag hashAlg,
1704 PRUint8 * hashBuf,
1705 unsigned int bufLen, SSL3Hashes *hashes,
1706 PRBool bypassPKCS11);
1707 extern void ssl3_DestroyCipherSpec(ssl3CipherSpec *spec, PRBool freeSrvName);
1708 extern SECStatus ssl3_InitPendingCipherSpec(sslSocket *ss, PK11SymKey *pms);
1709 extern SECStatus ssl3_AppendHandshake(sslSocket *ss, const void *void_src,
1710 PRInt32 bytes);
1711 extern SECStatus ssl3_AppendHandshakeHeader(sslSocket *ss,
1712 SSL3HandshakeType t, PRUint32 length);
1713 extern SECStatus ssl3_AppendHandshakeNumber(sslSocket *ss, PRInt32 num,
1714 PRInt32 lenSize);
1715 extern SECStatus ssl3_AppendHandshakeVariable( sslSocket *ss,
1716 const SSL3Opaque *src, PRInt32 bytes, PRInt32 lenSize);
1717 extern SECStatus ssl3_AppendSignatureAndHashAlgorithm(sslSocket *ss,
1718 const SSL3SignatureAndHashAlgorithm* sigAndHash);
1719 extern SECStatus ssl3_ConsumeHandshake(sslSocket *ss, void *v, PRInt32 bytes,
1720 SSL3Opaque **b, PRUint32 *length);
1721 extern PRInt32 ssl3_ConsumeHandshakeNumber(sslSocket *ss, PRInt32 bytes,
1722 SSL3Opaque **b, PRUint32 *length);
1723 extern SECStatus ssl3_ConsumeHandshakeVariable(sslSocket *ss, SECItem *i,
1724 PRInt32 bytes, SSL3Opaque **b, PRUint32 *length);
1725 extern SECOidTag ssl3_TLSHashAlgorithmToOID(int hashFunc);
1726 extern SECStatus ssl3_CheckSignatureAndHashAlgorithmConsistency(
1727 const SSL3SignatureAndHashAlgorithm *sigAndHash,
1728 CERTCertificate* cert);
1729 extern SECStatus ssl3_ConsumeSignatureAndHashAlgorithm(sslSocket *ss,
1730 SSL3Opaque **b, PRUint32 *length,
1731 SSL3SignatureAndHashAlgorithm *out);
1732 extern SECStatus ssl3_SignHashes(SSL3Hashes *hash, SECKEYPrivateKey *key,
1733 SECItem *buf, PRBool isTLS);
1734 extern SECStatus ssl3_VerifySignedHashes(SSL3Hashes *hash,
1735 CERTCertificate *cert, SECItem *buf, PRBool isTLS,
1736 void *pwArg);
1737 extern SECStatus ssl3_CacheWrappedMasterSecret(sslSocket *ss,
1738 sslSessionID *sid, ssl3CipherSpec *spec,
1739 SSL3KEAType effectiveExchKeyType);
1740
1741 /* Functions that handle ClientHello and ServerHello extensions. */
1742 extern SECStatus ssl3_HandleServerNameXtn(sslSocket * ss,
1743 PRUint16 ex_type, SECItem *data);
1744 extern SECStatus ssl3_HandleSupportedCurvesXtn(sslSocket * ss,
1745 PRUint16 ex_type, SECItem *data);
1746 extern SECStatus ssl3_HandleSupportedPointFormatsXtn(sslSocket * ss,
1747 PRUint16 ex_type, SECItem *data);
1748 extern SECStatus ssl3_ClientHandleSessionTicketXtn(sslSocket *ss,
1749 PRUint16 ex_type, SECItem *data);
1750 extern SECStatus ssl3_ServerHandleSessionTicketXtn(sslSocket *ss,
1751 PRUint16 ex_type, SECItem *data);
1752
1753 /* ClientHello and ServerHello extension senders.
1754 * Note that not all extension senders are exposed here; only those that
1755 * that need exposure.
1756 */
1757 extern PRInt32 ssl3_SendSessionTicketXtn(sslSocket *ss, PRBool append,
1758 PRUint32 maxBytes);
1759
1760 /* ClientHello and ServerHello extension senders.
1761 * The code is in ssl3ext.c.
1762 */
1763 extern PRInt32 ssl3_SendServerNameXtn(sslSocket *ss, PRBool append,
1764 PRUint32 maxBytes);
1765
1766 /* Assigns new cert, cert chain and keys to ss->serverCerts
1767 * struct. If certChain is NULL, tries to find one. Aborts if
1768 * fails to do so. If cert and keyPair are NULL - unconfigures
1769 * sslSocket of kea type.*/
1770 extern SECStatus ssl_ConfigSecureServer(sslSocket *ss, CERTCertificate *cert,
1771 const CERTCertificateList *certChain,
1772 ssl3KeyPair *keyPair, SSLKEAType kea);
1773
1774 #ifndef NSS_DISABLE_ECC
1775 extern PRInt32 ssl3_SendSupportedCurvesXtn(sslSocket *ss,
1776 PRBool append, PRUint32 maxBytes);
1777 extern PRInt32 ssl3_SendSupportedPointFormatsXtn(sslSocket *ss,
1778 PRBool append, PRUint32 maxBytes);
1779 #endif
1780
1781 /* call the registered extension handlers. */
1782 extern SECStatus ssl3_HandleHelloExtensions(sslSocket *ss,
1783 SSL3Opaque **b, PRUint32 *length);
1784
1785 /* Hello Extension related routines. */
1786 extern PRBool ssl3_ExtensionNegotiated(sslSocket *ss, PRUint16 ex_type);
1787 extern void ssl3_SetSIDSessionTicket(sslSessionID *sid,
1788 /*in/out*/ NewSessionTicket *session_ticket);
1789 extern SECStatus ssl3_SendNewSessionTicket(sslSocket *ss);
1790 extern PRBool ssl_GetSessionTicketKeys(unsigned char *keyName,
1791 unsigned char *encKey, unsigned char *macKey);
1792 extern PRBool ssl_GetSessionTicketKeysPKCS11(SECKEYPrivateKey *svrPrivKey,
1793 SECKEYPublicKey *svrPubKey, void *pwArg,
1794 unsigned char *keyName, PK11SymKey **aesKey,
1795 PK11SymKey **macKey);
1796
1797 /* Tell clients to consider tickets valid for this long. */
1798 #define TLS_EX_SESS_TICKET_LIFETIME_HINT (2 * 24 * 60 * 60) /* 2 days */
1799 #define TLS_EX_SESS_TICKET_VERSION (0x0100)
1800
1801 extern SECStatus ssl3_ValidateNextProtoNego(const unsigned char* data,
1802 unsigned int length);
1803
1804 /* Construct a new NSPR socket for the app to use */
1805 extern PRFileDesc *ssl_NewPRSocket(sslSocket *ss, PRFileDesc *fd);
1806 extern void ssl_FreePRSocket(PRFileDesc *fd);
1807
1808 /* Internal config function so SSL3 can initialize the present state of
1809 * various ciphers */
1810 extern int ssl3_config_match_init(sslSocket *);
1811
1812
1813 /* Create a new ref counted key pair object from two keys. */
1814 extern ssl3KeyPair * ssl3_NewKeyPair( SECKEYPrivateKey * privKey,
1815 SECKEYPublicKey * pubKey);
1816
1817 /* get a new reference (bump ref count) to an ssl3KeyPair. */
1818 extern ssl3KeyPair * ssl3_GetKeyPairRef(ssl3KeyPair * keyPair);
1819
1820 /* Decrement keypair's ref count and free if zero. */
1821 extern void ssl3_FreeKeyPair(ssl3KeyPair * keyPair);
1822
1823 /* calls for accessing wrapping keys across processes. */
1824 extern PRBool
1825 ssl_GetWrappingKey( PRInt32 symWrapMechIndex,
1826 SSL3KEAType exchKeyType,
1827 SSLWrappedSymWrappingKey *wswk);
1828
1829 /* The caller passes in the new value it wants
1830 * to set. This code tests the wrapped sym key entry in the file on disk.
1831 * If it is uninitialized, this function writes the caller's value into
1832 * the disk entry, and returns false.
1833 * Otherwise, it overwrites the caller's wswk with the value obtained from
1834 * the disk, and returns PR_TRUE.
1835 * This is all done while holding the locks/semaphores necessary to make
1836 * the operation atomic.
1837 */
1838 extern PRBool
1839 ssl_SetWrappingKey(SSLWrappedSymWrappingKey *wswk);
1840
1841 /* get rid of the symmetric wrapping key references. */
1842 extern SECStatus SSL3_ShutdownServerCache(void);
1843
1844 extern SECStatus ssl_InitSymWrapKeysLock(void);
1845
1846 extern SECStatus ssl_FreeSymWrapKeysLock(void);
1847
1848 extern SECStatus ssl_InitSessionCacheLocks(PRBool lazyInit);
1849
1850 extern SECStatus ssl_FreeSessionCacheLocks(void);
1851
1852
1853 /**************** DTLS-specific functions **************/
1854 extern void dtls_FreeQueuedMessage(DTLSQueuedMessage *msg);
1855 extern void dtls_FreeQueuedMessages(PRCList *lst);
1856 extern void dtls_FreeHandshakeMessages(PRCList *lst);
1857
1858 extern SECStatus dtls_HandleHandshake(sslSocket *ss, sslBuffer *origBuf);
1859 extern SECStatus dtls_HandleHelloVerifyRequest(sslSocket *ss,
1860 SSL3Opaque *b, PRUint32 length);
1861 extern SECStatus dtls_StageHandshakeMessage(sslSocket *ss);
1862 extern SECStatus dtls_QueueMessage(sslSocket *ss, SSL3ContentType type,
1863 const SSL3Opaque *pIn, PRInt32 nIn);
1864 extern SECStatus dtls_FlushHandshakeMessages(sslSocket *ss, PRInt32 flags);
1865 extern SECStatus dtls_CompressMACEncryptRecord(sslSocket *ss,
1866 DTLSEpoch epoch,
1867 PRBool use_epoch,
1868 SSL3ContentType type,
1869 const SSL3Opaque *pIn,
1870 PRUint32 contentLen,
1871 sslBuffer *wrBuf);
1872 SECStatus ssl3_DisableNonDTLSSuites(sslSocket * ss);
1873 extern SECStatus dtls_StartTimer(sslSocket *ss, DTLSTimerCb cb);
1874 extern SECStatus dtls_RestartTimer(sslSocket *ss, PRBool backoff,
1875 DTLSTimerCb cb);
1876 extern void dtls_CheckTimer(sslSocket *ss);
1877 extern void dtls_CancelTimer(sslSocket *ss);
1878 extern void dtls_FinishedTimerCb(sslSocket *ss);
1879 extern void dtls_SetMTU(sslSocket *ss, PRUint16 advertised);
1880 extern void dtls_InitRecvdRecords(DTLSRecvdRecords *records);
1881 extern int dtls_RecordGetRecvd(DTLSRecvdRecords *records, PRUint64 seq);
1882 extern void dtls_RecordSetRecvd(DTLSRecvdRecords *records, PRUint64 seq);
1883 extern void dtls_RehandshakeCleanup(sslSocket *ss);
1884 extern SSL3ProtocolVersion
1885 dtls_TLSVersionToDTLSVersion(SSL3ProtocolVersion tlsv);
1886 extern SSL3ProtocolVersion
1887 dtls_DTLSVersionToTLSVersion(SSL3ProtocolVersion dtlsv);
1888
1889 /********************** misc calls *********************/
1890
1891 #ifdef DEBUG
1892 extern void ssl3_CheckCipherSuiteOrderConsistency();
1893 #endif
1894
1895 extern int ssl_MapLowLevelError(int hiLevelError);
1896
1897 extern PRUint32 ssl_Time(void);
1898
1899 extern void SSL_AtomicIncrementLong(long * x);
1900
1901 SECStatus SSL_DisableDefaultExportCipherSuites(void);
1902 SECStatus SSL_DisableExportCipherSuites(PRFileDesc * fd);
1903 PRBool SSL_IsExportCipherSuite(PRUint16 cipherSuite);
1904
1905 extern SECStatus
1906 ssl3_TLSPRFWithMasterSecret(ssl3CipherSpec *spec,
1907 const char *label, unsigned int labelLen,
1908 const unsigned char *val, unsigned int valLen,
1909 unsigned char *out, unsigned int outLen);
1910
1911 #ifdef TRACE
1912 #define SSL_TRACE(msg) ssl_Trace msg
1913 #else
1914 #define SSL_TRACE(msg)
1915 #endif
1916
1917 void ssl_Trace(const char *format, ...);
1918
1919 SEC_END_PROTOS
1920
1921 #if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS)
1922 #define SSL_GETPID getpid
1923 #elif defined(WIN32)
1924 extern int __cdecl _getpid(void);
1925 #define SSL_GETPID _getpid
1926 #else
1927 #define SSL_GETPID() 0
1928 #endif
1929
1930 #endif /* __sslimpl_h_ */

mercurial