| 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 * ***** BEGIN LICENSE BLOCK ***** | 5 * ***** BEGIN LICENSE BLOCK ***** |
| 6 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 6 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| 7 * | 7 * |
| 8 * The contents of this file are subject to the Mozilla Public License Version | 8 * The contents of this file are subject to the Mozilla Public License Version |
| 9 * 1.1 (the "License"); you may not use this file except in compliance with | 9 * 1.1 (the "License"); you may not use this file except in compliance with |
| 10 * the License. You may obtain a copy of the License at | 10 * the License. You may obtain a copy of the License at |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 * in which case the provisions of the GPL or the LGPL are applicable instead | 32 * in which case the provisions of the GPL or the LGPL are applicable instead |
| 33 * of those above. If you wish to allow use of your version of this file only | 33 * of those above. If you wish to allow use of your version of this file only |
| 34 * under the terms of either the GPL or the LGPL, and not to allow others to | 34 * under the terms of either the GPL or the LGPL, and not to allow others to |
| 35 * use your version of this file under the terms of the MPL, indicate your | 35 * use your version of this file under the terms of the MPL, indicate your |
| 36 * decision by deleting the provisions above and replace them with the notice | 36 * decision by deleting the provisions above and replace them with the notice |
| 37 * and other provisions required by the GPL or the LGPL. If you do not delete | 37 * and other provisions required by the GPL or the LGPL. If you do not delete |
| 38 * the provisions above, a recipient may use your version of this file under | 38 * the provisions above, a recipient may use your version of this file under |
| 39 * the terms of any one of the MPL, the GPL or the LGPL. | 39 * the terms of any one of the MPL, the GPL or the LGPL. |
| 40 * | 40 * |
| 41 * ***** END LICENSE BLOCK ***** */ | 41 * ***** END LICENSE BLOCK ***** */ |
| 42 /* $Id: sslimpl.h,v 1.77.2.1 2010/07/31 04:33:52 wtc%google.com Exp $ */ | 42 /* $Id: sslimpl.h,v 1.94 2012/02/15 21:52:08 kaie%kuix.de Exp $ */ |
| 43 | 43 |
| 44 #ifndef __sslimpl_h_ | 44 #ifndef __sslimpl_h_ |
| 45 #define __sslimpl_h_ | 45 #define __sslimpl_h_ |
| 46 | 46 |
| 47 #ifdef DEBUG | 47 #ifdef DEBUG |
| 48 #undef NDEBUG | 48 #undef NDEBUG |
| 49 #else | 49 #else |
| 50 #undef NDEBUG | 50 #undef NDEBUG |
| 51 #define NDEBUG | 51 #define NDEBUG |
| 52 #endif | 52 #endif |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 | 317 |
| 318 #ifdef NSS_ENABLE_ECC | 318 #ifdef NSS_ENABLE_ECC |
| 319 #define ssl_V3_SUITES_IMPLEMENTED 50 | 319 #define ssl_V3_SUITES_IMPLEMENTED 50 |
| 320 #else | 320 #else |
| 321 #define ssl_V3_SUITES_IMPLEMENTED 30 | 321 #define ssl_V3_SUITES_IMPLEMENTED 30 |
| 322 #endif /* NSS_ENABLE_ECC */ | 322 #endif /* NSS_ENABLE_ECC */ |
| 323 | 323 |
| 324 typedef struct sslOptionsStr { | 324 typedef struct sslOptionsStr { |
| 325 /* If SSL_SetNextProtoNego has been called, then this contains the | 325 /* If SSL_SetNextProtoNego has been called, then this contains the |
| 326 * list of supported protocols. */ | 326 * list of supported protocols. */ |
| 327 SECItem nextProtoNego; | 327 SECItem nextProtoNego; |
| 328 | 328 |
| 329 unsigned int useSecurity : 1; /* 1 */ | 329 unsigned int useSecurity : 1; /* 1 */ |
| 330 unsigned int useSocks : 1; /* 2 */ | 330 unsigned int useSocks : 1; /* 2 */ |
| 331 unsigned int requestCertificate : 1; /* 3 */ | 331 unsigned int requestCertificate : 1; /* 3 */ |
| 332 unsigned int requireCertificate : 2; /* 4-5 */ | 332 unsigned int requireCertificate : 2; /* 4-5 */ |
| 333 unsigned int handshakeAsClient : 1; /* 6 */ | 333 unsigned int handshakeAsClient : 1; /* 6 */ |
| 334 unsigned int handshakeAsServer : 1; /* 7 */ | 334 unsigned int handshakeAsServer : 1; /* 7 */ |
| 335 unsigned int enableSSL2 : 1; /* 8 */ | 335 unsigned int enableSSL2 : 1; /* 8 */ |
| 336 unsigned int enableSSL3 : 1; /* 9 */ | 336 unsigned int enableSSL3 : 1; /* 9 */ |
| 337 unsigned int enableTLS : 1; /* 10 */ | 337 unsigned int enableTLS : 1; /* 10 */ |
| 338 unsigned int noCache : 1; /* 11 */ | 338 unsigned int noCache : 1; /* 11 */ |
| 339 unsigned int fdx : 1; /* 12 */ | 339 unsigned int fdx : 1; /* 12 */ |
| 340 unsigned int v2CompatibleHello : 1; /* 13 */ | 340 unsigned int v2CompatibleHello : 1; /* 13 */ |
| 341 unsigned int detectRollBack : 1; /* 14 */ | 341 unsigned int detectRollBack : 1; /* 14 */ |
| 342 unsigned int noStepDown : 1; /* 15 */ | 342 unsigned int noStepDown : 1; /* 15 */ |
| 343 unsigned int bypassPKCS11 : 1; /* 16 */ | 343 unsigned int bypassPKCS11 : 1; /* 16 */ |
| 344 unsigned int noLocks : 1; /* 17 */ | 344 unsigned int noLocks : 1; /* 17 */ |
| 345 unsigned int enableSessionTickets : 1; /* 18 */ | 345 unsigned int enableSessionTickets : 1; /* 18 */ |
| 346 unsigned int enableDeflate : 1; /* 19 */ | 346 unsigned int enableDeflate : 1; /* 19 */ |
| 347 unsigned int enableRenegotiation : 2; /* 20-21 */ | 347 unsigned int enableRenegotiation : 2; /* 20-21 */ |
| 348 unsigned int requireSafeNegotiation : 1; /* 22 */ | 348 unsigned int requireSafeNegotiation : 1; /* 22 */ |
| 349 unsigned int enableFalseStart : 1; /* 23 */ | 349 unsigned int enableFalseStart : 1; /* 23 */ |
| 350 unsigned int enableOCSPStapling : 1; /* 24 */ | 350 unsigned int cbcRandomIV : 1; /* 24 */ |
| 351 unsigned int enableCachedInfo : 1; /* 25 */ | 351 unsigned int enableOCSPStapling : 1; /* 25 */ |
| 352 unsigned int enableOBCerts : 1; /* 26 */ | 352 unsigned int enableOBCerts : 1; /* 26 */ |
| 353 unsigned int encryptClientCerts : 1; /* 27 */ | 353 unsigned int encryptClientCerts : 1; /* 27 */ |
| 354 } sslOptions; | 354 } sslOptions; |
| 355 | 355 |
| 356 typedef enum { sslHandshakingUndetermined = 0, | 356 typedef enum { sslHandshakingUndetermined = 0, |
| 357 sslHandshakingAsClient, | 357 sslHandshakingAsClient, |
| 358 sslHandshakingAsServer | 358 sslHandshakingAsServer |
| 359 } sslHandshakingType; | 359 } sslHandshakingType; |
| 360 | 360 |
| 361 typedef struct sslServerCertsStr { | 361 typedef struct sslServerCertsStr { |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 PRBool emptySessionTicket; | 766 PRBool emptySessionTicket; |
| 767 | 767 |
| 768 /* SNI Extension related data | 768 /* SNI Extension related data |
| 769 * Names data is not coppied from the input buffer. It can not be | 769 * Names data is not coppied from the input buffer. It can not be |
| 770 * used outside the scope where input buffer is defined and that | 770 * used outside the scope where input buffer is defined and that |
| 771 * is beyond ssl3_HandleClientHello function. */ | 771 * is beyond ssl3_HandleClientHello function. */ |
| 772 SECItem *sniNameArr; | 772 SECItem *sniNameArr; |
| 773 PRUint32 sniNameArrSize; | 773 PRUint32 sniNameArrSize; |
| 774 }; | 774 }; |
| 775 | 775 |
| 776 typedef enum { | 776 typedef SECStatus (*sslRestartTarget)(sslSocket *); |
| 777 cached_info_certificate_chain = 1, | |
| 778 cached_info_trusted_cas = 2 | |
| 779 } TLSCachedInfoType; | |
| 780 | 777 |
| 781 /* | 778 /* |
| 782 ** This is the "hs" member of the "ssl3" struct. | 779 ** This is the "hs" member of the "ssl3" struct. |
| 783 ** This entire struct is protected by ssl3HandshakeLock | 780 ** This entire struct is protected by ssl3HandshakeLock |
| 784 */ | 781 */ |
| 785 typedef struct SSL3HandshakeStateStr { | 782 typedef struct SSL3HandshakeStateStr { |
| 786 SSL3Random server_random; | 783 SSL3Random server_random; |
| 787 SSL3Random client_random; | 784 SSL3Random client_random; |
| 788 SSL3WaitState ws; | 785 SSL3WaitState ws; |
| 789 PRUint64 md5_cx[MAX_MAC_CONTEXT_LLONGS]; | 786 PRUint64 md5_cx[MAX_MAC_CONTEXT_LLONGS]; |
| 790 PRUint64 sha_cx[MAX_MAC_CONTEXT_LLONGS]; | 787 PRUint64 sha_cx[MAX_MAC_CONTEXT_LLONGS]; |
| 791 PK11Context * md5; /* handshake running hashes */ | 788 PK11Context * md5; /* handshake running hashes */ |
| 792 PK11Context * sha; | 789 PK11Context * sha; |
| 793 const ssl3KEADef * kea_def; | 790 const ssl3KEADef * kea_def; |
| 794 ssl3CipherSuite cipher_suite; | 791 ssl3CipherSuite cipher_suite; |
| 795 const ssl3CipherSuiteDef *suite_def; | 792 const ssl3CipherSuiteDef *suite_def; |
| 796 SSLCompressionMethod compression; | 793 SSLCompressionMethod compression; |
| 797 sslBuffer msg_body; /* protected by recvBufLock */ | 794 sslBuffer msg_body; /* protected by recvBufLock */ |
| 798 /* partial handshake message from record layer */ | 795 /* partial handshake message from record layer */ |
| 799 unsigned int header_bytes; | 796 unsigned int header_bytes; |
| 800 /* number of bytes consumed from handshake */ | 797 /* number of bytes consumed from handshake */ |
| 801 /* message for message type and header length */ | 798 /* message for message type and header length */ |
| 802 SSL3HandshakeType msg_type; | 799 SSL3HandshakeType msg_type; |
| 803 unsigned long msg_len; | 800 unsigned long msg_len; |
| 804 SECItem ca_list; /* used only by client */ | 801 SECItem ca_list; /* used only by client */ |
| 805 PRBool isResuming; /* are we resuming a session */ | 802 PRBool isResuming; /* are we resuming a session */ |
| 806 PRBool rehandshake; /* immediately start another handshake | |
| 807 * when this one finishes */ | |
| 808 PRBool usedStepDownKey; /* we did a server key exchange. */ | 803 PRBool usedStepDownKey; /* we did a server key exchange. */ |
| 809 PRBool sendingSCSV; /* instead of empty RI */ | 804 PRBool sendingSCSV; /* instead of empty RI */ |
| 810 PRBool may_get_cert_status; /* the server echoed a | 805 PRBool may_get_cert_status; /* the server echoed a |
| 811 * status_request extension so | 806 * status_request extension so |
| 812 * may send a CertificateStatus | 807 * may send a CertificateStatus |
| 813 * handshake message. */ | 808 * handshake message. */ |
| 814 SECItem pending_cert_msg; /* a Certificate message which we | 809 SECItem pending_cert_msg; /* a Certificate message which we |
| 815 * save temporarily if we may get | 810 * save temporarily if we may get |
| 816 * a CertificateStatus message */ | 811 * a CertificateStatus message */ |
| 817 SECItem cert_status; /* an OCSP response */ | 812 SECItem cert_status; /* an OCSP response */ |
| 818 sslBuffer msgState; /* current state for handshake messages*/ | 813 sslBuffer msgState; /* current state for handshake messages*/ |
| 819 /* protected by recvBufLock */ | 814 /* protected by recvBufLock */ |
| 820 sslBuffer messages; /* Accumulated handshake messages */ | 815 sslBuffer messages; /* Accumulated handshake messages */ |
| 821 PRUint16 finishedBytes; /* size of single finished below */ | 816 PRUint16 finishedBytes; /* size of single finished below */ |
| 822 union { | 817 union { |
| 823 TLSFinished tFinished[2]; /* client, then server */ | 818 TLSFinished tFinished[2]; /* client, then server */ |
| 824 SSL3Hashes sFinished[2]; | 819 SSL3Hashes sFinished[2]; |
| 825 SSL3Opaque data[72]; | 820 SSL3Opaque data[72]; |
| 826 } finishedMsgs; | 821 } finishedMsgs; |
| 827 #ifdef NSS_ENABLE_ECC | 822 #ifdef NSS_ENABLE_ECC |
| 828 PRUint32 negotiatedECCurves; /* bit mask */ | 823 PRUint32 negotiatedECCurves; /* bit mask */ |
| 829 #endif /* NSS_ENABLE_ECC */ | 824 #endif /* NSS_ENABLE_ECC */ |
| 825 |
| 826 PRBool authCertificatePending; |
| 827 /* Which function should SSL_RestartHandshake* call if we're blocked? |
| 828 * One of NULL, ssl3_SendClientSecondRound, ssl3_FinishHandshake, |
| 829 * or ssl3_AlwaysFail */ |
| 830 sslRestartTarget restartTarget; |
| 831 /* Shared state between ssl3_HandleFinished and ssl3_FinishHandshake */ |
| 832 PRBool cacheSID; |
| 830 } SSL3HandshakeState; | 833 } SSL3HandshakeState; |
| 831 | 834 |
| 832 | 835 |
| 833 | 836 |
| 834 /* | 837 /* |
| 835 ** This is the "ssl3" struct, as in "ss->ssl3". | 838 ** This is the "ssl3" struct, as in "ss->ssl3". |
| 836 ** note: | 839 ** note: |
| 837 ** usually, crSpec == cwSpec and prSpec == pwSpec. | 840 ** usually, crSpec == cwSpec and prSpec == pwSpec. |
| 838 ** Sometimes, crSpec == pwSpec and prSpec == cwSpec. | 841 ** Sometimes, crSpec == pwSpec and prSpec == cwSpec. |
| 839 ** But there are never more than 2 actual specs. | 842 ** But there are never more than 2 actual specs. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 852 | 855 |
| 853 CERTCertificate * clientCertificate; /* used by client */ | 856 CERTCertificate * clientCertificate; /* used by client */ |
| 854 SECKEYPrivateKey * clientPrivateKey; /* used by client */ | 857 SECKEYPrivateKey * clientPrivateKey; /* used by client */ |
| 855 /* platformClientKey is present even when NSS_PLATFORM_CLIENT_AUTH is not | 858 /* platformClientKey is present even when NSS_PLATFORM_CLIENT_AUTH is not |
| 856 * defined in order to allow cleaner conditional code. | 859 * defined in order to allow cleaner conditional code. |
| 857 * At most one of clientPrivateKey and platformClientKey may be set. */ | 860 * At most one of clientPrivateKey and platformClientKey may be set. */ |
| 858 PlatformKey platformClientKey; /* used by client */ | 861 PlatformKey platformClientKey; /* used by client */ |
| 859 CERTCertificateList *clientCertChain; /* used by client */ | 862 CERTCertificateList *clientCertChain; /* used by client */ |
| 860 PRBool sendEmptyCert; /* used by client */ | 863 PRBool sendEmptyCert; /* used by client */ |
| 861 | 864 |
| 862 /* TLS Cached Info Extension */ | |
| 863 CERTCertificate ** predictedCertChain; | |
| 864 /* An array terminated with a NULL. */ | |
| 865 PRUint8 certChainDigest[8]; | |
| 866 /* Used in cached info extension. Stored in network | |
| 867 * byte order. */ | |
| 868 PRBool cachedInfoCertChainDigestReceived; | |
| 869 | |
| 870 int policy; | 865 int policy; |
| 871 /* This says what cipher suites we can do, and should | 866 /* This says what cipher suites we can do, and should |
| 872 * be either SSL_ALLOWED or SSL_RESTRICTED | 867 * be either SSL_ALLOWED or SSL_RESTRICTED |
| 873 */ | 868 */ |
| 874 PRArenaPool * peerCertArena; | 869 PRArenaPool * peerCertArena; |
| 875 /* These are used to keep track of the peer CA */ | 870 /* These are used to keep track of the peer CA */ |
| 876 void * peerCertChain; | 871 void * peerCertChain; |
| 877 » » » /* Chain while we are trying to validate it. This | 872 » » » /* chain while we are trying to validate it. */ |
| 878 » » » * does not include the leaf cert. It is actually a | |
| 879 » » » * linked list of ssl3CertNode structs. | |
| 880 » » » */ | |
| 881 CERTDistNames * ca_list; | 873 CERTDistNames * ca_list; |
| 882 /* used by server. trusted CAs for this socket. */ | 874 /* used by server. trusted CAs for this socket. */ |
| 883 PRBool initialized; | 875 PRBool initialized; |
| 884 SSL3HandshakeState hs; | 876 SSL3HandshakeState hs; |
| 885 ssl3CipherSpec specs[2]; /* one is current, one is pending. */ | 877 ssl3CipherSpec specs[2]; /* one is current, one is pending. */ |
| 886 | 878 |
| 887 /* In a client: if the server supports Next Protocol Negotiation, then | 879 /* In a client: if the server supports Next Protocol Negotiation, then |
| 888 * this is the protocol that was negotiated. | 880 * this is the protocol that was negotiated. |
| 889 * | 881 */ |
| 890 * If the data pointer is non-NULL, then it is malloced data. */ | 882 SECItem» » nextProto; |
| 891 SECItem» » nextProto; | 883 SSLNextProtoState nextProtoState; |
| 892 int»» » nextProtoState; /* See NEXT_PROTO_* defines */ | |
| 893 }; | 884 }; |
| 894 | 885 |
| 895 typedef struct { | 886 typedef struct { |
| 896 SSL3ContentType type; | 887 SSL3ContentType type; |
| 897 SSL3ProtocolVersion version; | 888 SSL3ProtocolVersion version; |
| 898 sslBuffer * buf; | 889 sslBuffer * buf; |
| 899 } SSL3Ciphertext; | 890 } SSL3Ciphertext; |
| 900 | 891 |
| 901 struct ssl3KeyPairStr { | 892 struct ssl3KeyPairStr { |
| 902 SECKEYPrivateKey * privKey; | 893 SECKEYPrivateKey * privKey; |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1203 ** ssl_global_data_lock, which is a reader/writer lock. | 1194 ** ssl_global_data_lock, which is a reader/writer lock. |
| 1204 */ | 1195 */ |
| 1205 extern NSSRWLock * ssl_global_data_lock; | 1196 extern NSSRWLock * ssl_global_data_lock; |
| 1206 extern char ssl_debug; | 1197 extern char ssl_debug; |
| 1207 extern char ssl_trace; | 1198 extern char ssl_trace; |
| 1208 extern FILE * ssl_trace_iob; | 1199 extern FILE * ssl_trace_iob; |
| 1209 extern FILE * ssl_keylog_iob; | 1200 extern FILE * ssl_keylog_iob; |
| 1210 extern CERTDistNames * ssl3_server_ca_list; | 1201 extern CERTDistNames * ssl3_server_ca_list; |
| 1211 extern PRUint32 ssl_sid_timeout; | 1202 extern PRUint32 ssl_sid_timeout; |
| 1212 extern PRUint32 ssl3_sid_timeout; | 1203 extern PRUint32 ssl3_sid_timeout; |
| 1213 extern PRBool ssl3_global_policy_some_restricted; | |
| 1214 | 1204 |
| 1215 extern const char * const ssl_cipherName[]; | 1205 extern const char * const ssl_cipherName[]; |
| 1216 extern const char * const ssl3_cipherName[]; | 1206 extern const char * const ssl3_cipherName[]; |
| 1217 | 1207 |
| 1218 extern sslSessionIDLookupFunc ssl_sid_lookup; | 1208 extern sslSessionIDLookupFunc ssl_sid_lookup; |
| 1219 extern sslSessionIDCacheFunc ssl_sid_cache; | 1209 extern sslSessionIDCacheFunc ssl_sid_cache; |
| 1220 extern sslSessionIDUncacheFunc ssl_sid_uncache; | 1210 extern sslSessionIDUncacheFunc ssl_sid_uncache; |
| 1221 | 1211 |
| 1222 /************************************************************************/ | 1212 /************************************************************************/ |
| 1223 | 1213 |
| 1224 SEC_BEGIN_PROTOS | 1214 SEC_BEGIN_PROTOS |
| 1225 | 1215 |
| 1216 /* Internal initialization and installation of the SSL error tables */ |
| 1217 extern SECStatus ssl_Init(void); |
| 1218 extern SECStatus ssl_InitializePRErrorTable(void); |
| 1219 |
| 1226 /* Implementation of ops for default (non socks, non secure) case */ | 1220 /* Implementation of ops for default (non socks, non secure) case */ |
| 1227 extern int ssl_DefConnect(sslSocket *ss, const PRNetAddr *addr); | 1221 extern int ssl_DefConnect(sslSocket *ss, const PRNetAddr *addr); |
| 1228 extern PRFileDesc *ssl_DefAccept(sslSocket *ss, PRNetAddr *addr); | 1222 extern PRFileDesc *ssl_DefAccept(sslSocket *ss, PRNetAddr *addr); |
| 1229 extern int ssl_DefBind(sslSocket *ss, const PRNetAddr *addr); | 1223 extern int ssl_DefBind(sslSocket *ss, const PRNetAddr *addr); |
| 1230 extern int ssl_DefListen(sslSocket *ss, int backlog); | 1224 extern int ssl_DefListen(sslSocket *ss, int backlog); |
| 1231 extern int ssl_DefShutdown(sslSocket *ss, int how); | 1225 extern int ssl_DefShutdown(sslSocket *ss, int how); |
| 1232 extern int ssl_DefClose(sslSocket *ss); | 1226 extern int ssl_DefClose(sslSocket *ss); |
| 1233 extern int ssl_DefRecv(sslSocket *ss, unsigned char *buf, int len, int flags); | 1227 extern int ssl_DefRecv(sslSocket *ss, unsigned char *buf, int len, int flags); |
| 1234 extern int ssl_DefSend(sslSocket *ss, const unsigned char *buf, | 1228 extern int ssl_DefSend(sslSocket *ss, const unsigned char *buf, |
| 1235 int len, int flags); | 1229 int len, int flags); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1313 const char *peerID, const char *urlSvrName); | 1307 const char *peerID, const char *urlSvrName); |
| 1314 extern void ssl_FreeSID(sslSessionID *sid); | 1308 extern void ssl_FreeSID(sslSessionID *sid); |
| 1315 | 1309 |
| 1316 extern int ssl3_SendApplicationData(sslSocket *ss, const PRUint8 *in, | 1310 extern int ssl3_SendApplicationData(sslSocket *ss, const PRUint8 *in, |
| 1317 int len, int flags); | 1311 int len, int flags); |
| 1318 | 1312 |
| 1319 extern PRBool ssl_FdIsBlocking(PRFileDesc *fd); | 1313 extern PRBool ssl_FdIsBlocking(PRFileDesc *fd); |
| 1320 | 1314 |
| 1321 extern PRBool ssl_SocketIsBlocking(sslSocket *ss); | 1315 extern PRBool ssl_SocketIsBlocking(sslSocket *ss); |
| 1322 | 1316 |
| 1323 extern void ssl_SetAlwaysBlock(sslSocket *ss); | 1317 extern void ssl3_SetAlwaysBlock(sslSocket *ss); |
| 1324 | 1318 |
| 1325 extern SECStatus ssl_EnableNagleDelay(sslSocket *ss, PRBool enabled); | 1319 extern SECStatus ssl_EnableNagleDelay(sslSocket *ss, PRBool enabled); |
| 1326 | 1320 |
| 1327 extern PRBool ssl3_CanFalseStart(sslSocket *ss); | 1321 extern PRBool ssl3_CanFalseStart(sslSocket *ss); |
| 1328 | 1322 |
| 1329 #define SSL_LOCK_READER(ss) if (ss->recvLock) PZ_Lock(ss->recvLock) | 1323 #define SSL_LOCK_READER(ss) if (ss->recvLock) PZ_Lock(ss->recvLock) |
| 1330 #define SSL_UNLOCK_READER(ss) if (ss->recvLock) PZ_Unlock(ss->recvLock
) | 1324 #define SSL_UNLOCK_READER(ss) if (ss->recvLock) PZ_Unlock(ss->recvLock
) |
| 1331 #define SSL_LOCK_WRITER(ss) if (ss->sendLock) PZ_Lock(ss->sendLock) | 1325 #define SSL_LOCK_WRITER(ss) if (ss->sendLock) PZ_Lock(ss->sendLock) |
| 1332 #define SSL_UNLOCK_WRITER(ss) if (ss->sendLock) PZ_Unlock(ss->sendLock
) | 1326 #define SSL_UNLOCK_WRITER(ss) if (ss->sendLock) PZ_Unlock(ss->sendLock
) |
| 1333 | 1327 |
| 1328 /* firstHandshakeLock -> recvBufLock */ |
| 1334 #define ssl_Get1stHandshakeLock(ss) \ | 1329 #define ssl_Get1stHandshakeLock(ss) \ |
| 1335 { if (!ss->opt.noLocks) PZ_EnterMonitor((ss)->firstHandshakeLock); } | 1330 { if (!ss->opt.noLocks) { \ |
| 1331 » PORT_Assert(PZ_InMonitor((ss)->firstHandshakeLock) || \ |
| 1332 » » !ssl_HaveRecvBufLock(ss)); \ |
| 1333 » PZ_EnterMonitor((ss)->firstHandshakeLock); \ |
| 1334 } } |
| 1336 #define ssl_Release1stHandshakeLock(ss) \ | 1335 #define ssl_Release1stHandshakeLock(ss) \ |
| 1337 { if (!ss->opt.noLocks) PZ_ExitMonitor((ss)->firstHandshakeLock); } | 1336 { if (!ss->opt.noLocks) PZ_ExitMonitor((ss)->firstHandshakeLock); } |
| 1338 #define ssl_Have1stHandshakeLock(ss) \ | 1337 #define ssl_Have1stHandshakeLock(ss) \ |
| 1339 (PZ_InMonitor((ss)->firstHandshakeLock)) | 1338 (PZ_InMonitor((ss)->firstHandshakeLock)) |
| 1340 | 1339 |
| 1340 /* ssl3HandshakeLock -> xmitBufLock */ |
| 1341 #define ssl_GetSSL3HandshakeLock(ss) \ | 1341 #define ssl_GetSSL3HandshakeLock(ss) \ |
| 1342 { if (!ss->opt.noLocks) PZ_EnterMonitor((ss)->ssl3HandshakeLock); } | 1342 { if (!ss->opt.noLocks) { \ |
| 1343 » PORT_Assert(!ssl_HaveXmitBufLock(ss)); \ |
| 1344 » PZ_EnterMonitor((ss)->ssl3HandshakeLock); \ |
| 1345 } } |
| 1343 #define ssl_ReleaseSSL3HandshakeLock(ss) \ | 1346 #define ssl_ReleaseSSL3HandshakeLock(ss) \ |
| 1344 { if (!ss->opt.noLocks) PZ_ExitMonitor((ss)->ssl3HandshakeLock); } | 1347 { if (!ss->opt.noLocks) PZ_ExitMonitor((ss)->ssl3HandshakeLock); } |
| 1345 #define ssl_HaveSSL3HandshakeLock(ss) \ | 1348 #define ssl_HaveSSL3HandshakeLock(ss) \ |
| 1346 (PZ_InMonitor((ss)->ssl3HandshakeLock)) | 1349 (PZ_InMonitor((ss)->ssl3HandshakeLock)) |
| 1347 | 1350 |
| 1348 #define ssl_GetSpecReadLock(ss) \ | 1351 #define ssl_GetSpecReadLock(ss) \ |
| 1349 { if (!ss->opt.noLocks) NSSRWLock_LockRead((ss)->specLock); } | 1352 { if (!ss->opt.noLocks) NSSRWLock_LockRead((ss)->specLock); } |
| 1350 #define ssl_ReleaseSpecReadLock(ss) \ | 1353 #define ssl_ReleaseSpecReadLock(ss) \ |
| 1351 { if (!ss->opt.noLocks) NSSRWLock_UnlockRead((ss)->specLock); } | 1354 { if (!ss->opt.noLocks) NSSRWLock_UnlockRead((ss)->specLock); } |
| 1355 /* NSSRWLock_HaveReadLock is not exported so there's no |
| 1356 * ssl_HaveSpecReadLock macro. */ |
| 1352 | 1357 |
| 1353 #define ssl_GetSpecWriteLock(ss) \ | 1358 #define ssl_GetSpecWriteLock(ss) \ |
| 1354 { if (!ss->opt.noLocks) NSSRWLock_LockWrite((ss)->specLock); } | 1359 { if (!ss->opt.noLocks) NSSRWLock_LockWrite((ss)->specLock); } |
| 1355 #define ssl_ReleaseSpecWriteLock(ss) \ | 1360 #define ssl_ReleaseSpecWriteLock(ss) \ |
| 1356 { if (!ss->opt.noLocks) NSSRWLock_UnlockWrite((ss)->specLock); } | 1361 { if (!ss->opt.noLocks) NSSRWLock_UnlockWrite((ss)->specLock); } |
| 1357 #define ssl_HaveSpecWriteLock(ss) \ | 1362 #define ssl_HaveSpecWriteLock(ss) \ |
| 1358 (NSSRWLock_HaveWriteLock((ss)->specLock)) | 1363 (NSSRWLock_HaveWriteLock((ss)->specLock)) |
| 1359 | 1364 |
| 1365 /* recvBufLock -> ssl3HandshakeLock -> xmitBufLock */ |
| 1360 #define ssl_GetRecvBufLock(ss) \ | 1366 #define ssl_GetRecvBufLock(ss) \ |
| 1361 { if (!ss->opt.noLocks) PZ_EnterMonitor((ss)->recvBufLock); } | 1367 { if (!ss->opt.noLocks) { \ |
| 1368 » PORT_Assert(!ssl_HaveSSL3HandshakeLock(ss)); \ |
| 1369 » PORT_Assert(!ssl_HaveXmitBufLock(ss)); \ |
| 1370 » PZ_EnterMonitor((ss)->recvBufLock); \ |
| 1371 } } |
| 1362 #define ssl_ReleaseRecvBufLock(ss) \ | 1372 #define ssl_ReleaseRecvBufLock(ss) \ |
| 1363 { if (!ss->opt.noLocks) PZ_ExitMonitor( (ss)->recvBufLock); } | 1373 { if (!ss->opt.noLocks) PZ_ExitMonitor( (ss)->recvBufLock); } |
| 1364 #define ssl_HaveRecvBufLock(ss) \ | 1374 #define ssl_HaveRecvBufLock(ss) \ |
| 1365 (PZ_InMonitor((ss)->recvBufLock)) | 1375 (PZ_InMonitor((ss)->recvBufLock)) |
| 1366 | 1376 |
| 1377 /* xmitBufLock -> specLock */ |
| 1367 #define ssl_GetXmitBufLock(ss) \ | 1378 #define ssl_GetXmitBufLock(ss) \ |
| 1368 { if (!ss->opt.noLocks) PZ_EnterMonitor((ss)->xmitBufLock); } | 1379 { if (!ss->opt.noLocks) PZ_EnterMonitor((ss)->xmitBufLock); } |
| 1369 #define ssl_ReleaseXmitBufLock(ss) \ | 1380 #define ssl_ReleaseXmitBufLock(ss) \ |
| 1370 { if (!ss->opt.noLocks) PZ_ExitMonitor( (ss)->xmitBufLock); } | 1381 { if (!ss->opt.noLocks) PZ_ExitMonitor( (ss)->xmitBufLock); } |
| 1371 #define ssl_HaveXmitBufLock(ss) \ | 1382 #define ssl_HaveXmitBufLock(ss) \ |
| 1372 (PZ_InMonitor((ss)->xmitBufLock)) | 1383 (PZ_InMonitor((ss)->xmitBufLock)) |
| 1373 | 1384 |
| 1374 | 1385 |
| 1375 extern SECStatus ssl3_KeyAndMacDeriveBypass(ssl3CipherSpec * pwSpec, | 1386 extern SECStatus ssl3_KeyAndMacDeriveBypass(ssl3CipherSpec * pwSpec, |
| 1376 const unsigned char * cr, const unsigned char * sr, | 1387 const unsigned char * cr, const unsigned char * sr, |
| 1377 PRBool isTLS, PRBool isExport); | 1388 PRBool isTLS, PRBool isExport); |
| 1378 extern SECStatus ssl3_MasterKeyDeriveBypass( ssl3CipherSpec * pwSpec, | 1389 extern SECStatus ssl3_MasterKeyDeriveBypass( ssl3CipherSpec * pwSpec, |
| 1379 const unsigned char * cr, const unsigned char * sr, | 1390 const unsigned char * cr, const unsigned char * sr, |
| 1380 const SECItem * pms, PRBool isTLS, PRBool isRSA); | 1391 const SECItem * pms, PRBool isTLS, PRBool isRSA); |
| 1381 | 1392 |
| 1382 /* These functions are called from secnav, even though they're "private". */ | 1393 /* These functions are called from secnav, even though they're "private". */ |
| 1383 | 1394 |
| 1384 extern int ssl2_SendErrorMessage(struct sslSocketStr *ss, int error); | 1395 extern int ssl2_SendErrorMessage(struct sslSocketStr *ss, int error); |
| 1385 extern int SSL_RestartHandshakeAfterServerCert(struct sslSocketStr *ss); | |
| 1386 extern sslSocket *ssl_FindSocket(PRFileDesc *fd); | 1396 extern sslSocket *ssl_FindSocket(PRFileDesc *fd); |
| 1387 extern void ssl_FreeSocket(struct sslSocketStr *ssl); | 1397 extern void ssl_FreeSocket(struct sslSocketStr *ssl); |
| 1388 extern SECStatus SSL3_SendAlert(sslSocket *ss, SSL3AlertLevel level, | 1398 extern SECStatus SSL3_SendAlert(sslSocket *ss, SSL3AlertLevel level, |
| 1389 SSL3AlertDescription desc); | 1399 SSL3AlertDescription desc); |
| 1390 | 1400 |
| 1391 extern int ssl2_RestartHandshakeAfterCertReq(sslSocket * ss, | |
| 1392 CERTCertificate * cert, | |
| 1393 SECKEYPrivateKey * key); | |
| 1394 | |
| 1395 extern SECStatus ssl3_RestartHandshakeAfterCertReq(sslSocket * ss, | 1401 extern SECStatus ssl3_RestartHandshakeAfterCertReq(sslSocket * ss, |
| 1396 CERTCertificate * cert, | 1402 CERTCertificate * cert, |
| 1397 SECKEYPrivateKey * key, | 1403 SECKEYPrivateKey * key, |
| 1398 CERTCertificateList *certChain); | 1404 CERTCertificateList *certChain); |
| 1399 | 1405 |
| 1400 extern int ssl2_RestartHandshakeAfterServerCert(sslSocket *ss); | 1406 extern SECStatus ssl3_AuthCertificateComplete(sslSocket *ss, PRErrorCode error); |
| 1401 extern int ssl3_RestartHandshakeAfterServerCert(sslSocket *ss); | |
| 1402 | 1407 |
| 1403 /* | 1408 /* |
| 1404 * for dealing with SSL 3.0 clients sending SSL 2.0 format hellos | 1409 * for dealing with SSL 3.0 clients sending SSL 2.0 format hellos |
| 1405 */ | 1410 */ |
| 1406 extern SECStatus ssl3_HandleV2ClientHello( | 1411 extern SECStatus ssl3_HandleV2ClientHello( |
| 1407 sslSocket *ss, unsigned char *buffer, int length); | 1412 sslSocket *ss, unsigned char *buffer, int length); |
| 1408 extern SECStatus ssl3_StartHandshakeHash( | 1413 extern SECStatus ssl3_StartHandshakeHash( |
| 1409 sslSocket *ss, unsigned char *buf, int length); | 1414 sslSocket *ss, unsigned char *buf, int length); |
| 1410 | 1415 |
| 1411 /* | 1416 /* |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1556 | 1561 |
| 1557 /* Functions that handle ClientHello and ServerHello extensions. */ | 1562 /* Functions that handle ClientHello and ServerHello extensions. */ |
| 1558 extern SECStatus ssl3_HandleServerNameXtn(sslSocket * ss, | 1563 extern SECStatus ssl3_HandleServerNameXtn(sslSocket * ss, |
| 1559 PRUint16 ex_type, SECItem *data); | 1564 PRUint16 ex_type, SECItem *data); |
| 1560 extern SECStatus ssl3_HandleSupportedCurvesXtn(sslSocket * ss, | 1565 extern SECStatus ssl3_HandleSupportedCurvesXtn(sslSocket * ss, |
| 1561 PRUint16 ex_type, SECItem *data); | 1566 PRUint16 ex_type, SECItem *data); |
| 1562 extern SECStatus ssl3_HandleSupportedPointFormatsXtn(sslSocket * ss, | 1567 extern SECStatus ssl3_HandleSupportedPointFormatsXtn(sslSocket * ss, |
| 1563 PRUint16 ex_type, SECItem *data); | 1568 PRUint16 ex_type, SECItem *data); |
| 1564 extern SECStatus ssl3_ClientHandleSessionTicketXtn(sslSocket *ss, | 1569 extern SECStatus ssl3_ClientHandleSessionTicketXtn(sslSocket *ss, |
| 1565 PRUint16 ex_type, SECItem *data); | 1570 PRUint16 ex_type, SECItem *data); |
| 1566 extern SECStatus ssl3_ClientHandleNextProtoNegoXtn(sslSocket *ss, | |
| 1567 PRUint16 ex_type, SECItem *data); | |
| 1568 extern SECStatus ssl3_ServerHandleCachedInfoXtn(sslSocket *ss, | |
| 1569 PRUint16 ex_type, SECItem *data); | |
| 1570 extern SECStatus ssl3_ClientHandleCachedInfoXtn(sslSocket *ss, | |
| 1571 PRUint16 ex_type, SECItem *data); | |
| 1572 extern SECStatus ssl3_ClientHandleStatusRequestXtn(sslSocket *ss, | 1571 extern SECStatus ssl3_ClientHandleStatusRequestXtn(sslSocket *ss, |
| 1573 PRUint16 ex_type, SECItem *data); | 1572 PRUint16 ex_type, SECItem *data); |
| 1574 extern SECStatus ssl3_ClientHandleOBCertXtn(sslSocket *ss, | 1573 extern SECStatus ssl3_ClientHandleOBCertXtn(sslSocket *ss, |
| 1575 PRUint16 ex_type, SECItem *data); | 1574 PRUint16 ex_type, SECItem *data); |
| 1576 extern SECStatus ssl3_ServerHandleSessionTicketXtn(sslSocket *ss, | 1575 extern SECStatus ssl3_ServerHandleSessionTicketXtn(sslSocket *ss, |
| 1577 PRUint16 ex_type, SECItem *data); | 1576 PRUint16 ex_type, SECItem *data); |
| 1578 extern SECStatus ssl3_ServerHandleNextProtoNegoXtn(sslSocket *ss, | |
| 1579 PRUint16 ex_type, SECItem *data); | |
| 1580 extern SECStatus ssl3_ServerHandleOBCertXtn(sslSocket *ss, | 1577 extern SECStatus ssl3_ServerHandleOBCertXtn(sslSocket *ss, |
| 1581 PRUint16 ex_type, SECItem *data); | 1578 PRUint16 ex_type, SECItem *data); |
| 1582 | 1579 |
| 1583 /* ClientHello and ServerHello extension senders. | 1580 /* ClientHello and ServerHello extension senders. |
| 1584 * Note that not all extension senders are exposed here; only those that | 1581 * Note that not all extension senders are exposed here; only those that |
| 1585 * that need exposure. | 1582 * that need exposure. |
| 1586 */ | 1583 */ |
| 1587 extern PRInt32 ssl3_SendSessionTicketXtn(sslSocket *ss, PRBool append, | 1584 extern PRInt32 ssl3_SendSessionTicketXtn(sslSocket *ss, PRBool append, |
| 1588 PRUint32 maxBytes); | 1585 PRUint32 maxBytes); |
| 1589 extern PRInt32 ssl3_ClientSendStatusRequestXtn(sslSocket *ss, PRBool append, | 1586 extern PRInt32 ssl3_ClientSendStatusRequestXtn(sslSocket *ss, PRBool append, |
| 1590 PRUint32 maxBytes); | 1587 PRUint32 maxBytes); |
| 1591 | 1588 |
| 1592 /* ClientHello and ServerHello extension senders. | 1589 /* ClientHello and ServerHello extension senders. |
| 1593 * The code is in ssl3ext.c. | 1590 * The code is in ssl3ext.c. |
| 1594 */ | 1591 */ |
| 1595 extern PRInt32 ssl3_SendServerNameXtn(sslSocket *ss, PRBool append, | 1592 extern PRInt32 ssl3_SendServerNameXtn(sslSocket *ss, PRBool append, |
| 1596 PRUint32 maxBytes); | 1593 PRUint32 maxBytes); |
| 1597 extern PRInt32 ssl3_ClientSendCachedInfoXtn(sslSocket *ss, PRBool append, | |
| 1598 PRUint32 maxBytes); | |
| 1599 extern PRInt32 ssl3_ServerSendCachedInfoXtn(sslSocket *ss, PRBool append, | |
| 1600 PRUint32 maxBytes); | |
| 1601 extern PRInt32 ssl3_SendOBCertXtn(sslSocket *ss, PRBool append, | 1594 extern PRInt32 ssl3_SendOBCertXtn(sslSocket *ss, PRBool append, |
| 1602 PRUint32 maxBytes); | 1595 PRUint32 maxBytes); |
| 1603 | 1596 |
| 1604 /* Assigns new cert, cert chain and keys to ss->serverCerts | 1597 /* Assigns new cert, cert chain and keys to ss->serverCerts |
| 1605 * struct. If certChain is NULL, tries to find one. Aborts if | 1598 * struct. If certChain is NULL, tries to find one. Aborts if |
| 1606 * fails to do so. If cert and keyPair are NULL - unconfigures | 1599 * fails to do so. If cert and keyPair are NULL - unconfigures |
| 1607 * sslSocket of kea type.*/ | 1600 * sslSocket of kea type.*/ |
| 1608 extern SECStatus ssl_ConfigSecureServer(sslSocket *ss, CERTCertificate *cert, | 1601 extern SECStatus ssl_ConfigSecureServer(sslSocket *ss, CERTCertificate *cert, |
| 1609 CERTCertificateList *certChain, | 1602 const CERTCertificateList *certChain, |
| 1610 ssl3KeyPair *keyPair, SSLKEAType kea); | 1603 ssl3KeyPair *keyPair, SSLKEAType kea); |
| 1611 /* Return key type for the cert */ | 1604 /* Return key type for the cert */ |
| 1612 extern SSLKEAType ssl_FindCertKEAType(CERTCertificate * cert); | 1605 extern SSLKEAType ssl_FindCertKEAType(CERTCertificate * cert); |
| 1613 | 1606 |
| 1614 #ifdef NSS_ENABLE_ECC | 1607 #ifdef NSS_ENABLE_ECC |
| 1615 extern PRInt32 ssl3_SendSupportedCurvesXtn(sslSocket *ss, | 1608 extern PRInt32 ssl3_SendSupportedCurvesXtn(sslSocket *ss, |
| 1616 PRBool append, PRUint32 maxBytes); | 1609 PRBool append, PRUint32 maxBytes); |
| 1617 extern PRInt32 ssl3_SendSupportedPointFormatsXtn(sslSocket *ss, | 1610 extern PRInt32 ssl3_SendSupportedPointFormatsXtn(sslSocket *ss, |
| 1618 PRBool append, PRUint32 maxBytes); | 1611 PRBool append, PRUint32 maxBytes); |
| 1619 #endif | 1612 #endif |
| 1620 extern PRInt32 ssl3_ClientSendNextProtoNegoXtn(sslSocket *ss, PRBool append, | |
| 1621 PRUint32 maxBytes); | |
| 1622 extern SECStatus ssl3_ValidateNextProtoNego(const unsigned char* data, | |
| 1623 unsigned short length); | |
| 1624 | 1613 |
| 1625 /* call the registered extension handlers. */ | 1614 /* call the registered extension handlers. */ |
| 1626 extern SECStatus ssl3_HandleHelloExtensions(sslSocket *ss, | 1615 extern SECStatus ssl3_HandleHelloExtensions(sslSocket *ss, |
| 1627 SSL3Opaque **b, PRUint32 *length); | 1616 SSL3Opaque **b, PRUint32 *length); |
| 1628 | 1617 |
| 1629 /* Hello Extension related routines. */ | 1618 /* Hello Extension related routines. */ |
| 1630 extern PRBool ssl3_ExtensionNegotiated(sslSocket *ss, PRUint16 ex_type); | 1619 extern PRBool ssl3_ExtensionNegotiated(sslSocket *ss, PRUint16 ex_type); |
| 1631 extern SECStatus ssl3_SetSIDSessionTicket(sslSessionID *sid, | 1620 extern SECStatus ssl3_SetSIDSessionTicket(sslSessionID *sid, |
| 1632 NewSessionTicket *session_ticket); | 1621 NewSessionTicket *session_ticket); |
| 1633 extern SECStatus ssl3_SendNewSessionTicket(sslSocket *ss); | 1622 extern SECStatus ssl3_SendNewSessionTicket(sslSocket *ss); |
| 1634 extern PRBool ssl_GetSessionTicketKeys(unsigned char *keyName, | 1623 extern PRBool ssl_GetSessionTicketKeys(unsigned char *keyName, |
| 1635 unsigned char *encKey, unsigned char *macKey); | 1624 unsigned char *encKey, unsigned char *macKey); |
| 1636 extern PRBool ssl_GetSessionTicketKeysPKCS11(SECKEYPrivateKey *svrPrivKey, | 1625 extern PRBool ssl_GetSessionTicketKeysPKCS11(SECKEYPrivateKey *svrPrivKey, |
| 1637 SECKEYPublicKey *svrPubKey, void *pwArg, | 1626 SECKEYPublicKey *svrPubKey, void *pwArg, |
| 1638 unsigned char *keyName, PK11SymKey **aesKey, | 1627 unsigned char *keyName, PK11SymKey **aesKey, |
| 1639 PK11SymKey **macKey); | 1628 PK11SymKey **macKey); |
| 1640 | 1629 |
| 1641 /* Tell clients to consider tickets valid for this long. */ | 1630 /* Tell clients to consider tickets valid for this long. */ |
| 1642 #define TLS_EX_SESS_TICKET_LIFETIME_HINT (2 * 24 * 60 * 60) /* 2 days */ | 1631 #define TLS_EX_SESS_TICKET_LIFETIME_HINT (2 * 24 * 60 * 60) /* 2 days */ |
| 1643 #define TLS_EX_SESS_TICKET_VERSION (0x0100) | 1632 #define TLS_EX_SESS_TICKET_VERSION (0x0100) |
| 1644 | 1633 |
| 1634 extern SECStatus ssl3_ValidateNextProtoNego(const unsigned char* data, |
| 1635 unsigned int length); |
| 1636 |
| 1645 /* Construct a new NSPR socket for the app to use */ | 1637 /* Construct a new NSPR socket for the app to use */ |
| 1646 extern PRFileDesc *ssl_NewPRSocket(sslSocket *ss, PRFileDesc *fd); | 1638 extern PRFileDesc *ssl_NewPRSocket(sslSocket *ss, PRFileDesc *fd); |
| 1647 extern void ssl_FreePRSocket(PRFileDesc *fd); | 1639 extern void ssl_FreePRSocket(PRFileDesc *fd); |
| 1648 | 1640 |
| 1649 /* Internal config function so SSL2 can initialize the present state of | 1641 /* Internal config function so SSL2 can initialize the present state of |
| 1650 * various ciphers */ | 1642 * various ciphers */ |
| 1651 extern int ssl3_config_match_init(sslSocket *); | 1643 extern int ssl3_config_match_init(sslSocket *); |
| 1652 | 1644 |
| 1653 | 1645 |
| 1654 /* Create a new ref counted key pair object from two keys. */ | 1646 /* Create a new ref counted key pair object from two keys. */ |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1722 SECStatus SSL_DisableDefaultExportCipherSuites(void); | 1714 SECStatus SSL_DisableDefaultExportCipherSuites(void); |
| 1723 SECStatus SSL_DisableExportCipherSuites(PRFileDesc * fd); | 1715 SECStatus SSL_DisableExportCipherSuites(PRFileDesc * fd); |
| 1724 PRBool SSL_IsExportCipherSuite(PRUint16 cipherSuite); | 1716 PRBool SSL_IsExportCipherSuite(PRUint16 cipherSuite); |
| 1725 | 1717 |
| 1726 SECStatus ssl3_TLSPRFWithMasterSecret( | 1718 SECStatus ssl3_TLSPRFWithMasterSecret( |
| 1727 ssl3CipherSpec *spec, const char *label, | 1719 ssl3CipherSpec *spec, const char *label, |
| 1728 unsigned int labelLen, const unsigned char *val, | 1720 unsigned int labelLen, const unsigned char *val, |
| 1729 unsigned int valLen, unsigned char *out, | 1721 unsigned int valLen, unsigned char *out, |
| 1730 unsigned int outLen); | 1722 unsigned int outLen); |
| 1731 | 1723 |
| 1732 /********************** FNV hash *********************/ | |
| 1733 | |
| 1734 void FNV1A64_Init(PRUint64 *digest); | |
| 1735 void FNV1A64_Update(PRUint64 *digest, const unsigned char *data, | |
| 1736 unsigned int length); | |
| 1737 void FNV1A64_Final(PRUint64 *digest); | |
| 1738 | |
| 1739 #ifdef TRACE | 1724 #ifdef TRACE |
| 1740 #define SSL_TRACE(msg) ssl_Trace msg | 1725 #define SSL_TRACE(msg) ssl_Trace msg |
| 1741 #else | 1726 #else |
| 1742 #define SSL_TRACE(msg) | 1727 #define SSL_TRACE(msg) |
| 1743 #endif | 1728 #endif |
| 1744 | 1729 |
| 1745 void ssl_Trace(const char *format, ...); | 1730 void ssl_Trace(const char *format, ...); |
| 1746 | 1731 |
| 1747 SEC_END_PROTOS | 1732 SEC_END_PROTOS |
| 1748 | 1733 |
| 1749 #if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS) | 1734 #if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS) |
| 1750 #define SSL_GETPID getpid | 1735 #define SSL_GETPID getpid |
| 1751 #elif defined(_WIN32_WCE) | 1736 #elif defined(_WIN32_WCE) |
| 1752 #define SSL_GETPID GetCurrentProcessId | 1737 #define SSL_GETPID GetCurrentProcessId |
| 1753 #elif defined(WIN32) | 1738 #elif defined(WIN32) |
| 1754 extern int __cdecl _getpid(void); | 1739 extern int __cdecl _getpid(void); |
| 1755 #define SSL_GETPID _getpid | 1740 #define SSL_GETPID _getpid |
| 1756 #else | 1741 #else |
| 1757 #define SSL_GETPID() 0 | 1742 #define SSL_GETPID() 0 |
| 1758 #endif | 1743 #endif |
| 1759 | 1744 |
| 1760 #endif /* __sslimpl_h_ */ | 1745 #endif /* __sslimpl_h_ */ |
| OLD | NEW |