OLD | NEW |
1 /* | 1 /* |
2 * vtables (and methods that call through them) for the 4 types of | 2 * vtables (and methods that call through them) for the 4 types of |
3 * SSLSockets supported. Only one type is still supported. | 3 * SSLSockets supported. Only one type is still supported. |
4 * Various other functions. | 4 * Various other functions. |
5 * | 5 * |
6 * This Source Code Form is subject to the terms of the Mozilla Public | 6 * This Source Code Form is subject to the terms of the Mozilla Public |
7 * License, v. 2.0. If a copy of the MPL was not distributed with this | 7 * License, v. 2.0. If a copy of the MPL was not distributed with this |
8 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 8 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
9 #include "seccomon.h" | 9 #include "seccomon.h" |
10 #include "cert.h" | 10 #include "cert.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "nss.h" | 21 #include "nss.h" |
22 | 22 |
23 /* This is a bodge to allow this code to be compiled against older NSS headers | 23 /* This is a bodge to allow this code to be compiled against older NSS headers |
24 * that don't contain the TLS 1.2 changes. */ | 24 * that don't contain the TLS 1.2 changes. */ |
25 #ifndef CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256 | 25 #ifndef CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256 |
26 #define CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256 (CKM_NSS + 24) | 26 #define CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256 (CKM_NSS + 24) |
27 #endif | 27 #endif |
28 | 28 |
29 #define SET_ERROR_CODE /* reminder */ | 29 #define SET_ERROR_CODE /* reminder */ |
30 | 30 |
31 struct cipherPolicyStr { | |
32 int cipher; | |
33 unsigned char export; /* policy value for export policy */ | |
34 unsigned char france; /* policy value for france policy */ | |
35 }; | |
36 | |
37 typedef struct cipherPolicyStr cipherPolicy; | |
38 | |
39 /* This table contains two preconfigured policies: Export and France. | |
40 ** It is used only by the functions NSS_SetDomesticPolicy, | |
41 ** NSS_SetExportPolicy, and NSS_SetFrancePolicy. | |
42 ** Order of entries is not important. | |
43 */ | |
44 static cipherPolicy ssl_ciphers[] = { /* Export France */ | |
45 { SSL_EN_RC4_128_WITH_MD5, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
46 { SSL_EN_RC4_128_EXPORT40_WITH_MD5, SSL_ALLOWED, SSL_ALLOWED }, | |
47 { SSL_EN_RC2_128_CBC_WITH_MD5, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
48 { SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5, SSL_ALLOWED, SSL_ALLOWED }, | |
49 { SSL_EN_DES_64_CBC_WITH_MD5, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
50 { SSL_EN_DES_192_EDE3_CBC_WITH_MD5, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
51 { SSL_RSA_WITH_RC4_128_MD5, SSL_RESTRICTED, SSL_NOT_ALLOWED }, | |
52 { SSL_RSA_WITH_RC4_128_SHA, SSL_RESTRICTED, SSL_NOT_ALLOWED }, | |
53 { SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
54 { SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RESTRICTED, SSL_NOT_ALLOWED }, | |
55 { SSL_RSA_FIPS_WITH_DES_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
56 { SSL_RSA_WITH_DES_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
57 { SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_ALLOWED, SSL_ALLOWED }, | |
58 { SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, SSL_ALLOWED, SSL_ALLOWED }, | |
59 { SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
60 { SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
61 { SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
62 { SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
63 { TLS_DHE_DSS_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
64 { SSL_RSA_WITH_NULL_MD5, SSL_ALLOWED, SSL_ALLOWED }, | |
65 { SSL_RSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, | |
66 { TLS_RSA_WITH_NULL_SHA256, SSL_ALLOWED, SSL_ALLOWED }, | |
67 { TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
68 { TLS_DHE_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
69 { TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
70 { TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
71 { TLS_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
72 { TLS_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
73 { TLS_RSA_WITH_AES_128_GCM_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
74 { TLS_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
75 { TLS_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
76 { TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
77 { TLS_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
78 { TLS_RSA_WITH_AES_256_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
79 { TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
80 { TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
81 { TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
82 { TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
83 { TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
84 { TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
85 { TLS_RSA_WITH_SEED_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
86 { TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA, SSL_ALLOWED, SSL_NOT_ALLOWED }, | |
87 { TLS_RSA_EXPORT1024_WITH_RC4_56_SHA, SSL_ALLOWED, SSL_NOT_ALLOWED }, | |
88 #ifdef NSS_ENABLE_ECC | |
89 { TLS_ECDH_ECDSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, | |
90 { TLS_ECDH_ECDSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
91 { TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
92 { TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
93 { TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
94 { TLS_ECDHE_ECDSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, | |
95 { TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
96 { TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
97 { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
98 { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
99 { TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
100 { TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
101 { TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
102 { TLS_ECDH_RSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, | |
103 { TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
104 { TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
105 { TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
106 { TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
107 { TLS_ECDHE_RSA_WITH_NULL_SHA, SSL_ALLOWED, SSL_ALLOWED }, | |
108 { TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
109 { TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
110 { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
111 { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
112 { TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
113 { TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
114 { TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED }, | |
115 #endif /* NSS_ENABLE_ECC */ | |
116 { 0, SSL_NOT_ALLOWED, SSL_NOT_ALLOWED } | |
117 }; | |
118 | |
119 static const sslSocketOps ssl_default_ops = { /* No SSL. */ | 31 static const sslSocketOps ssl_default_ops = { /* No SSL. */ |
120 ssl_DefConnect, | 32 ssl_DefConnect, |
121 NULL, | 33 NULL, |
122 ssl_DefBind, | 34 ssl_DefBind, |
123 ssl_DefListen, | 35 ssl_DefListen, |
124 ssl_DefShutdown, | 36 ssl_DefShutdown, |
125 ssl_DefClose, | 37 ssl_DefClose, |
126 ssl_DefRecv, | 38 ssl_DefRecv, |
127 ssl_DefSend, | 39 ssl_DefSend, |
128 ssl_DefRead, | 40 ssl_DefRead, |
(...skipping 1264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1393 } else { | 1305 } else { |
1394 rv = ssl3_CipherPrefGet(ss, (ssl3CipherSuite)which, enabled); | 1306 rv = ssl3_CipherPrefGet(ss, (ssl3CipherSuite)which, enabled); |
1395 } | 1307 } |
1396 return rv; | 1308 return rv; |
1397 } | 1309 } |
1398 | 1310 |
1399 SECStatus | 1311 SECStatus |
1400 NSS_SetDomesticPolicy(void) | 1312 NSS_SetDomesticPolicy(void) |
1401 { | 1313 { |
1402 SECStatus status = SECSuccess; | 1314 SECStatus status = SECSuccess; |
1403 cipherPolicy * policy; | 1315 const PRUint16 *cipher; |
1404 | 1316 |
1405 for (policy = ssl_ciphers; policy->cipher != 0; ++policy) { | 1317 for (cipher = SSL_ImplementedCiphers; *cipher != 0; ++cipher) { |
1406 » status = SSL_SetPolicy(policy->cipher, SSL_ALLOWED); | 1318 » status = SSL_SetPolicy(*cipher, SSL_ALLOWED); |
1407 if (status != SECSuccess) | 1319 if (status != SECSuccess) |
1408 break; | 1320 break; |
1409 } | 1321 } |
1410 return status; | 1322 return status; |
1411 } | 1323 } |
1412 | 1324 |
1413 SECStatus | 1325 SECStatus |
1414 NSS_SetExportPolicy(void) | 1326 NSS_SetExportPolicy(void) |
1415 { | 1327 { |
1416 return NSS_SetDomesticPolicy(); | 1328 return NSS_SetDomesticPolicy(); |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1701 return SECFailure; | 1613 return SECFailure; |
1702 } | 1614 } |
1703 | 1615 |
1704 *cipher = ss->ssl3.dtlsSRTPCipherSuite; | 1616 *cipher = ss->ssl3.dtlsSRTPCipherSuite; |
1705 return SECSuccess; | 1617 return SECSuccess; |
1706 } | 1618 } |
1707 | 1619 |
1708 PRFileDesc * | 1620 PRFileDesc * |
1709 SSL_ReconfigFD(PRFileDesc *model, PRFileDesc *fd) | 1621 SSL_ReconfigFD(PRFileDesc *model, PRFileDesc *fd) |
1710 { | 1622 { |
1711 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); | |
1712 PR_NOT_REACHED("not implemented"); | |
1713 return NULL; | |
1714 | |
1715 #if 0 | |
1716 sslSocket * sm = NULL, *ss = NULL; | 1623 sslSocket * sm = NULL, *ss = NULL; |
1717 int i; | 1624 int i; |
1718 sslServerCerts * mc = NULL; | 1625 sslServerCerts * mc = NULL; |
1719 sslServerCerts * sc = NULL; | 1626 sslServerCerts * sc = NULL; |
1720 | 1627 |
1721 if (model == NULL) { | 1628 if (model == NULL) { |
1722 PR_SetError(SEC_ERROR_INVALID_ARGS, 0); | 1629 PR_SetError(SEC_ERROR_INVALID_ARGS, 0); |
1723 return NULL; | 1630 return NULL; |
1724 } | 1631 } |
1725 sm = ssl_FindSocket(model); | 1632 sm = ssl_FindSocket(model); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1833 ss->handshakeCallbackData = sm->handshakeCallbackData; | 1740 ss->handshakeCallbackData = sm->handshakeCallbackData; |
1834 if (sm->pkcs11PinArg) | 1741 if (sm->pkcs11PinArg) |
1835 ss->pkcs11PinArg = sm->pkcs11PinArg; | 1742 ss->pkcs11PinArg = sm->pkcs11PinArg; |
1836 if (sm->getChannelID) | 1743 if (sm->getChannelID) |
1837 ss->getChannelID = sm->getChannelID; | 1744 ss->getChannelID = sm->getChannelID; |
1838 if (sm->getChannelIDArg) | 1745 if (sm->getChannelIDArg) |
1839 ss->getChannelIDArg = sm->getChannelIDArg; | 1746 ss->getChannelIDArg = sm->getChannelIDArg; |
1840 return fd; | 1747 return fd; |
1841 loser: | 1748 loser: |
1842 return NULL; | 1749 return NULL; |
1843 #endif | |
1844 } | 1750 } |
1845 | 1751 |
1846 PRBool | 1752 PRBool |
1847 ssl3_VersionIsSupported(SSLProtocolVariant protocolVariant, | 1753 ssl3_VersionIsSupported(SSLProtocolVariant protocolVariant, |
1848 SSL3ProtocolVersion version) | 1754 SSL3ProtocolVersion version) |
1849 { | 1755 { |
1850 switch (protocolVariant) { | 1756 switch (protocolVariant) { |
1851 case ssl_variant_stream: | 1757 case ssl_variant_stream: |
1852 return (version >= SSL_LIBRARY_VERSION_3_0 && | 1758 return (version >= SSL_LIBRARY_VERSION_3_0 && |
1853 version <= SSL_LIBRARY_VERSION_MAX_SUPPORTED); | 1759 version <= SSL_LIBRARY_VERSION_MAX_SUPPORTED); |
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3190 if (status != SECSuccess) { | 3096 if (status != SECSuccess) { |
3191 loser: | 3097 loser: |
3192 ssl_DestroySocketContents(ss); | 3098 ssl_DestroySocketContents(ss); |
3193 ssl_DestroyLocks(ss); | 3099 ssl_DestroyLocks(ss); |
3194 PORT_Free(ss); | 3100 PORT_Free(ss); |
3195 ss = NULL; | 3101 ss = NULL; |
3196 } | 3102 } |
3197 } | 3103 } |
3198 return ss; | 3104 return ss; |
3199 } | 3105 } |
| 3106 |
OLD | NEW |