OLD | NEW |
1 /* | 1 /* |
2 * This file is PRIVATE to SSL and should be the first thing included by | 2 * This file is PRIVATE to SSL and should be the first thing included by |
3 * any SSL implementation file. | 3 * any SSL implementation file. |
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 /* $Id: sslimpl.h,v 1.108 2012/09/28 01:46:45 wtc%google.com Exp $ */ | 8 /* $Id$ */ |
9 | 9 |
10 #ifndef __sslimpl_h_ | 10 #ifndef __sslimpl_h_ |
11 #define __sslimpl_h_ | 11 #define __sslimpl_h_ |
12 | 12 |
13 #ifdef DEBUG | 13 #ifdef DEBUG |
14 #undef NDEBUG | 14 #undef NDEBUG |
15 #else | 15 #else |
16 #undef NDEBUG | 16 #undef NDEBUG |
17 #define NDEBUG | 17 #define NDEBUG |
18 #endif | 18 #endif |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 | 144 |
145 /* number of wrap mechanisms potentially used to wrap master secrets. */ | 145 /* number of wrap mechanisms potentially used to wrap master secrets. */ |
146 #define SSL_NUM_WRAP_MECHS 16 | 146 #define SSL_NUM_WRAP_MECHS 16 |
147 | 147 |
148 /* This makes the cert cache entry exactly 4k. */ | 148 /* This makes the cert cache entry exactly 4k. */ |
149 #define SSL_MAX_CACHED_CERT_LEN 4060 | 149 #define SSL_MAX_CACHED_CERT_LEN 4060 |
150 | 150 |
151 #define NUM_MIXERS 9 | 151 #define NUM_MIXERS 9 |
152 | 152 |
153 /* Mask of the 25 named curves we support. */ | 153 /* Mask of the 25 named curves we support. */ |
154 #ifndef NSS_ECC_MORE_THAN_SUITE_B | 154 #define SSL3_ALL_SUPPORTED_CURVES_MASK 0x3fffffe |
155 #define SSL3_SUPPORTED_CURVES_MASK 0x3800000» /* only 3 curves, suite B*/ | 155 /* only 3 curves, suite B*/ |
156 #else | 156 #define SSL3_SUITE_B_SUPPORTED_CURVES_MASK 0x3800000 |
157 #define SSL3_SUPPORTED_CURVES_MASK 0x3fffffe | |
158 #endif | |
159 | 157 |
160 #ifndef BPB | 158 #ifndef BPB |
161 #define BPB 8 /* Bits Per Byte */ | 159 #define BPB 8 /* Bits Per Byte */ |
162 #endif | 160 #endif |
163 | 161 |
164 #define EXPORT_RSA_KEY_LENGTH 64 /* bytes */ | 162 #define EXPORT_RSA_KEY_LENGTH 64 /* bytes */ |
165 | 163 |
166 #define INITIAL_DTLS_TIMEOUT_MS 1000 /* Default value from RFC 4347 = 1s*/ | 164 #define INITIAL_DTLS_TIMEOUT_MS 1000 /* Default value from RFC 4347 = 1s*/ |
167 #define MAX_DTLS_TIMEOUT_MS 60000 /* 1 minute */ | 165 #define MAX_DTLS_TIMEOUT_MS 60000 /* 1 minute */ |
168 #define DTLS_FINISHED_TIMER_MS 120000 /* Time to wait in FINISHED state */ | 166 #define DTLS_FINISHED_TIMER_MS 120000 /* Time to wait in FINISHED state */ |
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 invalid_cache /* no longer in any cache. */ | 588 invalid_cache /* no longer in any cache. */ |
591 } Cached; | 589 } Cached; |
592 | 590 |
593 #define MAX_PEER_CERT_CHAIN_SIZE 8 | 591 #define MAX_PEER_CERT_CHAIN_SIZE 8 |
594 | 592 |
595 struct sslSessionIDStr { | 593 struct sslSessionIDStr { |
596 sslSessionID * next; /* chain used for client sockets, only */ | 594 sslSessionID * next; /* chain used for client sockets, only */ |
597 | 595 |
598 CERTCertificate * peerCert; | 596 CERTCertificate * peerCert; |
599 CERTCertificate * peerCertChain[MAX_PEER_CERT_CHAIN_SIZE]; | 597 CERTCertificate * peerCertChain[MAX_PEER_CERT_CHAIN_SIZE]; |
| 598 SECItemArray peerCertStatus; /* client only */ |
600 const char * peerID; /* client only */ | 599 const char * peerID; /* client only */ |
601 const char * urlSvrName; /* client only */ | 600 const char * urlSvrName; /* client only */ |
602 CERTCertificate * localCert; | 601 CERTCertificate * localCert; |
603 | 602 |
604 PRIPv6Addr addr; | 603 PRIPv6Addr addr; |
605 PRUint16 port; | 604 PRUint16 port; |
606 | 605 |
607 SSL3ProtocolVersion version; | 606 SSL3ProtocolVersion version; |
608 | 607 |
609 PRUint32 creationTime; /* seconds since Jan 1, 1970 */ | 608 PRUint32 creationTime; /* seconds since Jan 1, 1970 */ |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 }; | 731 }; |
733 | 732 |
734 typedef enum { | 733 typedef enum { |
735 wait_client_hello, | 734 wait_client_hello, |
736 wait_client_cert, | 735 wait_client_cert, |
737 wait_client_key, | 736 wait_client_key, |
738 wait_cert_verify, | 737 wait_cert_verify, |
739 wait_change_cipher, | 738 wait_change_cipher, |
740 wait_finished, | 739 wait_finished, |
741 wait_server_hello, | 740 wait_server_hello, |
| 741 wait_certificate_status, |
742 wait_server_cert, | 742 wait_server_cert, |
743 wait_server_key, | 743 wait_server_key, |
744 wait_cert_request, | 744 wait_cert_request, |
745 wait_hello_done, | 745 wait_hello_done, |
746 wait_new_session_ticket, | 746 wait_new_session_ticket, |
747 idle_handshake | 747 idle_handshake |
748 } SSL3WaitState; | 748 } SSL3WaitState; |
749 | 749 |
750 /* | 750 /* |
751 * TLS extension related constants and data structures. | 751 * TLS extension related constants and data structures. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 /* partial handshake message from record layer */ | 807 /* partial handshake message from record layer */ |
808 unsigned int header_bytes; | 808 unsigned int header_bytes; |
809 /* number of bytes consumed from handshake */ | 809 /* number of bytes consumed from handshake */ |
810 /* message for message type and header length */ | 810 /* message for message type and header length */ |
811 SSL3HandshakeType msg_type; | 811 SSL3HandshakeType msg_type; |
812 unsigned long msg_len; | 812 unsigned long msg_len; |
813 SECItem ca_list; /* used only by client */ | 813 SECItem ca_list; /* used only by client */ |
814 PRBool isResuming; /* are we resuming a session */ | 814 PRBool isResuming; /* are we resuming a session */ |
815 PRBool usedStepDownKey; /* we did a server key exchange. */ | 815 PRBool usedStepDownKey; /* we did a server key exchange. */ |
816 PRBool sendingSCSV; /* instead of empty RI */ | 816 PRBool sendingSCSV; /* instead of empty RI */ |
817 PRBool may_get_cert_status; /* the server echoed a | |
818 * status_request extension so | |
819 * may send a CertificateStatus | |
820 * handshake message. */ | |
821 SECItem pending_cert_msg; /* a Certificate message which we | |
822 * save temporarily if we may get | |
823 * a CertificateStatus message */ | |
824 SECItem cert_status; /* an OCSP response */ | |
825 sslBuffer msgState; /* current state for handshake messages*/ | 817 sslBuffer msgState; /* current state for handshake messages*/ |
826 /* protected by recvBufLock */ | 818 /* protected by recvBufLock */ |
827 sslBuffer messages; /* Accumulated handshake messages */ | 819 sslBuffer messages; /* Accumulated handshake messages */ |
828 PRUint16 finishedBytes; /* size of single finished below */ | 820 PRUint16 finishedBytes; /* size of single finished below */ |
829 union { | 821 union { |
830 TLSFinished tFinished[2]; /* client, then server */ | 822 TLSFinished tFinished[2]; /* client, then server */ |
831 SSL3Hashes sFinished[2]; | 823 SSL3Hashes sFinished[2]; |
832 SSL3Opaque data[72]; | 824 SSL3Opaque data[72]; |
833 } finishedMsgs; | 825 } finishedMsgs; |
834 #ifdef NSS_ENABLE_ECC | 826 #ifdef NSS_ENABLE_ECC |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1215 | 1207 |
1216 /* Gather object used for gathering data */ | 1208 /* Gather object used for gathering data */ |
1217 sslGather gs; /*recvBufLock*/ | 1209 sslGather gs; /*recvBufLock*/ |
1218 | 1210 |
1219 sslBuffer saveBuf; /*xmitBufLock*/ | 1211 sslBuffer saveBuf; /*xmitBufLock*/ |
1220 sslBuffer pendingBuf; /*xmitBufLock*/ | 1212 sslBuffer pendingBuf; /*xmitBufLock*/ |
1221 | 1213 |
1222 /* Configuration state for server sockets */ | 1214 /* Configuration state for server sockets */ |
1223 /* server cert and key for each KEA type */ | 1215 /* server cert and key for each KEA type */ |
1224 sslServerCerts serverCerts[kt_kea_size]; | 1216 sslServerCerts serverCerts[kt_kea_size]; |
| 1217 SECItemArray * certStatusArray; |
1225 | 1218 |
1226 ssl3CipherSuiteCfg cipherSuites[ssl_V3_SUITES_IMPLEMENTED]; | 1219 ssl3CipherSuiteCfg cipherSuites[ssl_V3_SUITES_IMPLEMENTED]; |
1227 ssl3KeyPair * ephemeralECDHKeyPair; /* for ECDHE-* handshake */ | 1220 ssl3KeyPair * ephemeralECDHKeyPair; /* for ECDHE-* handshake */ |
1228 | 1221 |
1229 /* SSL3 state info. Formerly was a pointer */ | 1222 /* SSL3 state info. Formerly was a pointer */ |
1230 ssl3State ssl3; | 1223 ssl3State ssl3; |
1231 | 1224 |
1232 /* | 1225 /* |
1233 * TLS extension related data. | 1226 * TLS extension related data. |
1234 */ | 1227 */ |
(...skipping 23 matching lines...) Expand all Loading... |
1258 extern const char * const ssl3_cipherName[]; | 1251 extern const char * const ssl3_cipherName[]; |
1259 | 1252 |
1260 extern sslSessionIDLookupFunc ssl_sid_lookup; | 1253 extern sslSessionIDLookupFunc ssl_sid_lookup; |
1261 extern sslSessionIDCacheFunc ssl_sid_cache; | 1254 extern sslSessionIDCacheFunc ssl_sid_cache; |
1262 extern sslSessionIDUncacheFunc ssl_sid_uncache; | 1255 extern sslSessionIDUncacheFunc ssl_sid_uncache; |
1263 | 1256 |
1264 /************************************************************************/ | 1257 /************************************************************************/ |
1265 | 1258 |
1266 SEC_BEGIN_PROTOS | 1259 SEC_BEGIN_PROTOS |
1267 | 1260 |
| 1261 /* Functions for handling SECItemArrays, added in NSS 3.15 */ |
| 1262 extern SECItemArray *SECITEM_AllocArray(PLArenaPool *arena, |
| 1263 SECItemArray *array, |
| 1264 unsigned int len); |
| 1265 extern SECItemArray *SECITEM_DupArray(PLArenaPool *arena, |
| 1266 const SECItemArray *from); |
| 1267 extern void SECITEM_FreeArray(SECItemArray *array, PRBool freeit); |
| 1268 extern void SECITEM_ZfreeArray(SECItemArray *array, PRBool freeit); |
| 1269 |
1268 /* Internal initialization and installation of the SSL error tables */ | 1270 /* Internal initialization and installation of the SSL error tables */ |
1269 extern SECStatus ssl_Init(void); | 1271 extern SECStatus ssl_Init(void); |
1270 extern SECStatus ssl_InitializePRErrorTable(void); | 1272 extern SECStatus ssl_InitializePRErrorTable(void); |
1271 | 1273 |
1272 /* Implementation of ops for default (non socks, non secure) case */ | 1274 /* Implementation of ops for default (non socks, non secure) case */ |
1273 extern int ssl_DefConnect(sslSocket *ss, const PRNetAddr *addr); | 1275 extern int ssl_DefConnect(sslSocket *ss, const PRNetAddr *addr); |
1274 extern PRFileDesc *ssl_DefAccept(sslSocket *ss, PRNetAddr *addr); | 1276 extern PRFileDesc *ssl_DefAccept(sslSocket *ss, PRNetAddr *addr); |
1275 extern int ssl_DefBind(sslSocket *ss, const PRNetAddr *addr); | 1277 extern int ssl_DefBind(sslSocket *ss, const PRNetAddr *addr); |
1276 extern int ssl_DefListen(sslSocket *ss, int backlog); | 1278 extern int ssl_DefListen(sslSocket *ss, int backlog); |
1277 extern int ssl_DefShutdown(sslSocket *ss, int how); | 1279 extern int ssl_DefShutdown(sslSocket *ss, int how); |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1535 * key, signed by the larger key. The smaller key is a "step down" key. | 1537 * key, signed by the larger key. The smaller key is a "step down" key. |
1536 * Generate that key pair and keep it around. | 1538 * Generate that key pair and keep it around. |
1537 */ | 1539 */ |
1538 extern SECStatus ssl3_CreateRSAStepDownKeys(sslSocket *ss); | 1540 extern SECStatus ssl3_CreateRSAStepDownKeys(sslSocket *ss); |
1539 | 1541 |
1540 #ifdef NSS_ENABLE_ECC | 1542 #ifdef NSS_ENABLE_ECC |
1541 extern void ssl3_FilterECCipherSuitesByServerCerts(sslSocket *ss); | 1543 extern void ssl3_FilterECCipherSuitesByServerCerts(sslSocket *ss); |
1542 extern PRBool ssl3_IsECCEnabled(sslSocket *ss); | 1544 extern PRBool ssl3_IsECCEnabled(sslSocket *ss); |
1543 extern SECStatus ssl3_DisableECCSuites(sslSocket * ss, | 1545 extern SECStatus ssl3_DisableECCSuites(sslSocket * ss, |
1544 const ssl3CipherSuite * suite); | 1546 const ssl3CipherSuite * suite); |
| 1547 extern PRInt32 ssl3_GetSupportedECCCurveMask(sslSocket *ss); |
| 1548 |
1545 | 1549 |
1546 /* Macro for finding a curve equivalent in strength to RSA key's */ | 1550 /* Macro for finding a curve equivalent in strength to RSA key's */ |
1547 #define SSL_RSASTRENGTH_TO_ECSTRENGTH(s) \ | 1551 #define SSL_RSASTRENGTH_TO_ECSTRENGTH(s) \ |
1548 ((s <= 1024) ? 160 \ | 1552 ((s <= 1024) ? 160 \ |
1549 : ((s <= 2048) ? 224 \ | 1553 : ((s <= 2048) ? 224 \ |
1550 : ((s <= 3072) ? 256 \ | 1554 : ((s <= 3072) ? 256 \ |
1551 : ((s <= 7168) ? 384 : 521 ) ) ) ) | 1555 : ((s <= 7168) ? 384 : 521 ) ) ) ) |
1552 | 1556 |
1553 /* Types and names of elliptic curves used in TLS */ | 1557 /* Types and names of elliptic curves used in TLS */ |
1554 typedef enum { ec_type_explicitPrime = 1, | 1558 typedef enum { ec_type_explicitPrime = 1, |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1668 | 1672 |
1669 /* Functions that handle ClientHello and ServerHello extensions. */ | 1673 /* Functions that handle ClientHello and ServerHello extensions. */ |
1670 extern SECStatus ssl3_HandleServerNameXtn(sslSocket * ss, | 1674 extern SECStatus ssl3_HandleServerNameXtn(sslSocket * ss, |
1671 PRUint16 ex_type, SECItem *data); | 1675 PRUint16 ex_type, SECItem *data); |
1672 extern SECStatus ssl3_HandleSupportedCurvesXtn(sslSocket * ss, | 1676 extern SECStatus ssl3_HandleSupportedCurvesXtn(sslSocket * ss, |
1673 PRUint16 ex_type, SECItem *data); | 1677 PRUint16 ex_type, SECItem *data); |
1674 extern SECStatus ssl3_HandleSupportedPointFormatsXtn(sslSocket * ss, | 1678 extern SECStatus ssl3_HandleSupportedPointFormatsXtn(sslSocket * ss, |
1675 PRUint16 ex_type, SECItem *data); | 1679 PRUint16 ex_type, SECItem *data); |
1676 extern SECStatus ssl3_ClientHandleSessionTicketXtn(sslSocket *ss, | 1680 extern SECStatus ssl3_ClientHandleSessionTicketXtn(sslSocket *ss, |
1677 PRUint16 ex_type, SECItem *data); | 1681 PRUint16 ex_type, SECItem *data); |
1678 extern SECStatus ssl3_ClientHandleStatusRequestXtn(sslSocket *ss, | |
1679 PRUint16 ex_type, SECItem *data); | |
1680 extern SECStatus ssl3_ServerHandleSessionTicketXtn(sslSocket *ss, | 1682 extern SECStatus ssl3_ServerHandleSessionTicketXtn(sslSocket *ss, |
1681 PRUint16 ex_type, SECItem *data); | 1683 PRUint16 ex_type, SECItem *data); |
1682 | 1684 |
1683 /* ClientHello and ServerHello extension senders. | 1685 /* ClientHello and ServerHello extension senders. |
1684 * Note that not all extension senders are exposed here; only those that | 1686 * Note that not all extension senders are exposed here; only those that |
1685 * that need exposure. | 1687 * that need exposure. |
1686 */ | 1688 */ |
1687 extern PRInt32 ssl3_SendSessionTicketXtn(sslSocket *ss, PRBool append, | 1689 extern PRInt32 ssl3_SendSessionTicketXtn(sslSocket *ss, PRBool append, |
1688 PRUint32 maxBytes); | 1690 PRUint32 maxBytes); |
1689 extern PRInt32 ssl3_ClientSendStatusRequestXtn(sslSocket *ss, PRBool append, | |
1690 PRUint32 maxBytes); | |
1691 | 1691 |
1692 /* ClientHello and ServerHello extension senders. | 1692 /* ClientHello and ServerHello extension senders. |
1693 * The code is in ssl3ext.c. | 1693 * The code is in ssl3ext.c. |
1694 */ | 1694 */ |
1695 extern PRInt32 ssl3_SendServerNameXtn(sslSocket *ss, PRBool append, | 1695 extern PRInt32 ssl3_SendServerNameXtn(sslSocket *ss, PRBool append, |
1696 PRUint32 maxBytes); | 1696 PRUint32 maxBytes); |
1697 | 1697 |
1698 /* Assigns new cert, cert chain and keys to ss->serverCerts | 1698 /* Assigns new cert, cert chain and keys to ss->serverCerts |
1699 * struct. If certChain is NULL, tries to find one. Aborts if | 1699 * struct. If certChain is NULL, tries to find one. Aborts if |
1700 * fails to do so. If cert and keyPair are NULL - unconfigures | 1700 * fails to do so. If cert and keyPair are NULL - unconfigures |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1865 #else | 1865 #else |
1866 #define SSL_TRACE(msg) | 1866 #define SSL_TRACE(msg) |
1867 #endif | 1867 #endif |
1868 | 1868 |
1869 void ssl_Trace(const char *format, ...); | 1869 void ssl_Trace(const char *format, ...); |
1870 | 1870 |
1871 SEC_END_PROTOS | 1871 SEC_END_PROTOS |
1872 | 1872 |
1873 #if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS) | 1873 #if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS) |
1874 #define SSL_GETPID getpid | 1874 #define SSL_GETPID getpid |
1875 #elif defined(_WIN32_WCE) | |
1876 #define SSL_GETPID GetCurrentProcessId | |
1877 #elif defined(WIN32) | 1875 #elif defined(WIN32) |
1878 extern int __cdecl _getpid(void); | 1876 extern int __cdecl _getpid(void); |
1879 #define SSL_GETPID _getpid | 1877 #define SSL_GETPID _getpid |
1880 #else | 1878 #else |
1881 #define SSL_GETPID() 0 | 1879 #define SSL_GETPID() 0 |
1882 #endif | 1880 #endif |
1883 | 1881 |
1884 #endif /* __sslimpl_h_ */ | 1882 #endif /* __sslimpl_h_ */ |
OLD | NEW |