diff options
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_algs.c | 25 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_asn1.c | 634 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_cert.c | 649 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_ciph.c | 1393 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_err.c | 1064 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_err2.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_lib.c | 3159 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_rsa.c | 882 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_sess.c | 1094 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_stat.c | 893 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_task.c | 287 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_txt.c | 211 | ||||
-rw-r--r-- | src/lib/libssl/ssl_algs.c | 25 | ||||
-rw-r--r-- | src/lib/libssl/ssl_asn1.c | 634 | ||||
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 649 | ||||
-rw-r--r-- | src/lib/libssl/ssl_ciph.c | 1393 | ||||
-rw-r--r-- | src/lib/libssl/ssl_err.c | 1064 | ||||
-rw-r--r-- | src/lib/libssl/ssl_err2.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 3159 | ||||
-rw-r--r-- | src/lib/libssl/ssl_rsa.c | 882 | ||||
-rw-r--r-- | src/lib/libssl/ssl_sess.c | 1094 | ||||
-rw-r--r-- | src/lib/libssl/ssl_stat.c | 893 | ||||
-rw-r--r-- | src/lib/libssl/ssl_txt.c | 211 |
23 files changed, 10335 insertions, 9974 deletions
diff --git a/src/lib/libssl/src/ssl/ssl_algs.c b/src/lib/libssl/src/ssl/ssl_algs.c index 9c34d19725..76644bda91 100644 --- a/src/lib/libssl/src/ssl/ssl_algs.c +++ b/src/lib/libssl/src/ssl/ssl_algs.c | |||
@@ -61,8 +61,9 @@ | |||
61 | #include <openssl/lhash.h> | 61 | #include <openssl/lhash.h> |
62 | #include "ssl_locl.h" | 62 | #include "ssl_locl.h" |
63 | 63 | ||
64 | int SSL_library_init(void) | 64 | int |
65 | { | 65 | SSL_library_init(void) |
66 | { | ||
66 | 67 | ||
67 | #ifndef OPENSSL_NO_DES | 68 | #ifndef OPENSSL_NO_DES |
68 | EVP_add_cipher(EVP_des_cbc()); | 69 | EVP_add_cipher(EVP_des_cbc()); |
@@ -104,16 +105,16 @@ int SSL_library_init(void) | |||
104 | #ifndef OPENSSL_NO_SEED | 105 | #ifndef OPENSSL_NO_SEED |
105 | EVP_add_cipher(EVP_seed_cbc()); | 106 | EVP_add_cipher(EVP_seed_cbc()); |
106 | #endif | 107 | #endif |
107 | 108 | ||
108 | #ifndef OPENSSL_NO_MD5 | 109 | #ifndef OPENSSL_NO_MD5 |
109 | EVP_add_digest(EVP_md5()); | 110 | EVP_add_digest(EVP_md5()); |
110 | EVP_add_digest_alias(SN_md5,"ssl2-md5"); | 111 | EVP_add_digest_alias(SN_md5, "ssl2-md5"); |
111 | EVP_add_digest_alias(SN_md5,"ssl3-md5"); | 112 | EVP_add_digest_alias(SN_md5, "ssl3-md5"); |
112 | #endif | 113 | #endif |
113 | #ifndef OPENSSL_NO_SHA | 114 | #ifndef OPENSSL_NO_SHA |
114 | EVP_add_digest(EVP_sha1()); /* RSA with sha1 */ | 115 | EVP_add_digest(EVP_sha1()); /* RSA with sha1 */ |
115 | EVP_add_digest_alias(SN_sha1,"ssl3-sha1"); | 116 | EVP_add_digest_alias(SN_sha1, "ssl3-sha1"); |
116 | EVP_add_digest_alias(SN_sha1WithRSAEncryption,SN_sha1WithRSA); | 117 | EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA); |
117 | #endif | 118 | #endif |
118 | #ifndef OPENSSL_NO_SHA256 | 119 | #ifndef OPENSSL_NO_SHA256 |
119 | EVP_add_digest(EVP_sha224()); | 120 | EVP_add_digest(EVP_sha224()); |
@@ -125,9 +126,9 @@ int SSL_library_init(void) | |||
125 | #endif | 126 | #endif |
126 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_DSA) | 127 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_DSA) |
127 | EVP_add_digest(EVP_dss1()); /* DSA with sha1 */ | 128 | EVP_add_digest(EVP_dss1()); /* DSA with sha1 */ |
128 | EVP_add_digest_alias(SN_dsaWithSHA1,SN_dsaWithSHA1_2); | 129 | EVP_add_digest_alias(SN_dsaWithSHA1, SN_dsaWithSHA1_2); |
129 | EVP_add_digest_alias(SN_dsaWithSHA1,"DSS1"); | 130 | EVP_add_digest_alias(SN_dsaWithSHA1, "DSS1"); |
130 | EVP_add_digest_alias(SN_dsaWithSHA1,"dss1"); | 131 | EVP_add_digest_alias(SN_dsaWithSHA1, "dss1"); |
131 | #endif | 132 | #endif |
132 | #ifndef OPENSSL_NO_ECDSA | 133 | #ifndef OPENSSL_NO_ECDSA |
133 | EVP_add_digest(EVP_ecdsa()); | 134 | EVP_add_digest(EVP_ecdsa()); |
@@ -145,6 +146,6 @@ int SSL_library_init(void) | |||
145 | #endif | 146 | #endif |
146 | /* initialize cipher/digest methods table */ | 147 | /* initialize cipher/digest methods table */ |
147 | ssl_load_ciphers(); | 148 | ssl_load_ciphers(); |
148 | return(1); | 149 | return (1); |
149 | } | 150 | } |
150 | 151 | ||
diff --git a/src/lib/libssl/src/ssl/ssl_asn1.c b/src/lib/libssl/src/ssl/ssl_asn1.c index 38540be1e5..51668db785 100644 --- a/src/lib/libssl/src/ssl/ssl_asn1.c +++ b/src/lib/libssl/src/ssl/ssl_asn1.c | |||
@@ -89,8 +89,7 @@ | |||
89 | #include <openssl/objects.h> | 89 | #include <openssl/objects.h> |
90 | #include <openssl/x509.h> | 90 | #include <openssl/x509.h> |
91 | 91 | ||
92 | typedef struct ssl_session_asn1_st | 92 | typedef struct ssl_session_asn1_st { |
93 | { | ||
94 | ASN1_INTEGER version; | 93 | ASN1_INTEGER version; |
95 | ASN1_INTEGER ssl_version; | 94 | ASN1_INTEGER ssl_version; |
96 | ASN1_OCTET_STRING cipher; | 95 | ASN1_OCTET_STRING cipher; |
@@ -100,7 +99,7 @@ typedef struct ssl_session_asn1_st | |||
100 | ASN1_OCTET_STRING session_id_context; | 99 | ASN1_OCTET_STRING session_id_context; |
101 | ASN1_OCTET_STRING key_arg; | 100 | ASN1_OCTET_STRING key_arg; |
102 | #ifndef OPENSSL_NO_KRB5 | 101 | #ifndef OPENSSL_NO_KRB5 |
103 | ASN1_OCTET_STRING krb5_princ; | 102 | ASN1_OCTET_STRING krb5_princ; |
104 | #endif /* OPENSSL_NO_KRB5 */ | 103 | #endif /* OPENSSL_NO_KRB5 */ |
105 | ASN1_INTEGER time; | 104 | ASN1_INTEGER time; |
106 | ASN1_INTEGER timeout; | 105 | ASN1_INTEGER timeout; |
@@ -117,169 +116,156 @@ typedef struct ssl_session_asn1_st | |||
117 | #ifndef OPENSSL_NO_SRP | 116 | #ifndef OPENSSL_NO_SRP |
118 | ASN1_OCTET_STRING srp_username; | 117 | ASN1_OCTET_STRING srp_username; |
119 | #endif /* OPENSSL_NO_SRP */ | 118 | #endif /* OPENSSL_NO_SRP */ |
120 | } SSL_SESSION_ASN1; | 119 | } SSL_SESSION_ASN1; |
121 | 120 | ||
122 | int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | 121 | int |
123 | { | 122 | i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) |
123 | { | ||
124 | #define LSIZE2 (sizeof(long)*2) | 124 | #define LSIZE2 (sizeof(long)*2) |
125 | int v1=0,v2=0,v3=0,v4=0,v5=0,v7=0,v8=0; | 125 | int v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0, v7 = 0, v8 = 0; |
126 | unsigned char buf[4],ibuf1[LSIZE2],ibuf2[LSIZE2]; | 126 | unsigned char buf[4], ibuf1[LSIZE2], ibuf2[LSIZE2]; |
127 | unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2],ibuf5[LSIZE2]; | 127 | unsigned char ibuf3[LSIZE2], ibuf4[LSIZE2], ibuf5[LSIZE2]; |
128 | #ifndef OPENSSL_NO_TLSEXT | 128 | #ifndef OPENSSL_NO_TLSEXT |
129 | int v6=0,v9=0,v10=0; | 129 | int v6 = 0, v9 = 0, v10 = 0; |
130 | unsigned char ibuf6[LSIZE2]; | 130 | unsigned char ibuf6[LSIZE2]; |
131 | #endif | 131 | #endif |
132 | #ifndef OPENSSL_NO_COMP | 132 | #ifndef OPENSSL_NO_COMP |
133 | unsigned char cbuf; | 133 | unsigned char cbuf; |
134 | int v11=0; | 134 | int v11 = 0; |
135 | #endif | 135 | #endif |
136 | #ifndef OPENSSL_NO_SRP | 136 | #ifndef OPENSSL_NO_SRP |
137 | int v12=0; | 137 | int v12 = 0; |
138 | #endif | 138 | #endif |
139 | long l; | 139 | long l; |
140 | SSL_SESSION_ASN1 a; | 140 | SSL_SESSION_ASN1 a; |
141 | M_ASN1_I2D_vars(in); | 141 | M_ASN1_I2D_vars(in); |
142 | 142 | ||
143 | if ((in == NULL) || ((in->cipher == NULL) && (in->cipher_id == 0))) | 143 | if ((in == NULL) || ((in->cipher == NULL) && (in->cipher_id == 0))) |
144 | return(0); | 144 | return (0); |
145 | 145 | ||
146 | /* Note that I cheat in the following 2 assignments. I know | 146 | /* Note that I cheat in the following 2 assignments. I know |
147 | * that if the ASN1_INTEGER passed to ASN1_INTEGER_set | 147 | * that if the ASN1_INTEGER passed to ASN1_INTEGER_set |
148 | * is > sizeof(long)+1, the buffer will not be re-OPENSSL_malloc()ed. | 148 | * is > sizeof(long)+1, the buffer will not be re-OPENSSL_malloc()ed. |
149 | * This is a bit evil but makes things simple, no dynamic allocation | 149 | * This is a bit evil but makes things simple, no dynamic allocation |
150 | * to clean up :-) */ | 150 | * to clean up :-) */ |
151 | a.version.length=LSIZE2; | 151 | a.version.length = LSIZE2; |
152 | a.version.type=V_ASN1_INTEGER; | 152 | a.version.type = V_ASN1_INTEGER; |
153 | a.version.data=ibuf1; | 153 | a.version.data = ibuf1; |
154 | ASN1_INTEGER_set(&(a.version),SSL_SESSION_ASN1_VERSION); | 154 | ASN1_INTEGER_set(&(a.version), SSL_SESSION_ASN1_VERSION); |
155 | 155 | ||
156 | a.ssl_version.length=LSIZE2; | 156 | a.ssl_version.length = LSIZE2; |
157 | a.ssl_version.type=V_ASN1_INTEGER; | 157 | a.ssl_version.type = V_ASN1_INTEGER; |
158 | a.ssl_version.data=ibuf2; | 158 | a.ssl_version.data = ibuf2; |
159 | ASN1_INTEGER_set(&(a.ssl_version),in->ssl_version); | 159 | ASN1_INTEGER_set(&(a.ssl_version), in->ssl_version); |
160 | 160 | ||
161 | a.cipher.type=V_ASN1_OCTET_STRING; | 161 | a.cipher.type = V_ASN1_OCTET_STRING; |
162 | a.cipher.data=buf; | 162 | a.cipher.data = buf; |
163 | 163 | ||
164 | if (in->cipher == NULL) | 164 | if (in->cipher == NULL) |
165 | l=in->cipher_id; | 165 | l = in->cipher_id; |
166 | else | 166 | else |
167 | l=in->cipher->id; | 167 | l = in->cipher->id; |
168 | if (in->ssl_version == SSL2_VERSION) | 168 | if (in->ssl_version == SSL2_VERSION) { |
169 | { | 169 | a.cipher.length = 3; |
170 | a.cipher.length=3; | 170 | buf[0] = ((unsigned char)(l >> 16L))&0xff; |
171 | buf[0]=((unsigned char)(l>>16L))&0xff; | 171 | buf[1] = ((unsigned char)(l >> 8L))&0xff; |
172 | buf[1]=((unsigned char)(l>> 8L))&0xff; | 172 | buf[2] = ((unsigned char)(l ))&0xff; |
173 | buf[2]=((unsigned char)(l ))&0xff; | 173 | } else { |
174 | } | 174 | a.cipher.length = 2; |
175 | else | 175 | buf[0] = ((unsigned char)(l >> 8L))&0xff; |
176 | { | 176 | buf[1] = ((unsigned char)(l ))&0xff; |
177 | a.cipher.length=2; | 177 | } |
178 | buf[0]=((unsigned char)(l>>8L))&0xff; | ||
179 | buf[1]=((unsigned char)(l ))&0xff; | ||
180 | } | ||
181 | 178 | ||
182 | #ifndef OPENSSL_NO_COMP | 179 | #ifndef OPENSSL_NO_COMP |
183 | if (in->compress_meth) | 180 | if (in->compress_meth) { |
184 | { | ||
185 | cbuf = (unsigned char)in->compress_meth; | 181 | cbuf = (unsigned char)in->compress_meth; |
186 | a.comp_id.length = 1; | 182 | a.comp_id.length = 1; |
187 | a.comp_id.type = V_ASN1_OCTET_STRING; | 183 | a.comp_id.type = V_ASN1_OCTET_STRING; |
188 | a.comp_id.data = &cbuf; | 184 | a.comp_id.data = &cbuf; |
189 | } | 185 | } |
190 | #endif | 186 | #endif |
191 | 187 | ||
192 | a.master_key.length=in->master_key_length; | 188 | a.master_key.length = in->master_key_length; |
193 | a.master_key.type=V_ASN1_OCTET_STRING; | 189 | a.master_key.type = V_ASN1_OCTET_STRING; |
194 | a.master_key.data=in->master_key; | 190 | a.master_key.data = in->master_key; |
195 | 191 | ||
196 | a.session_id.length=in->session_id_length; | 192 | a.session_id.length = in->session_id_length; |
197 | a.session_id.type=V_ASN1_OCTET_STRING; | 193 | a.session_id.type = V_ASN1_OCTET_STRING; |
198 | a.session_id.data=in->session_id; | 194 | a.session_id.data = in->session_id; |
199 | 195 | ||
200 | a.session_id_context.length=in->sid_ctx_length; | 196 | a.session_id_context.length = in->sid_ctx_length; |
201 | a.session_id_context.type=V_ASN1_OCTET_STRING; | 197 | a.session_id_context.type = V_ASN1_OCTET_STRING; |
202 | a.session_id_context.data=in->sid_ctx; | 198 | a.session_id_context.data = in->sid_ctx; |
203 | 199 | ||
204 | a.key_arg.length=in->key_arg_length; | 200 | a.key_arg.length = in->key_arg_length; |
205 | a.key_arg.type=V_ASN1_OCTET_STRING; | 201 | a.key_arg.type = V_ASN1_OCTET_STRING; |
206 | a.key_arg.data=in->key_arg; | 202 | a.key_arg.data = in->key_arg; |
207 | 203 | ||
208 | #ifndef OPENSSL_NO_KRB5 | 204 | #ifndef OPENSSL_NO_KRB5 |
209 | if (in->krb5_client_princ_len) | 205 | if (in->krb5_client_princ_len) { |
210 | { | 206 | a.krb5_princ.length = in->krb5_client_princ_len; |
211 | a.krb5_princ.length=in->krb5_client_princ_len; | 207 | a.krb5_princ.type = V_ASN1_OCTET_STRING; |
212 | a.krb5_princ.type=V_ASN1_OCTET_STRING; | 208 | a.krb5_princ.data = in->krb5_client_princ; |
213 | a.krb5_princ.data=in->krb5_client_princ; | 209 | } |
214 | } | ||
215 | #endif /* OPENSSL_NO_KRB5 */ | 210 | #endif /* OPENSSL_NO_KRB5 */ |
216 | 211 | ||
217 | if (in->time != 0L) | 212 | if (in->time != 0L) { |
218 | { | 213 | a.time.length = LSIZE2; |
219 | a.time.length=LSIZE2; | 214 | a.time.type = V_ASN1_INTEGER; |
220 | a.time.type=V_ASN1_INTEGER; | 215 | a.time.data = ibuf3; |
221 | a.time.data=ibuf3; | 216 | ASN1_INTEGER_set(&(a.time), in->time); |
222 | ASN1_INTEGER_set(&(a.time),in->time); | 217 | } |
223 | } | ||
224 | 218 | ||
225 | if (in->timeout != 0L) | 219 | if (in->timeout != 0L) { |
226 | { | 220 | a.timeout.length = LSIZE2; |
227 | a.timeout.length=LSIZE2; | 221 | a.timeout.type = V_ASN1_INTEGER; |
228 | a.timeout.type=V_ASN1_INTEGER; | 222 | a.timeout.data = ibuf4; |
229 | a.timeout.data=ibuf4; | 223 | ASN1_INTEGER_set(&(a.timeout), in->timeout); |
230 | ASN1_INTEGER_set(&(a.timeout),in->timeout); | 224 | } |
231 | } | ||
232 | 225 | ||
233 | if (in->verify_result != X509_V_OK) | 226 | if (in->verify_result != X509_V_OK) { |
234 | { | 227 | a.verify_result.length = LSIZE2; |
235 | a.verify_result.length=LSIZE2; | 228 | a.verify_result.type = V_ASN1_INTEGER; |
236 | a.verify_result.type=V_ASN1_INTEGER; | 229 | a.verify_result.data = ibuf5; |
237 | a.verify_result.data=ibuf5; | 230 | ASN1_INTEGER_set(&a.verify_result, in->verify_result); |
238 | ASN1_INTEGER_set(&a.verify_result,in->verify_result); | 231 | } |
239 | } | ||
240 | 232 | ||
241 | #ifndef OPENSSL_NO_TLSEXT | 233 | #ifndef OPENSSL_NO_TLSEXT |
242 | if (in->tlsext_hostname) | 234 | if (in->tlsext_hostname) { |
243 | { | 235 | a.tlsext_hostname.length = strlen(in->tlsext_hostname); |
244 | a.tlsext_hostname.length=strlen(in->tlsext_hostname); | 236 | a.tlsext_hostname.type = V_ASN1_OCTET_STRING; |
245 | a.tlsext_hostname.type=V_ASN1_OCTET_STRING; | 237 | a.tlsext_hostname.data = (unsigned char *)in->tlsext_hostname; |
246 | a.tlsext_hostname.data=(unsigned char *)in->tlsext_hostname; | 238 | } |
247 | } | 239 | if (in->tlsext_tick) { |
248 | if (in->tlsext_tick) | 240 | a.tlsext_tick.length = in->tlsext_ticklen; |
249 | { | 241 | a.tlsext_tick.type = V_ASN1_OCTET_STRING; |
250 | a.tlsext_tick.length= in->tlsext_ticklen; | 242 | a.tlsext_tick.data = (unsigned char *)in->tlsext_tick; |
251 | a.tlsext_tick.type=V_ASN1_OCTET_STRING; | 243 | } |
252 | a.tlsext_tick.data=(unsigned char *)in->tlsext_tick; | 244 | if (in->tlsext_tick_lifetime_hint > 0) { |
253 | } | 245 | a.tlsext_tick_lifetime.length = LSIZE2; |
254 | if (in->tlsext_tick_lifetime_hint > 0) | 246 | a.tlsext_tick_lifetime.type = V_ASN1_INTEGER; |
255 | { | 247 | a.tlsext_tick_lifetime.data = ibuf6; |
256 | a.tlsext_tick_lifetime.length=LSIZE2; | 248 | ASN1_INTEGER_set(&a.tlsext_tick_lifetime, in->tlsext_tick_lifetime_hint); |
257 | a.tlsext_tick_lifetime.type=V_ASN1_INTEGER; | 249 | } |
258 | a.tlsext_tick_lifetime.data=ibuf6; | ||
259 | ASN1_INTEGER_set(&a.tlsext_tick_lifetime,in->tlsext_tick_lifetime_hint); | ||
260 | } | ||
261 | #endif /* OPENSSL_NO_TLSEXT */ | 250 | #endif /* OPENSSL_NO_TLSEXT */ |
262 | #ifndef OPENSSL_NO_PSK | 251 | #ifndef OPENSSL_NO_PSK |
263 | if (in->psk_identity_hint) | 252 | if (in->psk_identity_hint) { |
264 | { | 253 | a.psk_identity_hint.length = strlen(in->psk_identity_hint); |
265 | a.psk_identity_hint.length=strlen(in->psk_identity_hint); | 254 | a.psk_identity_hint.type = V_ASN1_OCTET_STRING; |
266 | a.psk_identity_hint.type=V_ASN1_OCTET_STRING; | 255 | a.psk_identity_hint.data = (unsigned char *)(in->psk_identity_hint); |
267 | a.psk_identity_hint.data=(unsigned char *)(in->psk_identity_hint); | 256 | } |
268 | } | 257 | if (in->psk_identity) { |
269 | if (in->psk_identity) | 258 | a.psk_identity.length = strlen(in->psk_identity); |
270 | { | 259 | a.psk_identity.type = V_ASN1_OCTET_STRING; |
271 | a.psk_identity.length=strlen(in->psk_identity); | 260 | a.psk_identity.data = (unsigned char *)(in->psk_identity); |
272 | a.psk_identity.type=V_ASN1_OCTET_STRING; | 261 | } |
273 | a.psk_identity.data=(unsigned char *)(in->psk_identity); | ||
274 | } | ||
275 | #endif /* OPENSSL_NO_PSK */ | 262 | #endif /* OPENSSL_NO_PSK */ |
276 | #ifndef OPENSSL_NO_SRP | 263 | #ifndef OPENSSL_NO_SRP |
277 | if (in->srp_username) | 264 | if (in->srp_username) { |
278 | { | 265 | a.srp_username.length = strlen(in->srp_username); |
279 | a.srp_username.length=strlen(in->srp_username); | 266 | a.srp_username.type = V_ASN1_OCTET_STRING; |
280 | a.srp_username.type=V_ASN1_OCTET_STRING; | 267 | a.srp_username.data = (unsigned char *)(in->srp_username); |
281 | a.srp_username.data=(unsigned char *)(in->srp_username); | 268 | } |
282 | } | ||
283 | #endif /* OPENSSL_NO_SRP */ | 269 | #endif /* OPENSSL_NO_SRP */ |
284 | 270 | ||
285 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); | 271 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); |
@@ -289,41 +275,41 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
289 | M_ASN1_I2D_len(&(a.master_key), i2d_ASN1_OCTET_STRING); | 275 | M_ASN1_I2D_len(&(a.master_key), i2d_ASN1_OCTET_STRING); |
290 | #ifndef OPENSSL_NO_KRB5 | 276 | #ifndef OPENSSL_NO_KRB5 |
291 | if (in->krb5_client_princ_len) | 277 | if (in->krb5_client_princ_len) |
292 | M_ASN1_I2D_len(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); | 278 | M_ASN1_I2D_len(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); |
293 | #endif /* OPENSSL_NO_KRB5 */ | 279 | #endif /* OPENSSL_NO_KRB5 */ |
294 | if (in->key_arg_length > 0) | 280 | if (in->key_arg_length > 0) |
295 | M_ASN1_I2D_len_IMP_opt(&(a.key_arg),i2d_ASN1_OCTET_STRING); | 281 | M_ASN1_I2D_len_IMP_opt(&(a.key_arg), i2d_ASN1_OCTET_STRING); |
296 | if (in->time != 0L) | 282 | if (in->time != 0L) |
297 | M_ASN1_I2D_len_EXP_opt(&(a.time),i2d_ASN1_INTEGER,1,v1); | 283 | M_ASN1_I2D_len_EXP_opt(&(a.time), i2d_ASN1_INTEGER, 1, v1); |
298 | if (in->timeout != 0L) | 284 | if (in->timeout != 0L) |
299 | M_ASN1_I2D_len_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); | 285 | M_ASN1_I2D_len_EXP_opt(&(a.timeout), i2d_ASN1_INTEGER, 2, v2); |
300 | if (in->peer != NULL) | 286 | if (in->peer != NULL) |
301 | M_ASN1_I2D_len_EXP_opt(in->peer,i2d_X509,3,v3); | 287 | M_ASN1_I2D_len_EXP_opt(in->peer, i2d_X509, 3, v3); |
302 | M_ASN1_I2D_len_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4,v4); | 288 | M_ASN1_I2D_len_EXP_opt(&a.session_id_context, i2d_ASN1_OCTET_STRING, 4, v4); |
303 | if (in->verify_result != X509_V_OK) | 289 | if (in->verify_result != X509_V_OK) |
304 | M_ASN1_I2D_len_EXP_opt(&(a.verify_result),i2d_ASN1_INTEGER,5,v5); | 290 | M_ASN1_I2D_len_EXP_opt(&(a.verify_result), i2d_ASN1_INTEGER, 5, v5); |
305 | 291 | ||
306 | #ifndef OPENSSL_NO_TLSEXT | 292 | #ifndef OPENSSL_NO_TLSEXT |
307 | if (in->tlsext_tick_lifetime_hint > 0) | 293 | if (in->tlsext_tick_lifetime_hint > 0) |
308 | M_ASN1_I2D_len_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER,9,v9); | 294 | M_ASN1_I2D_len_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER, 9, v9); |
309 | if (in->tlsext_tick) | 295 | if (in->tlsext_tick) |
310 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING,10,v10); | 296 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING, 10, v10); |
311 | if (in->tlsext_hostname) | 297 | if (in->tlsext_hostname) |
312 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING,6,v6); | 298 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING, 6, v6); |
313 | #ifndef OPENSSL_NO_COMP | 299 | #ifndef OPENSSL_NO_COMP |
314 | if (in->compress_meth) | 300 | if (in->compress_meth) |
315 | M_ASN1_I2D_len_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING,11,v11); | 301 | M_ASN1_I2D_len_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING, 11, v11); |
316 | #endif | 302 | #endif |
317 | #endif /* OPENSSL_NO_TLSEXT */ | 303 | #endif /* OPENSSL_NO_TLSEXT */ |
318 | #ifndef OPENSSL_NO_PSK | 304 | #ifndef OPENSSL_NO_PSK |
319 | if (in->psk_identity_hint) | 305 | if (in->psk_identity_hint) |
320 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING,7,v7); | 306 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING, 7, v7); |
321 | if (in->psk_identity) | 307 | if (in->psk_identity) |
322 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING,8,v8); | 308 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING, 8, v8); |
323 | #endif /* OPENSSL_NO_PSK */ | 309 | #endif /* OPENSSL_NO_PSK */ |
324 | #ifndef OPENSSL_NO_SRP | 310 | #ifndef OPENSSL_NO_SRP |
325 | if (in->srp_username) | 311 | if (in->srp_username) |
326 | M_ASN1_I2D_len_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING,12,v12); | 312 | M_ASN1_I2D_len_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING, 12, v12); |
327 | #endif /* OPENSSL_NO_SRP */ | 313 | #endif /* OPENSSL_NO_SRP */ |
328 | 314 | ||
329 | M_ASN1_I2D_seq_total(); | 315 | M_ASN1_I2D_seq_total(); |
@@ -335,308 +321,296 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
335 | M_ASN1_I2D_put(&(a.master_key), i2d_ASN1_OCTET_STRING); | 321 | M_ASN1_I2D_put(&(a.master_key), i2d_ASN1_OCTET_STRING); |
336 | #ifndef OPENSSL_NO_KRB5 | 322 | #ifndef OPENSSL_NO_KRB5 |
337 | if (in->krb5_client_princ_len) | 323 | if (in->krb5_client_princ_len) |
338 | M_ASN1_I2D_put(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); | 324 | M_ASN1_I2D_put(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); |
339 | #endif /* OPENSSL_NO_KRB5 */ | 325 | #endif /* OPENSSL_NO_KRB5 */ |
340 | if (in->key_arg_length > 0) | 326 | if (in->key_arg_length > 0) |
341 | M_ASN1_I2D_put_IMP_opt(&(a.key_arg),i2d_ASN1_OCTET_STRING,0); | 327 | M_ASN1_I2D_put_IMP_opt(&(a.key_arg), i2d_ASN1_OCTET_STRING, 0); |
342 | if (in->time != 0L) | 328 | if (in->time != 0L) |
343 | M_ASN1_I2D_put_EXP_opt(&(a.time),i2d_ASN1_INTEGER,1,v1); | 329 | M_ASN1_I2D_put_EXP_opt(&(a.time), i2d_ASN1_INTEGER, 1, v1); |
344 | if (in->timeout != 0L) | 330 | if (in->timeout != 0L) |
345 | M_ASN1_I2D_put_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); | 331 | M_ASN1_I2D_put_EXP_opt(&(a.timeout), i2d_ASN1_INTEGER, 2, v2); |
346 | if (in->peer != NULL) | 332 | if (in->peer != NULL) |
347 | M_ASN1_I2D_put_EXP_opt(in->peer,i2d_X509,3,v3); | 333 | M_ASN1_I2D_put_EXP_opt(in->peer, i2d_X509, 3, v3); |
348 | M_ASN1_I2D_put_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4, | 334 | M_ASN1_I2D_put_EXP_opt(&a.session_id_context, i2d_ASN1_OCTET_STRING, 4, |
349 | v4); | 335 | v4); |
350 | if (in->verify_result != X509_V_OK) | 336 | if (in->verify_result != X509_V_OK) |
351 | M_ASN1_I2D_put_EXP_opt(&a.verify_result,i2d_ASN1_INTEGER,5,v5); | 337 | M_ASN1_I2D_put_EXP_opt(&a.verify_result, i2d_ASN1_INTEGER, 5, v5); |
352 | #ifndef OPENSSL_NO_TLSEXT | 338 | #ifndef OPENSSL_NO_TLSEXT |
353 | if (in->tlsext_hostname) | 339 | if (in->tlsext_hostname) |
354 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING,6,v6); | 340 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING, 6, v6); |
355 | #endif /* OPENSSL_NO_TLSEXT */ | 341 | #endif /* OPENSSL_NO_TLSEXT */ |
356 | #ifndef OPENSSL_NO_PSK | 342 | #ifndef OPENSSL_NO_PSK |
357 | if (in->psk_identity_hint) | 343 | if (in->psk_identity_hint) |
358 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING,7,v7); | 344 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING, 7, v7); |
359 | if (in->psk_identity) | 345 | if (in->psk_identity) |
360 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING,8,v8); | 346 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING, 8, v8); |
361 | #endif /* OPENSSL_NO_PSK */ | 347 | #endif /* OPENSSL_NO_PSK */ |
362 | #ifndef OPENSSL_NO_TLSEXT | 348 | #ifndef OPENSSL_NO_TLSEXT |
363 | if (in->tlsext_tick_lifetime_hint > 0) | 349 | if (in->tlsext_tick_lifetime_hint > 0) |
364 | M_ASN1_I2D_put_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER,9,v9); | 350 | M_ASN1_I2D_put_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER, 9, v9); |
365 | if (in->tlsext_tick) | 351 | if (in->tlsext_tick) |
366 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING,10,v10); | 352 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING, 10, v10); |
367 | #endif /* OPENSSL_NO_TLSEXT */ | 353 | #endif /* OPENSSL_NO_TLSEXT */ |
368 | #ifndef OPENSSL_NO_COMP | 354 | #ifndef OPENSSL_NO_COMP |
369 | if (in->compress_meth) | 355 | if (in->compress_meth) |
370 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING,11,v11); | 356 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING, 11, v11); |
371 | #endif | 357 | #endif |
372 | #ifndef OPENSSL_NO_SRP | 358 | #ifndef OPENSSL_NO_SRP |
373 | if (in->srp_username) | 359 | if (in->srp_username) |
374 | M_ASN1_I2D_put_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING,12,v12); | 360 | M_ASN1_I2D_put_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING, 12, v12); |
375 | #endif /* OPENSSL_NO_SRP */ | 361 | #endif /* OPENSSL_NO_SRP */ |
376 | M_ASN1_I2D_finish(); | 362 | M_ASN1_I2D_finish(); |
377 | } | 363 | } |
378 | 364 | ||
379 | SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, | 365 | SSL_SESSION |
380 | long length) | 366 | *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, |
381 | { | 367 | long length) |
382 | int ssl_version=0,i; | 368 | { |
369 | int ssl_version = 0, i; | ||
383 | long id; | 370 | long id; |
384 | ASN1_INTEGER ai,*aip; | 371 | ASN1_INTEGER ai, *aip; |
385 | ASN1_OCTET_STRING os,*osp; | 372 | ASN1_OCTET_STRING os, *osp; |
386 | M_ASN1_D2I_vars(a,SSL_SESSION *,SSL_SESSION_new); | 373 | M_ASN1_D2I_vars(a, SSL_SESSION *, SSL_SESSION_new); |
387 | 374 | ||
388 | aip= &ai; | 375 | aip = &ai; |
389 | osp= &os; | 376 | osp = &os; |
390 | 377 | ||
391 | M_ASN1_D2I_Init(); | 378 | M_ASN1_D2I_Init(); |
392 | M_ASN1_D2I_start_sequence(); | 379 | M_ASN1_D2I_start_sequence(); |
393 | 380 | ||
394 | ai.data=NULL; ai.length=0; | 381 | ai.data = NULL; |
395 | M_ASN1_D2I_get_x(ASN1_INTEGER,aip,d2i_ASN1_INTEGER); | 382 | ai.length = 0; |
396 | if (ai.data != NULL) { OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; } | 383 | M_ASN1_D2I_get_x(ASN1_INTEGER, aip, d2i_ASN1_INTEGER); |
384 | if (ai.data != NULL) { | ||
385 | OPENSSL_free(ai.data); | ||
386 | ai.data = NULL; | ||
387 | ai.length = 0; | ||
388 | } | ||
397 | 389 | ||
398 | /* we don't care about the version right now :-) */ | 390 | /* we don't care about the version right now :-) */ |
399 | M_ASN1_D2I_get_x(ASN1_INTEGER,aip,d2i_ASN1_INTEGER); | 391 | M_ASN1_D2I_get_x(ASN1_INTEGER, aip, d2i_ASN1_INTEGER); |
400 | ssl_version=(int)ASN1_INTEGER_get(aip); | 392 | ssl_version = (int)ASN1_INTEGER_get(aip); |
401 | ret->ssl_version=ssl_version; | 393 | ret->ssl_version = ssl_version; |
402 | if (ai.data != NULL) { OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; } | 394 | if (ai.data != NULL) { |
403 | 395 | OPENSSL_free(ai.data); | |
404 | os.data=NULL; os.length=0; | 396 | ai.data = NULL; |
405 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,osp,d2i_ASN1_OCTET_STRING); | 397 | ai.length = 0; |
406 | if (ssl_version == SSL2_VERSION) | 398 | } |
407 | { | 399 | |
408 | if (os.length != 3) | 400 | os.data = NULL; |
409 | { | 401 | os.length = 0; |
410 | c.error=SSL_R_CIPHER_CODE_WRONG_LENGTH; | 402 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, osp, d2i_ASN1_OCTET_STRING); |
403 | if (ssl_version == SSL2_VERSION) { | ||
404 | if (os.length != 3) { | ||
405 | c.error = SSL_R_CIPHER_CODE_WRONG_LENGTH; | ||
411 | goto err; | 406 | goto err; |
412 | } | ||
413 | id=0x02000000L| | ||
414 | ((unsigned long)os.data[0]<<16L)| | ||
415 | ((unsigned long)os.data[1]<< 8L)| | ||
416 | (unsigned long)os.data[2]; | ||
417 | } | 407 | } |
418 | else if ((ssl_version>>8) >= SSL3_VERSION_MAJOR) | 408 | id = 0x02000000L| |
419 | { | 409 | ((unsigned long)os.data[0]<<16L)| |
420 | if (os.length != 2) | 410 | ((unsigned long)os.data[1]<< 8L)| |
421 | { | 411 | (unsigned long)os.data[2]; |
422 | c.error=SSL_R_CIPHER_CODE_WRONG_LENGTH; | 412 | } else if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) { |
413 | if (os.length != 2) { | ||
414 | c.error = SSL_R_CIPHER_CODE_WRONG_LENGTH; | ||
423 | goto err; | 415 | goto err; |
424 | } | ||
425 | id=0x03000000L| | ||
426 | ((unsigned long)os.data[0]<<8L)| | ||
427 | (unsigned long)os.data[1]; | ||
428 | } | 416 | } |
429 | else | 417 | id = 0x03000000L| |
430 | { | 418 | ((unsigned long)os.data[0]<<8L)| |
431 | c.error=SSL_R_UNKNOWN_SSL_VERSION; | 419 | (unsigned long)os.data[1]; |
420 | } else { | ||
421 | c.error = SSL_R_UNKNOWN_SSL_VERSION; | ||
432 | goto err; | 422 | goto err; |
433 | } | 423 | } |
434 | 424 | ||
435 | ret->cipher=NULL; | 425 | ret->cipher = NULL; |
436 | ret->cipher_id=id; | 426 | ret->cipher_id = id; |
437 | 427 | ||
438 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,osp,d2i_ASN1_OCTET_STRING); | 428 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, osp, d2i_ASN1_OCTET_STRING); |
439 | if ((ssl_version>>8) >= SSL3_VERSION_MAJOR) | 429 | if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) |
440 | i=SSL3_MAX_SSL_SESSION_ID_LENGTH; | 430 | i = SSL3_MAX_SSL_SESSION_ID_LENGTH; |
441 | else /* if (ssl_version>>8 == SSL2_VERSION_MAJOR) */ | 431 | else /* if (ssl_version>>8 == SSL2_VERSION_MAJOR) */ |
442 | i=SSL2_MAX_SSL_SESSION_ID_LENGTH; | 432 | i = SSL2_MAX_SSL_SESSION_ID_LENGTH; |
443 | 433 | ||
444 | if (os.length > i) | 434 | if (os.length > i) |
445 | os.length = i; | 435 | os.length = i; |
446 | if (os.length > (int)sizeof(ret->session_id)) /* can't happen */ | 436 | if (os.length > (int)sizeof(ret->session_id)) /* can't happen */ |
447 | os.length = sizeof(ret->session_id); | 437 | os.length = sizeof(ret->session_id); |
448 | 438 | ||
449 | ret->session_id_length=os.length; | 439 | ret->session_id_length = os.length; |
450 | OPENSSL_assert(os.length <= (int)sizeof(ret->session_id)); | 440 | OPENSSL_assert(os.length <= (int)sizeof(ret->session_id)); |
451 | memcpy(ret->session_id,os.data,os.length); | 441 | memcpy(ret->session_id, os.data, os.length); |
452 | 442 | ||
453 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,osp,d2i_ASN1_OCTET_STRING); | 443 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, osp, d2i_ASN1_OCTET_STRING); |
454 | if (os.length > SSL_MAX_MASTER_KEY_LENGTH) | 444 | if (os.length > SSL_MAX_MASTER_KEY_LENGTH) |
455 | ret->master_key_length=SSL_MAX_MASTER_KEY_LENGTH; | 445 | ret->master_key_length = SSL_MAX_MASTER_KEY_LENGTH; |
456 | else | 446 | else |
457 | ret->master_key_length=os.length; | 447 | ret->master_key_length = os.length; |
458 | memcpy(ret->master_key,os.data,ret->master_key_length); | 448 | memcpy(ret->master_key, os.data, ret->master_key_length); |
459 | 449 | ||
460 | os.length=0; | 450 | os.length = 0; |
461 | 451 | ||
462 | #ifndef OPENSSL_NO_KRB5 | 452 | #ifndef OPENSSL_NO_KRB5 |
463 | os.length=0; | 453 | os.length = 0; |
464 | M_ASN1_D2I_get_opt(osp,d2i_ASN1_OCTET_STRING,V_ASN1_OCTET_STRING); | 454 | M_ASN1_D2I_get_opt(osp, d2i_ASN1_OCTET_STRING, V_ASN1_OCTET_STRING); |
465 | if (os.data) | 455 | if (os.data) { |
466 | { | 456 | if (os.length > SSL_MAX_KRB5_PRINCIPAL_LENGTH) |
467 | if (os.length > SSL_MAX_KRB5_PRINCIPAL_LENGTH) | 457 | ret->krb5_client_princ_len = 0; |
468 | ret->krb5_client_princ_len=0; | ||
469 | else | 458 | else |
470 | ret->krb5_client_princ_len=os.length; | 459 | ret->krb5_client_princ_len = os.length; |
471 | memcpy(ret->krb5_client_princ,os.data,ret->krb5_client_princ_len); | 460 | memcpy(ret->krb5_client_princ, os.data, ret->krb5_client_princ_len); |
472 | OPENSSL_free(os.data); | 461 | OPENSSL_free(os.data); |
473 | os.data = NULL; | 462 | os.data = NULL; |
474 | os.length = 0; | 463 | os.length = 0; |
475 | } | 464 | } else |
476 | else | 465 | ret->krb5_client_princ_len = 0; |
477 | ret->krb5_client_princ_len=0; | ||
478 | #endif /* OPENSSL_NO_KRB5 */ | 466 | #endif /* OPENSSL_NO_KRB5 */ |
479 | 467 | ||
480 | M_ASN1_D2I_get_IMP_opt(osp,d2i_ASN1_OCTET_STRING,0,V_ASN1_OCTET_STRING); | 468 | M_ASN1_D2I_get_IMP_opt(osp, d2i_ASN1_OCTET_STRING, 0, V_ASN1_OCTET_STRING); |
481 | if (os.length > SSL_MAX_KEY_ARG_LENGTH) | 469 | if (os.length > SSL_MAX_KEY_ARG_LENGTH) |
482 | ret->key_arg_length=SSL_MAX_KEY_ARG_LENGTH; | 470 | ret->key_arg_length = SSL_MAX_KEY_ARG_LENGTH; |
483 | else | 471 | else |
484 | ret->key_arg_length=os.length; | 472 | ret->key_arg_length = os.length; |
485 | memcpy(ret->key_arg,os.data,ret->key_arg_length); | 473 | memcpy(ret->key_arg, os.data, ret->key_arg_length); |
486 | if (os.data != NULL) OPENSSL_free(os.data); | 474 | if (os.data != NULL) |
487 | 475 | OPENSSL_free(os.data); | |
488 | ai.length=0; | ||
489 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,1); | ||
490 | if (ai.data != NULL) | ||
491 | { | ||
492 | ret->time=ASN1_INTEGER_get(aip); | ||
493 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | ||
494 | } | ||
495 | else | ||
496 | ret->time=(unsigned long)time(NULL); | ||
497 | |||
498 | ai.length=0; | ||
499 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,2); | ||
500 | if (ai.data != NULL) | ||
501 | { | ||
502 | ret->timeout=ASN1_INTEGER_get(aip); | ||
503 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | ||
504 | } | ||
505 | else | ||
506 | ret->timeout=3; | ||
507 | 476 | ||
508 | if (ret->peer != NULL) | 477 | ai.length = 0; |
509 | { | 478 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 1); |
479 | if (ai.data != NULL) { | ||
480 | ret->time = ASN1_INTEGER_get(aip); | ||
481 | OPENSSL_free(ai.data); | ||
482 | ai.data = NULL; | ||
483 | ai.length = 0; | ||
484 | } else | ||
485 | ret->time = (unsigned long)time(NULL); | ||
486 | |||
487 | ai.length = 0; | ||
488 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 2); | ||
489 | if (ai.data != NULL) { | ||
490 | ret->timeout = ASN1_INTEGER_get(aip); | ||
491 | OPENSSL_free(ai.data); | ||
492 | ai.data = NULL; | ||
493 | ai.length = 0; | ||
494 | } else | ||
495 | ret->timeout = 3; | ||
496 | |||
497 | if (ret->peer != NULL) { | ||
510 | X509_free(ret->peer); | 498 | X509_free(ret->peer); |
511 | ret->peer=NULL; | 499 | ret->peer = NULL; |
512 | } | 500 | } |
513 | M_ASN1_D2I_get_EXP_opt(ret->peer,d2i_X509,3); | 501 | M_ASN1_D2I_get_EXP_opt(ret->peer, d2i_X509, 3); |
514 | 502 | ||
515 | os.length=0; | 503 | os.length = 0; |
516 | os.data=NULL; | 504 | os.data = NULL; |
517 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,4); | 505 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 4); |
518 | 506 | ||
519 | if(os.data != NULL) | 507 | if (os.data != NULL) { |
520 | { | 508 | if (os.length > SSL_MAX_SID_CTX_LENGTH) { |
521 | if (os.length > SSL_MAX_SID_CTX_LENGTH) | 509 | c.error = SSL_R_BAD_LENGTH; |
522 | { | 510 | goto err; |
523 | c.error=SSL_R_BAD_LENGTH; | 511 | } else { |
524 | goto err; | 512 | ret->sid_ctx_length = os.length; |
525 | } | 513 | memcpy(ret->sid_ctx, os.data, os.length); |
526 | else | ||
527 | { | ||
528 | ret->sid_ctx_length=os.length; | ||
529 | memcpy(ret->sid_ctx,os.data,os.length); | ||
530 | } | ||
531 | OPENSSL_free(os.data); os.data=NULL; os.length=0; | ||
532 | } | ||
533 | else | ||
534 | ret->sid_ctx_length=0; | ||
535 | |||
536 | ai.length=0; | ||
537 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,5); | ||
538 | if (ai.data != NULL) | ||
539 | { | ||
540 | ret->verify_result=ASN1_INTEGER_get(aip); | ||
541 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | ||
542 | } | 514 | } |
543 | else | 515 | OPENSSL_free(os.data); |
544 | ret->verify_result=X509_V_OK; | 516 | os.data = NULL; |
517 | os.length = 0; | ||
518 | } else | ||
519 | ret->sid_ctx_length = 0; | ||
520 | |||
521 | ai.length = 0; | ||
522 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 5); | ||
523 | if (ai.data != NULL) { | ||
524 | ret->verify_result = ASN1_INTEGER_get(aip); | ||
525 | OPENSSL_free(ai.data); | ||
526 | ai.data = NULL; | ||
527 | ai.length = 0; | ||
528 | } else | ||
529 | ret->verify_result = X509_V_OK; | ||
545 | 530 | ||
546 | #ifndef OPENSSL_NO_TLSEXT | 531 | #ifndef OPENSSL_NO_TLSEXT |
547 | os.length=0; | 532 | os.length = 0; |
548 | os.data=NULL; | 533 | os.data = NULL; |
549 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,6); | 534 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 6); |
550 | if (os.data) | 535 | if (os.data) { |
551 | { | ||
552 | ret->tlsext_hostname = BUF_strndup((char *)os.data, os.length); | 536 | ret->tlsext_hostname = BUF_strndup((char *)os.data, os.length); |
553 | OPENSSL_free(os.data); | 537 | OPENSSL_free(os.data); |
554 | os.data = NULL; | 538 | os.data = NULL; |
555 | os.length = 0; | 539 | os.length = 0; |
556 | } | 540 | } else |
557 | else | 541 | ret->tlsext_hostname = NULL; |
558 | ret->tlsext_hostname=NULL; | ||
559 | #endif /* OPENSSL_NO_TLSEXT */ | 542 | #endif /* OPENSSL_NO_TLSEXT */ |
560 | 543 | ||
561 | #ifndef OPENSSL_NO_PSK | 544 | #ifndef OPENSSL_NO_PSK |
562 | os.length=0; | 545 | os.length = 0; |
563 | os.data=NULL; | 546 | os.data = NULL; |
564 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,7); | 547 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 7); |
565 | if (os.data) | 548 | if (os.data) { |
566 | { | ||
567 | ret->psk_identity_hint = BUF_strndup((char *)os.data, os.length); | 549 | ret->psk_identity_hint = BUF_strndup((char *)os.data, os.length); |
568 | OPENSSL_free(os.data); | 550 | OPENSSL_free(os.data); |
569 | os.data = NULL; | 551 | os.data = NULL; |
570 | os.length = 0; | 552 | os.length = 0; |
571 | } | 553 | } else |
572 | else | 554 | ret->psk_identity_hint = NULL; |
573 | ret->psk_identity_hint=NULL; | ||
574 | 555 | ||
575 | os.length=0; | 556 | os.length = 0; |
576 | os.data=NULL; | 557 | os.data = NULL; |
577 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,8); | 558 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 8); |
578 | if (os.data) | 559 | if (os.data) { |
579 | { | ||
580 | ret->psk_identity = BUF_strndup((char *)os.data, os.length); | 560 | ret->psk_identity = BUF_strndup((char *)os.data, os.length); |
581 | OPENSSL_free(os.data); | 561 | OPENSSL_free(os.data); |
582 | os.data = NULL; | 562 | os.data = NULL; |
583 | os.length = 0; | 563 | os.length = 0; |
584 | } | 564 | } else |
585 | else | 565 | ret->psk_identity = NULL; |
586 | ret->psk_identity=NULL; | ||
587 | #endif /* OPENSSL_NO_PSK */ | 566 | #endif /* OPENSSL_NO_PSK */ |
588 | 567 | ||
589 | #ifndef OPENSSL_NO_TLSEXT | 568 | #ifndef OPENSSL_NO_TLSEXT |
590 | ai.length=0; | 569 | ai.length = 0; |
591 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,9); | 570 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 9); |
592 | if (ai.data != NULL) | 571 | if (ai.data != NULL) { |
593 | { | 572 | ret->tlsext_tick_lifetime_hint = ASN1_INTEGER_get(aip); |
594 | ret->tlsext_tick_lifetime_hint=ASN1_INTEGER_get(aip); | 573 | OPENSSL_free(ai.data); |
595 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | 574 | ai.data = NULL; |
596 | } | 575 | ai.length = 0; |
597 | else if (ret->tlsext_ticklen && ret->session_id_length) | 576 | } else if (ret->tlsext_ticklen && ret->session_id_length) |
598 | ret->tlsext_tick_lifetime_hint = -1; | 577 | ret->tlsext_tick_lifetime_hint = -1; |
599 | else | 578 | else |
600 | ret->tlsext_tick_lifetime_hint=0; | 579 | ret->tlsext_tick_lifetime_hint = 0; |
601 | os.length=0; | 580 | os.length = 0; |
602 | os.data=NULL; | 581 | os.data = NULL; |
603 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,10); | 582 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 10); |
604 | if (os.data) | 583 | if (os.data) { |
605 | { | ||
606 | ret->tlsext_tick = os.data; | 584 | ret->tlsext_tick = os.data; |
607 | ret->tlsext_ticklen = os.length; | 585 | ret->tlsext_ticklen = os.length; |
608 | os.data = NULL; | 586 | os.data = NULL; |
609 | os.length = 0; | 587 | os.length = 0; |
610 | } | 588 | } else |
611 | else | 589 | ret->tlsext_tick = NULL; |
612 | ret->tlsext_tick=NULL; | ||
613 | #endif /* OPENSSL_NO_TLSEXT */ | 590 | #endif /* OPENSSL_NO_TLSEXT */ |
614 | #ifndef OPENSSL_NO_COMP | 591 | #ifndef OPENSSL_NO_COMP |
615 | os.length=0; | 592 | os.length = 0; |
616 | os.data=NULL; | 593 | os.data = NULL; |
617 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,11); | 594 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 11); |
618 | if (os.data) | 595 | if (os.data) { |
619 | { | ||
620 | ret->compress_meth = os.data[0]; | 596 | ret->compress_meth = os.data[0]; |
621 | OPENSSL_free(os.data); | 597 | OPENSSL_free(os.data); |
622 | os.data = NULL; | 598 | os.data = NULL; |
623 | } | 599 | } |
624 | #endif | 600 | #endif |
625 | 601 | ||
626 | #ifndef OPENSSL_NO_SRP | 602 | #ifndef OPENSSL_NO_SRP |
627 | os.length=0; | 603 | os.length = 0; |
628 | os.data=NULL; | 604 | os.data = NULL; |
629 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,12); | 605 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 12); |
630 | if (os.data) | 606 | if (os.data) { |
631 | { | ||
632 | ret->srp_username = BUF_strndup((char *)os.data, os.length); | 607 | ret->srp_username = BUF_strndup((char *)os.data, os.length); |
633 | OPENSSL_free(os.data); | 608 | OPENSSL_free(os.data); |
634 | os.data = NULL; | 609 | os.data = NULL; |
635 | os.length = 0; | 610 | os.length = 0; |
636 | } | 611 | } else |
637 | else | 612 | ret->srp_username = NULL; |
638 | ret->srp_username=NULL; | ||
639 | #endif /* OPENSSL_NO_SRP */ | 613 | #endif /* OPENSSL_NO_SRP */ |
640 | 614 | ||
641 | M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION); | 615 | M_ASN1_D2I_Finish(a, SSL_SESSION_free, SSL_F_D2I_SSL_SESSION); |
642 | } | 616 | } |
diff --git a/src/lib/libssl/src/ssl/ssl_cert.c b/src/lib/libssl/src/ssl/ssl_cert.c index 1aaddc351f..79eb4ee031 100644 --- a/src/lib/libssl/src/ssl/ssl_cert.c +++ b/src/lib/libssl/src/ssl/ssl_cert.c | |||
@@ -132,36 +132,36 @@ | |||
132 | #include <openssl/bn.h> | 132 | #include <openssl/bn.h> |
133 | #include "ssl_locl.h" | 133 | #include "ssl_locl.h" |
134 | 134 | ||
135 | int SSL_get_ex_data_X509_STORE_CTX_idx(void) | 135 | int |
136 | { | 136 | SSL_get_ex_data_X509_STORE_CTX_idx(void) |
137 | static volatile int ssl_x509_store_ctx_idx= -1; | 137 | { |
138 | static volatile int ssl_x509_store_ctx_idx = -1; | ||
138 | int got_write_lock = 0; | 139 | int got_write_lock = 0; |
139 | 140 | ||
140 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 141 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
141 | 142 | ||
142 | if (ssl_x509_store_ctx_idx < 0) | 143 | if (ssl_x509_store_ctx_idx < 0) { |
143 | { | ||
144 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 144 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
145 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 145 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
146 | got_write_lock = 1; | 146 | got_write_lock = 1; |
147 | 147 | ||
148 | if (ssl_x509_store_ctx_idx < 0) | 148 | if (ssl_x509_store_ctx_idx < 0) { |
149 | { | 149 | ssl_x509_store_ctx_idx = X509_STORE_CTX_get_ex_new_index( |
150 | ssl_x509_store_ctx_idx=X509_STORE_CTX_get_ex_new_index( | 150 | 0, "SSL for verify callback", NULL, NULL, NULL); |
151 | 0,"SSL for verify callback",NULL,NULL,NULL); | ||
152 | } | ||
153 | } | 151 | } |
152 | } | ||
154 | 153 | ||
155 | if (got_write_lock) | 154 | if (got_write_lock) |
156 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 155 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
157 | else | 156 | else |
158 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 157 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
159 | 158 | ||
160 | return ssl_x509_store_ctx_idx; | 159 | return ssl_x509_store_ctx_idx; |
161 | } | 160 | } |
162 | 161 | ||
163 | static void ssl_cert_set_default_md(CERT *cert) | 162 | static void |
164 | { | 163 | ssl_cert_set_default_md(CERT *cert) |
164 | { | ||
165 | /* Set digest values to defaults */ | 165 | /* Set digest values to defaults */ |
166 | #ifndef OPENSSL_NO_DSA | 166 | #ifndef OPENSSL_NO_DSA |
167 | cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1(); | 167 | cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1(); |
@@ -173,37 +173,37 @@ static void ssl_cert_set_default_md(CERT *cert) | |||
173 | #ifndef OPENSSL_NO_ECDSA | 173 | #ifndef OPENSSL_NO_ECDSA |
174 | cert->pkeys[SSL_PKEY_ECC].digest = EVP_sha1(); | 174 | cert->pkeys[SSL_PKEY_ECC].digest = EVP_sha1(); |
175 | #endif | 175 | #endif |
176 | } | 176 | } |
177 | 177 | ||
178 | CERT *ssl_cert_new(void) | 178 | CERT |
179 | { | 179 | *ssl_cert_new(void) |
180 | { | ||
180 | CERT *ret; | 181 | CERT *ret; |
181 | 182 | ||
182 | ret=(CERT *)OPENSSL_malloc(sizeof(CERT)); | 183 | ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); |
183 | if (ret == NULL) | 184 | if (ret == NULL) { |
184 | { | 185 | SSLerr(SSL_F_SSL_CERT_NEW, ERR_R_MALLOC_FAILURE); |
185 | SSLerr(SSL_F_SSL_CERT_NEW,ERR_R_MALLOC_FAILURE); | 186 | return (NULL); |
186 | return(NULL); | 187 | } |
187 | } | 188 | memset(ret, 0, sizeof(CERT)); |
188 | memset(ret,0,sizeof(CERT)); | ||
189 | 189 | ||
190 | ret->key= &(ret->pkeys[SSL_PKEY_RSA_ENC]); | 190 | ret->key = &(ret->pkeys[SSL_PKEY_RSA_ENC]); |
191 | ret->references=1; | 191 | ret->references = 1; |
192 | ssl_cert_set_default_md(ret); | 192 | ssl_cert_set_default_md(ret); |
193 | return(ret); | 193 | return (ret); |
194 | } | 194 | } |
195 | 195 | ||
196 | CERT *ssl_cert_dup(CERT *cert) | 196 | CERT |
197 | { | 197 | *ssl_cert_dup(CERT *cert) |
198 | { | ||
198 | CERT *ret; | 199 | CERT *ret; |
199 | int i; | 200 | int i; |
200 | 201 | ||
201 | ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); | 202 | ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); |
202 | if (ret == NULL) | 203 | if (ret == NULL) { |
203 | { | ||
204 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE); | 204 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE); |
205 | return(NULL); | 205 | return (NULL); |
206 | } | 206 | } |
207 | 207 | ||
208 | memset(ret, 0, sizeof(CERT)); | 208 | memset(ret, 0, sizeof(CERT)); |
209 | 209 | ||
@@ -218,77 +218,64 @@ CERT *ssl_cert_dup(CERT *cert) | |||
218 | ret->export_mask_a = cert->export_mask_a; | 218 | ret->export_mask_a = cert->export_mask_a; |
219 | 219 | ||
220 | #ifndef OPENSSL_NO_RSA | 220 | #ifndef OPENSSL_NO_RSA |
221 | if (cert->rsa_tmp != NULL) | 221 | if (cert->rsa_tmp != NULL) { |
222 | { | ||
223 | RSA_up_ref(cert->rsa_tmp); | 222 | RSA_up_ref(cert->rsa_tmp); |
224 | ret->rsa_tmp = cert->rsa_tmp; | 223 | ret->rsa_tmp = cert->rsa_tmp; |
225 | } | 224 | } |
226 | ret->rsa_tmp_cb = cert->rsa_tmp_cb; | 225 | ret->rsa_tmp_cb = cert->rsa_tmp_cb; |
227 | #endif | 226 | #endif |
228 | 227 | ||
229 | #ifndef OPENSSL_NO_DH | 228 | #ifndef OPENSSL_NO_DH |
230 | if (cert->dh_tmp != NULL) | 229 | if (cert->dh_tmp != NULL) { |
231 | { | ||
232 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); | 230 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); |
233 | if (ret->dh_tmp == NULL) | 231 | if (ret->dh_tmp == NULL) { |
234 | { | ||
235 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_DH_LIB); | 232 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_DH_LIB); |
236 | goto err; | 233 | goto err; |
237 | } | 234 | } |
238 | if (cert->dh_tmp->priv_key) | 235 | if (cert->dh_tmp->priv_key) { |
239 | { | ||
240 | BIGNUM *b = BN_dup(cert->dh_tmp->priv_key); | 236 | BIGNUM *b = BN_dup(cert->dh_tmp->priv_key); |
241 | if (!b) | 237 | if (!b) { |
242 | { | ||
243 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); | 238 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); |
244 | goto err; | 239 | goto err; |
245 | } | ||
246 | ret->dh_tmp->priv_key = b; | ||
247 | } | 240 | } |
248 | if (cert->dh_tmp->pub_key) | 241 | ret->dh_tmp->priv_key = b; |
249 | { | 242 | } |
243 | if (cert->dh_tmp->pub_key) { | ||
250 | BIGNUM *b = BN_dup(cert->dh_tmp->pub_key); | 244 | BIGNUM *b = BN_dup(cert->dh_tmp->pub_key); |
251 | if (!b) | 245 | if (!b) { |
252 | { | ||
253 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); | 246 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); |
254 | goto err; | 247 | goto err; |
255 | } | ||
256 | ret->dh_tmp->pub_key = b; | ||
257 | } | 248 | } |
249 | ret->dh_tmp->pub_key = b; | ||
258 | } | 250 | } |
251 | } | ||
259 | ret->dh_tmp_cb = cert->dh_tmp_cb; | 252 | ret->dh_tmp_cb = cert->dh_tmp_cb; |
260 | #endif | 253 | #endif |
261 | 254 | ||
262 | #ifndef OPENSSL_NO_ECDH | 255 | #ifndef OPENSSL_NO_ECDH |
263 | if (cert->ecdh_tmp) | 256 | if (cert->ecdh_tmp) { |
264 | { | ||
265 | ret->ecdh_tmp = EC_KEY_dup(cert->ecdh_tmp); | 257 | ret->ecdh_tmp = EC_KEY_dup(cert->ecdh_tmp); |
266 | if (ret->ecdh_tmp == NULL) | 258 | if (ret->ecdh_tmp == NULL) { |
267 | { | ||
268 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_EC_LIB); | 259 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_EC_LIB); |
269 | goto err; | 260 | goto err; |
270 | } | ||
271 | } | 261 | } |
262 | } | ||
272 | ret->ecdh_tmp_cb = cert->ecdh_tmp_cb; | 263 | ret->ecdh_tmp_cb = cert->ecdh_tmp_cb; |
273 | #endif | 264 | #endif |
274 | 265 | ||
275 | for (i = 0; i < SSL_PKEY_NUM; i++) | 266 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
276 | { | 267 | if (cert->pkeys[i].x509 != NULL) { |
277 | if (cert->pkeys[i].x509 != NULL) | ||
278 | { | ||
279 | ret->pkeys[i].x509 = cert->pkeys[i].x509; | 268 | ret->pkeys[i].x509 = cert->pkeys[i].x509; |
280 | CRYPTO_add(&ret->pkeys[i].x509->references, 1, | 269 | CRYPTO_add(&ret->pkeys[i].x509->references, 1, |
281 | CRYPTO_LOCK_X509); | 270 | CRYPTO_LOCK_X509); |
282 | } | 271 | } |
283 | 272 | ||
284 | if (cert->pkeys[i].privatekey != NULL) | 273 | if (cert->pkeys[i].privatekey != NULL) { |
285 | { | ||
286 | ret->pkeys[i].privatekey = cert->pkeys[i].privatekey; | 274 | ret->pkeys[i].privatekey = cert->pkeys[i].privatekey; |
287 | CRYPTO_add(&ret->pkeys[i].privatekey->references, 1, | 275 | CRYPTO_add(&ret->pkeys[i].privatekey->references, 1, |
288 | CRYPTO_LOCK_EVP_PKEY); | 276 | CRYPTO_LOCK_EVP_PKEY); |
289 | 277 | ||
290 | switch(i) | 278 | switch (i) { |
291 | { | ||
292 | /* If there was anything special to do for | 279 | /* If there was anything special to do for |
293 | * certain types of keys, we'd do it here. | 280 | * certain types of keys, we'd do it here. |
294 | * (Nothing at the moment, I think.) */ | 281 | * (Nothing at the moment, I think.) */ |
@@ -297,11 +284,11 @@ CERT *ssl_cert_dup(CERT *cert) | |||
297 | case SSL_PKEY_RSA_SIGN: | 284 | case SSL_PKEY_RSA_SIGN: |
298 | /* We have an RSA key. */ | 285 | /* We have an RSA key. */ |
299 | break; | 286 | break; |
300 | 287 | ||
301 | case SSL_PKEY_DSA_SIGN: | 288 | case SSL_PKEY_DSA_SIGN: |
302 | /* We have a DSA key. */ | 289 | /* We have a DSA key. */ |
303 | break; | 290 | break; |
304 | 291 | ||
305 | case SSL_PKEY_DH_RSA: | 292 | case SSL_PKEY_DH_RSA: |
306 | case SSL_PKEY_DH_DSA: | 293 | case SSL_PKEY_DH_DSA: |
307 | /* We have a DH key. */ | 294 | /* We have a DH key. */ |
@@ -314,21 +301,21 @@ CERT *ssl_cert_dup(CERT *cert) | |||
314 | default: | 301 | default: |
315 | /* Can't happen. */ | 302 | /* Can't happen. */ |
316 | SSLerr(SSL_F_SSL_CERT_DUP, SSL_R_LIBRARY_BUG); | 303 | SSLerr(SSL_F_SSL_CERT_DUP, SSL_R_LIBRARY_BUG); |
317 | } | ||
318 | } | 304 | } |
319 | } | 305 | } |
320 | 306 | } | |
307 | |||
321 | /* ret->extra_certs *should* exist, but currently the own certificate | 308 | /* ret->extra_certs *should* exist, but currently the own certificate |
322 | * chain is held inside SSL_CTX */ | 309 | * chain is held inside SSL_CTX */ |
323 | 310 | ||
324 | ret->references=1; | 311 | ret->references = 1; |
325 | /* Set digests to defaults. NB: we don't copy existing values as they | 312 | /* Set digests to defaults. NB: we don't copy existing values as they |
326 | * will be set during handshake. | 313 | * will be set during handshake. |
327 | */ | 314 | */ |
328 | ssl_cert_set_default_md(ret); | 315 | ssl_cert_set_default_md(ret); |
329 | 316 | ||
330 | return(ret); | 317 | return (ret); |
331 | 318 | ||
332 | #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_ECDH) | 319 | #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_ECDH) |
333 | err: | 320 | err: |
334 | #endif | 321 | #endif |
@@ -345,50 +332,52 @@ err: | |||
345 | EC_KEY_free(ret->ecdh_tmp); | 332 | EC_KEY_free(ret->ecdh_tmp); |
346 | #endif | 333 | #endif |
347 | 334 | ||
348 | for (i = 0; i < SSL_PKEY_NUM; i++) | 335 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
349 | { | ||
350 | if (ret->pkeys[i].x509 != NULL) | 336 | if (ret->pkeys[i].x509 != NULL) |
351 | X509_free(ret->pkeys[i].x509); | 337 | X509_free(ret->pkeys[i].x509); |
352 | if (ret->pkeys[i].privatekey != NULL) | 338 | if (ret->pkeys[i].privatekey != NULL) |
353 | EVP_PKEY_free(ret->pkeys[i].privatekey); | 339 | EVP_PKEY_free(ret->pkeys[i].privatekey); |
354 | } | 340 | } |
355 | 341 | ||
356 | return NULL; | 342 | return NULL; |
357 | } | 343 | } |
358 | 344 | ||
359 | 345 | ||
360 | void ssl_cert_free(CERT *c) | 346 | void |
361 | { | 347 | ssl_cert_free(CERT *c) |
348 | { | ||
362 | int i; | 349 | int i; |
363 | 350 | ||
364 | if(c == NULL) | 351 | if (c == NULL) |
365 | return; | 352 | return; |
366 | 353 | ||
367 | i=CRYPTO_add(&c->references,-1,CRYPTO_LOCK_SSL_CERT); | 354 | i = CRYPTO_add(&c->references, -1, CRYPTO_LOCK_SSL_CERT); |
368 | #ifdef REF_PRINT | 355 | #ifdef REF_PRINT |
369 | REF_PRINT("CERT",c); | 356 | REF_PRINT("CERT", c); |
370 | #endif | 357 | #endif |
371 | if (i > 0) return; | 358 | if (i > 0) |
359 | return; | ||
372 | #ifdef REF_CHECK | 360 | #ifdef REF_CHECK |
373 | if (i < 0) | 361 | if (i < 0) { |
374 | { | 362 | fprintf(stderr, "ssl_cert_free, bad reference count\n"); |
375 | fprintf(stderr,"ssl_cert_free, bad reference count\n"); | ||
376 | abort(); /* ok */ | 363 | abort(); /* ok */ |
377 | } | 364 | } |
378 | #endif | 365 | #endif |
379 | 366 | ||
380 | #ifndef OPENSSL_NO_RSA | 367 | #ifndef OPENSSL_NO_RSA |
381 | if (c->rsa_tmp) RSA_free(c->rsa_tmp); | 368 | if (c->rsa_tmp) |
369 | RSA_free(c->rsa_tmp); | ||
382 | #endif | 370 | #endif |
383 | #ifndef OPENSSL_NO_DH | 371 | #ifndef OPENSSL_NO_DH |
384 | if (c->dh_tmp) DH_free(c->dh_tmp); | 372 | if (c->dh_tmp) |
373 | DH_free(c->dh_tmp); | ||
385 | #endif | 374 | #endif |
386 | #ifndef OPENSSL_NO_ECDH | 375 | #ifndef OPENSSL_NO_ECDH |
387 | if (c->ecdh_tmp) EC_KEY_free(c->ecdh_tmp); | 376 | if (c->ecdh_tmp) |
377 | EC_KEY_free(c->ecdh_tmp); | ||
388 | #endif | 378 | #endif |
389 | 379 | ||
390 | for (i=0; i<SSL_PKEY_NUM; i++) | 380 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
391 | { | ||
392 | if (c->pkeys[i].x509 != NULL) | 381 | if (c->pkeys[i].x509 != NULL) |
393 | X509_free(c->pkeys[i].x509); | 382 | X509_free(c->pkeys[i].x509); |
394 | if (c->pkeys[i].privatekey != NULL) | 383 | if (c->pkeys[i].privatekey != NULL) |
@@ -397,12 +386,13 @@ void ssl_cert_free(CERT *c) | |||
397 | if (c->pkeys[i].publickey != NULL) | 386 | if (c->pkeys[i].publickey != NULL) |
398 | EVP_PKEY_free(c->pkeys[i].publickey); | 387 | EVP_PKEY_free(c->pkeys[i].publickey); |
399 | #endif | 388 | #endif |
400 | } | ||
401 | OPENSSL_free(c); | ||
402 | } | 389 | } |
390 | OPENSSL_free(c); | ||
391 | } | ||
403 | 392 | ||
404 | int ssl_cert_inst(CERT **o) | 393 | int |
405 | { | 394 | ssl_cert_inst(CERT **o) |
395 | { | ||
406 | /* Create a CERT if there isn't already one | 396 | /* Create a CERT if there isn't already one |
407 | * (which cannot really happen, as it is initially created in | 397 | * (which cannot really happen, as it is initially created in |
408 | * SSL_CTX_new; but the earlier code usually allows for that one | 398 | * SSL_CTX_new; but the earlier code usually allows for that one |
@@ -412,44 +402,42 @@ int ssl_cert_inst(CERT **o) | |||
412 | * s->cert being NULL, otherwise we could do without the | 402 | * s->cert being NULL, otherwise we could do without the |
413 | * initialization in SSL_CTX_new). | 403 | * initialization in SSL_CTX_new). |
414 | */ | 404 | */ |
415 | 405 | ||
416 | if (o == NULL) | 406 | if (o == NULL) { |
417 | { | ||
418 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_PASSED_NULL_PARAMETER); | 407 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_PASSED_NULL_PARAMETER); |
419 | return(0); | 408 | return (0); |
420 | } | 409 | } |
421 | if (*o == NULL) | 410 | if (*o == NULL) { |
422 | { | 411 | if ((*o = ssl_cert_new()) == NULL) { |
423 | if ((*o = ssl_cert_new()) == NULL) | ||
424 | { | ||
425 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_MALLOC_FAILURE); | 412 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_MALLOC_FAILURE); |
426 | return(0); | 413 | return (0); |
427 | } | ||
428 | } | 414 | } |
429 | return(1); | ||
430 | } | 415 | } |
416 | return (1); | ||
417 | } | ||
431 | 418 | ||
432 | 419 | ||
433 | SESS_CERT *ssl_sess_cert_new(void) | 420 | SESS_CERT |
434 | { | 421 | *ssl_sess_cert_new(void) |
422 | { | ||
435 | SESS_CERT *ret; | 423 | SESS_CERT *ret; |
436 | 424 | ||
437 | ret = OPENSSL_malloc(sizeof *ret); | 425 | ret = OPENSSL_malloc(sizeof *ret); |
438 | if (ret == NULL) | 426 | if (ret == NULL) { |
439 | { | ||
440 | SSLerr(SSL_F_SSL_SESS_CERT_NEW, ERR_R_MALLOC_FAILURE); | 427 | SSLerr(SSL_F_SSL_SESS_CERT_NEW, ERR_R_MALLOC_FAILURE); |
441 | return NULL; | 428 | return NULL; |
442 | } | 429 | } |
443 | 430 | ||
444 | memset(ret, 0 ,sizeof *ret); | 431 | memset(ret, 0 , sizeof *ret); |
445 | ret->peer_key = &(ret->peer_pkeys[SSL_PKEY_RSA_ENC]); | 432 | ret->peer_key = &(ret->peer_pkeys[SSL_PKEY_RSA_ENC]); |
446 | ret->references = 1; | 433 | ret->references = 1; |
447 | 434 | ||
448 | return ret; | 435 | return ret; |
449 | } | 436 | } |
450 | 437 | ||
451 | void ssl_sess_cert_free(SESS_CERT *sc) | 438 | void |
452 | { | 439 | ssl_sess_cert_free(SESS_CERT *sc) |
440 | { | ||
453 | int i; | 441 | int i; |
454 | 442 | ||
455 | if (sc == NULL) | 443 | if (sc == NULL) |
@@ -462,27 +450,25 @@ void ssl_sess_cert_free(SESS_CERT *sc) | |||
462 | if (i > 0) | 450 | if (i > 0) |
463 | return; | 451 | return; |
464 | #ifdef REF_CHECK | 452 | #ifdef REF_CHECK |
465 | if (i < 0) | 453 | if (i < 0) { |
466 | { | 454 | fprintf(stderr, "ssl_sess_cert_free, bad reference count\n"); |
467 | fprintf(stderr,"ssl_sess_cert_free, bad reference count\n"); | ||
468 | abort(); /* ok */ | 455 | abort(); /* ok */ |
469 | } | 456 | } |
470 | #endif | 457 | #endif |
471 | 458 | ||
472 | /* i == 0 */ | 459 | /* i == 0 */ |
473 | if (sc->cert_chain != NULL) | 460 | if (sc->cert_chain != NULL) |
474 | sk_X509_pop_free(sc->cert_chain, X509_free); | 461 | sk_X509_pop_free(sc->cert_chain, X509_free); |
475 | for (i = 0; i < SSL_PKEY_NUM; i++) | 462 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
476 | { | ||
477 | if (sc->peer_pkeys[i].x509 != NULL) | 463 | if (sc->peer_pkeys[i].x509 != NULL) |
478 | X509_free(sc->peer_pkeys[i].x509); | 464 | X509_free(sc->peer_pkeys[i].x509); |
479 | #if 0 /* We don't have the peer's private key. These lines are just | 465 | #if 0 /* We don't have the peer's private key. These lines are just |
480 | * here as a reminder that we're still using a not-quite-appropriate | 466 | * here as a reminder that we're still using a not-quite-appropriate |
481 | * data structure. */ | 467 | * data structure. */ |
482 | if (sc->peer_pkeys[i].privatekey != NULL) | 468 | if (sc->peer_pkeys[i].privatekey != NULL) |
483 | EVP_PKEY_free(sc->peer_pkeys[i].privatekey); | 469 | EVP_PKEY_free(sc->peer_pkeys[i].privatekey); |
484 | #endif | 470 | #endif |
485 | } | 471 | } |
486 | 472 | ||
487 | #ifndef OPENSSL_NO_RSA | 473 | #ifndef OPENSSL_NO_RSA |
488 | if (sc->peer_rsa_tmp != NULL) | 474 | if (sc->peer_rsa_tmp != NULL) |
@@ -498,34 +484,35 @@ void ssl_sess_cert_free(SESS_CERT *sc) | |||
498 | #endif | 484 | #endif |
499 | 485 | ||
500 | OPENSSL_free(sc); | 486 | OPENSSL_free(sc); |
501 | } | 487 | } |
502 | 488 | ||
503 | int ssl_set_peer_cert_type(SESS_CERT *sc,int type) | 489 | int |
504 | { | 490 | ssl_set_peer_cert_type(SESS_CERT *sc, int type) |
491 | { | ||
505 | sc->peer_cert_type = type; | 492 | sc->peer_cert_type = type; |
506 | return(1); | 493 | return (1); |
507 | } | 494 | } |
508 | 495 | ||
509 | int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk) | 496 | int |
510 | { | 497 | ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk) |
498 | { | ||
511 | X509 *x; | 499 | X509 *x; |
512 | int i; | 500 | int i; |
513 | X509_STORE_CTX ctx; | 501 | X509_STORE_CTX ctx; |
514 | 502 | ||
515 | if ((sk == NULL) || (sk_X509_num(sk) == 0)) | 503 | if ((sk == NULL) || (sk_X509_num(sk) == 0)) |
516 | return(0); | 504 | return (0); |
517 | 505 | ||
518 | x=sk_X509_value(sk,0); | 506 | x = sk_X509_value(sk, 0); |
519 | if(!X509_STORE_CTX_init(&ctx,s->ctx->cert_store,x,sk)) | 507 | if (!X509_STORE_CTX_init(&ctx, s->ctx->cert_store, x, sk)) { |
520 | { | 508 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN, ERR_R_X509_LIB); |
521 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN,ERR_R_X509_LIB); | 509 | return (0); |
522 | return(0); | 510 | } |
523 | } | ||
524 | #if 0 | 511 | #if 0 |
525 | if (SSL_get_verify_depth(s) >= 0) | 512 | if (SSL_get_verify_depth(s) >= 0) |
526 | X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s)); | 513 | X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s)); |
527 | #endif | 514 | #endif |
528 | X509_STORE_CTX_set_ex_data(&ctx,SSL_get_ex_data_X509_STORE_CTX_idx(),s); | 515 | X509_STORE_CTX_set_ex_data(&ctx, SSL_get_ex_data_X509_STORE_CTX_idx(), s); |
529 | 516 | ||
530 | /* We need to inherit the verify parameters. These can be determined by | 517 | /* We need to inherit the verify parameters. These can be determined by |
531 | * the context: if its a server it will verify SSL client certificates | 518 | * the context: if its a server it will verify SSL client certificates |
@@ -533,7 +520,7 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk) | |||
533 | */ | 520 | */ |
534 | 521 | ||
535 | X509_STORE_CTX_set_default(&ctx, | 522 | X509_STORE_CTX_set_default(&ctx, |
536 | s->server ? "ssl_client" : "ssl_server"); | 523 | s->server ? "ssl_client" : "ssl_server"); |
537 | /* Anything non-default in "param" should overwrite anything in the | 524 | /* Anything non-default in "param" should overwrite anything in the |
538 | * ctx. | 525 | * ctx. |
539 | */ | 526 | */ |
@@ -544,121 +531,127 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk) | |||
544 | 531 | ||
545 | if (s->ctx->app_verify_callback != NULL) | 532 | if (s->ctx->app_verify_callback != NULL) |
546 | #if 1 /* new with OpenSSL 0.9.7 */ | 533 | #if 1 /* new with OpenSSL 0.9.7 */ |
547 | i=s->ctx->app_verify_callback(&ctx, s->ctx->app_verify_arg); | 534 | i = s->ctx->app_verify_callback(&ctx, s->ctx->app_verify_arg); |
535 | |||
548 | #else | 536 | #else |
549 | i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */ | 537 | i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */ |
550 | #endif | 538 | #endif |
551 | else | 539 | else { |
552 | { | ||
553 | #ifndef OPENSSL_NO_X509_VERIFY | 540 | #ifndef OPENSSL_NO_X509_VERIFY |
554 | i=X509_verify_cert(&ctx); | 541 | i = X509_verify_cert(&ctx); |
555 | #else | 542 | #else |
556 | i=0; | 543 | i = 0; |
557 | ctx.error=X509_V_ERR_APPLICATION_VERIFICATION; | 544 | ctx.error = X509_V_ERR_APPLICATION_VERIFICATION; |
558 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN,SSL_R_NO_VERIFY_CALLBACK); | 545 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN, SSL_R_NO_VERIFY_CALLBACK); |
559 | #endif | 546 | #endif |
560 | } | 547 | } |
561 | 548 | ||
562 | s->verify_result=ctx.error; | 549 | s->verify_result = ctx.error; |
563 | X509_STORE_CTX_cleanup(&ctx); | 550 | X509_STORE_CTX_cleanup(&ctx); |
564 | 551 | ||
565 | return(i); | 552 | return (i); |
566 | } | 553 | } |
567 | 554 | ||
568 | static void set_client_CA_list(STACK_OF(X509_NAME) **ca_list,STACK_OF(X509_NAME) *name_list) | 555 | static void |
569 | { | 556 | set_client_CA_list(STACK_OF(X509_NAME) **ca_list, STACK_OF(X509_NAME) *name_list) |
557 | { | ||
570 | if (*ca_list != NULL) | 558 | if (*ca_list != NULL) |
571 | sk_X509_NAME_pop_free(*ca_list,X509_NAME_free); | 559 | sk_X509_NAME_pop_free(*ca_list, X509_NAME_free); |
572 | 560 | ||
573 | *ca_list=name_list; | 561 | *ca_list = name_list; |
574 | } | 562 | } |
575 | 563 | ||
576 | STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk) | 564 | STACK_OF(X509_NAME) |
577 | { | 565 | *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk) |
566 | { | ||
578 | int i; | 567 | int i; |
579 | STACK_OF(X509_NAME) *ret; | 568 | STACK_OF(X509_NAME) *ret; |
580 | X509_NAME *name; | 569 | X509_NAME *name; |
581 | 570 | ||
582 | ret=sk_X509_NAME_new_null(); | 571 | ret = sk_X509_NAME_new_null(); |
583 | for (i=0; i<sk_X509_NAME_num(sk); i++) | 572 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { |
584 | { | 573 | name = X509_NAME_dup(sk_X509_NAME_value(sk, i)); |
585 | name=X509_NAME_dup(sk_X509_NAME_value(sk,i)); | 574 | if ((name == NULL) || !sk_X509_NAME_push(ret, name)) { |
586 | if ((name == NULL) || !sk_X509_NAME_push(ret,name)) | 575 | sk_X509_NAME_pop_free(ret, X509_NAME_free); |
587 | { | 576 | return (NULL); |
588 | sk_X509_NAME_pop_free(ret,X509_NAME_free); | ||
589 | return(NULL); | ||
590 | } | ||
591 | } | 577 | } |
592 | return(ret); | ||
593 | } | 578 | } |
594 | 579 | return (ret); | |
595 | void SSL_set_client_CA_list(SSL *s,STACK_OF(X509_NAME) *name_list) | 580 | } |
596 | { | 581 | |
597 | set_client_CA_list(&(s->client_CA),name_list); | 582 | void |
598 | } | 583 | SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list) |
599 | 584 | { | |
600 | void SSL_CTX_set_client_CA_list(SSL_CTX *ctx,STACK_OF(X509_NAME) *name_list) | 585 | set_client_CA_list(&(s->client_CA), name_list); |
601 | { | 586 | } |
602 | set_client_CA_list(&(ctx->client_CA),name_list); | 587 | |
603 | } | 588 | void |
604 | 589 | SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list) | |
605 | STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx) | 590 | { |
606 | { | 591 | set_client_CA_list(&(ctx->client_CA), name_list); |
607 | return(ctx->client_CA); | 592 | } |
608 | } | 593 | |
609 | 594 | STACK_OF(X509_NAME) | |
610 | STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s) | 595 | *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx) |
611 | { | 596 | { |
597 | return (ctx->client_CA); | ||
598 | } | ||
599 | |||
600 | STACK_OF(X509_NAME) | ||
601 | *SSL_get_client_CA_list(const SSL *s) | ||
602 | { | ||
612 | if (s->type == SSL_ST_CONNECT) | 603 | if (s->type == SSL_ST_CONNECT) |
613 | { /* we are in the client */ | 604 | { /* we are in the client */ |
614 | if (((s->version>>8) == SSL3_VERSION_MAJOR) && | 605 | if (((s->version >> 8) == SSL3_VERSION_MAJOR) && |
615 | (s->s3 != NULL)) | 606 | (s->s3 != NULL)) |
616 | return(s->s3->tmp.ca_names); | 607 | return (s->s3->tmp.ca_names); |
617 | else | 608 | else |
618 | return(NULL); | 609 | return (NULL); |
619 | } | 610 | } else { |
620 | else | ||
621 | { | ||
622 | if (s->client_CA != NULL) | 611 | if (s->client_CA != NULL) |
623 | return(s->client_CA); | 612 | return (s->client_CA); |
624 | else | 613 | else |
625 | return(s->ctx->client_CA); | 614 | return (s->ctx->client_CA); |
626 | } | ||
627 | } | 615 | } |
616 | } | ||
628 | 617 | ||
629 | static int add_client_CA(STACK_OF(X509_NAME) **sk,X509 *x) | 618 | static int |
630 | { | 619 | add_client_CA(STACK_OF(X509_NAME) **sk, X509 *x) |
620 | { | ||
631 | X509_NAME *name; | 621 | X509_NAME *name; |
632 | 622 | ||
633 | if (x == NULL) return(0); | 623 | if (x == NULL) |
634 | if ((*sk == NULL) && ((*sk=sk_X509_NAME_new_null()) == NULL)) | 624 | return (0); |
635 | return(0); | 625 | if ((*sk == NULL) && ((*sk = sk_X509_NAME_new_null()) == NULL)) |
636 | 626 | return (0); | |
637 | if ((name=X509_NAME_dup(X509_get_subject_name(x))) == NULL) | ||
638 | return(0); | ||
639 | |||
640 | if (!sk_X509_NAME_push(*sk,name)) | ||
641 | { | ||
642 | X509_NAME_free(name); | ||
643 | return(0); | ||
644 | } | ||
645 | return(1); | ||
646 | } | ||
647 | 627 | ||
648 | int SSL_add_client_CA(SSL *ssl,X509 *x) | 628 | if ((name = X509_NAME_dup(X509_get_subject_name(x))) == NULL) |
649 | { | 629 | return (0); |
650 | return(add_client_CA(&(ssl->client_CA),x)); | ||
651 | } | ||
652 | 630 | ||
653 | int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x) | 631 | if (!sk_X509_NAME_push(*sk, name)) { |
654 | { | 632 | X509_NAME_free(name); |
655 | return(add_client_CA(&(ctx->client_CA),x)); | 633 | return (0); |
656 | } | ||
657 | |||
658 | static int xname_cmp(const X509_NAME * const *a, const X509_NAME * const *b) | ||
659 | { | ||
660 | return(X509_NAME_cmp(*a,*b)); | ||
661 | } | 634 | } |
635 | return (1); | ||
636 | } | ||
637 | |||
638 | int | ||
639 | SSL_add_client_CA(SSL *ssl, X509 *x) | ||
640 | { | ||
641 | return (add_client_CA(&(ssl->client_CA), x)); | ||
642 | } | ||
643 | |||
644 | int | ||
645 | SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x) | ||
646 | { | ||
647 | return (add_client_CA(&(ctx->client_CA), x)); | ||
648 | } | ||
649 | |||
650 | static int | ||
651 | xname_cmp(const X509_NAME * const *a, const X509_NAME * const *b) | ||
652 | { | ||
653 | return (X509_NAME_cmp(*a, *b)); | ||
654 | } | ||
662 | 655 | ||
663 | #ifndef OPENSSL_NO_STDIO | 656 | #ifndef OPENSSL_NO_STDIO |
664 | /*! | 657 | /*! |
@@ -669,65 +662,65 @@ static int xname_cmp(const X509_NAME * const *a, const X509_NAME * const *b) | |||
669 | * \param file the file containing one or more certs. | 662 | * \param file the file containing one or more certs. |
670 | * \return a ::STACK containing the certs. | 663 | * \return a ::STACK containing the certs. |
671 | */ | 664 | */ |
672 | STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file) | 665 | STACK_OF(X509_NAME) |
673 | { | 666 | *SSL_load_client_CA_file(const char *file) |
667 | { | ||
674 | BIO *in; | 668 | BIO *in; |
675 | X509 *x=NULL; | 669 | X509 *x = NULL; |
676 | X509_NAME *xn=NULL; | 670 | X509_NAME *xn = NULL; |
677 | STACK_OF(X509_NAME) *ret = NULL,*sk; | 671 | STACK_OF(X509_NAME) *ret = NULL, *sk; |
678 | 672 | ||
679 | sk=sk_X509_NAME_new(xname_cmp); | 673 | sk = sk_X509_NAME_new(xname_cmp); |
680 | 674 | ||
681 | in=BIO_new(BIO_s_file_internal()); | 675 | in = BIO_new(BIO_s_file_internal()); |
682 | 676 | ||
683 | if ((sk == NULL) || (in == NULL)) | 677 | if ((sk == NULL) || (in == NULL)) { |
684 | { | 678 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE, ERR_R_MALLOC_FAILURE); |
685 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE); | ||
686 | goto err; | 679 | goto err; |
687 | } | 680 | } |
688 | 681 | ||
689 | if (!BIO_read_filename(in,file)) | 682 | if (!BIO_read_filename(in, file)) |
690 | goto err; | 683 | goto err; |
691 | 684 | ||
692 | for (;;) | 685 | for (;;) { |
693 | { | 686 | if (PEM_read_bio_X509(in, &x, NULL, NULL) == NULL) |
694 | if (PEM_read_bio_X509(in,&x,NULL,NULL) == NULL) | ||
695 | break; | 687 | break; |
696 | if (ret == NULL) | 688 | if (ret == NULL) { |
697 | { | ||
698 | ret = sk_X509_NAME_new_null(); | 689 | ret = sk_X509_NAME_new_null(); |
699 | if (ret == NULL) | 690 | if (ret == NULL) { |
700 | { | 691 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE, ERR_R_MALLOC_FAILURE); |
701 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE); | ||
702 | goto err; | 692 | goto err; |
703 | } | ||
704 | } | 693 | } |
705 | if ((xn=X509_get_subject_name(x)) == NULL) goto err; | 694 | } |
706 | /* check for duplicates */ | 695 | if ((xn = X509_get_subject_name(x)) == NULL) goto err; |
707 | xn=X509_NAME_dup(xn); | 696 | /* check for duplicates */ |
708 | if (xn == NULL) goto err; | 697 | xn = X509_NAME_dup(xn); |
709 | if (sk_X509_NAME_find(sk,xn) >= 0) | 698 | if (xn == NULL) |
699 | goto err; | ||
700 | if (sk_X509_NAME_find(sk, xn) >= 0) | ||
710 | X509_NAME_free(xn); | 701 | X509_NAME_free(xn); |
711 | else | 702 | else { |
712 | { | 703 | sk_X509_NAME_push(sk, xn); |
713 | sk_X509_NAME_push(sk,xn); | 704 | sk_X509_NAME_push(ret, xn); |
714 | sk_X509_NAME_push(ret,xn); | ||
715 | } | ||
716 | } | 705 | } |
706 | } | ||
717 | 707 | ||
718 | if (0) | 708 | if (0) { |
719 | { | ||
720 | err: | 709 | err: |
721 | if (ret != NULL) sk_X509_NAME_pop_free(ret,X509_NAME_free); | 710 | if (ret != NULL) |
722 | ret=NULL; | 711 | sk_X509_NAME_pop_free(ret, X509_NAME_free); |
723 | } | 712 | ret = NULL; |
724 | if (sk != NULL) sk_X509_NAME_free(sk); | 713 | } |
725 | if (in != NULL) BIO_free(in); | 714 | if (sk != NULL) |
726 | if (x != NULL) X509_free(x); | 715 | sk_X509_NAME_free(sk); |
716 | if (in != NULL) | ||
717 | BIO_free(in); | ||
718 | if (x != NULL) | ||
719 | X509_free(x); | ||
727 | if (ret != NULL) | 720 | if (ret != NULL) |
728 | ERR_clear_error(); | 721 | ERR_clear_error(); |
729 | return(ret); | 722 | return (ret); |
730 | } | 723 | } |
731 | #endif | 724 | #endif |
732 | 725 | ||
733 | /*! | 726 | /*! |
@@ -739,57 +732,56 @@ err: | |||
739 | * certs may have been added to \c stack. | 732 | * certs may have been added to \c stack. |
740 | */ | 733 | */ |
741 | 734 | ||
742 | int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | 735 | int |
743 | const char *file) | 736 | SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, |
744 | { | 737 | const char *file) |
738 | { | ||
745 | BIO *in; | 739 | BIO *in; |
746 | X509 *x=NULL; | 740 | X509 *x = NULL; |
747 | X509_NAME *xn=NULL; | 741 | X509_NAME *xn = NULL; |
748 | int ret=1; | 742 | int ret = 1; |
749 | int (*oldcmp)(const X509_NAME * const *a, const X509_NAME * const *b); | 743 | int (*oldcmp)(const X509_NAME * const *a, const X509_NAME * const *b); |
750 | 744 | ||
751 | oldcmp=sk_X509_NAME_set_cmp_func(stack,xname_cmp); | 745 | oldcmp = sk_X509_NAME_set_cmp_func(stack, xname_cmp); |
752 | 746 | ||
753 | in=BIO_new(BIO_s_file_internal()); | 747 | in = BIO_new(BIO_s_file_internal()); |
754 | 748 | ||
755 | if (in == NULL) | 749 | if (in == NULL) { |
756 | { | 750 | SSLerr(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK, ERR_R_MALLOC_FAILURE); |
757 | SSLerr(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK,ERR_R_MALLOC_FAILURE); | ||
758 | goto err; | 751 | goto err; |
759 | } | 752 | } |
760 | 753 | ||
761 | if (!BIO_read_filename(in,file)) | 754 | if (!BIO_read_filename(in, file)) |
762 | goto err; | 755 | goto err; |
763 | 756 | ||
764 | for (;;) | 757 | for (;;) { |
765 | { | 758 | if (PEM_read_bio_X509(in, &x, NULL, NULL) == NULL) |
766 | if (PEM_read_bio_X509(in,&x,NULL,NULL) == NULL) | ||
767 | break; | 759 | break; |
768 | if ((xn=X509_get_subject_name(x)) == NULL) goto err; | 760 | if ((xn = X509_get_subject_name(x)) == NULL) goto err; |
769 | xn=X509_NAME_dup(xn); | 761 | xn = X509_NAME_dup(xn); |
770 | if (xn == NULL) goto err; | 762 | if (xn == NULL) |
771 | if (sk_X509_NAME_find(stack,xn) >= 0) | 763 | goto err; |
764 | if (sk_X509_NAME_find(stack, xn) >= 0) | ||
772 | X509_NAME_free(xn); | 765 | X509_NAME_free(xn); |
773 | else | 766 | else |
774 | sk_X509_NAME_push(stack,xn); | 767 | sk_X509_NAME_push(stack, xn); |
775 | } | 768 | } |
776 | 769 | ||
777 | ERR_clear_error(); | 770 | ERR_clear_error(); |
778 | 771 | ||
779 | if (0) | 772 | if (0) { |
780 | { | ||
781 | err: | 773 | err: |
782 | ret=0; | 774 | ret = 0; |
783 | } | 775 | } |
784 | if(in != NULL) | 776 | if (in != NULL) |
785 | BIO_free(in); | 777 | BIO_free(in); |
786 | if(x != NULL) | 778 | if (x != NULL) |
787 | X509_free(x); | 779 | X509_free(x); |
788 | 780 | ||
789 | (void)sk_X509_NAME_set_cmp_func(stack,oldcmp); | 781 | (void)sk_X509_NAME_set_cmp_func(stack, oldcmp); |
790 | 782 | ||
791 | return ret; | 783 | return ret; |
792 | } | 784 | } |
793 | 785 | ||
794 | /*! | 786 | /*! |
795 | * Add a directory of certs to a stack. | 787 | * Add a directory of certs to a stack. |
@@ -802,9 +794,10 @@ err: | |||
802 | * certs may have been added to \c stack. | 794 | * certs may have been added to \c stack. |
803 | */ | 795 | */ |
804 | 796 | ||
805 | int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | 797 | int |
806 | const char *dir) | 798 | SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, |
807 | { | 799 | const char *dir) |
800 | { | ||
808 | OPENSSL_DIR_CTX *d = NULL; | 801 | OPENSSL_DIR_CTX *d = NULL; |
809 | const char *filename; | 802 | const char *filename; |
810 | int ret = 0; | 803 | int ret = 0; |
@@ -813,36 +806,34 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | |||
813 | 806 | ||
814 | /* Note that a side effect is that the CAs will be sorted by name */ | 807 | /* Note that a side effect is that the CAs will be sorted by name */ |
815 | 808 | ||
816 | while((filename = OPENSSL_DIR_read(&d, dir))) | 809 | while ((filename = OPENSSL_DIR_read(&d, dir))) { |
817 | { | ||
818 | char buf[1024]; | 810 | char buf[1024]; |
819 | int r; | 811 | int r; |
820 | 812 | ||
821 | if(strlen(dir)+strlen(filename)+2 > sizeof buf) | 813 | if (strlen(dir) + strlen(filename) + 2 > sizeof buf) { |
822 | { | 814 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, SSL_R_PATH_TOO_LONG); |
823 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK,SSL_R_PATH_TOO_LONG); | ||
824 | goto err; | 815 | goto err; |
825 | } | 816 | } |
826 | r = BIO_snprintf(buf,sizeof buf,"%s/%s",dir,filename); | 817 | r = BIO_snprintf(buf, sizeof buf, "%s/%s", dir, filename); |
827 | if (r <= 0 || r >= (int)sizeof(buf)) | 818 | if (r <= 0 || r >= (int)sizeof(buf)) |
828 | goto err; | 819 | goto err; |
829 | if(!SSL_add_file_cert_subjects_to_stack(stack,buf)) | 820 | if (!SSL_add_file_cert_subjects_to_stack(stack, buf)) |
830 | goto err; | 821 | goto err; |
831 | } | 822 | } |
832 | 823 | ||
833 | if (errno) | 824 | if (errno) { |
834 | { | ||
835 | SYSerr(SYS_F_OPENDIR, errno); | 825 | SYSerr(SYS_F_OPENDIR, errno); |
836 | ERR_add_error_data(3, "OPENSSL_DIR_read(&ctx, '", dir, "')"); | 826 | ERR_add_error_data(3, "OPENSSL_DIR_read(&ctx, '", dir, "')"); |
837 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB); | 827 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB); |
838 | goto err; | 828 | goto err; |
839 | } | 829 | } |
840 | 830 | ||
841 | ret = 1; | 831 | ret = 1; |
842 | 832 | ||
843 | err: | 833 | err: |
844 | if (d) OPENSSL_DIR_end(&d); | 834 | if (d) |
835 | OPENSSL_DIR_end(&d); | ||
845 | CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); | 836 | CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); |
846 | return ret; | 837 | return ret; |
847 | } | 838 | } |
848 | 839 | ||
diff --git a/src/lib/libssl/src/ssl/ssl_ciph.c b/src/lib/libssl/src/ssl/ssl_ciph.c index 0aba8e048c..f37c70cf91 100644 --- a/src/lib/libssl/src/ssl/ssl_ciph.c +++ b/src/lib/libssl/src/ssl/ssl_ciph.c | |||
@@ -167,15 +167,15 @@ | |||
167 | #define SSL_ENC_NUM_IDX 14 | 167 | #define SSL_ENC_NUM_IDX 14 |
168 | 168 | ||
169 | 169 | ||
170 | static const EVP_CIPHER *ssl_cipher_methods[SSL_ENC_NUM_IDX]={ | 170 | static const EVP_CIPHER *ssl_cipher_methods[SSL_ENC_NUM_IDX] = { |
171 | NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL | 171 | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL |
172 | }; | 172 | }; |
173 | 173 | ||
174 | #define SSL_COMP_NULL_IDX 0 | 174 | #define SSL_COMP_NULL_IDX 0 |
175 | #define SSL_COMP_ZLIB_IDX 1 | 175 | #define SSL_COMP_ZLIB_IDX 1 |
176 | #define SSL_COMP_NUM_IDX 2 | 176 | #define SSL_COMP_NUM_IDX 2 |
177 | 177 | ||
178 | static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL; | 178 | static STACK_OF(SSL_COMP) *ssl_comp_methods = NULL; |
179 | 179 | ||
180 | #define SSL_MD_MD5_IDX 0 | 180 | #define SSL_MD_MD5_IDX 0 |
181 | #define SSL_MD_SHA1_IDX 1 | 181 | #define SSL_MD_SHA1_IDX 1 |
@@ -187,27 +187,27 @@ static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL; | |||
187 | * defined in the | 187 | * defined in the |
188 | * ssl_locl.h */ | 188 | * ssl_locl.h */ |
189 | #define SSL_MD_NUM_IDX SSL_MAX_DIGEST | 189 | #define SSL_MD_NUM_IDX SSL_MAX_DIGEST |
190 | static const EVP_MD *ssl_digest_methods[SSL_MD_NUM_IDX]={ | 190 | static const EVP_MD *ssl_digest_methods[SSL_MD_NUM_IDX] = { |
191 | NULL,NULL,NULL,NULL,NULL,NULL | 191 | NULL, NULL, NULL, NULL, NULL, NULL |
192 | }; | 192 | }; |
193 | /* PKEY_TYPE for GOST89MAC is known in advance, but, because | 193 | /* PKEY_TYPE for GOST89MAC is known in advance, but, because |
194 | * implementation is engine-provided, we'll fill it only if | 194 | * implementation is engine-provided, we'll fill it only if |
195 | * corresponding EVP_PKEY_METHOD is found | 195 | * corresponding EVP_PKEY_METHOD is found |
196 | */ | 196 | */ |
197 | static int ssl_mac_pkey_id[SSL_MD_NUM_IDX]={ | 197 | static int ssl_mac_pkey_id[SSL_MD_NUM_IDX] = { |
198 | EVP_PKEY_HMAC,EVP_PKEY_HMAC,EVP_PKEY_HMAC,NID_undef, | 198 | EVP_PKEY_HMAC, EVP_PKEY_HMAC, EVP_PKEY_HMAC, NID_undef, |
199 | EVP_PKEY_HMAC,EVP_PKEY_HMAC | 199 | EVP_PKEY_HMAC, EVP_PKEY_HMAC |
200 | }; | 200 | }; |
201 | 201 | ||
202 | static int ssl_mac_secret_size[SSL_MD_NUM_IDX]={ | 202 | static int ssl_mac_secret_size[SSL_MD_NUM_IDX] = { |
203 | 0,0,0,0,0,0 | 203 | 0, 0, 0, 0, 0, 0 |
204 | }; | 204 | }; |
205 | 205 | ||
206 | static int ssl_handshake_digest_flag[SSL_MD_NUM_IDX]={ | 206 | static int ssl_handshake_digest_flag[SSL_MD_NUM_IDX] = { |
207 | SSL_HANDSHAKE_MAC_MD5,SSL_HANDSHAKE_MAC_SHA, | 207 | SSL_HANDSHAKE_MAC_MD5, SSL_HANDSHAKE_MAC_SHA, |
208 | SSL_HANDSHAKE_MAC_GOST94, 0, SSL_HANDSHAKE_MAC_SHA256, | 208 | SSL_HANDSHAKE_MAC_GOST94, 0, SSL_HANDSHAKE_MAC_SHA256, |
209 | SSL_HANDSHAKE_MAC_SHA384 | 209 | SSL_HANDSHAKE_MAC_SHA384 |
210 | }; | 210 | }; |
211 | 211 | ||
212 | #define CIPHER_ADD 1 | 212 | #define CIPHER_ADD 1 |
213 | #define CIPHER_KILL 2 | 213 | #define CIPHER_KILL 2 |
@@ -215,376 +215,371 @@ static int ssl_handshake_digest_flag[SSL_MD_NUM_IDX]={ | |||
215 | #define CIPHER_ORD 4 | 215 | #define CIPHER_ORD 4 |
216 | #define CIPHER_SPECIAL 5 | 216 | #define CIPHER_SPECIAL 5 |
217 | 217 | ||
218 | typedef struct cipher_order_st | 218 | typedef struct cipher_order_st { |
219 | { | ||
220 | const SSL_CIPHER *cipher; | 219 | const SSL_CIPHER *cipher; |
221 | int active; | 220 | int active; |
222 | int dead; | 221 | int dead; |
223 | struct cipher_order_st *next,*prev; | 222 | struct cipher_order_st *next, *prev; |
224 | } CIPHER_ORDER; | 223 | } CIPHER_ORDER; |
225 | 224 | ||
226 | static const SSL_CIPHER cipher_aliases[]={ | 225 | static const SSL_CIPHER cipher_aliases[] = { |
227 | /* "ALL" doesn't include eNULL (must be specifically enabled) */ | 226 | /* "ALL" doesn't include eNULL (must be specifically enabled) */ |
228 | {0,SSL_TXT_ALL,0, 0,0,~SSL_eNULL,0,0,0,0,0,0}, | 227 | {0, SSL_TXT_ALL, 0, 0, 0,~SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
229 | /* "COMPLEMENTOFALL" */ | 228 | /* "COMPLEMENTOFALL" */ |
230 | {0,SSL_TXT_CMPALL,0, 0,0,SSL_eNULL,0,0,0,0,0,0}, | 229 | {0, SSL_TXT_CMPALL, 0, 0, 0, SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
231 | 230 | ||
232 | /* "COMPLEMENTOFDEFAULT" (does *not* include ciphersuites not found in ALL!) */ | 231 | /* "COMPLEMENTOFDEFAULT" (does *not* include ciphersuites not found in ALL!) */ |
233 | {0,SSL_TXT_CMPDEF,0, SSL_kEDH|SSL_kEECDH,SSL_aNULL,~SSL_eNULL,0,0,0,0,0,0}, | 232 | {0, SSL_TXT_CMPDEF, 0, SSL_kEDH|SSL_kEECDH, SSL_aNULL,~SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
234 | 233 | ||
235 | /* key exchange aliases | 234 | /* key exchange aliases |
236 | * (some of those using only a single bit here combine | 235 | * (some of those using only a single bit here combine |
237 | * multiple key exchange algs according to the RFCs, | 236 | * multiple key exchange algs according to the RFCs, |
238 | * e.g. kEDH combines DHE_DSS and DHE_RSA) */ | 237 | * e.g. kEDH combines DHE_DSS and DHE_RSA) */ |
239 | {0,SSL_TXT_kRSA,0, SSL_kRSA, 0,0,0,0,0,0,0,0}, | 238 | {0, SSL_TXT_kRSA, 0, SSL_kRSA, 0, 0, 0, 0, 0, 0, 0, 0}, |
240 | 239 | ||
241 | {0,SSL_TXT_kDHr,0, SSL_kDHr, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 240 | {0,SSL_TXT_kDHr,0, SSL_kDHr, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
242 | {0,SSL_TXT_kDHd,0, SSL_kDHd, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 241 | {0,SSL_TXT_kDHd,0, SSL_kDHd, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
243 | {0,SSL_TXT_kDH,0, SSL_kDHr|SSL_kDHd,0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 242 | {0,SSL_TXT_kDH,0, SSL_kDHr|SSL_kDHd,0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
244 | {0,SSL_TXT_kEDH,0, SSL_kEDH, 0,0,0,0,0,0,0,0}, | 243 | {0, SSL_TXT_kEDH, 0, SSL_kEDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
245 | {0,SSL_TXT_DH,0, SSL_kDHr|SSL_kDHd|SSL_kEDH,0,0,0,0,0,0,0,0}, | 244 | {0, SSL_TXT_DH, 0, SSL_kDHr|SSL_kDHd|SSL_kEDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
246 | 245 | ||
247 | {0,SSL_TXT_kKRB5,0, SSL_kKRB5, 0,0,0,0,0,0,0,0}, | 246 | {0, SSL_TXT_kKRB5, 0, SSL_kKRB5, 0, 0, 0, 0, 0, 0, 0, 0}, |
248 | 247 | ||
249 | {0,SSL_TXT_kECDHr,0, SSL_kECDHr,0,0,0,0,0,0,0,0}, | 248 | {0, SSL_TXT_kECDHr, 0, SSL_kECDHr, 0, 0, 0, 0, 0, 0, 0, 0}, |
250 | {0,SSL_TXT_kECDHe,0, SSL_kECDHe,0,0,0,0,0,0,0,0}, | 249 | {0, SSL_TXT_kECDHe, 0, SSL_kECDHe, 0, 0, 0, 0, 0, 0, 0, 0}, |
251 | {0,SSL_TXT_kECDH,0, SSL_kECDHr|SSL_kECDHe,0,0,0,0,0,0,0,0}, | 250 | {0, SSL_TXT_kECDH, 0, SSL_kECDHr|SSL_kECDHe, 0, 0, 0, 0, 0, 0, 0, 0}, |
252 | {0,SSL_TXT_kEECDH,0, SSL_kEECDH,0,0,0,0,0,0,0,0}, | 251 | {0, SSL_TXT_kEECDH, 0, SSL_kEECDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
253 | {0,SSL_TXT_ECDH,0, SSL_kECDHr|SSL_kECDHe|SSL_kEECDH,0,0,0,0,0,0,0,0}, | 252 | {0, SSL_TXT_ECDH, 0, SSL_kECDHr|SSL_kECDHe|SSL_kEECDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
254 | 253 | ||
255 | {0,SSL_TXT_kPSK,0, SSL_kPSK, 0,0,0,0,0,0,0,0}, | 254 | {0, SSL_TXT_kPSK, 0, SSL_kPSK, 0, 0, 0, 0, 0, 0, 0, 0}, |
256 | {0,SSL_TXT_kSRP,0, SSL_kSRP, 0,0,0,0,0,0,0,0}, | 255 | {0, SSL_TXT_kSRP, 0, SSL_kSRP, 0, 0, 0, 0, 0, 0, 0, 0}, |
257 | {0,SSL_TXT_kGOST,0, SSL_kGOST,0,0,0,0,0,0,0,0}, | 256 | {0, SSL_TXT_kGOST, 0, SSL_kGOST, 0, 0, 0, 0, 0, 0, 0, 0}, |
258 | 257 | ||
259 | /* server authentication aliases */ | 258 | /* server authentication aliases */ |
260 | {0,SSL_TXT_aRSA,0, 0,SSL_aRSA, 0,0,0,0,0,0,0}, | 259 | {0, SSL_TXT_aRSA, 0, 0, SSL_aRSA, 0, 0, 0, 0, 0, 0, 0}, |
261 | {0,SSL_TXT_aDSS,0, 0,SSL_aDSS, 0,0,0,0,0,0,0}, | 260 | {0, SSL_TXT_aDSS, 0, 0, SSL_aDSS, 0, 0, 0, 0, 0, 0, 0}, |
262 | {0,SSL_TXT_DSS,0, 0,SSL_aDSS, 0,0,0,0,0,0,0}, | 261 | {0, SSL_TXT_DSS, 0, 0, SSL_aDSS, 0, 0, 0, 0, 0, 0, 0}, |
263 | {0,SSL_TXT_aKRB5,0, 0,SSL_aKRB5, 0,0,0,0,0,0,0}, | 262 | {0, SSL_TXT_aKRB5, 0, 0, SSL_aKRB5, 0, 0, 0, 0, 0, 0, 0}, |
264 | {0,SSL_TXT_aNULL,0, 0,SSL_aNULL, 0,0,0,0,0,0,0}, | 263 | {0, SSL_TXT_aNULL, 0, 0, SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
265 | {0,SSL_TXT_aDH,0, 0,SSL_aDH, 0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 264 | {0,SSL_TXT_aDH,0, 0,SSL_aDH, 0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
266 | {0,SSL_TXT_aECDH,0, 0,SSL_aECDH, 0,0,0,0,0,0,0}, | 265 | {0, SSL_TXT_aECDH, 0, 0, SSL_aECDH, 0, 0, 0, 0, 0, 0, 0}, |
267 | {0,SSL_TXT_aECDSA,0, 0,SSL_aECDSA,0,0,0,0,0,0,0}, | 266 | {0, SSL_TXT_aECDSA, 0, 0, SSL_aECDSA, 0, 0, 0, 0, 0, 0, 0}, |
268 | {0,SSL_TXT_ECDSA,0, 0,SSL_aECDSA, 0,0,0,0,0,0,0}, | 267 | {0, SSL_TXT_ECDSA, 0, 0, SSL_aECDSA, 0, 0, 0, 0, 0, 0, 0}, |
269 | {0,SSL_TXT_aPSK,0, 0,SSL_aPSK, 0,0,0,0,0,0,0}, | 268 | {0, SSL_TXT_aPSK, 0, 0, SSL_aPSK, 0, 0, 0, 0, 0, 0, 0}, |
270 | {0,SSL_TXT_aGOST94,0,0,SSL_aGOST94,0,0,0,0,0,0,0}, | 269 | {0, SSL_TXT_aGOST94, 0, 0, SSL_aGOST94, 0, 0, 0, 0, 0, 0, 0}, |
271 | {0,SSL_TXT_aGOST01,0,0,SSL_aGOST01,0,0,0,0,0,0,0}, | 270 | {0, SSL_TXT_aGOST01, 0, 0, SSL_aGOST01, 0, 0, 0, 0, 0, 0, 0}, |
272 | {0,SSL_TXT_aGOST,0,0,SSL_aGOST94|SSL_aGOST01,0,0,0,0,0,0,0}, | 271 | {0, SSL_TXT_aGOST, 0, 0, SSL_aGOST94|SSL_aGOST01, 0, 0, 0, 0, 0, 0, 0}, |
273 | 272 | ||
274 | /* aliases combining key exchange and server authentication */ | 273 | /* aliases combining key exchange and server authentication */ |
275 | {0,SSL_TXT_EDH,0, SSL_kEDH,~SSL_aNULL,0,0,0,0,0,0,0}, | 274 | {0, SSL_TXT_EDH, 0, SSL_kEDH,~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
276 | {0,SSL_TXT_EECDH,0, SSL_kEECDH,~SSL_aNULL,0,0,0,0,0,0,0}, | 275 | {0, SSL_TXT_EECDH, 0, SSL_kEECDH,~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
277 | {0,SSL_TXT_NULL,0, 0,0,SSL_eNULL, 0,0,0,0,0,0}, | 276 | {0, SSL_TXT_NULL, 0, 0, 0, SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
278 | {0,SSL_TXT_KRB5,0, SSL_kKRB5,SSL_aKRB5,0,0,0,0,0,0,0}, | 277 | {0, SSL_TXT_KRB5, 0, SSL_kKRB5, SSL_aKRB5, 0, 0, 0, 0, 0, 0, 0}, |
279 | {0,SSL_TXT_RSA,0, SSL_kRSA,SSL_aRSA,0,0,0,0,0,0,0}, | 278 | {0, SSL_TXT_RSA, 0, SSL_kRSA, SSL_aRSA, 0, 0, 0, 0, 0, 0, 0}, |
280 | {0,SSL_TXT_ADH,0, SSL_kEDH,SSL_aNULL,0,0,0,0,0,0,0}, | 279 | {0, SSL_TXT_ADH, 0, SSL_kEDH, SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
281 | {0,SSL_TXT_AECDH,0, SSL_kEECDH,SSL_aNULL,0,0,0,0,0,0,0}, | 280 | {0, SSL_TXT_AECDH, 0, SSL_kEECDH, SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
282 | {0,SSL_TXT_PSK,0, SSL_kPSK,SSL_aPSK,0,0,0,0,0,0,0}, | 281 | {0, SSL_TXT_PSK, 0, SSL_kPSK, SSL_aPSK, 0, 0, 0, 0, 0, 0, 0}, |
283 | {0,SSL_TXT_SRP,0, SSL_kSRP,0,0,0,0,0,0,0,0}, | 282 | {0, SSL_TXT_SRP, 0, SSL_kSRP, 0, 0, 0, 0, 0, 0, 0, 0}, |
284 | 283 | ||
285 | 284 | ||
286 | /* symmetric encryption aliases */ | 285 | /* symmetric encryption aliases */ |
287 | {0,SSL_TXT_DES,0, 0,0,SSL_DES, 0,0,0,0,0,0}, | 286 | {0, SSL_TXT_DES, 0, 0, 0, SSL_DES, 0, 0, 0, 0, 0, 0}, |
288 | {0,SSL_TXT_3DES,0, 0,0,SSL_3DES, 0,0,0,0,0,0}, | 287 | {0, SSL_TXT_3DES, 0, 0, 0, SSL_3DES, 0, 0, 0, 0, 0, 0}, |
289 | {0,SSL_TXT_RC4,0, 0,0,SSL_RC4, 0,0,0,0,0,0}, | 288 | {0, SSL_TXT_RC4, 0, 0, 0, SSL_RC4, 0, 0, 0, 0, 0, 0}, |
290 | {0,SSL_TXT_RC2,0, 0,0,SSL_RC2, 0,0,0,0,0,0}, | 289 | {0, SSL_TXT_RC2, 0, 0, 0, SSL_RC2, 0, 0, 0, 0, 0, 0}, |
291 | {0,SSL_TXT_IDEA,0, 0,0,SSL_IDEA, 0,0,0,0,0,0}, | 290 | {0, SSL_TXT_IDEA, 0, 0, 0, SSL_IDEA, 0, 0, 0, 0, 0, 0}, |
292 | {0,SSL_TXT_SEED,0, 0,0,SSL_SEED, 0,0,0,0,0,0}, | 291 | {0, SSL_TXT_SEED, 0, 0, 0, SSL_SEED, 0, 0, 0, 0, 0, 0}, |
293 | {0,SSL_TXT_eNULL,0, 0,0,SSL_eNULL, 0,0,0,0,0,0}, | 292 | {0, SSL_TXT_eNULL, 0, 0, 0, SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
294 | {0,SSL_TXT_AES128,0, 0,0,SSL_AES128|SSL_AES128GCM,0,0,0,0,0,0}, | 293 | {0, SSL_TXT_AES128, 0, 0, 0, SSL_AES128|SSL_AES128GCM, 0, 0, 0, 0, 0, 0}, |
295 | {0,SSL_TXT_AES256,0, 0,0,SSL_AES256|SSL_AES256GCM,0,0,0,0,0,0}, | 294 | {0, SSL_TXT_AES256, 0, 0, 0, SSL_AES256|SSL_AES256GCM, 0, 0, 0, 0, 0, 0}, |
296 | {0,SSL_TXT_AES,0, 0,0,SSL_AES,0,0,0,0,0,0}, | 295 | {0, SSL_TXT_AES, 0, 0, 0, SSL_AES, 0, 0, 0, 0, 0, 0}, |
297 | {0,SSL_TXT_AES_GCM,0, 0,0,SSL_AES128GCM|SSL_AES256GCM,0,0,0,0,0,0}, | 296 | {0, SSL_TXT_AES_GCM, 0, 0, 0, SSL_AES128GCM|SSL_AES256GCM, 0, 0, 0, 0, 0, 0}, |
298 | {0,SSL_TXT_CAMELLIA128,0,0,0,SSL_CAMELLIA128,0,0,0,0,0,0}, | 297 | {0, SSL_TXT_CAMELLIA128, 0, 0, 0, SSL_CAMELLIA128, 0, 0, 0, 0, 0, 0}, |
299 | {0,SSL_TXT_CAMELLIA256,0,0,0,SSL_CAMELLIA256,0,0,0,0,0,0}, | 298 | {0, SSL_TXT_CAMELLIA256, 0, 0, 0, SSL_CAMELLIA256, 0, 0, 0, 0, 0, 0}, |
300 | {0,SSL_TXT_CAMELLIA ,0,0,0,SSL_CAMELLIA128|SSL_CAMELLIA256,0,0,0,0,0,0}, | 299 | {0, SSL_TXT_CAMELLIA , 0, 0, 0, SSL_CAMELLIA128|SSL_CAMELLIA256, 0, 0, 0, 0, 0, 0}, |
301 | 300 | ||
302 | /* MAC aliases */ | 301 | /* MAC aliases */ |
303 | {0,SSL_TXT_MD5,0, 0,0,0,SSL_MD5, 0,0,0,0,0}, | 302 | {0, SSL_TXT_MD5, 0, 0, 0, 0, SSL_MD5, 0, 0, 0, 0, 0}, |
304 | {0,SSL_TXT_SHA1,0, 0,0,0,SSL_SHA1, 0,0,0,0,0}, | 303 | {0, SSL_TXT_SHA1, 0, 0, 0, 0, SSL_SHA1, 0, 0, 0, 0, 0}, |
305 | {0,SSL_TXT_SHA,0, 0,0,0,SSL_SHA1, 0,0,0,0,0}, | 304 | {0, SSL_TXT_SHA, 0, 0, 0, 0, SSL_SHA1, 0, 0, 0, 0, 0}, |
306 | {0,SSL_TXT_GOST94,0, 0,0,0,SSL_GOST94, 0,0,0,0,0}, | 305 | {0, SSL_TXT_GOST94, 0, 0, 0, 0, SSL_GOST94, 0, 0, 0, 0, 0}, |
307 | {0,SSL_TXT_GOST89MAC,0, 0,0,0,SSL_GOST89MAC, 0,0,0,0,0}, | 306 | {0, SSL_TXT_GOST89MAC, 0, 0, 0, 0, SSL_GOST89MAC, 0, 0, 0, 0, 0}, |
308 | {0,SSL_TXT_SHA256,0, 0,0,0,SSL_SHA256, 0,0,0,0,0}, | 307 | {0, SSL_TXT_SHA256, 0, 0, 0, 0, SSL_SHA256, 0, 0, 0, 0, 0}, |
309 | {0,SSL_TXT_SHA384,0, 0,0,0,SSL_SHA384, 0,0,0,0,0}, | 308 | {0, SSL_TXT_SHA384, 0, 0, 0, 0, SSL_SHA384, 0, 0, 0, 0, 0}, |
310 | 309 | ||
311 | /* protocol version aliases */ | 310 | /* protocol version aliases */ |
312 | {0,SSL_TXT_SSLV2,0, 0,0,0,0,SSL_SSLV2, 0,0,0,0}, | 311 | {0, SSL_TXT_SSLV2, 0, 0, 0, 0, 0, SSL_SSLV2, 0, 0, 0, 0}, |
313 | {0,SSL_TXT_SSLV3,0, 0,0,0,0,SSL_SSLV3, 0,0,0,0}, | 312 | {0, SSL_TXT_SSLV3, 0, 0, 0, 0, 0, SSL_SSLV3, 0, 0, 0, 0}, |
314 | {0,SSL_TXT_TLSV1,0, 0,0,0,0,SSL_TLSV1, 0,0,0,0}, | 313 | {0, SSL_TXT_TLSV1, 0, 0, 0, 0, 0, SSL_TLSV1, 0, 0, 0, 0}, |
315 | {0,SSL_TXT_TLSV1_2,0, 0,0,0,0,SSL_TLSV1_2, 0,0,0,0}, | 314 | {0, SSL_TXT_TLSV1_2, 0, 0, 0, 0, 0, SSL_TLSV1_2, 0, 0, 0, 0}, |
316 | 315 | ||
317 | /* export flag */ | 316 | /* export flag */ |
318 | {0,SSL_TXT_EXP,0, 0,0,0,0,0,SSL_EXPORT,0,0,0}, | 317 | {0, SSL_TXT_EXP, 0, 0, 0, 0, 0, 0, SSL_EXPORT, 0, 0, 0}, |
319 | {0,SSL_TXT_EXPORT,0, 0,0,0,0,0,SSL_EXPORT,0,0,0}, | 318 | {0, SSL_TXT_EXPORT, 0, 0, 0, 0, 0, 0, SSL_EXPORT, 0, 0, 0}, |
320 | 319 | ||
321 | /* strength classes */ | 320 | /* strength classes */ |
322 | {0,SSL_TXT_EXP40,0, 0,0,0,0,0,SSL_EXP40, 0,0,0}, | 321 | {0, SSL_TXT_EXP40, 0, 0, 0, 0, 0, 0, SSL_EXP40, 0, 0, 0}, |
323 | {0,SSL_TXT_EXP56,0, 0,0,0,0,0,SSL_EXP56, 0,0,0}, | 322 | {0, SSL_TXT_EXP56, 0, 0, 0, 0, 0, 0, SSL_EXP56, 0, 0, 0}, |
324 | {0,SSL_TXT_LOW,0, 0,0,0,0,0,SSL_LOW, 0,0,0}, | 323 | {0, SSL_TXT_LOW, 0, 0, 0, 0, 0, 0, SSL_LOW, 0, 0, 0}, |
325 | {0,SSL_TXT_MEDIUM,0, 0,0,0,0,0,SSL_MEDIUM,0,0,0}, | 324 | {0, SSL_TXT_MEDIUM, 0, 0, 0, 0, 0, 0, SSL_MEDIUM, 0, 0, 0}, |
326 | {0,SSL_TXT_HIGH,0, 0,0,0,0,0,SSL_HIGH, 0,0,0}, | 325 | {0, SSL_TXT_HIGH, 0, 0, 0, 0, 0, 0, SSL_HIGH, 0, 0, 0}, |
327 | /* FIPS 140-2 approved ciphersuite */ | 326 | /* FIPS 140-2 approved ciphersuite */ |
328 | {0,SSL_TXT_FIPS,0, 0,0,~SSL_eNULL,0,0,SSL_FIPS, 0,0,0}, | 327 | {0, SSL_TXT_FIPS, 0, 0, 0,~SSL_eNULL, 0, 0, SSL_FIPS, 0, 0, 0}, |
329 | }; | 328 | }; |
330 | /* Search for public key algorithm with given name and | 329 | /* Search for public key algorithm with given name and |
331 | * return its pkey_id if it is available. Otherwise return 0 | 330 | * return its pkey_id if it is available. Otherwise return 0 |
332 | */ | 331 | */ |
333 | #ifdef OPENSSL_NO_ENGINE | 332 | #ifdef OPENSSL_NO_ENGINE |
334 | 333 | ||
335 | static int get_optional_pkey_id(const char *pkey_name) | 334 | static int |
336 | { | 335 | get_optional_pkey_id(const char *pkey_name) |
336 | { | ||
337 | const EVP_PKEY_ASN1_METHOD *ameth; | 337 | const EVP_PKEY_ASN1_METHOD *ameth; |
338 | int pkey_id=0; | 338 | int pkey_id = 0; |
339 | ameth = EVP_PKEY_asn1_find_str(NULL,pkey_name,-1); | 339 | ameth = EVP_PKEY_asn1_find_str(NULL, pkey_name, -1); |
340 | if (ameth) | 340 | if (ameth) { |
341 | { | 341 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); |
342 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL,NULL,NULL,NULL,ameth); | ||
343 | } | ||
344 | return pkey_id; | ||
345 | } | 342 | } |
343 | return pkey_id; | ||
344 | } | ||
346 | 345 | ||
347 | #else | 346 | #else |
348 | 347 | ||
349 | static int get_optional_pkey_id(const char *pkey_name) | 348 | static int |
350 | { | 349 | get_optional_pkey_id(const char *pkey_name) |
350 | { | ||
351 | const EVP_PKEY_ASN1_METHOD *ameth; | 351 | const EVP_PKEY_ASN1_METHOD *ameth; |
352 | ENGINE *tmpeng = NULL; | 352 | ENGINE *tmpeng = NULL; |
353 | int pkey_id=0; | 353 | int pkey_id = 0; |
354 | ameth = EVP_PKEY_asn1_find_str(&tmpeng,pkey_name,-1); | 354 | ameth = EVP_PKEY_asn1_find_str(&tmpeng, pkey_name, -1); |
355 | if (ameth) | 355 | if (ameth) { |
356 | { | 356 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); |
357 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL,NULL,NULL,NULL,ameth); | ||
358 | } | ||
359 | if (tmpeng) ENGINE_finish(tmpeng); | ||
360 | return pkey_id; | ||
361 | } | 357 | } |
358 | if (tmpeng) | ||
359 | ENGINE_finish(tmpeng); | ||
360 | return pkey_id; | ||
361 | } | ||
362 | 362 | ||
363 | #endif | 363 | #endif |
364 | 364 | ||
365 | void ssl_load_ciphers(void) | 365 | void |
366 | { | 366 | ssl_load_ciphers(void) |
367 | ssl_cipher_methods[SSL_ENC_DES_IDX]= | 367 | { |
368 | EVP_get_cipherbyname(SN_des_cbc); | 368 | ssl_cipher_methods[SSL_ENC_DES_IDX]= |
369 | EVP_get_cipherbyname(SN_des_cbc); | ||
369 | ssl_cipher_methods[SSL_ENC_3DES_IDX]= | 370 | ssl_cipher_methods[SSL_ENC_3DES_IDX]= |
370 | EVP_get_cipherbyname(SN_des_ede3_cbc); | 371 | EVP_get_cipherbyname(SN_des_ede3_cbc); |
371 | ssl_cipher_methods[SSL_ENC_RC4_IDX]= | 372 | ssl_cipher_methods[SSL_ENC_RC4_IDX]= |
372 | EVP_get_cipherbyname(SN_rc4); | 373 | EVP_get_cipherbyname(SN_rc4); |
373 | ssl_cipher_methods[SSL_ENC_RC2_IDX]= | 374 | ssl_cipher_methods[SSL_ENC_RC2_IDX]= |
374 | EVP_get_cipherbyname(SN_rc2_cbc); | 375 | EVP_get_cipherbyname(SN_rc2_cbc); |
375 | #ifndef OPENSSL_NO_IDEA | 376 | #ifndef OPENSSL_NO_IDEA |
376 | ssl_cipher_methods[SSL_ENC_IDEA_IDX]= | 377 | ssl_cipher_methods[SSL_ENC_IDEA_IDX]= |
377 | EVP_get_cipherbyname(SN_idea_cbc); | 378 | EVP_get_cipherbyname(SN_idea_cbc); |
378 | #else | 379 | #else |
379 | ssl_cipher_methods[SSL_ENC_IDEA_IDX]= NULL; | 380 | ssl_cipher_methods[SSL_ENC_IDEA_IDX] = NULL; |
380 | #endif | 381 | #endif |
381 | ssl_cipher_methods[SSL_ENC_AES128_IDX]= | 382 | ssl_cipher_methods[SSL_ENC_AES128_IDX]= |
382 | EVP_get_cipherbyname(SN_aes_128_cbc); | 383 | EVP_get_cipherbyname(SN_aes_128_cbc); |
383 | ssl_cipher_methods[SSL_ENC_AES256_IDX]= | 384 | ssl_cipher_methods[SSL_ENC_AES256_IDX]= |
384 | EVP_get_cipherbyname(SN_aes_256_cbc); | 385 | EVP_get_cipherbyname(SN_aes_256_cbc); |
385 | ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX]= | 386 | ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX]= |
386 | EVP_get_cipherbyname(SN_camellia_128_cbc); | 387 | EVP_get_cipherbyname(SN_camellia_128_cbc); |
387 | ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX]= | 388 | ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX]= |
388 | EVP_get_cipherbyname(SN_camellia_256_cbc); | 389 | EVP_get_cipherbyname(SN_camellia_256_cbc); |
389 | ssl_cipher_methods[SSL_ENC_GOST89_IDX]= | 390 | ssl_cipher_methods[SSL_ENC_GOST89_IDX]= |
390 | EVP_get_cipherbyname(SN_gost89_cnt); | 391 | EVP_get_cipherbyname(SN_gost89_cnt); |
391 | ssl_cipher_methods[SSL_ENC_SEED_IDX]= | 392 | ssl_cipher_methods[SSL_ENC_SEED_IDX]= |
392 | EVP_get_cipherbyname(SN_seed_cbc); | 393 | EVP_get_cipherbyname(SN_seed_cbc); |
393 | 394 | ||
394 | ssl_cipher_methods[SSL_ENC_AES128GCM_IDX]= | 395 | ssl_cipher_methods[SSL_ENC_AES128GCM_IDX]= |
395 | EVP_get_cipherbyname(SN_aes_128_gcm); | 396 | EVP_get_cipherbyname(SN_aes_128_gcm); |
396 | ssl_cipher_methods[SSL_ENC_AES256GCM_IDX]= | 397 | ssl_cipher_methods[SSL_ENC_AES256GCM_IDX]= |
397 | EVP_get_cipherbyname(SN_aes_256_gcm); | 398 | EVP_get_cipherbyname(SN_aes_256_gcm); |
398 | 399 | ||
399 | ssl_digest_methods[SSL_MD_MD5_IDX]= | 400 | ssl_digest_methods[SSL_MD_MD5_IDX]= |
400 | EVP_get_digestbyname(SN_md5); | 401 | EVP_get_digestbyname(SN_md5); |
401 | ssl_mac_secret_size[SSL_MD_MD5_IDX]= | 402 | ssl_mac_secret_size[SSL_MD_MD5_IDX]= |
402 | EVP_MD_size(ssl_digest_methods[SSL_MD_MD5_IDX]); | 403 | EVP_MD_size(ssl_digest_methods[SSL_MD_MD5_IDX]); |
403 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_MD5_IDX] >= 0); | 404 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_MD5_IDX] >= 0); |
404 | ssl_digest_methods[SSL_MD_SHA1_IDX]= | 405 | ssl_digest_methods[SSL_MD_SHA1_IDX]= |
405 | EVP_get_digestbyname(SN_sha1); | 406 | EVP_get_digestbyname(SN_sha1); |
406 | ssl_mac_secret_size[SSL_MD_SHA1_IDX]= | 407 | ssl_mac_secret_size[SSL_MD_SHA1_IDX]= |
407 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA1_IDX]); | 408 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA1_IDX]); |
408 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_SHA1_IDX] >= 0); | 409 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_SHA1_IDX] >= 0); |
409 | ssl_digest_methods[SSL_MD_GOST94_IDX]= | 410 | ssl_digest_methods[SSL_MD_GOST94_IDX]= |
410 | EVP_get_digestbyname(SN_id_GostR3411_94); | 411 | EVP_get_digestbyname(SN_id_GostR3411_94); |
411 | if (ssl_digest_methods[SSL_MD_GOST94_IDX]) | 412 | if (ssl_digest_methods[SSL_MD_GOST94_IDX]) { |
412 | { | ||
413 | ssl_mac_secret_size[SSL_MD_GOST94_IDX]= | 413 | ssl_mac_secret_size[SSL_MD_GOST94_IDX]= |
414 | EVP_MD_size(ssl_digest_methods[SSL_MD_GOST94_IDX]); | 414 | EVP_MD_size(ssl_digest_methods[SSL_MD_GOST94_IDX]); |
415 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_GOST94_IDX] >= 0); | 415 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_GOST94_IDX] >= 0); |
416 | } | 416 | } |
417 | ssl_digest_methods[SSL_MD_GOST89MAC_IDX]= | 417 | ssl_digest_methods[SSL_MD_GOST89MAC_IDX]= |
418 | EVP_get_digestbyname(SN_id_Gost28147_89_MAC); | 418 | EVP_get_digestbyname(SN_id_Gost28147_89_MAC); |
419 | ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX] = get_optional_pkey_id("gost-mac"); | 419 | ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX] = get_optional_pkey_id("gost-mac"); |
420 | if (ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]) { | 420 | if (ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]) { |
421 | ssl_mac_secret_size[SSL_MD_GOST89MAC_IDX]=32; | 421 | ssl_mac_secret_size[SSL_MD_GOST89MAC_IDX] = 32; |
422 | } | 422 | } |
423 | 423 | ||
424 | ssl_digest_methods[SSL_MD_SHA256_IDX]= | 424 | ssl_digest_methods[SSL_MD_SHA256_IDX]= |
425 | EVP_get_digestbyname(SN_sha256); | 425 | EVP_get_digestbyname(SN_sha256); |
426 | ssl_mac_secret_size[SSL_MD_SHA256_IDX]= | 426 | ssl_mac_secret_size[SSL_MD_SHA256_IDX]= |
427 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA256_IDX]); | 427 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA256_IDX]); |
428 | ssl_digest_methods[SSL_MD_SHA384_IDX]= | 428 | ssl_digest_methods[SSL_MD_SHA384_IDX]= |
429 | EVP_get_digestbyname(SN_sha384); | 429 | EVP_get_digestbyname(SN_sha384); |
430 | ssl_mac_secret_size[SSL_MD_SHA384_IDX]= | 430 | ssl_mac_secret_size[SSL_MD_SHA384_IDX]= |
431 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA384_IDX]); | 431 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA384_IDX]); |
432 | } | 432 | } |
433 | #ifndef OPENSSL_NO_COMP | 433 | #ifndef OPENSSL_NO_COMP |
434 | 434 | ||
435 | static int sk_comp_cmp(const SSL_COMP * const *a, | 435 | static int |
436 | const SSL_COMP * const *b) | 436 | sk_comp_cmp(const SSL_COMP * const *a, |
437 | { | 437 | const SSL_COMP * const *b) |
438 | return((*a)->id-(*b)->id); | 438 | { |
439 | } | 439 | return ((*a)->id - (*b)->id); |
440 | } | ||
440 | 441 | ||
441 | static void load_builtin_compressions(void) | 442 | static void |
442 | { | 443 | load_builtin_compressions(void) |
444 | { | ||
443 | int got_write_lock = 0; | 445 | int got_write_lock = 0; |
444 | 446 | ||
445 | CRYPTO_r_lock(CRYPTO_LOCK_SSL); | 447 | CRYPTO_r_lock(CRYPTO_LOCK_SSL); |
446 | if (ssl_comp_methods == NULL) | 448 | if (ssl_comp_methods == NULL) { |
447 | { | ||
448 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); | 449 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); |
449 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); | 450 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); |
450 | got_write_lock = 1; | 451 | got_write_lock = 1; |
451 | 452 | ||
452 | if (ssl_comp_methods == NULL) | 453 | if (ssl_comp_methods == NULL) { |
453 | { | ||
454 | SSL_COMP *comp = NULL; | 454 | SSL_COMP *comp = NULL; |
455 | 455 | ||
456 | MemCheck_off(); | 456 | MemCheck_off(); |
457 | ssl_comp_methods=sk_SSL_COMP_new(sk_comp_cmp); | 457 | ssl_comp_methods = sk_SSL_COMP_new(sk_comp_cmp); |
458 | if (ssl_comp_methods != NULL) | 458 | if (ssl_comp_methods != NULL) { |
459 | { | 459 | comp = (SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); |
460 | comp=(SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); | 460 | if (comp != NULL) { |
461 | if (comp != NULL) | 461 | comp->method = COMP_zlib(); |
462 | { | ||
463 | comp->method=COMP_zlib(); | ||
464 | if (comp->method | 462 | if (comp->method |
465 | && comp->method->type == NID_undef) | 463 | && comp->method->type == NID_undef) |
466 | OPENSSL_free(comp); | 464 | OPENSSL_free(comp); |
467 | else | 465 | else { |
468 | { | 466 | comp->id = SSL_COMP_ZLIB_IDX; |
469 | comp->id=SSL_COMP_ZLIB_IDX; | 467 | comp->name = comp->method->name; |
470 | comp->name=comp->method->name; | 468 | sk_SSL_COMP_push(ssl_comp_methods, comp); |
471 | sk_SSL_COMP_push(ssl_comp_methods,comp); | ||
472 | } | ||
473 | } | 469 | } |
474 | sk_SSL_COMP_sort(ssl_comp_methods); | ||
475 | } | 470 | } |
476 | MemCheck_on(); | 471 | sk_SSL_COMP_sort(ssl_comp_methods); |
477 | } | 472 | } |
473 | MemCheck_on(); | ||
478 | } | 474 | } |
479 | 475 | } | |
476 | |||
480 | if (got_write_lock) | 477 | if (got_write_lock) |
481 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); | 478 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); |
482 | else | 479 | else |
483 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); | 480 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); |
484 | } | 481 | } |
485 | #endif | 482 | #endif |
486 | 483 | ||
487 | int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | 484 | int |
488 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size,SSL_COMP **comp) | 485 | ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, |
489 | { | 486 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size, SSL_COMP **comp) |
487 | { | ||
490 | int i; | 488 | int i; |
491 | const SSL_CIPHER *c; | 489 | const SSL_CIPHER *c; |
492 | 490 | ||
493 | c=s->cipher; | 491 | c = s->cipher; |
494 | if (c == NULL) return(0); | 492 | if (c == NULL) |
495 | if (comp != NULL) | 493 | return (0); |
496 | { | 494 | if (comp != NULL) { |
497 | SSL_COMP ctmp; | 495 | SSL_COMP ctmp; |
498 | #ifndef OPENSSL_NO_COMP | 496 | #ifndef OPENSSL_NO_COMP |
499 | load_builtin_compressions(); | 497 | load_builtin_compressions(); |
500 | #endif | 498 | #endif |
501 | 499 | ||
502 | *comp=NULL; | 500 | *comp = NULL; |
503 | ctmp.id=s->compress_meth; | 501 | ctmp.id = s->compress_meth; |
504 | if (ssl_comp_methods != NULL) | 502 | if (ssl_comp_methods != NULL) { |
505 | { | 503 | i = sk_SSL_COMP_find(ssl_comp_methods, &ctmp); |
506 | i=sk_SSL_COMP_find(ssl_comp_methods,&ctmp); | ||
507 | if (i >= 0) | 504 | if (i >= 0) |
508 | *comp=sk_SSL_COMP_value(ssl_comp_methods,i); | 505 | *comp = sk_SSL_COMP_value(ssl_comp_methods, i); |
509 | else | 506 | else |
510 | *comp=NULL; | 507 | *comp = NULL; |
511 | } | ||
512 | } | 508 | } |
509 | } | ||
513 | 510 | ||
514 | if ((enc == NULL) || (md == NULL)) return(0); | 511 | if ((enc == NULL) |
512 | || (md == NULL)) return (0); | ||
515 | 513 | ||
516 | switch (c->algorithm_enc) | 514 | switch (c->algorithm_enc) { |
517 | { | ||
518 | case SSL_DES: | 515 | case SSL_DES: |
519 | i=SSL_ENC_DES_IDX; | 516 | i = SSL_ENC_DES_IDX; |
520 | break; | 517 | break; |
521 | case SSL_3DES: | 518 | case SSL_3DES: |
522 | i=SSL_ENC_3DES_IDX; | 519 | i = SSL_ENC_3DES_IDX; |
523 | break; | 520 | break; |
524 | case SSL_RC4: | 521 | case SSL_RC4: |
525 | i=SSL_ENC_RC4_IDX; | 522 | i = SSL_ENC_RC4_IDX; |
526 | break; | 523 | break; |
527 | case SSL_RC2: | 524 | case SSL_RC2: |
528 | i=SSL_ENC_RC2_IDX; | 525 | i = SSL_ENC_RC2_IDX; |
529 | break; | 526 | break; |
530 | case SSL_IDEA: | 527 | case SSL_IDEA: |
531 | i=SSL_ENC_IDEA_IDX; | 528 | i = SSL_ENC_IDEA_IDX; |
532 | break; | 529 | break; |
533 | case SSL_eNULL: | 530 | case SSL_eNULL: |
534 | i=SSL_ENC_NULL_IDX; | 531 | i = SSL_ENC_NULL_IDX; |
535 | break; | 532 | break; |
536 | case SSL_AES128: | 533 | case SSL_AES128: |
537 | i=SSL_ENC_AES128_IDX; | 534 | i = SSL_ENC_AES128_IDX; |
538 | break; | 535 | break; |
539 | case SSL_AES256: | 536 | case SSL_AES256: |
540 | i=SSL_ENC_AES256_IDX; | 537 | i = SSL_ENC_AES256_IDX; |
541 | break; | 538 | break; |
542 | case SSL_CAMELLIA128: | 539 | case SSL_CAMELLIA128: |
543 | i=SSL_ENC_CAMELLIA128_IDX; | 540 | i = SSL_ENC_CAMELLIA128_IDX; |
544 | break; | 541 | break; |
545 | case SSL_CAMELLIA256: | 542 | case SSL_CAMELLIA256: |
546 | i=SSL_ENC_CAMELLIA256_IDX; | 543 | i = SSL_ENC_CAMELLIA256_IDX; |
547 | break; | 544 | break; |
548 | case SSL_eGOST2814789CNT: | 545 | case SSL_eGOST2814789CNT: |
549 | i=SSL_ENC_GOST89_IDX; | 546 | i = SSL_ENC_GOST89_IDX; |
550 | break; | 547 | break; |
551 | case SSL_SEED: | 548 | case SSL_SEED: |
552 | i=SSL_ENC_SEED_IDX; | 549 | i = SSL_ENC_SEED_IDX; |
553 | break; | 550 | break; |
554 | case SSL_AES128GCM: | 551 | case SSL_AES128GCM: |
555 | i=SSL_ENC_AES128GCM_IDX; | 552 | i = SSL_ENC_AES128GCM_IDX; |
556 | break; | 553 | break; |
557 | case SSL_AES256GCM: | 554 | case SSL_AES256GCM: |
558 | i=SSL_ENC_AES256GCM_IDX; | 555 | i = SSL_ENC_AES256GCM_IDX; |
559 | break; | 556 | break; |
560 | default: | 557 | default: |
561 | i= -1; | 558 | i = -1; |
562 | break; | 559 | break; |
563 | } | 560 | } |
564 | 561 | ||
565 | if ((i < 0) || (i > SSL_ENC_NUM_IDX)) | 562 | if ((i < 0) || (i > SSL_ENC_NUM_IDX)) |
566 | *enc=NULL; | 563 | *enc = NULL; |
567 | else | 564 | else { |
568 | { | ||
569 | if (i == SSL_ENC_NULL_IDX) | 565 | if (i == SSL_ENC_NULL_IDX) |
570 | *enc=EVP_enc_null(); | 566 | *enc = EVP_enc_null(); |
571 | else | 567 | else |
572 | *enc=ssl_cipher_methods[i]; | 568 | *enc = ssl_cipher_methods[i]; |
573 | } | 569 | } |
574 | 570 | ||
575 | switch (c->algorithm_mac) | 571 | switch (c->algorithm_mac) { |
576 | { | ||
577 | case SSL_MD5: | 572 | case SSL_MD5: |
578 | i=SSL_MD_MD5_IDX; | 573 | i = SSL_MD_MD5_IDX; |
579 | break; | 574 | break; |
580 | case SSL_SHA1: | 575 | case SSL_SHA1: |
581 | i=SSL_MD_SHA1_IDX; | 576 | i = SSL_MD_SHA1_IDX; |
582 | break; | 577 | break; |
583 | case SSL_SHA256: | 578 | case SSL_SHA256: |
584 | i=SSL_MD_SHA256_IDX; | 579 | i = SSL_MD_SHA256_IDX; |
585 | break; | 580 | break; |
586 | case SSL_SHA384: | 581 | case SSL_SHA384: |
587 | i=SSL_MD_SHA384_IDX; | 582 | i = SSL_MD_SHA384_IDX; |
588 | break; | 583 | break; |
589 | case SSL_GOST94: | 584 | case SSL_GOST94: |
590 | i = SSL_MD_GOST94_IDX; | 585 | i = SSL_MD_GOST94_IDX; |
@@ -593,63 +588,63 @@ int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | |||
593 | i = SSL_MD_GOST89MAC_IDX; | 588 | i = SSL_MD_GOST89MAC_IDX; |
594 | break; | 589 | break; |
595 | default: | 590 | default: |
596 | i= -1; | 591 | i = -1; |
597 | break; | 592 | break; |
598 | } | 593 | } |
599 | if ((i < 0) || (i > SSL_MD_NUM_IDX)) | 594 | if ((i < 0) || (i > SSL_MD_NUM_IDX)) { |
600 | { | 595 | *md = NULL; |
601 | *md=NULL; | 596 | |
602 | if (mac_pkey_type!=NULL) *mac_pkey_type = NID_undef; | 597 | if (mac_pkey_type != NULL) |
603 | if (mac_secret_size!=NULL) *mac_secret_size = 0; | 598 | *mac_pkey_type = NID_undef; |
599 | if (mac_secret_size != NULL) | ||
600 | *mac_secret_size = 0; | ||
604 | if (c->algorithm_mac == SSL_AEAD) | 601 | if (c->algorithm_mac == SSL_AEAD) |
605 | mac_pkey_type = NULL; | 602 | mac_pkey_type = NULL; |
606 | } | 603 | } else { |
607 | else | 604 | *md = ssl_digest_methods[i]; |
608 | { | 605 | if (mac_pkey_type != NULL) |
609 | *md=ssl_digest_methods[i]; | 606 | *mac_pkey_type = ssl_mac_pkey_id[i]; |
610 | if (mac_pkey_type!=NULL) *mac_pkey_type = ssl_mac_pkey_id[i]; | 607 | if (mac_secret_size != NULL) |
611 | if (mac_secret_size!=NULL) *mac_secret_size = ssl_mac_secret_size[i]; | 608 | *mac_secret_size = ssl_mac_secret_size[i]; |
612 | } | 609 | } |
613 | 610 | ||
614 | if ((*enc != NULL) && | 611 | if ((*enc != NULL) && |
615 | (*md != NULL || (EVP_CIPHER_flags(*enc)&EVP_CIPH_FLAG_AEAD_CIPHER)) && | 612 | (*md != NULL || (EVP_CIPHER_flags(*enc)&EVP_CIPH_FLAG_AEAD_CIPHER)) && |
616 | (!mac_pkey_type||*mac_pkey_type != NID_undef)) | 613 | (!mac_pkey_type || *mac_pkey_type != NID_undef)) { |
617 | { | ||
618 | const EVP_CIPHER *evp; | 614 | const EVP_CIPHER *evp; |
619 | 615 | ||
620 | if (s->ssl_version>>8 != TLS1_VERSION_MAJOR || | 616 | if (s->ssl_version >> 8 != TLS1_VERSION_MAJOR || |
621 | s->ssl_version < TLS1_VERSION) | 617 | s->ssl_version < TLS1_VERSION) |
622 | return 1; | 618 | return 1; |
623 | 619 | ||
624 | #ifdef OPENSSL_FIPS | 620 | #ifdef OPENSSL_FIPS |
625 | if (FIPS_mode()) | 621 | if (FIPS_mode()) |
626 | return 1; | 622 | return 1; |
627 | #endif | 623 | #endif |
628 | 624 | ||
629 | if (c->algorithm_enc == SSL_RC4 && | 625 | if (c->algorithm_enc == SSL_RC4 && |
630 | c->algorithm_mac == SSL_MD5 && | 626 | c->algorithm_mac == SSL_MD5 && |
631 | (evp=EVP_get_cipherbyname("RC4-HMAC-MD5"))) | 627 | (evp = EVP_get_cipherbyname("RC4-HMAC-MD5"))) |
632 | *enc = evp, *md = NULL; | 628 | *enc = evp, *md = NULL; |
633 | else if (c->algorithm_enc == SSL_AES128 && | 629 | else if (c->algorithm_enc == SSL_AES128 && |
634 | c->algorithm_mac == SSL_SHA1 && | 630 | c->algorithm_mac == SSL_SHA1 && |
635 | (evp=EVP_get_cipherbyname("AES-128-CBC-HMAC-SHA1"))) | 631 | (evp = EVP_get_cipherbyname("AES-128-CBC-HMAC-SHA1"))) |
636 | *enc = evp, *md = NULL; | 632 | *enc = evp, *md = NULL; |
637 | else if (c->algorithm_enc == SSL_AES256 && | 633 | else if (c->algorithm_enc == SSL_AES256 && |
638 | c->algorithm_mac == SSL_SHA1 && | 634 | c->algorithm_mac == SSL_SHA1 && |
639 | (evp=EVP_get_cipherbyname("AES-256-CBC-HMAC-SHA1"))) | 635 | (evp = EVP_get_cipherbyname("AES-256-CBC-HMAC-SHA1"))) |
640 | *enc = evp, *md = NULL; | 636 | *enc = evp, *md = NULL; |
641 | return(1); | 637 | return (1); |
642 | } | 638 | } else |
643 | else | 639 | return (0); |
644 | return(0); | 640 | } |
645 | } | ||
646 | 641 | ||
647 | int ssl_get_handshake_digest(int idx, long *mask, const EVP_MD **md) | 642 | int |
643 | ssl_get_handshake_digest(int idx, long *mask, const EVP_MD **md) | ||
648 | { | 644 | { |
649 | if (idx <0||idx>=SSL_MD_NUM_IDX) | 645 | if (idx < 0 || idx >= SSL_MD_NUM_IDX) { |
650 | { | ||
651 | return 0; | 646 | return 0; |
652 | } | 647 | } |
653 | *mask = ssl_handshake_digest_flag[idx]; | 648 | *mask = ssl_handshake_digest_flag[idx]; |
654 | if (*mask) | 649 | if (*mask) |
655 | *md = ssl_digest_methods[idx]; | 650 | *md = ssl_digest_methods[idx]; |
@@ -661,40 +656,45 @@ int ssl_get_handshake_digest(int idx, long *mask, const EVP_MD **md) | |||
661 | #define ITEM_SEP(a) \ | 656 | #define ITEM_SEP(a) \ |
662 | (((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ',')) | 657 | (((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ',')) |
663 | 658 | ||
664 | static void ll_append_tail(CIPHER_ORDER **head, CIPHER_ORDER *curr, | 659 | static void |
665 | CIPHER_ORDER **tail) | 660 | ll_append_tail(CIPHER_ORDER **head, CIPHER_ORDER *curr, |
666 | { | 661 | CIPHER_ORDER **tail) |
667 | if (curr == *tail) return; | 662 | { |
663 | if (curr == *tail) | ||
664 | return; | ||
668 | if (curr == *head) | 665 | if (curr == *head) |
669 | *head=curr->next; | 666 | *head = curr->next; |
670 | if (curr->prev != NULL) | 667 | if (curr->prev != NULL) |
671 | curr->prev->next=curr->next; | 668 | curr->prev->next = curr->next; |
672 | if (curr->next != NULL) | 669 | if (curr->next != NULL) |
673 | curr->next->prev=curr->prev; | 670 | curr->next->prev = curr->prev; |
674 | (*tail)->next=curr; | 671 | (*tail)->next = curr; |
675 | curr->prev= *tail; | 672 | curr->prev= *tail; |
676 | curr->next=NULL; | 673 | curr->next = NULL; |
677 | *tail=curr; | 674 | *tail = curr; |
678 | } | 675 | } |
679 | 676 | ||
680 | static void ll_append_head(CIPHER_ORDER **head, CIPHER_ORDER *curr, | 677 | static void |
681 | CIPHER_ORDER **tail) | 678 | ll_append_head(CIPHER_ORDER **head, CIPHER_ORDER *curr, |
682 | { | 679 | CIPHER_ORDER **tail) |
683 | if (curr == *head) return; | 680 | { |
681 | if (curr == *head) | ||
682 | return; | ||
684 | if (curr == *tail) | 683 | if (curr == *tail) |
685 | *tail=curr->prev; | 684 | *tail = curr->prev; |
686 | if (curr->next != NULL) | 685 | if (curr->next != NULL) |
687 | curr->next->prev=curr->prev; | 686 | curr->next->prev = curr->prev; |
688 | if (curr->prev != NULL) | 687 | if (curr->prev != NULL) |
689 | curr->prev->next=curr->next; | 688 | curr->prev->next = curr->next; |
690 | (*head)->prev=curr; | 689 | (*head)->prev = curr; |
691 | curr->next= *head; | 690 | curr->next= *head; |
692 | curr->prev=NULL; | 691 | curr->prev = NULL; |
693 | *head=curr; | 692 | *head = curr; |
694 | } | 693 | } |
695 | 694 | ||
696 | static void ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, unsigned long *enc, unsigned long *mac, unsigned long *ssl) | 695 | static void |
697 | { | 696 | ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, unsigned long *enc, unsigned long *mac, unsigned long *ssl) |
697 | { | ||
698 | *mkey = 0; | 698 | *mkey = 0; |
699 | *auth = 0; | 699 | *auth = 0; |
700 | *enc = 0; | 700 | *enc = 0; |
@@ -743,44 +743,45 @@ static void ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, un | |||
743 | /* Disable GOST key exchange if no GOST signature algs are available * */ | 743 | /* Disable GOST key exchange if no GOST signature algs are available * */ |
744 | if ((*auth & (SSL_aGOST94|SSL_aGOST01)) == (SSL_aGOST94|SSL_aGOST01)) { | 744 | if ((*auth & (SSL_aGOST94|SSL_aGOST01)) == (SSL_aGOST94|SSL_aGOST01)) { |
745 | *mkey |= SSL_kGOST; | 745 | *mkey |= SSL_kGOST; |
746 | } | 746 | } |
747 | #ifdef SSL_FORBID_ENULL | 747 | #ifdef SSL_FORBID_ENULL |
748 | *enc |= SSL_eNULL; | 748 | *enc |= SSL_eNULL; |
749 | #endif | 749 | #endif |
750 | |||
751 | |||
752 | |||
753 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES :0; | ||
754 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES:0; | ||
755 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 :0; | ||
756 | *enc |= (ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL) ? SSL_RC2 :0; | ||
757 | *enc |= (ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL) ? SSL_IDEA:0; | ||
758 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128_IDX] == NULL) ? SSL_AES128:0; | ||
759 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256_IDX] == NULL) ? SSL_AES256:0; | ||
760 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128GCM_IDX] == NULL) ? SSL_AES128GCM:0; | ||
761 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256GCM_IDX] == NULL) ? SSL_AES256GCM:0; | ||
762 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX] == NULL) ? SSL_CAMELLIA128:0; | ||
763 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX] == NULL) ? SSL_CAMELLIA256:0; | ||
764 | *enc |= (ssl_cipher_methods[SSL_ENC_GOST89_IDX] == NULL) ? SSL_eGOST2814789CNT:0; | ||
765 | *enc |= (ssl_cipher_methods[SSL_ENC_SEED_IDX] == NULL) ? SSL_SEED:0; | ||
766 | |||
767 | *mac |= (ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL) ? SSL_MD5 :0; | ||
768 | *mac |= (ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL) ? SSL_SHA1:0; | ||
769 | *mac |= (ssl_digest_methods[SSL_MD_SHA256_IDX] == NULL) ? SSL_SHA256:0; | ||
770 | *mac |= (ssl_digest_methods[SSL_MD_SHA384_IDX] == NULL) ? SSL_SHA384:0; | ||
771 | *mac |= (ssl_digest_methods[SSL_MD_GOST94_IDX] == NULL) ? SSL_GOST94:0; | ||
772 | *mac |= (ssl_digest_methods[SSL_MD_GOST89MAC_IDX] == NULL || ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]==NID_undef)? SSL_GOST89MAC:0; | ||
773 | 750 | ||
774 | } | ||
775 | 751 | ||
776 | static void ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method, | 752 | |
777 | int num_of_ciphers, | 753 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES : 0; |
778 | unsigned long disabled_mkey, unsigned long disabled_auth, | 754 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES : 0; |
779 | unsigned long disabled_enc, unsigned long disabled_mac, | 755 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 : 0; |
780 | unsigned long disabled_ssl, | 756 | *enc |= (ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL) ? SSL_RC2 : 0; |
781 | CIPHER_ORDER *co_list, | 757 | *enc |= (ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL) ? SSL_IDEA : 0; |
782 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) | 758 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128_IDX] == NULL) ? SSL_AES128 : 0; |
783 | { | 759 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256_IDX] == NULL) ? SSL_AES256 : 0; |
760 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128GCM_IDX] == NULL) ? SSL_AES128GCM : 0; | ||
761 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256GCM_IDX] == NULL) ? SSL_AES256GCM : 0; | ||
762 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX] == NULL) ? SSL_CAMELLIA128 : 0; | ||
763 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX] == NULL) ? SSL_CAMELLIA256 : 0; | ||
764 | *enc |= (ssl_cipher_methods[SSL_ENC_GOST89_IDX] == NULL) ? SSL_eGOST2814789CNT : 0; | ||
765 | *enc |= (ssl_cipher_methods[SSL_ENC_SEED_IDX] == NULL) ? SSL_SEED : 0; | ||
766 | |||
767 | *mac |= (ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL) ? SSL_MD5 : 0; | ||
768 | *mac |= (ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL) ? SSL_SHA1 : 0; | ||
769 | *mac |= (ssl_digest_methods[SSL_MD_SHA256_IDX] == NULL) ? SSL_SHA256 : 0; | ||
770 | *mac |= (ssl_digest_methods[SSL_MD_SHA384_IDX] == NULL) ? SSL_SHA384 : 0; | ||
771 | *mac |= (ssl_digest_methods[SSL_MD_GOST94_IDX] == NULL) ? SSL_GOST94 : 0; | ||
772 | *mac |= (ssl_digest_methods[SSL_MD_GOST89MAC_IDX] == NULL || ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]==NID_undef) ? SSL_GOST89MAC : 0; | ||
773 | |||
774 | } | ||
775 | |||
776 | static void | ||
777 | ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method, | ||
778 | int num_of_ciphers, | ||
779 | unsigned long disabled_mkey, unsigned long disabled_auth, | ||
780 | unsigned long disabled_enc, unsigned long disabled_mac, | ||
781 | unsigned long disabled_ssl, | ||
782 | CIPHER_ORDER *co_list, | ||
783 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) | ||
784 | { | ||
784 | int i, co_list_num; | 785 | int i, co_list_num; |
785 | const SSL_CIPHER *c; | 786 | const SSL_CIPHER *c; |
786 | 787 | ||
@@ -793,68 +794,64 @@ static void ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method, | |||
793 | 794 | ||
794 | /* Get the initial list of ciphers */ | 795 | /* Get the initial list of ciphers */ |
795 | co_list_num = 0; /* actual count of ciphers */ | 796 | co_list_num = 0; /* actual count of ciphers */ |
796 | for (i = 0; i < num_of_ciphers; i++) | 797 | for (i = 0; i < num_of_ciphers; i++) { |
797 | { | ||
798 | c = ssl_method->get_cipher(i); | 798 | c = ssl_method->get_cipher(i); |
799 | /* drop those that use any of that is not available */ | 799 | /* drop those that use any of that is not available */ |
800 | if ((c != NULL) && c->valid && | 800 | if ((c != NULL) && c->valid && |
801 | #ifdef OPENSSL_FIPS | 801 | #ifdef OPENSSL_FIPS |
802 | (!FIPS_mode() || (c->algo_strength & SSL_FIPS)) && | 802 | (!FIPS_mode() || (c->algo_strength & SSL_FIPS)) && |
803 | #endif | 803 | #endif |
804 | !(c->algorithm_mkey & disabled_mkey) && | 804 | !(c->algorithm_mkey & disabled_mkey) && |
805 | !(c->algorithm_auth & disabled_auth) && | 805 | !(c->algorithm_auth & disabled_auth) && |
806 | !(c->algorithm_enc & disabled_enc) && | 806 | !(c->algorithm_enc & disabled_enc) && |
807 | !(c->algorithm_mac & disabled_mac) && | 807 | !(c->algorithm_mac & disabled_mac) && |
808 | !(c->algorithm_ssl & disabled_ssl)) | 808 | !(c->algorithm_ssl & disabled_ssl)) { |
809 | { | ||
810 | co_list[co_list_num].cipher = c; | 809 | co_list[co_list_num].cipher = c; |
811 | co_list[co_list_num].next = NULL; | 810 | co_list[co_list_num].next = NULL; |
812 | co_list[co_list_num].prev = NULL; | 811 | co_list[co_list_num].prev = NULL; |
813 | co_list[co_list_num].active = 0; | 812 | co_list[co_list_num].active = 0; |
814 | co_list_num++; | 813 | co_list_num++; |
815 | #ifdef KSSL_DEBUG | 814 | #ifdef KSSL_DEBUG |
816 | printf("\t%d: %s %lx %lx %lx\n",i,c->name,c->id,c->algorithm_mkey,c->algorithm_auth); | 815 | printf("\t%d: %s %lx %lx %lx\n", i, c->name, c->id, c->algorithm_mkey, c->algorithm_auth); |
817 | #endif /* KSSL_DEBUG */ | 816 | #endif /* KSSL_DEBUG */ |
818 | /* | 817 | /* |
819 | if (!sk_push(ca_list,(char *)c)) goto err; | 818 | if (!sk_push(ca_list,(char *)c)) goto err; |
820 | */ | 819 | */ |
821 | } | ||
822 | } | 820 | } |
821 | } | ||
823 | 822 | ||
824 | /* | 823 | /* |
825 | * Prepare linked list from list entries | 824 | * Prepare linked list from list entries |
826 | */ | 825 | */ |
827 | if (co_list_num > 0) | 826 | if (co_list_num > 0) { |
828 | { | ||
829 | co_list[0].prev = NULL; | 827 | co_list[0].prev = NULL; |
830 | 828 | ||
831 | if (co_list_num > 1) | 829 | if (co_list_num > 1) { |
832 | { | ||
833 | co_list[0].next = &co_list[1]; | 830 | co_list[0].next = &co_list[1]; |
834 | 831 | ||
835 | for (i = 1; i < co_list_num - 1; i++) | 832 | for (i = 1; i < co_list_num - 1; i++) { |
836 | { | ||
837 | co_list[i].prev = &co_list[i - 1]; | 833 | co_list[i].prev = &co_list[i - 1]; |
838 | co_list[i].next = &co_list[i + 1]; | 834 | co_list[i].next = &co_list[i + 1]; |
839 | } | 835 | } |
840 | 836 | ||
841 | co_list[co_list_num - 1].prev = &co_list[co_list_num - 2]; | 837 | co_list[co_list_num - 1].prev = &co_list[co_list_num - 2]; |
842 | } | 838 | } |
843 | 839 | ||
844 | co_list[co_list_num - 1].next = NULL; | 840 | co_list[co_list_num - 1].next = NULL; |
845 | 841 | ||
846 | *head_p = &co_list[0]; | 842 | *head_p = &co_list[0]; |
847 | *tail_p = &co_list[co_list_num - 1]; | 843 | *tail_p = &co_list[co_list_num - 1]; |
848 | } | ||
849 | } | 844 | } |
845 | } | ||
850 | 846 | ||
851 | static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | 847 | static void |
852 | int num_of_group_aliases, | 848 | ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, |
853 | unsigned long disabled_mkey, unsigned long disabled_auth, | 849 | int num_of_group_aliases, |
854 | unsigned long disabled_enc, unsigned long disabled_mac, | 850 | unsigned long disabled_mkey, unsigned long disabled_auth, |
855 | unsigned long disabled_ssl, | 851 | unsigned long disabled_enc, unsigned long disabled_mac, |
856 | CIPHER_ORDER *head) | 852 | unsigned long disabled_ssl, |
857 | { | 853 | CIPHER_ORDER *head) |
854 | { | ||
858 | CIPHER_ORDER *ciph_curr; | 855 | CIPHER_ORDER *ciph_curr; |
859 | const SSL_CIPHER **ca_curr; | 856 | const SSL_CIPHER **ca_curr; |
860 | int i; | 857 | int i; |
@@ -869,12 +866,11 @@ static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | |||
869 | */ | 866 | */ |
870 | ciph_curr = head; | 867 | ciph_curr = head; |
871 | ca_curr = ca_list; | 868 | ca_curr = ca_list; |
872 | while (ciph_curr != NULL) | 869 | while (ciph_curr != NULL) { |
873 | { | ||
874 | *ca_curr = ciph_curr->cipher; | 870 | *ca_curr = ciph_curr->cipher; |
875 | ca_curr++; | 871 | ca_curr++; |
876 | ciph_curr = ciph_curr->next; | 872 | ciph_curr = ciph_curr->next; |
877 | } | 873 | } |
878 | 874 | ||
879 | /* | 875 | /* |
880 | * Now we add the available ones from the cipher_aliases[] table. | 876 | * Now we add the available ones from the cipher_aliases[] table. |
@@ -882,8 +878,7 @@ static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | |||
882 | * in any affected category must be supported (set in enabled_mask), | 878 | * in any affected category must be supported (set in enabled_mask), |
883 | * or represent a cipher strength value (will be added in any case because algorithms=0). | 879 | * or represent a cipher strength value (will be added in any case because algorithms=0). |
884 | */ | 880 | */ |
885 | for (i = 0; i < num_of_group_aliases; i++) | 881 | for (i = 0; i < num_of_group_aliases; i++) { |
886 | { | ||
887 | unsigned long algorithm_mkey = cipher_aliases[i].algorithm_mkey; | 882 | unsigned long algorithm_mkey = cipher_aliases[i].algorithm_mkey; |
888 | unsigned long algorithm_auth = cipher_aliases[i].algorithm_auth; | 883 | unsigned long algorithm_auth = cipher_aliases[i].algorithm_auth; |
889 | unsigned long algorithm_enc = cipher_aliases[i].algorithm_enc; | 884 | unsigned long algorithm_enc = cipher_aliases[i].algorithm_enc; |
@@ -893,45 +888,46 @@ static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | |||
893 | if (algorithm_mkey) | 888 | if (algorithm_mkey) |
894 | if ((algorithm_mkey & mask_mkey) == 0) | 889 | if ((algorithm_mkey & mask_mkey) == 0) |
895 | continue; | 890 | continue; |
896 | 891 | ||
897 | if (algorithm_auth) | 892 | if (algorithm_auth) |
898 | if ((algorithm_auth & mask_auth) == 0) | 893 | if ((algorithm_auth & mask_auth) == 0) |
899 | continue; | 894 | continue; |
900 | 895 | ||
901 | if (algorithm_enc) | 896 | if (algorithm_enc) |
902 | if ((algorithm_enc & mask_enc) == 0) | 897 | if ((algorithm_enc & mask_enc) == 0) |
903 | continue; | 898 | continue; |
904 | 899 | ||
905 | if (algorithm_mac) | 900 | if (algorithm_mac) |
906 | if ((algorithm_mac & mask_mac) == 0) | 901 | if ((algorithm_mac & mask_mac) == 0) |
907 | continue; | 902 | continue; |
908 | 903 | ||
909 | if (algorithm_ssl) | 904 | if (algorithm_ssl) |
910 | if ((algorithm_ssl & mask_ssl) == 0) | 905 | if ((algorithm_ssl & mask_ssl) == 0) |
911 | continue; | 906 | continue; |
912 | 907 | ||
913 | *ca_curr = (SSL_CIPHER *)(cipher_aliases + i); | 908 | *ca_curr = (SSL_CIPHER *)(cipher_aliases + i); |
914 | ca_curr++; | 909 | ca_curr++; |
915 | } | 910 | } |
916 | 911 | ||
917 | *ca_curr = NULL; /* end of list */ | 912 | *ca_curr = NULL; /* end of list */ |
918 | } | 913 | } |
919 | 914 | ||
920 | static void ssl_cipher_apply_rule(unsigned long cipher_id, | 915 | static void |
921 | unsigned long alg_mkey, unsigned long alg_auth, | 916 | ssl_cipher_apply_rule(unsigned long cipher_id, |
922 | unsigned long alg_enc, unsigned long alg_mac, | 917 | unsigned long alg_mkey, unsigned long alg_auth, |
923 | unsigned long alg_ssl, | 918 | unsigned long alg_enc, unsigned long alg_mac, |
924 | unsigned long algo_strength, | 919 | unsigned long alg_ssl, |
925 | int rule, int strength_bits, | 920 | unsigned long algo_strength, |
926 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) | 921 | int rule, int strength_bits, |
927 | { | 922 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) |
923 | { | ||
928 | CIPHER_ORDER *head, *tail, *curr, *curr2, *last; | 924 | CIPHER_ORDER *head, *tail, *curr, *curr2, *last; |
929 | const SSL_CIPHER *cp; | 925 | const SSL_CIPHER *cp; |
930 | int reverse = 0; | 926 | int reverse = 0; |
931 | 927 | ||
932 | #ifdef CIPHER_DEBUG | 928 | #ifdef CIPHER_DEBUG |
933 | printf("Applying rule %d with %08lx/%08lx/%08lx/%08lx/%08lx %08lx (%d)\n", | 929 | printf("Applying rule %d with %08lx/%08lx/%08lx/%08lx/%08lx %08lx (%d)\n", |
934 | rule, alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, strength_bits); | 930 | rule, alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, strength_bits); |
935 | #endif | 931 | #endif |
936 | 932 | ||
937 | if (rule == CIPHER_DEL) | 933 | if (rule == CIPHER_DEL) |
@@ -940,21 +936,18 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
940 | head = *head_p; | 936 | head = *head_p; |
941 | tail = *tail_p; | 937 | tail = *tail_p; |
942 | 938 | ||
943 | if (reverse) | 939 | if (reverse) { |
944 | { | ||
945 | curr = tail; | 940 | curr = tail; |
946 | last = head; | 941 | last = head; |
947 | } | 942 | } else { |
948 | else | ||
949 | { | ||
950 | curr = head; | 943 | curr = head; |
951 | last = tail; | 944 | last = tail; |
952 | } | 945 | } |
953 | 946 | ||
954 | curr2 = curr; | 947 | curr2 = curr; |
955 | for (;;) | 948 | for (;;) { |
956 | { | 949 | if ((curr == NULL) |
957 | if ((curr == NULL) || (curr == last)) break; | 950 | || (curr == last)) break; |
958 | curr = curr2; | 951 | curr = curr2; |
959 | curr2 = reverse ? curr->prev : curr->next; | 952 | curr2 = reverse ? curr->prev : curr->next; |
960 | 953 | ||
@@ -964,13 +957,10 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
964 | * Selection criteria is either the value of strength_bits | 957 | * Selection criteria is either the value of strength_bits |
965 | * or the algorithms used. | 958 | * or the algorithms used. |
966 | */ | 959 | */ |
967 | if (strength_bits >= 0) | 960 | if (strength_bits >= 0) { |
968 | { | ||
969 | if (strength_bits != cp->strength_bits) | 961 | if (strength_bits != cp->strength_bits) |
970 | continue; | 962 | continue; |
971 | } | 963 | } else { |
972 | else | ||
973 | { | ||
974 | #ifdef CIPHER_DEBUG | 964 | #ifdef CIPHER_DEBUG |
975 | printf("\nName: %s:\nAlgo = %08lx/%08lx/%08lx/%08lx/%08lx Algo_strength = %08lx\n", cp->name, cp->algorithm_mkey, cp->algorithm_auth, cp->algorithm_enc, cp->algorithm_mac, cp->algorithm_ssl, cp->algo_strength); | 965 | printf("\nName: %s:\nAlgo = %08lx/%08lx/%08lx/%08lx/%08lx Algo_strength = %08lx\n", cp->name, cp->algorithm_mkey, cp->algorithm_auth, cp->algorithm_enc, cp->algorithm_mac, cp->algorithm_ssl, cp->algo_strength); |
976 | #endif | 966 | #endif |
@@ -989,45 +979,36 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
989 | continue; | 979 | continue; |
990 | if ((algo_strength & SSL_STRONG_MASK) && !(algo_strength & SSL_STRONG_MASK & cp->algo_strength)) | 980 | if ((algo_strength & SSL_STRONG_MASK) && !(algo_strength & SSL_STRONG_MASK & cp->algo_strength)) |
991 | continue; | 981 | continue; |
992 | } | 982 | } |
993 | 983 | ||
994 | #ifdef CIPHER_DEBUG | 984 | #ifdef CIPHER_DEBUG |
995 | printf("Action = %d\n", rule); | 985 | printf("Action = %d\n", rule); |
996 | #endif | 986 | #endif |
997 | 987 | ||
998 | /* add the cipher if it has not been added yet. */ | 988 | /* add the cipher if it has not been added yet. */ |
999 | if (rule == CIPHER_ADD) | 989 | if (rule == CIPHER_ADD) { |
1000 | { | ||
1001 | /* reverse == 0 */ | 990 | /* reverse == 0 */ |
1002 | if (!curr->active) | 991 | if (!curr->active) { |
1003 | { | ||
1004 | ll_append_tail(&head, curr, &tail); | 992 | ll_append_tail(&head, curr, &tail); |
1005 | curr->active = 1; | 993 | curr->active = 1; |
1006 | } | ||
1007 | } | 994 | } |
995 | } | ||
1008 | /* Move the added cipher to this location */ | 996 | /* Move the added cipher to this location */ |
1009 | else if (rule == CIPHER_ORD) | 997 | else if (rule == CIPHER_ORD) { |
1010 | { | ||
1011 | /* reverse == 0 */ | 998 | /* reverse == 0 */ |
1012 | if (curr->active) | 999 | if (curr->active) { |
1013 | { | ||
1014 | ll_append_tail(&head, curr, &tail); | 1000 | ll_append_tail(&head, curr, &tail); |
1015 | } | ||
1016 | } | 1001 | } |
1017 | else if (rule == CIPHER_DEL) | 1002 | } else if (rule == CIPHER_DEL) { |
1018 | { | ||
1019 | /* reverse == 1 */ | 1003 | /* reverse == 1 */ |
1020 | if (curr->active) | 1004 | if (curr->active) { |
1021 | { | ||
1022 | /* most recently deleted ciphersuites get best positions | 1005 | /* most recently deleted ciphersuites get best positions |
1023 | * for any future CIPHER_ADD (note that the CIPHER_DEL loop | 1006 | * for any future CIPHER_ADD (note that the CIPHER_DEL loop |
1024 | * works in reverse to maintain the order) */ | 1007 | * works in reverse to maintain the order) */ |
1025 | ll_append_head(&head, curr, &tail); | 1008 | ll_append_head(&head, curr, &tail); |
1026 | curr->active = 0; | 1009 | curr->active = 0; |
1027 | } | ||
1028 | } | 1010 | } |
1029 | else if (rule == CIPHER_KILL) | 1011 | } else if (rule == CIPHER_KILL) { |
1030 | { | ||
1031 | /* reverse == 0 */ | 1012 | /* reverse == 0 */ |
1032 | if (head == curr) | 1013 | if (head == curr) |
1033 | head = curr->next; | 1014 | head = curr->next; |
@@ -1042,16 +1023,17 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
1042 | curr->prev->next = curr->next; | 1023 | curr->prev->next = curr->next; |
1043 | curr->next = NULL; | 1024 | curr->next = NULL; |
1044 | curr->prev = NULL; | 1025 | curr->prev = NULL; |
1045 | } | ||
1046 | } | 1026 | } |
1027 | } | ||
1047 | 1028 | ||
1048 | *head_p = head; | 1029 | *head_p = head; |
1049 | *tail_p = tail; | 1030 | *tail_p = tail; |
1050 | } | 1031 | } |
1051 | 1032 | ||
1052 | static int ssl_cipher_strength_sort(CIPHER_ORDER **head_p, | 1033 | static int |
1053 | CIPHER_ORDER **tail_p) | 1034 | ssl_cipher_strength_sort(CIPHER_ORDER **head_p, |
1054 | { | 1035 | CIPHER_ORDER **tail_p) |
1036 | { | ||
1055 | int max_strength_bits, i, *number_uses; | 1037 | int max_strength_bits, i, *number_uses; |
1056 | CIPHER_ORDER *curr; | 1038 | CIPHER_ORDER *curr; |
1057 | 1039 | ||
@@ -1062,32 +1044,29 @@ static int ssl_cipher_strength_sort(CIPHER_ORDER **head_p, | |||
1062 | */ | 1044 | */ |
1063 | max_strength_bits = 0; | 1045 | max_strength_bits = 0; |
1064 | curr = *head_p; | 1046 | curr = *head_p; |
1065 | while (curr != NULL) | 1047 | while (curr != NULL) { |
1066 | { | ||
1067 | if (curr->active && | 1048 | if (curr->active && |
1068 | (curr->cipher->strength_bits > max_strength_bits)) | 1049 | (curr->cipher->strength_bits > max_strength_bits)) |
1069 | max_strength_bits = curr->cipher->strength_bits; | 1050 | max_strength_bits = curr->cipher->strength_bits; |
1070 | curr = curr->next; | 1051 | curr = curr->next; |
1071 | } | 1052 | } |
1072 | 1053 | ||
1073 | number_uses = OPENSSL_malloc((max_strength_bits + 1) * sizeof(int)); | 1054 | number_uses = OPENSSL_malloc((max_strength_bits + 1) * sizeof(int)); |
1074 | if (!number_uses) | 1055 | if (!number_uses) { |
1075 | { | 1056 | SSLerr(SSL_F_SSL_CIPHER_STRENGTH_SORT, ERR_R_MALLOC_FAILURE); |
1076 | SSLerr(SSL_F_SSL_CIPHER_STRENGTH_SORT,ERR_R_MALLOC_FAILURE); | 1057 | return (0); |
1077 | return(0); | 1058 | } |
1078 | } | ||
1079 | memset(number_uses, 0, (max_strength_bits + 1) * sizeof(int)); | 1059 | memset(number_uses, 0, (max_strength_bits + 1) * sizeof(int)); |
1080 | 1060 | ||
1081 | /* | 1061 | /* |
1082 | * Now find the strength_bits values actually used | 1062 | * Now find the strength_bits values actually used |
1083 | */ | 1063 | */ |
1084 | curr = *head_p; | 1064 | curr = *head_p; |
1085 | while (curr != NULL) | 1065 | while (curr != NULL) { |
1086 | { | ||
1087 | if (curr->active) | 1066 | if (curr->active) |
1088 | number_uses[curr->cipher->strength_bits]++; | 1067 | number_uses[curr->cipher->strength_bits]++; |
1089 | curr = curr->next; | 1068 | curr = curr->next; |
1090 | } | 1069 | } |
1091 | /* | 1070 | /* |
1092 | * Go through the list of used strength_bits values in descending | 1071 | * Go through the list of used strength_bits values in descending |
1093 | * order. | 1072 | * order. |
@@ -1097,13 +1076,14 @@ static int ssl_cipher_strength_sort(CIPHER_ORDER **head_p, | |||
1097 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_ORD, i, head_p, tail_p); | 1076 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_ORD, i, head_p, tail_p); |
1098 | 1077 | ||
1099 | OPENSSL_free(number_uses); | 1078 | OPENSSL_free(number_uses); |
1100 | return(1); | 1079 | return (1); |
1101 | } | 1080 | } |
1102 | 1081 | ||
1103 | static int ssl_cipher_process_rulestr(const char *rule_str, | 1082 | static int |
1104 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p, | 1083 | ssl_cipher_process_rulestr(const char *rule_str, |
1105 | const SSL_CIPHER **ca_list) | 1084 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p, |
1106 | { | 1085 | const SSL_CIPHER **ca_list) |
1086 | { | ||
1107 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength; | 1087 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength; |
1108 | const char *l, *buf; | 1088 | const char *l, *buf; |
1109 | int j, multi, found, rule, retval, ok, buflen; | 1089 | int j, multi, found, rule, retval, ok, buflen; |
@@ -1112,28 +1092,32 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1112 | 1092 | ||
1113 | retval = 1; | 1093 | retval = 1; |
1114 | l = rule_str; | 1094 | l = rule_str; |
1115 | for (;;) | 1095 | for (;;) { |
1116 | { | ||
1117 | ch = *l; | 1096 | ch = *l; |
1118 | 1097 | ||
1119 | if (ch == '\0') | 1098 | if (ch == '\0') |
1120 | break; /* done */ | 1099 | break; |
1100 | /* done */ | ||
1121 | if (ch == '-') | 1101 | if (ch == '-') |
1122 | { rule = CIPHER_DEL; l++; } | 1102 | { rule = CIPHER_DEL; |
1123 | else if (ch == '+') | 1103 | l++; |
1124 | { rule = CIPHER_ORD; l++; } | 1104 | } else if (ch == '+') |
1125 | else if (ch == '!') | 1105 | { rule = CIPHER_ORD; |
1126 | { rule = CIPHER_KILL; l++; } | 1106 | l++; |
1127 | else if (ch == '@') | 1107 | } else if (ch == '!') |
1128 | { rule = CIPHER_SPECIAL; l++; } | 1108 | { rule = CIPHER_KILL; |
1129 | else | 1109 | l++; |
1130 | { rule = CIPHER_ADD; } | 1110 | } else if (ch == '@') |
1111 | { rule = CIPHER_SPECIAL; | ||
1112 | l++; | ||
1113 | } else | ||
1114 | { rule = CIPHER_ADD; | ||
1115 | } | ||
1131 | 1116 | ||
1132 | if (ITEM_SEP(ch)) | 1117 | if (ITEM_SEP(ch)) { |
1133 | { | ||
1134 | l++; | 1118 | l++; |
1135 | continue; | 1119 | continue; |
1136 | } | 1120 | } |
1137 | 1121 | ||
1138 | alg_mkey = 0; | 1122 | alg_mkey = 0; |
1139 | alg_auth = 0; | 1123 | alg_auth = 0; |
@@ -1142,52 +1126,47 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1142 | alg_ssl = 0; | 1126 | alg_ssl = 0; |
1143 | algo_strength = 0; | 1127 | algo_strength = 0; |
1144 | 1128 | ||
1145 | for (;;) | 1129 | for (;;) { |
1146 | { | ||
1147 | ch = *l; | 1130 | ch = *l; |
1148 | buf = l; | 1131 | buf = l; |
1149 | buflen = 0; | 1132 | buflen = 0; |
1150 | #ifndef CHARSET_EBCDIC | 1133 | #ifndef CHARSET_EBCDIC |
1151 | while ( ((ch >= 'A') && (ch <= 'Z')) || | 1134 | while (((ch >= 'A') && (ch <= 'Z')) || |
1152 | ((ch >= '0') && (ch <= '9')) || | 1135 | ((ch >= '0') && (ch <= '9')) || |
1153 | ((ch >= 'a') && (ch <= 'z')) || | 1136 | ((ch >= 'a') && (ch <= 'z')) || |
1154 | (ch == '-') || (ch == '.')) | 1137 | (ch == '-') || (ch == '.')) |
1155 | #else | 1138 | #else |
1156 | while ( isalnum(ch) || (ch == '-') || (ch == '.')) | 1139 | while (isalnum(ch) || (ch == '-') || (ch == '.')) |
1157 | #endif | 1140 | #endif |
1158 | { | 1141 | { |
1159 | ch = *(++l); | 1142 | ch = *(++l); |
1160 | buflen++; | 1143 | buflen++; |
1161 | } | 1144 | } |
1162 | 1145 | ||
1163 | if (buflen == 0) | 1146 | if (buflen == 0) { |
1164 | { | ||
1165 | /* | 1147 | /* |
1166 | * We hit something we cannot deal with, | 1148 | * We hit something we cannot deal with, |
1167 | * it is no command or separator nor | 1149 | * it is no command or separator nor |
1168 | * alphanumeric, so we call this an error. | 1150 | * alphanumeric, so we call this an error. |
1169 | */ | 1151 | */ |
1170 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, | 1152 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, |
1171 | SSL_R_INVALID_COMMAND); | 1153 | SSL_R_INVALID_COMMAND); |
1172 | retval = found = 0; | 1154 | retval = found = 0; |
1173 | l++; | 1155 | l++; |
1174 | break; | 1156 | break; |
1175 | } | 1157 | } |
1176 | 1158 | ||
1177 | if (rule == CIPHER_SPECIAL) | 1159 | if (rule == CIPHER_SPECIAL) { |
1178 | { | ||
1179 | found = 0; /* unused -- avoid compiler warning */ | 1160 | found = 0; /* unused -- avoid compiler warning */ |
1180 | break; /* special treatment */ | 1161 | break; /* special treatment */ |
1181 | } | 1162 | } |
1182 | 1163 | ||
1183 | /* check for multi-part specification */ | 1164 | /* check for multi-part specification */ |
1184 | if (ch == '+') | 1165 | if (ch == '+') { |
1185 | { | 1166 | multi = 1; |
1186 | multi=1; | ||
1187 | l++; | 1167 | l++; |
1188 | } | 1168 | } else |
1189 | else | 1169 | multi = 0; |
1190 | multi=0; | ||
1191 | 1170 | ||
1192 | /* | 1171 | /* |
1193 | * Now search for the cipher alias in the ca_list. Be careful | 1172 | * Now search for the cipher alias in the ca_list. Be careful |
@@ -1202,126 +1181,121 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1202 | */ | 1181 | */ |
1203 | j = found = 0; | 1182 | j = found = 0; |
1204 | cipher_id = 0; | 1183 | cipher_id = 0; |
1205 | while (ca_list[j]) | 1184 | while (ca_list[j]) { |
1206 | { | ||
1207 | if (!strncmp(buf, ca_list[j]->name, buflen) && | 1185 | if (!strncmp(buf, ca_list[j]->name, buflen) && |
1208 | (ca_list[j]->name[buflen] == '\0')) | 1186 | (ca_list[j]->name[buflen] == '\0')) { |
1209 | { | ||
1210 | found = 1; | 1187 | found = 1; |
1211 | break; | 1188 | break; |
1212 | } | 1189 | } else |
1213 | else | ||
1214 | j++; | 1190 | j++; |
1215 | } | 1191 | } |
1216 | 1192 | ||
1217 | if (!found) | 1193 | if (!found) |
1218 | break; /* ignore this entry */ | 1194 | break; /* ignore this entry */ |
1219 | 1195 | ||
1220 | if (ca_list[j]->algorithm_mkey) | 1196 | if (ca_list[j]->algorithm_mkey) { |
1221 | { | 1197 | if (alg_mkey) { |
1222 | if (alg_mkey) | ||
1223 | { | ||
1224 | alg_mkey &= ca_list[j]->algorithm_mkey; | 1198 | alg_mkey &= ca_list[j]->algorithm_mkey; |
1225 | if (!alg_mkey) { found = 0; break; } | 1199 | if (!alg_mkey) { |
1200 | found = 0; | ||
1201 | break; | ||
1226 | } | 1202 | } |
1227 | else | 1203 | } else |
1228 | alg_mkey = ca_list[j]->algorithm_mkey; | 1204 | alg_mkey = ca_list[j]->algorithm_mkey; |
1229 | } | 1205 | } |
1230 | 1206 | ||
1231 | if (ca_list[j]->algorithm_auth) | 1207 | if (ca_list[j]->algorithm_auth) { |
1232 | { | 1208 | if (alg_auth) { |
1233 | if (alg_auth) | ||
1234 | { | ||
1235 | alg_auth &= ca_list[j]->algorithm_auth; | 1209 | alg_auth &= ca_list[j]->algorithm_auth; |
1236 | if (!alg_auth) { found = 0; break; } | 1210 | if (!alg_auth) { |
1211 | found = 0; | ||
1212 | break; | ||
1237 | } | 1213 | } |
1238 | else | 1214 | } else |
1239 | alg_auth = ca_list[j]->algorithm_auth; | 1215 | alg_auth = ca_list[j]->algorithm_auth; |
1240 | } | 1216 | } |
1241 | 1217 | ||
1242 | if (ca_list[j]->algorithm_enc) | 1218 | if (ca_list[j]->algorithm_enc) { |
1243 | { | 1219 | if (alg_enc) { |
1244 | if (alg_enc) | ||
1245 | { | ||
1246 | alg_enc &= ca_list[j]->algorithm_enc; | 1220 | alg_enc &= ca_list[j]->algorithm_enc; |
1247 | if (!alg_enc) { found = 0; break; } | 1221 | if (!alg_enc) { |
1222 | found = 0; | ||
1223 | break; | ||
1248 | } | 1224 | } |
1249 | else | 1225 | } else |
1250 | alg_enc = ca_list[j]->algorithm_enc; | 1226 | alg_enc = ca_list[j]->algorithm_enc; |
1251 | } | 1227 | } |
1252 | 1228 | ||
1253 | if (ca_list[j]->algorithm_mac) | 1229 | if (ca_list[j]->algorithm_mac) { |
1254 | { | 1230 | if (alg_mac) { |
1255 | if (alg_mac) | ||
1256 | { | ||
1257 | alg_mac &= ca_list[j]->algorithm_mac; | 1231 | alg_mac &= ca_list[j]->algorithm_mac; |
1258 | if (!alg_mac) { found = 0; break; } | 1232 | if (!alg_mac) { |
1233 | found = 0; | ||
1234 | break; | ||
1259 | } | 1235 | } |
1260 | else | 1236 | } else |
1261 | alg_mac = ca_list[j]->algorithm_mac; | 1237 | alg_mac = ca_list[j]->algorithm_mac; |
1262 | } | 1238 | } |
1263 | 1239 | ||
1264 | if (ca_list[j]->algo_strength & SSL_EXP_MASK) | 1240 | if (ca_list[j]->algo_strength & SSL_EXP_MASK) { |
1265 | { | 1241 | if (algo_strength & SSL_EXP_MASK) { |
1266 | if (algo_strength & SSL_EXP_MASK) | ||
1267 | { | ||
1268 | algo_strength &= (ca_list[j]->algo_strength & SSL_EXP_MASK) | ~SSL_EXP_MASK; | 1242 | algo_strength &= (ca_list[j]->algo_strength & SSL_EXP_MASK) | ~SSL_EXP_MASK; |
1269 | if (!(algo_strength & SSL_EXP_MASK)) { found = 0; break; } | 1243 | if (!(algo_strength & SSL_EXP_MASK)) { |
1244 | found = 0; | ||
1245 | break; | ||
1270 | } | 1246 | } |
1271 | else | 1247 | } else |
1272 | algo_strength |= ca_list[j]->algo_strength & SSL_EXP_MASK; | 1248 | algo_strength |= ca_list[j]->algo_strength & SSL_EXP_MASK; |
1273 | } | 1249 | } |
1274 | 1250 | ||
1275 | if (ca_list[j]->algo_strength & SSL_STRONG_MASK) | 1251 | if (ca_list[j]->algo_strength & SSL_STRONG_MASK) { |
1276 | { | 1252 | if (algo_strength & SSL_STRONG_MASK) { |
1277 | if (algo_strength & SSL_STRONG_MASK) | ||
1278 | { | ||
1279 | algo_strength &= (ca_list[j]->algo_strength & SSL_STRONG_MASK) | ~SSL_STRONG_MASK; | 1253 | algo_strength &= (ca_list[j]->algo_strength & SSL_STRONG_MASK) | ~SSL_STRONG_MASK; |
1280 | if (!(algo_strength & SSL_STRONG_MASK)) { found = 0; break; } | 1254 | if (!(algo_strength & SSL_STRONG_MASK)) { |
1255 | found = 0; | ||
1256 | break; | ||
1281 | } | 1257 | } |
1282 | else | 1258 | } else |
1283 | algo_strength |= ca_list[j]->algo_strength & SSL_STRONG_MASK; | 1259 | algo_strength |= ca_list[j]->algo_strength & SSL_STRONG_MASK; |
1284 | } | 1260 | } |
1285 | 1261 | ||
1286 | if (ca_list[j]->valid) | 1262 | if (ca_list[j]->valid) { |
1287 | { | ||
1288 | /* explicit ciphersuite found; its protocol version | 1263 | /* explicit ciphersuite found; its protocol version |
1289 | * does not become part of the search pattern!*/ | 1264 | * does not become part of the search pattern!*/ |
1290 | 1265 | ||
1291 | cipher_id = ca_list[j]->id; | 1266 | cipher_id = ca_list[j]->id; |
1292 | } | 1267 | } else { |
1293 | else | ||
1294 | { | ||
1295 | /* not an explicit ciphersuite; only in this case, the | 1268 | /* not an explicit ciphersuite; only in this case, the |
1296 | * protocol version is considered part of the search pattern */ | 1269 | * protocol version is considered part of the search pattern */ |
1297 | 1270 | ||
1298 | if (ca_list[j]->algorithm_ssl) | 1271 | if (ca_list[j]->algorithm_ssl) { |
1299 | { | 1272 | if (alg_ssl) { |
1300 | if (alg_ssl) | ||
1301 | { | ||
1302 | alg_ssl &= ca_list[j]->algorithm_ssl; | 1273 | alg_ssl &= ca_list[j]->algorithm_ssl; |
1303 | if (!alg_ssl) { found = 0; break; } | 1274 | if (!alg_ssl) { |
1275 | found = 0; | ||
1276 | break; | ||
1304 | } | 1277 | } |
1305 | else | 1278 | } else |
1306 | alg_ssl = ca_list[j]->algorithm_ssl; | 1279 | alg_ssl = ca_list[j]->algorithm_ssl; |
1307 | } | ||
1308 | } | 1280 | } |
1309 | |||
1310 | if (!multi) break; | ||
1311 | } | 1281 | } |
1312 | 1282 | ||
1283 | if (!multi) | ||
1284 | break; | ||
1285 | } | ||
1286 | |||
1313 | /* | 1287 | /* |
1314 | * Ok, we have the rule, now apply it | 1288 | * Ok, we have the rule, now apply it |
1315 | */ | 1289 | */ |
1316 | if (rule == CIPHER_SPECIAL) | 1290 | if (rule == CIPHER_SPECIAL) |
1317 | { /* special command */ | 1291 | { /* special command */ |
1318 | ok = 0; | 1292 | ok = 0; |
1319 | if ((buflen == 8) && | 1293 | if ((buflen == 8) && |
1320 | !strncmp(buf, "STRENGTH", 8)) | 1294 | !strncmp(buf, "STRENGTH", 8)) |
1321 | ok = ssl_cipher_strength_sort(head_p, tail_p); | 1295 | ok = ssl_cipher_strength_sort(head_p, tail_p); |
1322 | else | 1296 | else |
1323 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, | 1297 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, |
1324 | SSL_R_INVALID_COMMAND); | 1298 | SSL_R_INVALID_COMMAND); |
1325 | if (ok == 0) | 1299 | if (ok == 0) |
1326 | retval = 0; | 1300 | retval = 0; |
1327 | /* | 1301 | /* |
@@ -1331,30 +1305,27 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1331 | * end or ':' is found. | 1305 | * end or ':' is found. |
1332 | */ | 1306 | */ |
1333 | while ((*l != '\0') && !ITEM_SEP(*l)) | 1307 | while ((*l != '\0') && !ITEM_SEP(*l)) |
1334 | l++; | 1308 | l++; |
1335 | } | 1309 | } else if (found) { |
1336 | else if (found) | ||
1337 | { | ||
1338 | ssl_cipher_apply_rule(cipher_id, | 1310 | ssl_cipher_apply_rule(cipher_id, |
1339 | alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, | 1311 | alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, |
1340 | rule, -1, head_p, tail_p); | 1312 | rule, -1, head_p, tail_p); |
1341 | } | 1313 | } else { |
1342 | else | ||
1343 | { | ||
1344 | while ((*l != '\0') && !ITEM_SEP(*l)) | 1314 | while ((*l != '\0') && !ITEM_SEP(*l)) |
1345 | l++; | 1315 | l++; |
1346 | } | 1316 | } |
1347 | if (*l == '\0') break; /* done */ | 1317 | if (*l == '\0') break; /* done */ |
1348 | } | 1318 | } |
1349 | 1319 | ||
1350 | return(retval); | 1320 | return (retval); |
1351 | } | 1321 | } |
1352 | 1322 | ||
1353 | STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | 1323 | STACK_OF(SSL_CIPHER) |
1354 | STACK_OF(SSL_CIPHER) **cipher_list, | 1324 | *ssl_create_cipher_list(const SSL_METHOD *ssl_method, |
1355 | STACK_OF(SSL_CIPHER) **cipher_list_by_id, | 1325 | STACK_OF(SSL_CIPHER) **cipher_list, |
1356 | const char *rule_str) | 1326 | STACK_OF(SSL_CIPHER) **cipher_list_by_id, |
1357 | { | 1327 | const char *rule_str) |
1328 | { | ||
1358 | int ok, num_of_ciphers, num_of_alias_max, num_of_group_aliases; | 1329 | int ok, num_of_ciphers, num_of_alias_max, num_of_group_aliases; |
1359 | unsigned long disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl; | 1330 | unsigned long disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl; |
1360 | STACK_OF(SSL_CIPHER) *cipherstack, *tmp_cipher_list; | 1331 | STACK_OF(SSL_CIPHER) *cipherstack, *tmp_cipher_list; |
@@ -1384,15 +1355,14 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1384 | printf("ssl_create_cipher_list() for %d ciphers\n", num_of_ciphers); | 1355 | printf("ssl_create_cipher_list() for %d ciphers\n", num_of_ciphers); |
1385 | #endif /* KSSL_DEBUG */ | 1356 | #endif /* KSSL_DEBUG */ |
1386 | co_list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * num_of_ciphers); | 1357 | co_list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * num_of_ciphers); |
1387 | if (co_list == NULL) | 1358 | if (co_list == NULL) { |
1388 | { | 1359 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST, ERR_R_MALLOC_FAILURE); |
1389 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST,ERR_R_MALLOC_FAILURE); | ||
1390 | return(NULL); /* Failure */ | 1360 | return(NULL); /* Failure */ |
1391 | } | 1361 | } |
1392 | 1362 | ||
1393 | ssl_cipher_collect_ciphers(ssl_method, num_of_ciphers, | 1363 | ssl_cipher_collect_ciphers(ssl_method, num_of_ciphers, |
1394 | disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl, | 1364 | disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl, |
1395 | co_list, &head, &tail); | 1365 | co_list, &head, &tail); |
1396 | 1366 | ||
1397 | 1367 | ||
1398 | /* Now arrange all ciphers by preference: */ | 1368 | /* Now arrange all ciphers by preference: */ |
@@ -1419,19 +1389,18 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1419 | ssl_cipher_apply_rule(0, 0, SSL_aECDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1389 | ssl_cipher_apply_rule(0, 0, SSL_aECDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1420 | /* ssl_cipher_apply_rule(0, 0, SSL_aDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); */ | 1390 | /* ssl_cipher_apply_rule(0, 0, SSL_aDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); */ |
1421 | ssl_cipher_apply_rule(0, SSL_kRSA, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1391 | ssl_cipher_apply_rule(0, SSL_kRSA, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1422 | ssl_cipher_apply_rule(0, SSL_kPSK, 0,0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1392 | ssl_cipher_apply_rule(0, SSL_kPSK, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1423 | ssl_cipher_apply_rule(0, SSL_kKRB5, 0,0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1393 | ssl_cipher_apply_rule(0, SSL_kKRB5, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1424 | 1394 | ||
1425 | /* RC4 is sort-of broken -- move the the end */ | 1395 | /* RC4 is sort-of broken -- move the the end */ |
1426 | ssl_cipher_apply_rule(0, 0, 0, SSL_RC4, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1396 | ssl_cipher_apply_rule(0, 0, 0, SSL_RC4, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1427 | 1397 | ||
1428 | /* Now sort by symmetric encryption strength. The above ordering remains | 1398 | /* Now sort by symmetric encryption strength. The above ordering remains |
1429 | * in force within each class */ | 1399 | * in force within each class */ |
1430 | if (!ssl_cipher_strength_sort(&head, &tail)) | 1400 | if (!ssl_cipher_strength_sort(&head, &tail)) { |
1431 | { | ||
1432 | OPENSSL_free(co_list); | 1401 | OPENSSL_free(co_list); |
1433 | return NULL; | 1402 | return NULL; |
1434 | } | 1403 | } |
1435 | 1404 | ||
1436 | /* Now disable everything (maintaining the ordering!) */ | 1405 | /* Now disable everything (maintaining the ordering!) */ |
1437 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); | 1406 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); |
@@ -1448,15 +1417,14 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1448 | num_of_group_aliases = sizeof(cipher_aliases) / sizeof(SSL_CIPHER); | 1417 | num_of_group_aliases = sizeof(cipher_aliases) / sizeof(SSL_CIPHER); |
1449 | num_of_alias_max = num_of_ciphers + num_of_group_aliases + 1; | 1418 | num_of_alias_max = num_of_ciphers + num_of_group_aliases + 1; |
1450 | ca_list = OPENSSL_malloc(sizeof(SSL_CIPHER *) * num_of_alias_max); | 1419 | ca_list = OPENSSL_malloc(sizeof(SSL_CIPHER *) * num_of_alias_max); |
1451 | if (ca_list == NULL) | 1420 | if (ca_list == NULL) { |
1452 | { | ||
1453 | OPENSSL_free(co_list); | 1421 | OPENSSL_free(co_list); |
1454 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST,ERR_R_MALLOC_FAILURE); | 1422 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST, ERR_R_MALLOC_FAILURE); |
1455 | return(NULL); /* Failure */ | 1423 | return(NULL); /* Failure */ |
1456 | } | 1424 | } |
1457 | ssl_cipher_collect_aliases(ca_list, num_of_group_aliases, | 1425 | ssl_cipher_collect_aliases(ca_list, num_of_group_aliases, |
1458 | disabled_mkey, disabled_auth, disabled_enc, | 1426 | disabled_mkey, disabled_auth, disabled_enc, |
1459 | disabled_mac, disabled_ssl, head); | 1427 | disabled_mac, disabled_ssl, head); |
1460 | 1428 | ||
1461 | /* | 1429 | /* |
1462 | * If the rule_string begins with DEFAULT, apply the default rule | 1430 | * If the rule_string begins with DEFAULT, apply the default rule |
@@ -1464,14 +1432,13 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1464 | */ | 1432 | */ |
1465 | ok = 1; | 1433 | ok = 1; |
1466 | rule_p = rule_str; | 1434 | rule_p = rule_str; |
1467 | if (strncmp(rule_str,"DEFAULT",7) == 0) | 1435 | if (strncmp(rule_str, "DEFAULT", 7) == 0) { |
1468 | { | ||
1469 | ok = ssl_cipher_process_rulestr(SSL_DEFAULT_CIPHER_LIST, | 1436 | ok = ssl_cipher_process_rulestr(SSL_DEFAULT_CIPHER_LIST, |
1470 | &head, &tail, ca_list); | 1437 | &head, &tail, ca_list); |
1471 | rule_p += 7; | 1438 | rule_p += 7; |
1472 | if (*rule_p == ':') | 1439 | if (*rule_p == ':') |
1473 | rule_p++; | 1440 | rule_p++; |
1474 | } | 1441 | } |
1475 | 1442 | ||
1476 | if (ok && (strlen(rule_p) > 0)) | 1443 | if (ok && (strlen(rule_p) > 0)) |
1477 | ok = ssl_cipher_process_rulestr(rule_p, &head, &tail, ca_list); | 1444 | ok = ssl_cipher_process_rulestr(rule_p, &head, &tail, ca_list); |
@@ -1479,65 +1446,63 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1479 | OPENSSL_free((void *)ca_list); /* Not needed anymore */ | 1446 | OPENSSL_free((void *)ca_list); /* Not needed anymore */ |
1480 | 1447 | ||
1481 | if (!ok) | 1448 | if (!ok) |
1482 | { /* Rule processing failure */ | 1449 | { /* Rule processing failure */ |
1483 | OPENSSL_free(co_list); | 1450 | OPENSSL_free(co_list); |
1484 | return(NULL); | 1451 | return (NULL); |
1485 | } | 1452 | } |
1486 | 1453 | ||
1487 | /* | 1454 | /* |
1488 | * Allocate new "cipherstack" for the result, return with error | 1455 | * Allocate new "cipherstack" for the result, return with error |
1489 | * if we cannot get one. | 1456 | * if we cannot get one. |
1490 | */ | 1457 | */ |
1491 | if ((cipherstack = sk_SSL_CIPHER_new_null()) == NULL) | 1458 | if ((cipherstack = sk_SSL_CIPHER_new_null()) == NULL) { |
1492 | { | ||
1493 | OPENSSL_free(co_list); | 1459 | OPENSSL_free(co_list); |
1494 | return(NULL); | 1460 | return (NULL); |
1495 | } | 1461 | } |
1496 | 1462 | ||
1497 | /* | 1463 | /* |
1498 | * The cipher selection for the list is done. The ciphers are added | 1464 | * The cipher selection for the list is done. The ciphers are added |
1499 | * to the resulting precedence to the STACK_OF(SSL_CIPHER). | 1465 | * to the resulting precedence to the STACK_OF(SSL_CIPHER). |
1500 | */ | 1466 | */ |
1501 | for (curr = head; curr != NULL; curr = curr->next) | 1467 | for (curr = head; curr != NULL; curr = curr->next) { |
1502 | { | ||
1503 | #ifdef OPENSSL_FIPS | 1468 | #ifdef OPENSSL_FIPS |
1504 | if (curr->active && (!FIPS_mode() || curr->cipher->algo_strength & SSL_FIPS)) | 1469 | if (curr->active && (!FIPS_mode() || curr->cipher->algo_strength & SSL_FIPS)) |
1505 | #else | 1470 | #else |
1506 | if (curr->active) | 1471 | if (curr->active) |
1507 | #endif | 1472 | #endif |
1508 | { | 1473 | { |
1509 | sk_SSL_CIPHER_push(cipherstack, curr->cipher); | 1474 | sk_SSL_CIPHER_push(cipherstack, curr->cipher); |
1510 | #ifdef CIPHER_DEBUG | 1475 | #ifdef CIPHER_DEBUG |
1511 | printf("<%s>\n",curr->cipher->name); | 1476 | printf("<%s>\n", curr->cipher->name); |
1512 | #endif | 1477 | #endif |
1513 | } | ||
1514 | } | 1478 | } |
1479 | } | ||
1515 | OPENSSL_free(co_list); /* Not needed any longer */ | 1480 | OPENSSL_free(co_list); /* Not needed any longer */ |
1516 | 1481 | ||
1517 | tmp_cipher_list = sk_SSL_CIPHER_dup(cipherstack); | 1482 | tmp_cipher_list = sk_SSL_CIPHER_dup(cipherstack); |
1518 | if (tmp_cipher_list == NULL) | 1483 | if (tmp_cipher_list == NULL) { |
1519 | { | ||
1520 | sk_SSL_CIPHER_free(cipherstack); | 1484 | sk_SSL_CIPHER_free(cipherstack); |
1521 | return NULL; | 1485 | return NULL; |
1522 | } | 1486 | } |
1523 | if (*cipher_list != NULL) | 1487 | if (*cipher_list != NULL) |
1524 | sk_SSL_CIPHER_free(*cipher_list); | 1488 | sk_SSL_CIPHER_free(*cipher_list); |
1525 | *cipher_list = cipherstack; | 1489 | *cipher_list = cipherstack; |
1526 | if (*cipher_list_by_id != NULL) | 1490 | if (*cipher_list_by_id != NULL) |
1527 | sk_SSL_CIPHER_free(*cipher_list_by_id); | 1491 | sk_SSL_CIPHER_free(*cipher_list_by_id); |
1528 | *cipher_list_by_id = tmp_cipher_list; | 1492 | *cipher_list_by_id = tmp_cipher_list; |
1529 | (void)sk_SSL_CIPHER_set_cmp_func(*cipher_list_by_id,ssl_cipher_ptr_id_cmp); | 1493 | (void)sk_SSL_CIPHER_set_cmp_func(*cipher_list_by_id, ssl_cipher_ptr_id_cmp); |
1530 | 1494 | ||
1531 | sk_SSL_CIPHER_sort(*cipher_list_by_id); | 1495 | sk_SSL_CIPHER_sort(*cipher_list_by_id); |
1532 | return(cipherstack); | 1496 | return (cipherstack); |
1533 | } | 1497 | } |
1534 | 1498 | ||
1535 | char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | 1499 | char |
1536 | { | 1500 | *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) |
1537 | int is_export,pkl,kl; | 1501 | { |
1538 | const char *ver,*exp_str; | 1502 | int is_export, pkl, kl; |
1539 | const char *kx,*au,*enc,*mac; | 1503 | const char *ver, *exp_str; |
1540 | unsigned long alg_mkey,alg_auth,alg_enc,alg_mac,alg_ssl,alg2; | 1504 | const char *kx, *au, *enc, *mac; |
1505 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, alg2; | ||
1541 | #ifdef KSSL_DEBUG | 1506 | #ifdef KSSL_DEBUG |
1542 | static const char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s AL=%lx/%lx/%lx/%lx/%lx\n"; | 1507 | static const char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s AL=%lx/%lx/%lx/%lx/%lx\n"; |
1543 | #else | 1508 | #else |
@@ -1550,13 +1515,13 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1550 | alg_mac = cipher->algorithm_mac; | 1515 | alg_mac = cipher->algorithm_mac; |
1551 | alg_ssl = cipher->algorithm_ssl; | 1516 | alg_ssl = cipher->algorithm_ssl; |
1552 | 1517 | ||
1553 | alg2=cipher->algorithm2; | 1518 | alg2 = cipher->algorithm2; |
1519 | |||
1520 | is_export = SSL_C_IS_EXPORT(cipher); | ||
1521 | pkl = SSL_C_EXPORT_PKEYLENGTH(cipher); | ||
1522 | kl = SSL_C_EXPORT_KEYLENGTH(cipher); | ||
1523 | exp_str = is_export?" export":""; | ||
1554 | 1524 | ||
1555 | is_export=SSL_C_IS_EXPORT(cipher); | ||
1556 | pkl=SSL_C_EXPORT_PKEYLENGTH(cipher); | ||
1557 | kl=SSL_C_EXPORT_KEYLENGTH(cipher); | ||
1558 | exp_str=is_export?" export":""; | ||
1559 | |||
1560 | if (alg_ssl & SSL_SSLV2) | 1525 | if (alg_ssl & SSL_SSLV2) |
1561 | ver="SSLv2"; | 1526 | ver="SSLv2"; |
1562 | else if (alg_ssl & SSL_SSLV3) | 1527 | else if (alg_ssl & SSL_SSLV3) |
@@ -1566,10 +1531,9 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1566 | else | 1531 | else |
1567 | ver="unknown"; | 1532 | ver="unknown"; |
1568 | 1533 | ||
1569 | switch (alg_mkey) | 1534 | switch (alg_mkey) { |
1570 | { | ||
1571 | case SSL_kRSA: | 1535 | case SSL_kRSA: |
1572 | kx=is_export?(pkl == 512 ? "RSA(512)" : "RSA(1024)"):"RSA"; | 1536 | kx = is_export?(pkl == 512 ? "RSA(512)" : "RSA(1024)"):"RSA"; |
1573 | break; | 1537 | break; |
1574 | case SSL_kDHr: | 1538 | case SSL_kDHr: |
1575 | kx="DH/RSA"; | 1539 | kx="DH/RSA"; |
@@ -1577,11 +1541,11 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1577 | case SSL_kDHd: | 1541 | case SSL_kDHd: |
1578 | kx="DH/DSS"; | 1542 | kx="DH/DSS"; |
1579 | break; | 1543 | break; |
1580 | case SSL_kKRB5: | 1544 | case SSL_kKRB5: |
1581 | kx="KRB5"; | 1545 | kx="KRB5"; |
1582 | break; | 1546 | break; |
1583 | case SSL_kEDH: | 1547 | case SSL_kEDH: |
1584 | kx=is_export?(pkl == 512 ? "DH(512)" : "DH(1024)"):"DH"; | 1548 | kx = is_export?(pkl == 512 ? "DH(512)" : "DH(1024)"):"DH"; |
1585 | break; | 1549 | break; |
1586 | case SSL_kECDHr: | 1550 | case SSL_kECDHr: |
1587 | kx="ECDH/RSA"; | 1551 | kx="ECDH/RSA"; |
@@ -1600,10 +1564,9 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1600 | break; | 1564 | break; |
1601 | default: | 1565 | default: |
1602 | kx="unknown"; | 1566 | kx="unknown"; |
1603 | } | 1567 | } |
1604 | 1568 | ||
1605 | switch (alg_auth) | 1569 | switch (alg_auth) { |
1606 | { | ||
1607 | case SSL_aRSA: | 1570 | case SSL_aRSA: |
1608 | au="RSA"; | 1571 | au="RSA"; |
1609 | break; | 1572 | break; |
@@ -1613,10 +1576,10 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1613 | case SSL_aDH: | 1576 | case SSL_aDH: |
1614 | au="DH"; | 1577 | au="DH"; |
1615 | break; | 1578 | break; |
1616 | case SSL_aKRB5: | 1579 | case SSL_aKRB5: |
1617 | au="KRB5"; | 1580 | au="KRB5"; |
1618 | break; | 1581 | break; |
1619 | case SSL_aECDH: | 1582 | case SSL_aECDH: |
1620 | au="ECDH"; | 1583 | au="ECDH"; |
1621 | break; | 1584 | break; |
1622 | case SSL_aNULL: | 1585 | case SSL_aNULL: |
@@ -1631,22 +1594,21 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1631 | default: | 1594 | default: |
1632 | au="unknown"; | 1595 | au="unknown"; |
1633 | break; | 1596 | break; |
1634 | } | 1597 | } |
1635 | 1598 | ||
1636 | switch (alg_enc) | 1599 | switch (alg_enc) { |
1637 | { | ||
1638 | case SSL_DES: | 1600 | case SSL_DES: |
1639 | enc=(is_export && kl == 5)?"DES(40)":"DES(56)"; | 1601 | enc = (is_export && kl == 5)?"DES(40)":"DES(56)"; |
1640 | break; | 1602 | break; |
1641 | case SSL_3DES: | 1603 | case SSL_3DES: |
1642 | enc="3DES(168)"; | 1604 | enc="3DES(168)"; |
1643 | break; | 1605 | break; |
1644 | case SSL_RC4: | 1606 | case SSL_RC4: |
1645 | enc=is_export?(kl == 5 ? "RC4(40)" : "RC4(56)") | 1607 | enc = is_export?(kl == 5 ? "RC4(40)" : "RC4(56)") |
1646 | :((alg2&SSL2_CF_8_BYTE_ENC)?"RC4(64)":"RC4(128)"); | 1608 | :((alg2&SSL2_CF_8_BYTE_ENC)?"RC4(64)":"RC4(128)"); |
1647 | break; | 1609 | break; |
1648 | case SSL_RC2: | 1610 | case SSL_RC2: |
1649 | enc=is_export?(kl == 5 ? "RC2(40)" : "RC2(56)"):"RC2(128)"; | 1611 | enc = is_export?(kl == 5 ? "RC2(40)" : "RC2(56)"):"RC2(128)"; |
1650 | break; | 1612 | break; |
1651 | case SSL_IDEA: | 1613 | case SSL_IDEA: |
1652 | enc="IDEA(128)"; | 1614 | enc="IDEA(128)"; |
@@ -1678,10 +1640,9 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1678 | default: | 1640 | default: |
1679 | enc="unknown"; | 1641 | enc="unknown"; |
1680 | break; | 1642 | break; |
1681 | } | 1643 | } |
1682 | 1644 | ||
1683 | switch (alg_mac) | 1645 | switch (alg_mac) { |
1684 | { | ||
1685 | case SSL_MD5: | 1646 | case SSL_MD5: |
1686 | mac="MD5"; | 1647 | mac="MD5"; |
1687 | break; | 1648 | break; |
@@ -1700,108 +1661,119 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1700 | default: | 1661 | default: |
1701 | mac="unknown"; | 1662 | mac="unknown"; |
1702 | break; | 1663 | break; |
1703 | } | 1664 | } |
1704 | 1665 | ||
1705 | if (buf == NULL) | 1666 | if (buf == NULL) { |
1706 | { | 1667 | len = 128; |
1707 | len=128; | 1668 | buf = OPENSSL_malloc(len); |
1708 | buf=OPENSSL_malloc(len); | 1669 | if (buf == NULL) |
1709 | if (buf == NULL) return("OPENSSL_malloc Error"); | 1670 | return("OPENSSL_malloc Error"); |
1710 | } | 1671 | } else if (len < 128) |
1711 | else if (len < 128) | 1672 | return("Buffer too small"); |
1712 | return("Buffer too small"); | ||
1713 | 1673 | ||
1714 | #ifdef KSSL_DEBUG | 1674 | #ifdef KSSL_DEBUG |
1715 | BIO_snprintf(buf,len,format,cipher->name,ver,kx,au,enc,mac,exp_str,alg_mkey,alg_auth,alg_enc,alg_mac,alg_ssl); | 1675 | BIO_snprintf(buf, len, format, cipher->name, ver, kx, au, enc, mac, exp_str, alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl); |
1716 | #else | 1676 | #else |
1717 | BIO_snprintf(buf,len,format,cipher->name,ver,kx,au,enc,mac,exp_str); | 1677 | BIO_snprintf(buf, len, format, cipher->name, ver, kx, au, enc, mac, exp_str); |
1718 | #endif /* KSSL_DEBUG */ | 1678 | #endif /* KSSL_DEBUG */ |
1719 | return(buf); | 1679 | return (buf); |
1720 | } | 1680 | } |
1721 | 1681 | ||
1722 | char *SSL_CIPHER_get_version(const SSL_CIPHER *c) | 1682 | char |
1723 | { | 1683 | *SSL_CIPHER_get_version(const SSL_CIPHER *c) |
1684 | { | ||
1724 | int i; | 1685 | int i; |
1725 | 1686 | ||
1726 | if (c == NULL) return("(NONE)"); | 1687 | if (c == NULL) |
1727 | i=(int)(c->id>>24L); | 1688 | return("(NONE)"); |
1689 | i = (int)(c->id >> 24L); | ||
1728 | if (i == 3) | 1690 | if (i == 3) |
1729 | return("TLSv1/SSLv3"); | 1691 | return("TLSv1/SSLv3"); |
1730 | else if (i == 2) | 1692 | else if (i == 2) |
1731 | return("SSLv2"); | 1693 | return("SSLv2"); |
1732 | else | 1694 | else |
1733 | return("unknown"); | 1695 | return("unknown"); |
1734 | } | 1696 | } |
1735 | 1697 | ||
1736 | /* return the actual cipher being used */ | 1698 | /* return the actual cipher being used */ |
1737 | const char *SSL_CIPHER_get_name(const SSL_CIPHER *c) | 1699 | const char |
1738 | { | 1700 | *SSL_CIPHER_get_name(const SSL_CIPHER *c) |
1701 | { | ||
1739 | if (c != NULL) | 1702 | if (c != NULL) |
1740 | return(c->name); | 1703 | return (c->name); |
1741 | return("(NONE)"); | 1704 | return("(NONE)"); |
1742 | } | 1705 | } |
1743 | 1706 | ||
1744 | /* number of bits for symmetric cipher */ | 1707 | /* number of bits for symmetric cipher */ |
1745 | int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits) | 1708 | int |
1746 | { | 1709 | SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits) |
1747 | int ret=0; | 1710 | { |
1711 | int ret = 0; | ||
1748 | 1712 | ||
1749 | if (c != NULL) | 1713 | if (c != NULL) { |
1750 | { | 1714 | if (alg_bits != NULL) |
1751 | if (alg_bits != NULL) *alg_bits = c->alg_bits; | 1715 | *alg_bits = c->alg_bits; |
1752 | ret = c->strength_bits; | 1716 | ret = c->strength_bits; |
1753 | } | ||
1754 | return(ret); | ||
1755 | } | 1717 | } |
1718 | return (ret); | ||
1719 | } | ||
1756 | 1720 | ||
1757 | unsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c) | 1721 | unsigned long |
1758 | { | 1722 | SSL_CIPHER_get_id(const SSL_CIPHER *c) |
1723 | { | ||
1759 | return c->id; | 1724 | return c->id; |
1760 | } | 1725 | } |
1761 | 1726 | ||
1762 | SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n) | 1727 | SSL_COMP |
1763 | { | 1728 | *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n) |
1729 | { | ||
1764 | SSL_COMP *ctmp; | 1730 | SSL_COMP *ctmp; |
1765 | int i,nn; | 1731 | int i, nn; |
1766 | 1732 | ||
1767 | if ((n == 0) || (sk == NULL)) return(NULL); | 1733 | if ((n == 0) |
1768 | nn=sk_SSL_COMP_num(sk); | 1734 | || (sk == NULL)) return (NULL); |
1769 | for (i=0; i<nn; i++) | 1735 | nn = sk_SSL_COMP_num(sk); |
1770 | { | 1736 | for (i = 0; i < nn; i++) { |
1771 | ctmp=sk_SSL_COMP_value(sk,i); | 1737 | ctmp = sk_SSL_COMP_value(sk, i); |
1772 | if (ctmp->id == n) | 1738 | if (ctmp->id == n) |
1773 | return(ctmp); | 1739 | return (ctmp); |
1774 | } | ||
1775 | return(NULL); | ||
1776 | } | 1740 | } |
1741 | return (NULL); | ||
1742 | } | ||
1777 | 1743 | ||
1778 | #ifdef OPENSSL_NO_COMP | 1744 | #ifdef OPENSSL_NO_COMP |
1779 | void *SSL_COMP_get_compression_methods(void) | 1745 | void |
1780 | { | 1746 | *SSL_COMP_get_compression_methods(void) |
1747 | { | ||
1781 | return NULL; | 1748 | return NULL; |
1782 | } | 1749 | } |
1783 | int SSL_COMP_add_compression_method(int id, void *cm) | 1750 | |
1784 | { | 1751 | int |
1752 | SSL_COMP_add_compression_method(int id, void *cm) | ||
1753 | { | ||
1785 | return 1; | 1754 | return 1; |
1786 | } | 1755 | } |
1787 | 1756 | ||
1788 | const char *SSL_COMP_get_name(const void *comp) | 1757 | const char |
1789 | { | 1758 | *SSL_COMP_get_name(const void *comp) |
1759 | { | ||
1790 | return NULL; | 1760 | return NULL; |
1791 | } | 1761 | } |
1792 | #else | 1762 | #else |
1793 | STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void) | 1763 | STACK_OF(SSL_COMP) |
1794 | { | 1764 | *SSL_COMP_get_compression_methods(void) |
1765 | { | ||
1795 | load_builtin_compressions(); | 1766 | load_builtin_compressions(); |
1796 | return(ssl_comp_methods); | 1767 | return (ssl_comp_methods); |
1797 | } | 1768 | } |
1798 | 1769 | ||
1799 | int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm) | 1770 | int |
1800 | { | 1771 | SSL_COMP_add_compression_method(int id, COMP_METHOD *cm) |
1772 | { | ||
1801 | SSL_COMP *comp; | 1773 | SSL_COMP *comp; |
1802 | 1774 | ||
1803 | if (cm == NULL || cm->type == NID_undef) | 1775 | if (cm == NULL || cm->type == NID_undef) |
1804 | return 1; | 1776 | return 1; |
1805 | 1777 | ||
1806 | /* According to draft-ietf-tls-compression-04.txt, the | 1778 | /* According to draft-ietf-tls-compression-04.txt, the |
1807 | compression number ranges should be the following: | 1779 | compression number ranges should be the following: |
@@ -1809,45 +1781,40 @@ int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm) | |||
1809 | 0 to 63: methods defined by the IETF | 1781 | 0 to 63: methods defined by the IETF |
1810 | 64 to 192: external party methods assigned by IANA | 1782 | 64 to 192: external party methods assigned by IANA |
1811 | 193 to 255: reserved for private use */ | 1783 | 193 to 255: reserved for private use */ |
1812 | if (id < 193 || id > 255) | 1784 | if (id < 193 || id > 255) { |
1813 | { | 1785 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE); |
1814 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE); | ||
1815 | return 0; | 1786 | return 0; |
1816 | } | 1787 | } |
1817 | 1788 | ||
1818 | MemCheck_off(); | 1789 | MemCheck_off(); |
1819 | comp=(SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); | 1790 | comp = (SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); |
1820 | comp->id=id; | 1791 | comp->id = id; |
1821 | comp->method=cm; | 1792 | comp->method = cm; |
1822 | load_builtin_compressions(); | 1793 | load_builtin_compressions(); |
1823 | if (ssl_comp_methods | 1794 | if (ssl_comp_methods |
1824 | && sk_SSL_COMP_find(ssl_comp_methods,comp) >= 0) | 1795 | && sk_SSL_COMP_find(ssl_comp_methods, comp) >= 0) { |
1825 | { | ||
1826 | OPENSSL_free(comp); | 1796 | OPENSSL_free(comp); |
1827 | MemCheck_on(); | 1797 | MemCheck_on(); |
1828 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,SSL_R_DUPLICATE_COMPRESSION_ID); | 1798 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD, SSL_R_DUPLICATE_COMPRESSION_ID); |
1829 | return(1); | 1799 | return (1); |
1830 | } | 1800 | } else if ((ssl_comp_methods == NULL) |
1831 | else if ((ssl_comp_methods == NULL) | 1801 | || !sk_SSL_COMP_push(ssl_comp_methods, comp)) { |
1832 | || !sk_SSL_COMP_push(ssl_comp_methods,comp)) | ||
1833 | { | ||
1834 | OPENSSL_free(comp); | 1802 | OPENSSL_free(comp); |
1835 | MemCheck_on(); | 1803 | MemCheck_on(); |
1836 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,ERR_R_MALLOC_FAILURE); | 1804 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD, ERR_R_MALLOC_FAILURE); |
1837 | return(1); | 1805 | return (1); |
1838 | } | 1806 | } else { |
1839 | else | ||
1840 | { | ||
1841 | MemCheck_on(); | 1807 | MemCheck_on(); |
1842 | return(0); | 1808 | return (0); |
1843 | } | ||
1844 | } | 1809 | } |
1810 | } | ||
1845 | 1811 | ||
1846 | const char *SSL_COMP_get_name(const COMP_METHOD *comp) | 1812 | const char |
1847 | { | 1813 | *SSL_COMP_get_name(const COMP_METHOD *comp) |
1814 | { | ||
1848 | if (comp) | 1815 | if (comp) |
1849 | return comp->name; | 1816 | return comp->name; |
1850 | return NULL; | 1817 | return NULL; |
1851 | } | 1818 | } |
1852 | 1819 | ||
1853 | #endif | 1820 | #endif |
diff --git a/src/lib/libssl/src/ssl/ssl_err.c b/src/lib/libssl/src/ssl/ssl_err.c index 370fb57e3b..67ba3c7699 100644 --- a/src/lib/libssl/src/ssl/ssl_err.c +++ b/src/lib/libssl/src/ssl/ssl_err.c | |||
@@ -68,543 +68,541 @@ | |||
68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_SSL,func,0) | 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_SSL,func,0) |
69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_SSL,0,reason) | 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_SSL,0,reason) |
70 | 70 | ||
71 | static ERR_STRING_DATA SSL_str_functs[]= | 71 | static ERR_STRING_DATA SSL_str_functs[]= { |
72 | { | 72 | {ERR_FUNC(SSL_F_CLIENT_CERTIFICATE), "CLIENT_CERTIFICATE"}, |
73 | {ERR_FUNC(SSL_F_CLIENT_CERTIFICATE), "CLIENT_CERTIFICATE"}, | 73 | {ERR_FUNC(SSL_F_CLIENT_FINISHED), "CLIENT_FINISHED"}, |
74 | {ERR_FUNC(SSL_F_CLIENT_FINISHED), "CLIENT_FINISHED"}, | 74 | {ERR_FUNC(SSL_F_CLIENT_HELLO), "CLIENT_HELLO"}, |
75 | {ERR_FUNC(SSL_F_CLIENT_HELLO), "CLIENT_HELLO"}, | 75 | {ERR_FUNC(SSL_F_CLIENT_MASTER_KEY), "CLIENT_MASTER_KEY"}, |
76 | {ERR_FUNC(SSL_F_CLIENT_MASTER_KEY), "CLIENT_MASTER_KEY"}, | 76 | {ERR_FUNC(SSL_F_D2I_SSL_SESSION), "d2i_SSL_SESSION"}, |
77 | {ERR_FUNC(SSL_F_D2I_SSL_SESSION), "d2i_SSL_SESSION"}, | 77 | {ERR_FUNC(SSL_F_DO_DTLS1_WRITE), "DO_DTLS1_WRITE"}, |
78 | {ERR_FUNC(SSL_F_DO_DTLS1_WRITE), "DO_DTLS1_WRITE"}, | 78 | {ERR_FUNC(SSL_F_DO_SSL3_WRITE), "DO_SSL3_WRITE"}, |
79 | {ERR_FUNC(SSL_F_DO_SSL3_WRITE), "DO_SSL3_WRITE"}, | 79 | {ERR_FUNC(SSL_F_DTLS1_ACCEPT), "DTLS1_ACCEPT"}, |
80 | {ERR_FUNC(SSL_F_DTLS1_ACCEPT), "DTLS1_ACCEPT"}, | 80 | {ERR_FUNC(SSL_F_DTLS1_ADD_CERT_TO_BUF), "DTLS1_ADD_CERT_TO_BUF"}, |
81 | {ERR_FUNC(SSL_F_DTLS1_ADD_CERT_TO_BUF), "DTLS1_ADD_CERT_TO_BUF"}, | 81 | {ERR_FUNC(SSL_F_DTLS1_BUFFER_RECORD), "DTLS1_BUFFER_RECORD"}, |
82 | {ERR_FUNC(SSL_F_DTLS1_BUFFER_RECORD), "DTLS1_BUFFER_RECORD"}, | 82 | {ERR_FUNC(SSL_F_DTLS1_CHECK_TIMEOUT_NUM), "DTLS1_CHECK_TIMEOUT_NUM"}, |
83 | {ERR_FUNC(SSL_F_DTLS1_CHECK_TIMEOUT_NUM), "DTLS1_CHECK_TIMEOUT_NUM"}, | 83 | {ERR_FUNC(SSL_F_DTLS1_CLIENT_HELLO), "DTLS1_CLIENT_HELLO"}, |
84 | {ERR_FUNC(SSL_F_DTLS1_CLIENT_HELLO), "DTLS1_CLIENT_HELLO"}, | 84 | {ERR_FUNC(SSL_F_DTLS1_CONNECT), "DTLS1_CONNECT"}, |
85 | {ERR_FUNC(SSL_F_DTLS1_CONNECT), "DTLS1_CONNECT"}, | 85 | {ERR_FUNC(SSL_F_DTLS1_ENC), "DTLS1_ENC"}, |
86 | {ERR_FUNC(SSL_F_DTLS1_ENC), "DTLS1_ENC"}, | 86 | {ERR_FUNC(SSL_F_DTLS1_GET_HELLO_VERIFY), "DTLS1_GET_HELLO_VERIFY"}, |
87 | {ERR_FUNC(SSL_F_DTLS1_GET_HELLO_VERIFY), "DTLS1_GET_HELLO_VERIFY"}, | 87 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE), "DTLS1_GET_MESSAGE"}, |
88 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE), "DTLS1_GET_MESSAGE"}, | 88 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT), "DTLS1_GET_MESSAGE_FRAGMENT"}, |
89 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT), "DTLS1_GET_MESSAGE_FRAGMENT"}, | 89 | {ERR_FUNC(SSL_F_DTLS1_GET_RECORD), "DTLS1_GET_RECORD"}, |
90 | {ERR_FUNC(SSL_F_DTLS1_GET_RECORD), "DTLS1_GET_RECORD"}, | 90 | {ERR_FUNC(SSL_F_DTLS1_HANDLE_TIMEOUT), "DTLS1_HANDLE_TIMEOUT"}, |
91 | {ERR_FUNC(SSL_F_DTLS1_HANDLE_TIMEOUT), "DTLS1_HANDLE_TIMEOUT"}, | 91 | {ERR_FUNC(SSL_F_DTLS1_HEARTBEAT), "DTLS1_HEARTBEAT"}, |
92 | {ERR_FUNC(SSL_F_DTLS1_HEARTBEAT), "DTLS1_HEARTBEAT"}, | 92 | {ERR_FUNC(SSL_F_DTLS1_OUTPUT_CERT_CHAIN), "DTLS1_OUTPUT_CERT_CHAIN"}, |
93 | {ERR_FUNC(SSL_F_DTLS1_OUTPUT_CERT_CHAIN), "DTLS1_OUTPUT_CERT_CHAIN"}, | 93 | {ERR_FUNC(SSL_F_DTLS1_PREPROCESS_FRAGMENT), "DTLS1_PREPROCESS_FRAGMENT"}, |
94 | {ERR_FUNC(SSL_F_DTLS1_PREPROCESS_FRAGMENT), "DTLS1_PREPROCESS_FRAGMENT"}, | 94 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE), "DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE"}, |
95 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE), "DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE"}, | 95 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_RECORD), "DTLS1_PROCESS_RECORD"}, |
96 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_RECORD), "DTLS1_PROCESS_RECORD"}, | 96 | {ERR_FUNC(SSL_F_DTLS1_READ_BYTES), "DTLS1_READ_BYTES"}, |
97 | {ERR_FUNC(SSL_F_DTLS1_READ_BYTES), "DTLS1_READ_BYTES"}, | 97 | {ERR_FUNC(SSL_F_DTLS1_READ_FAILED), "DTLS1_READ_FAILED"}, |
98 | {ERR_FUNC(SSL_F_DTLS1_READ_FAILED), "DTLS1_READ_FAILED"}, | 98 | {ERR_FUNC(SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST), "DTLS1_SEND_CERTIFICATE_REQUEST"}, |
99 | {ERR_FUNC(SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST), "DTLS1_SEND_CERTIFICATE_REQUEST"}, | 99 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE), "DTLS1_SEND_CLIENT_CERTIFICATE"}, |
100 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE), "DTLS1_SEND_CLIENT_CERTIFICATE"}, | 100 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE), "DTLS1_SEND_CLIENT_KEY_EXCHANGE"}, |
101 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE), "DTLS1_SEND_CLIENT_KEY_EXCHANGE"}, | 101 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_VERIFY), "DTLS1_SEND_CLIENT_VERIFY"}, |
102 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_VERIFY), "DTLS1_SEND_CLIENT_VERIFY"}, | 102 | {ERR_FUNC(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST), "DTLS1_SEND_HELLO_VERIFY_REQUEST"}, |
103 | {ERR_FUNC(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST), "DTLS1_SEND_HELLO_VERIFY_REQUEST"}, | 103 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE), "DTLS1_SEND_SERVER_CERTIFICATE"}, |
104 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE), "DTLS1_SEND_SERVER_CERTIFICATE"}, | 104 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_HELLO), "DTLS1_SEND_SERVER_HELLO"}, |
105 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_HELLO), "DTLS1_SEND_SERVER_HELLO"}, | 105 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE), "DTLS1_SEND_SERVER_KEY_EXCHANGE"}, |
106 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE), "DTLS1_SEND_SERVER_KEY_EXCHANGE"}, | 106 | {ERR_FUNC(SSL_F_DTLS1_WRITE_APP_DATA_BYTES), "DTLS1_WRITE_APP_DATA_BYTES"}, |
107 | {ERR_FUNC(SSL_F_DTLS1_WRITE_APP_DATA_BYTES), "DTLS1_WRITE_APP_DATA_BYTES"}, | 107 | {ERR_FUNC(SSL_F_GET_CLIENT_FINISHED), "GET_CLIENT_FINISHED"}, |
108 | {ERR_FUNC(SSL_F_GET_CLIENT_FINISHED), "GET_CLIENT_FINISHED"}, | 108 | {ERR_FUNC(SSL_F_GET_CLIENT_HELLO), "GET_CLIENT_HELLO"}, |
109 | {ERR_FUNC(SSL_F_GET_CLIENT_HELLO), "GET_CLIENT_HELLO"}, | 109 | {ERR_FUNC(SSL_F_GET_CLIENT_MASTER_KEY), "GET_CLIENT_MASTER_KEY"}, |
110 | {ERR_FUNC(SSL_F_GET_CLIENT_MASTER_KEY), "GET_CLIENT_MASTER_KEY"}, | 110 | {ERR_FUNC(SSL_F_GET_SERVER_FINISHED), "GET_SERVER_FINISHED"}, |
111 | {ERR_FUNC(SSL_F_GET_SERVER_FINISHED), "GET_SERVER_FINISHED"}, | 111 | {ERR_FUNC(SSL_F_GET_SERVER_HELLO), "GET_SERVER_HELLO"}, |
112 | {ERR_FUNC(SSL_F_GET_SERVER_HELLO), "GET_SERVER_HELLO"}, | 112 | {ERR_FUNC(SSL_F_GET_SERVER_VERIFY), "GET_SERVER_VERIFY"}, |
113 | {ERR_FUNC(SSL_F_GET_SERVER_VERIFY), "GET_SERVER_VERIFY"}, | 113 | {ERR_FUNC(SSL_F_I2D_SSL_SESSION), "i2d_SSL_SESSION"}, |
114 | {ERR_FUNC(SSL_F_I2D_SSL_SESSION), "i2d_SSL_SESSION"}, | 114 | {ERR_FUNC(SSL_F_READ_N), "READ_N"}, |
115 | {ERR_FUNC(SSL_F_READ_N), "READ_N"}, | 115 | {ERR_FUNC(SSL_F_REQUEST_CERTIFICATE), "REQUEST_CERTIFICATE"}, |
116 | {ERR_FUNC(SSL_F_REQUEST_CERTIFICATE), "REQUEST_CERTIFICATE"}, | 116 | {ERR_FUNC(SSL_F_SERVER_FINISH), "SERVER_FINISH"}, |
117 | {ERR_FUNC(SSL_F_SERVER_FINISH), "SERVER_FINISH"}, | 117 | {ERR_FUNC(SSL_F_SERVER_HELLO), "SERVER_HELLO"}, |
118 | {ERR_FUNC(SSL_F_SERVER_HELLO), "SERVER_HELLO"}, | 118 | {ERR_FUNC(SSL_F_SERVER_VERIFY), "SERVER_VERIFY"}, |
119 | {ERR_FUNC(SSL_F_SERVER_VERIFY), "SERVER_VERIFY"}, | 119 | {ERR_FUNC(SSL_F_SSL23_ACCEPT), "SSL23_ACCEPT"}, |
120 | {ERR_FUNC(SSL_F_SSL23_ACCEPT), "SSL23_ACCEPT"}, | 120 | {ERR_FUNC(SSL_F_SSL23_CLIENT_HELLO), "SSL23_CLIENT_HELLO"}, |
121 | {ERR_FUNC(SSL_F_SSL23_CLIENT_HELLO), "SSL23_CLIENT_HELLO"}, | 121 | {ERR_FUNC(SSL_F_SSL23_CONNECT), "SSL23_CONNECT"}, |
122 | {ERR_FUNC(SSL_F_SSL23_CONNECT), "SSL23_CONNECT"}, | 122 | {ERR_FUNC(SSL_F_SSL23_GET_CLIENT_HELLO), "SSL23_GET_CLIENT_HELLO"}, |
123 | {ERR_FUNC(SSL_F_SSL23_GET_CLIENT_HELLO), "SSL23_GET_CLIENT_HELLO"}, | 123 | {ERR_FUNC(SSL_F_SSL23_GET_SERVER_HELLO), "SSL23_GET_SERVER_HELLO"}, |
124 | {ERR_FUNC(SSL_F_SSL23_GET_SERVER_HELLO), "SSL23_GET_SERVER_HELLO"}, | 124 | {ERR_FUNC(SSL_F_SSL23_PEEK), "SSL23_PEEK"}, |
125 | {ERR_FUNC(SSL_F_SSL23_PEEK), "SSL23_PEEK"}, | 125 | {ERR_FUNC(SSL_F_SSL23_READ), "SSL23_READ"}, |
126 | {ERR_FUNC(SSL_F_SSL23_READ), "SSL23_READ"}, | 126 | {ERR_FUNC(SSL_F_SSL23_WRITE), "SSL23_WRITE"}, |
127 | {ERR_FUNC(SSL_F_SSL23_WRITE), "SSL23_WRITE"}, | 127 | {ERR_FUNC(SSL_F_SSL2_ACCEPT), "SSL2_ACCEPT"}, |
128 | {ERR_FUNC(SSL_F_SSL2_ACCEPT), "SSL2_ACCEPT"}, | 128 | {ERR_FUNC(SSL_F_SSL2_CONNECT), "SSL2_CONNECT"}, |
129 | {ERR_FUNC(SSL_F_SSL2_CONNECT), "SSL2_CONNECT"}, | 129 | {ERR_FUNC(SSL_F_SSL2_ENC_INIT), "SSL2_ENC_INIT"}, |
130 | {ERR_FUNC(SSL_F_SSL2_ENC_INIT), "SSL2_ENC_INIT"}, | 130 | {ERR_FUNC(SSL_F_SSL2_GENERATE_KEY_MATERIAL), "SSL2_GENERATE_KEY_MATERIAL"}, |
131 | {ERR_FUNC(SSL_F_SSL2_GENERATE_KEY_MATERIAL), "SSL2_GENERATE_KEY_MATERIAL"}, | 131 | {ERR_FUNC(SSL_F_SSL2_PEEK), "SSL2_PEEK"}, |
132 | {ERR_FUNC(SSL_F_SSL2_PEEK), "SSL2_PEEK"}, | 132 | {ERR_FUNC(SSL_F_SSL2_READ), "SSL2_READ"}, |
133 | {ERR_FUNC(SSL_F_SSL2_READ), "SSL2_READ"}, | 133 | {ERR_FUNC(SSL_F_SSL2_READ_INTERNAL), "SSL2_READ_INTERNAL"}, |
134 | {ERR_FUNC(SSL_F_SSL2_READ_INTERNAL), "SSL2_READ_INTERNAL"}, | 134 | {ERR_FUNC(SSL_F_SSL2_SET_CERTIFICATE), "SSL2_SET_CERTIFICATE"}, |
135 | {ERR_FUNC(SSL_F_SSL2_SET_CERTIFICATE), "SSL2_SET_CERTIFICATE"}, | 135 | {ERR_FUNC(SSL_F_SSL2_WRITE), "SSL2_WRITE"}, |
136 | {ERR_FUNC(SSL_F_SSL2_WRITE), "SSL2_WRITE"}, | 136 | {ERR_FUNC(SSL_F_SSL3_ACCEPT), "SSL3_ACCEPT"}, |
137 | {ERR_FUNC(SSL_F_SSL3_ACCEPT), "SSL3_ACCEPT"}, | 137 | {ERR_FUNC(SSL_F_SSL3_ADD_CERT_TO_BUF), "SSL3_ADD_CERT_TO_BUF"}, |
138 | {ERR_FUNC(SSL_F_SSL3_ADD_CERT_TO_BUF), "SSL3_ADD_CERT_TO_BUF"}, | 138 | {ERR_FUNC(SSL_F_SSL3_CALLBACK_CTRL), "SSL3_CALLBACK_CTRL"}, |
139 | {ERR_FUNC(SSL_F_SSL3_CALLBACK_CTRL), "SSL3_CALLBACK_CTRL"}, | 139 | {ERR_FUNC(SSL_F_SSL3_CHANGE_CIPHER_STATE), "SSL3_CHANGE_CIPHER_STATE"}, |
140 | {ERR_FUNC(SSL_F_SSL3_CHANGE_CIPHER_STATE), "SSL3_CHANGE_CIPHER_STATE"}, | 140 | {ERR_FUNC(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM), "SSL3_CHECK_CERT_AND_ALGORITHM"}, |
141 | {ERR_FUNC(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM), "SSL3_CHECK_CERT_AND_ALGORITHM"}, | 141 | {ERR_FUNC(SSL_F_SSL3_CHECK_CLIENT_HELLO), "SSL3_CHECK_CLIENT_HELLO"}, |
142 | {ERR_FUNC(SSL_F_SSL3_CHECK_CLIENT_HELLO), "SSL3_CHECK_CLIENT_HELLO"}, | 142 | {ERR_FUNC(SSL_F_SSL3_CLIENT_HELLO), "SSL3_CLIENT_HELLO"}, |
143 | {ERR_FUNC(SSL_F_SSL3_CLIENT_HELLO), "SSL3_CLIENT_HELLO"}, | 143 | {ERR_FUNC(SSL_F_SSL3_CONNECT), "SSL3_CONNECT"}, |
144 | {ERR_FUNC(SSL_F_SSL3_CONNECT), "SSL3_CONNECT"}, | 144 | {ERR_FUNC(SSL_F_SSL3_CTRL), "SSL3_CTRL"}, |
145 | {ERR_FUNC(SSL_F_SSL3_CTRL), "SSL3_CTRL"}, | 145 | {ERR_FUNC(SSL_F_SSL3_CTX_CTRL), "SSL3_CTX_CTRL"}, |
146 | {ERR_FUNC(SSL_F_SSL3_CTX_CTRL), "SSL3_CTX_CTRL"}, | 146 | {ERR_FUNC(SSL_F_SSL3_DIGEST_CACHED_RECORDS), "SSL3_DIGEST_CACHED_RECORDS"}, |
147 | {ERR_FUNC(SSL_F_SSL3_DIGEST_CACHED_RECORDS), "SSL3_DIGEST_CACHED_RECORDS"}, | 147 | {ERR_FUNC(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC), "SSL3_DO_CHANGE_CIPHER_SPEC"}, |
148 | {ERR_FUNC(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC), "SSL3_DO_CHANGE_CIPHER_SPEC"}, | 148 | {ERR_FUNC(SSL_F_SSL3_ENC), "SSL3_ENC"}, |
149 | {ERR_FUNC(SSL_F_SSL3_ENC), "SSL3_ENC"}, | 149 | {ERR_FUNC(SSL_F_SSL3_GENERATE_KEY_BLOCK), "SSL3_GENERATE_KEY_BLOCK"}, |
150 | {ERR_FUNC(SSL_F_SSL3_GENERATE_KEY_BLOCK), "SSL3_GENERATE_KEY_BLOCK"}, | 150 | {ERR_FUNC(SSL_F_SSL3_GET_CERTIFICATE_REQUEST), "SSL3_GET_CERTIFICATE_REQUEST"}, |
151 | {ERR_FUNC(SSL_F_SSL3_GET_CERTIFICATE_REQUEST), "SSL3_GET_CERTIFICATE_REQUEST"}, | 151 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_STATUS), "SSL3_GET_CERT_STATUS"}, |
152 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_STATUS), "SSL3_GET_CERT_STATUS"}, | 152 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_VERIFY), "SSL3_GET_CERT_VERIFY"}, |
153 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_VERIFY), "SSL3_GET_CERT_VERIFY"}, | 153 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_CERTIFICATE), "SSL3_GET_CLIENT_CERTIFICATE"}, |
154 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_CERTIFICATE), "SSL3_GET_CLIENT_CERTIFICATE"}, | 154 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_HELLO), "SSL3_GET_CLIENT_HELLO"}, |
155 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_HELLO), "SSL3_GET_CLIENT_HELLO"}, | 155 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE), "SSL3_GET_CLIENT_KEY_EXCHANGE"}, |
156 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE), "SSL3_GET_CLIENT_KEY_EXCHANGE"}, | 156 | {ERR_FUNC(SSL_F_SSL3_GET_FINISHED), "SSL3_GET_FINISHED"}, |
157 | {ERR_FUNC(SSL_F_SSL3_GET_FINISHED), "SSL3_GET_FINISHED"}, | 157 | {ERR_FUNC(SSL_F_SSL3_GET_KEY_EXCHANGE), "SSL3_GET_KEY_EXCHANGE"}, |
158 | {ERR_FUNC(SSL_F_SSL3_GET_KEY_EXCHANGE), "SSL3_GET_KEY_EXCHANGE"}, | 158 | {ERR_FUNC(SSL_F_SSL3_GET_MESSAGE), "SSL3_GET_MESSAGE"}, |
159 | {ERR_FUNC(SSL_F_SSL3_GET_MESSAGE), "SSL3_GET_MESSAGE"}, | 159 | {ERR_FUNC(SSL_F_SSL3_GET_NEW_SESSION_TICKET), "SSL3_GET_NEW_SESSION_TICKET"}, |
160 | {ERR_FUNC(SSL_F_SSL3_GET_NEW_SESSION_TICKET), "SSL3_GET_NEW_SESSION_TICKET"}, | 160 | {ERR_FUNC(SSL_F_SSL3_GET_NEXT_PROTO), "SSL3_GET_NEXT_PROTO"}, |
161 | {ERR_FUNC(SSL_F_SSL3_GET_NEXT_PROTO), "SSL3_GET_NEXT_PROTO"}, | 161 | {ERR_FUNC(SSL_F_SSL3_GET_RECORD), "SSL3_GET_RECORD"}, |
162 | {ERR_FUNC(SSL_F_SSL3_GET_RECORD), "SSL3_GET_RECORD"}, | 162 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_CERTIFICATE), "SSL3_GET_SERVER_CERTIFICATE"}, |
163 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_CERTIFICATE), "SSL3_GET_SERVER_CERTIFICATE"}, | 163 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_DONE), "SSL3_GET_SERVER_DONE"}, |
164 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_DONE), "SSL3_GET_SERVER_DONE"}, | 164 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_HELLO), "SSL3_GET_SERVER_HELLO"}, |
165 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_HELLO), "SSL3_GET_SERVER_HELLO"}, | 165 | {ERR_FUNC(SSL_F_SSL3_HANDSHAKE_MAC), "ssl3_handshake_mac"}, |
166 | {ERR_FUNC(SSL_F_SSL3_HANDSHAKE_MAC), "ssl3_handshake_mac"}, | 166 | {ERR_FUNC(SSL_F_SSL3_NEW_SESSION_TICKET), "SSL3_NEW_SESSION_TICKET"}, |
167 | {ERR_FUNC(SSL_F_SSL3_NEW_SESSION_TICKET), "SSL3_NEW_SESSION_TICKET"}, | 167 | {ERR_FUNC(SSL_F_SSL3_OUTPUT_CERT_CHAIN), "SSL3_OUTPUT_CERT_CHAIN"}, |
168 | {ERR_FUNC(SSL_F_SSL3_OUTPUT_CERT_CHAIN), "SSL3_OUTPUT_CERT_CHAIN"}, | 168 | {ERR_FUNC(SSL_F_SSL3_PEEK), "SSL3_PEEK"}, |
169 | {ERR_FUNC(SSL_F_SSL3_PEEK), "SSL3_PEEK"}, | 169 | {ERR_FUNC(SSL_F_SSL3_READ_BYTES), "SSL3_READ_BYTES"}, |
170 | {ERR_FUNC(SSL_F_SSL3_READ_BYTES), "SSL3_READ_BYTES"}, | 170 | {ERR_FUNC(SSL_F_SSL3_READ_N), "SSL3_READ_N"}, |
171 | {ERR_FUNC(SSL_F_SSL3_READ_N), "SSL3_READ_N"}, | 171 | {ERR_FUNC(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST), "SSL3_SEND_CERTIFICATE_REQUEST"}, |
172 | {ERR_FUNC(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST), "SSL3_SEND_CERTIFICATE_REQUEST"}, | 172 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE), "SSL3_SEND_CLIENT_CERTIFICATE"}, |
173 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE), "SSL3_SEND_CLIENT_CERTIFICATE"}, | 173 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE), "SSL3_SEND_CLIENT_KEY_EXCHANGE"}, |
174 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE), "SSL3_SEND_CLIENT_KEY_EXCHANGE"}, | 174 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_VERIFY), "SSL3_SEND_CLIENT_VERIFY"}, |
175 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_VERIFY), "SSL3_SEND_CLIENT_VERIFY"}, | 175 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_CERTIFICATE), "SSL3_SEND_SERVER_CERTIFICATE"}, |
176 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_CERTIFICATE), "SSL3_SEND_SERVER_CERTIFICATE"}, | 176 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_HELLO), "SSL3_SEND_SERVER_HELLO"}, |
177 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_HELLO), "SSL3_SEND_SERVER_HELLO"}, | 177 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE), "SSL3_SEND_SERVER_KEY_EXCHANGE"}, |
178 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE), "SSL3_SEND_SERVER_KEY_EXCHANGE"}, | 178 | {ERR_FUNC(SSL_F_SSL3_SETUP_KEY_BLOCK), "SSL3_SETUP_KEY_BLOCK"}, |
179 | {ERR_FUNC(SSL_F_SSL3_SETUP_KEY_BLOCK), "SSL3_SETUP_KEY_BLOCK"}, | 179 | {ERR_FUNC(SSL_F_SSL3_SETUP_READ_BUFFER), "SSL3_SETUP_READ_BUFFER"}, |
180 | {ERR_FUNC(SSL_F_SSL3_SETUP_READ_BUFFER), "SSL3_SETUP_READ_BUFFER"}, | 180 | {ERR_FUNC(SSL_F_SSL3_SETUP_WRITE_BUFFER), "SSL3_SETUP_WRITE_BUFFER"}, |
181 | {ERR_FUNC(SSL_F_SSL3_SETUP_WRITE_BUFFER), "SSL3_SETUP_WRITE_BUFFER"}, | 181 | {ERR_FUNC(SSL_F_SSL3_WRITE_BYTES), "SSL3_WRITE_BYTES"}, |
182 | {ERR_FUNC(SSL_F_SSL3_WRITE_BYTES), "SSL3_WRITE_BYTES"}, | 182 | {ERR_FUNC(SSL_F_SSL3_WRITE_PENDING), "SSL3_WRITE_PENDING"}, |
183 | {ERR_FUNC(SSL_F_SSL3_WRITE_PENDING), "SSL3_WRITE_PENDING"}, | 183 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT"}, |
184 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT"}, | 184 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT), "SSL_ADD_CLIENTHELLO_TLSEXT"}, |
185 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT), "SSL_ADD_CLIENTHELLO_TLSEXT"}, | 185 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT), "SSL_ADD_CLIENTHELLO_USE_SRTP_EXT"}, |
186 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT), "SSL_ADD_CLIENTHELLO_USE_SRTP_EXT"}, | 186 | {ERR_FUNC(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK), "SSL_add_dir_cert_subjects_to_stack"}, |
187 | {ERR_FUNC(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK), "SSL_add_dir_cert_subjects_to_stack"}, | 187 | {ERR_FUNC(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK), "SSL_add_file_cert_subjects_to_stack"}, |
188 | {ERR_FUNC(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK), "SSL_add_file_cert_subjects_to_stack"}, | 188 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT), "SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT"}, |
189 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT), "SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT"}, | 189 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT), "SSL_ADD_SERVERHELLO_TLSEXT"}, |
190 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT), "SSL_ADD_SERVERHELLO_TLSEXT"}, | 190 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT), "SSL_ADD_SERVERHELLO_USE_SRTP_EXT"}, |
191 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT), "SSL_ADD_SERVERHELLO_USE_SRTP_EXT"}, | 191 | {ERR_FUNC(SSL_F_SSL_BAD_METHOD), "SSL_BAD_METHOD"}, |
192 | {ERR_FUNC(SSL_F_SSL_BAD_METHOD), "SSL_BAD_METHOD"}, | 192 | {ERR_FUNC(SSL_F_SSL_BYTES_TO_CIPHER_LIST), "SSL_BYTES_TO_CIPHER_LIST"}, |
193 | {ERR_FUNC(SSL_F_SSL_BYTES_TO_CIPHER_LIST), "SSL_BYTES_TO_CIPHER_LIST"}, | 193 | {ERR_FUNC(SSL_F_SSL_CERT_DUP), "SSL_CERT_DUP"}, |
194 | {ERR_FUNC(SSL_F_SSL_CERT_DUP), "SSL_CERT_DUP"}, | 194 | {ERR_FUNC(SSL_F_SSL_CERT_INST), "SSL_CERT_INST"}, |
195 | {ERR_FUNC(SSL_F_SSL_CERT_INST), "SSL_CERT_INST"}, | 195 | {ERR_FUNC(SSL_F_SSL_CERT_INSTANTIATE), "SSL_CERT_INSTANTIATE"}, |
196 | {ERR_FUNC(SSL_F_SSL_CERT_INSTANTIATE), "SSL_CERT_INSTANTIATE"}, | 196 | {ERR_FUNC(SSL_F_SSL_CERT_NEW), "SSL_CERT_NEW"}, |
197 | {ERR_FUNC(SSL_F_SSL_CERT_NEW), "SSL_CERT_NEW"}, | 197 | {ERR_FUNC(SSL_F_SSL_CHECK_PRIVATE_KEY), "SSL_check_private_key"}, |
198 | {ERR_FUNC(SSL_F_SSL_CHECK_PRIVATE_KEY), "SSL_check_private_key"}, | 198 | {ERR_FUNC(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT), "SSL_CHECK_SERVERHELLO_TLSEXT"}, |
199 | {ERR_FUNC(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT), "SSL_CHECK_SERVERHELLO_TLSEXT"}, | 199 | {ERR_FUNC(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG), "SSL_CHECK_SRVR_ECC_CERT_AND_ALG"}, |
200 | {ERR_FUNC(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG), "SSL_CHECK_SRVR_ECC_CERT_AND_ALG"}, | 200 | {ERR_FUNC(SSL_F_SSL_CIPHER_PROCESS_RULESTR), "SSL_CIPHER_PROCESS_RULESTR"}, |
201 | {ERR_FUNC(SSL_F_SSL_CIPHER_PROCESS_RULESTR), "SSL_CIPHER_PROCESS_RULESTR"}, | 201 | {ERR_FUNC(SSL_F_SSL_CIPHER_STRENGTH_SORT), "SSL_CIPHER_STRENGTH_SORT"}, |
202 | {ERR_FUNC(SSL_F_SSL_CIPHER_STRENGTH_SORT), "SSL_CIPHER_STRENGTH_SORT"}, | 202 | {ERR_FUNC(SSL_F_SSL_CLEAR), "SSL_clear"}, |
203 | {ERR_FUNC(SSL_F_SSL_CLEAR), "SSL_clear"}, | 203 | {ERR_FUNC(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD), "SSL_COMP_add_compression_method"}, |
204 | {ERR_FUNC(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD), "SSL_COMP_add_compression_method"}, | 204 | {ERR_FUNC(SSL_F_SSL_CREATE_CIPHER_LIST), "SSL_CREATE_CIPHER_LIST"}, |
205 | {ERR_FUNC(SSL_F_SSL_CREATE_CIPHER_LIST), "SSL_CREATE_CIPHER_LIST"}, | 205 | {ERR_FUNC(SSL_F_SSL_CTRL), "SSL_ctrl"}, |
206 | {ERR_FUNC(SSL_F_SSL_CTRL), "SSL_ctrl"}, | 206 | {ERR_FUNC(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY), "SSL_CTX_check_private_key"}, |
207 | {ERR_FUNC(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY), "SSL_CTX_check_private_key"}, | 207 | {ERR_FUNC(SSL_F_SSL_CTX_MAKE_PROFILES), "SSL_CTX_MAKE_PROFILES"}, |
208 | {ERR_FUNC(SSL_F_SSL_CTX_MAKE_PROFILES), "SSL_CTX_MAKE_PROFILES"}, | 208 | {ERR_FUNC(SSL_F_SSL_CTX_NEW), "SSL_CTX_new"}, |
209 | {ERR_FUNC(SSL_F_SSL_CTX_NEW), "SSL_CTX_new"}, | 209 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CIPHER_LIST), "SSL_CTX_set_cipher_list"}, |
210 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CIPHER_LIST), "SSL_CTX_set_cipher_list"}, | 210 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE), "SSL_CTX_set_client_cert_engine"}, |
211 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE), "SSL_CTX_set_client_cert_engine"}, | 211 | {ERR_FUNC(SSL_F_SSL_CTX_SET_PURPOSE), "SSL_CTX_set_purpose"}, |
212 | {ERR_FUNC(SSL_F_SSL_CTX_SET_PURPOSE), "SSL_CTX_set_purpose"}, | 212 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT), "SSL_CTX_set_session_id_context"}, |
213 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT), "SSL_CTX_set_session_id_context"}, | 213 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SSL_VERSION), "SSL_CTX_set_ssl_version"}, |
214 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SSL_VERSION), "SSL_CTX_set_ssl_version"}, | 214 | {ERR_FUNC(SSL_F_SSL_CTX_SET_TRUST), "SSL_CTX_set_trust"}, |
215 | {ERR_FUNC(SSL_F_SSL_CTX_SET_TRUST), "SSL_CTX_set_trust"}, | 215 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE), "SSL_CTX_use_certificate"}, |
216 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE), "SSL_CTX_use_certificate"}, | 216 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1), "SSL_CTX_use_certificate_ASN1"}, |
217 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1), "SSL_CTX_use_certificate_ASN1"}, | 217 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE), "SSL_CTX_use_certificate_chain_file"}, |
218 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE), "SSL_CTX_use_certificate_chain_file"}, | 218 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE), "SSL_CTX_use_certificate_file"}, |
219 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE), "SSL_CTX_use_certificate_file"}, | 219 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY), "SSL_CTX_use_PrivateKey"}, |
220 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY), "SSL_CTX_use_PrivateKey"}, | 220 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1), "SSL_CTX_use_PrivateKey_ASN1"}, |
221 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1), "SSL_CTX_use_PrivateKey_ASN1"}, | 221 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE), "SSL_CTX_use_PrivateKey_file"}, |
222 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE), "SSL_CTX_use_PrivateKey_file"}, | 222 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT), "SSL_CTX_use_psk_identity_hint"}, |
223 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT), "SSL_CTX_use_psk_identity_hint"}, | 223 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY), "SSL_CTX_use_RSAPrivateKey"}, |
224 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY), "SSL_CTX_use_RSAPrivateKey"}, | 224 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1), "SSL_CTX_use_RSAPrivateKey_ASN1"}, |
225 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1), "SSL_CTX_use_RSAPrivateKey_ASN1"}, | 225 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE), "SSL_CTX_use_RSAPrivateKey_file"}, |
226 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE), "SSL_CTX_use_RSAPrivateKey_file"}, | 226 | {ERR_FUNC(SSL_F_SSL_DO_HANDSHAKE), "SSL_do_handshake"}, |
227 | {ERR_FUNC(SSL_F_SSL_DO_HANDSHAKE), "SSL_do_handshake"}, | 227 | {ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"}, |
228 | {ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"}, | 228 | {ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"}, |
229 | {ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"}, | 229 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"}, |
230 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"}, | 230 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "SSL_GET_SERVER_SEND_PKEY"}, |
231 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "SSL_GET_SERVER_SEND_PKEY"}, | 231 | {ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"}, |
232 | {ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"}, | 232 | {ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"}, |
233 | {ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"}, | 233 | {ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"}, |
234 | {ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"}, | 234 | {ERR_FUNC(SSL_F_SSL_NEW), "SSL_new"}, |
235 | {ERR_FUNC(SSL_F_SSL_NEW), "SSL_new"}, | 235 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT"}, |
236 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT"}, | 236 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT), "SSL_PARSE_CLIENTHELLO_TLSEXT"}, |
237 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT), "SSL_PARSE_CLIENTHELLO_TLSEXT"}, | 237 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT), "SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT"}, |
238 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT), "SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT"}, | 238 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT), "SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT"}, |
239 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT), "SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT"}, | 239 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT), "SSL_PARSE_SERVERHELLO_TLSEXT"}, |
240 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT), "SSL_PARSE_SERVERHELLO_TLSEXT"}, | 240 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT), "SSL_PARSE_SERVERHELLO_USE_SRTP_EXT"}, |
241 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT), "SSL_PARSE_SERVERHELLO_USE_SRTP_EXT"}, | 241 | {ERR_FUNC(SSL_F_SSL_PEEK), "SSL_peek"}, |
242 | {ERR_FUNC(SSL_F_SSL_PEEK), "SSL_peek"}, | 242 | {ERR_FUNC(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT), "SSL_PREPARE_CLIENTHELLO_TLSEXT"}, |
243 | {ERR_FUNC(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT), "SSL_PREPARE_CLIENTHELLO_TLSEXT"}, | 243 | {ERR_FUNC(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT), "SSL_PREPARE_SERVERHELLO_TLSEXT"}, |
244 | {ERR_FUNC(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT), "SSL_PREPARE_SERVERHELLO_TLSEXT"}, | 244 | {ERR_FUNC(SSL_F_SSL_READ), "SSL_read"}, |
245 | {ERR_FUNC(SSL_F_SSL_READ), "SSL_read"}, | 245 | {ERR_FUNC(SSL_F_SSL_RSA_PRIVATE_DECRYPT), "SSL_RSA_PRIVATE_DECRYPT"}, |
246 | {ERR_FUNC(SSL_F_SSL_RSA_PRIVATE_DECRYPT), "SSL_RSA_PRIVATE_DECRYPT"}, | 246 | {ERR_FUNC(SSL_F_SSL_RSA_PUBLIC_ENCRYPT), "SSL_RSA_PUBLIC_ENCRYPT"}, |
247 | {ERR_FUNC(SSL_F_SSL_RSA_PUBLIC_ENCRYPT), "SSL_RSA_PUBLIC_ENCRYPT"}, | 247 | {ERR_FUNC(SSL_F_SSL_SESSION_NEW), "SSL_SESSION_new"}, |
248 | {ERR_FUNC(SSL_F_SSL_SESSION_NEW), "SSL_SESSION_new"}, | 248 | {ERR_FUNC(SSL_F_SSL_SESSION_PRINT_FP), "SSL_SESSION_print_fp"}, |
249 | {ERR_FUNC(SSL_F_SSL_SESSION_PRINT_FP), "SSL_SESSION_print_fp"}, | 249 | {ERR_FUNC(SSL_F_SSL_SESSION_SET1_ID_CONTEXT), "SSL_SESSION_set1_id_context"}, |
250 | {ERR_FUNC(SSL_F_SSL_SESSION_SET1_ID_CONTEXT), "SSL_SESSION_set1_id_context"}, | 250 | {ERR_FUNC(SSL_F_SSL_SESS_CERT_NEW), "SSL_SESS_CERT_NEW"}, |
251 | {ERR_FUNC(SSL_F_SSL_SESS_CERT_NEW), "SSL_SESS_CERT_NEW"}, | 251 | {ERR_FUNC(SSL_F_SSL_SET_CERT), "SSL_SET_CERT"}, |
252 | {ERR_FUNC(SSL_F_SSL_SET_CERT), "SSL_SET_CERT"}, | 252 | {ERR_FUNC(SSL_F_SSL_SET_CIPHER_LIST), "SSL_set_cipher_list"}, |
253 | {ERR_FUNC(SSL_F_SSL_SET_CIPHER_LIST), "SSL_set_cipher_list"}, | 253 | {ERR_FUNC(SSL_F_SSL_SET_FD), "SSL_set_fd"}, |
254 | {ERR_FUNC(SSL_F_SSL_SET_FD), "SSL_set_fd"}, | 254 | {ERR_FUNC(SSL_F_SSL_SET_PKEY), "SSL_SET_PKEY"}, |
255 | {ERR_FUNC(SSL_F_SSL_SET_PKEY), "SSL_SET_PKEY"}, | 255 | {ERR_FUNC(SSL_F_SSL_SET_PURPOSE), "SSL_set_purpose"}, |
256 | {ERR_FUNC(SSL_F_SSL_SET_PURPOSE), "SSL_set_purpose"}, | 256 | {ERR_FUNC(SSL_F_SSL_SET_RFD), "SSL_set_rfd"}, |
257 | {ERR_FUNC(SSL_F_SSL_SET_RFD), "SSL_set_rfd"}, | 257 | {ERR_FUNC(SSL_F_SSL_SET_SESSION), "SSL_set_session"}, |
258 | {ERR_FUNC(SSL_F_SSL_SET_SESSION), "SSL_set_session"}, | 258 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_ID_CONTEXT), "SSL_set_session_id_context"}, |
259 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_ID_CONTEXT), "SSL_set_session_id_context"}, | 259 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_TICKET_EXT), "SSL_set_session_ticket_ext"}, |
260 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_TICKET_EXT), "SSL_set_session_ticket_ext"}, | 260 | {ERR_FUNC(SSL_F_SSL_SET_TRUST), "SSL_set_trust"}, |
261 | {ERR_FUNC(SSL_F_SSL_SET_TRUST), "SSL_set_trust"}, | 261 | {ERR_FUNC(SSL_F_SSL_SET_WFD), "SSL_set_wfd"}, |
262 | {ERR_FUNC(SSL_F_SSL_SET_WFD), "SSL_set_wfd"}, | 262 | {ERR_FUNC(SSL_F_SSL_SHUTDOWN), "SSL_shutdown"}, |
263 | {ERR_FUNC(SSL_F_SSL_SHUTDOWN), "SSL_shutdown"}, | 263 | {ERR_FUNC(SSL_F_SSL_SRP_CTX_INIT), "SSL_SRP_CTX_init"}, |
264 | {ERR_FUNC(SSL_F_SSL_SRP_CTX_INIT), "SSL_SRP_CTX_init"}, | 264 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_CONST_FUNCTION), "SSL_UNDEFINED_CONST_FUNCTION"}, |
265 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_CONST_FUNCTION), "SSL_UNDEFINED_CONST_FUNCTION"}, | 265 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_FUNCTION), "SSL_UNDEFINED_FUNCTION"}, |
266 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_FUNCTION), "SSL_UNDEFINED_FUNCTION"}, | 266 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_VOID_FUNCTION), "SSL_UNDEFINED_VOID_FUNCTION"}, |
267 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_VOID_FUNCTION), "SSL_UNDEFINED_VOID_FUNCTION"}, | 267 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE), "SSL_use_certificate"}, |
268 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE), "SSL_use_certificate"}, | 268 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_ASN1), "SSL_use_certificate_ASN1"}, |
269 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_ASN1), "SSL_use_certificate_ASN1"}, | 269 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_FILE), "SSL_use_certificate_file"}, |
270 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_FILE), "SSL_use_certificate_file"}, | 270 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY), "SSL_use_PrivateKey"}, |
271 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY), "SSL_use_PrivateKey"}, | 271 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_ASN1), "SSL_use_PrivateKey_ASN1"}, |
272 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_ASN1), "SSL_use_PrivateKey_ASN1"}, | 272 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_FILE), "SSL_use_PrivateKey_file"}, |
273 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_FILE), "SSL_use_PrivateKey_file"}, | 273 | {ERR_FUNC(SSL_F_SSL_USE_PSK_IDENTITY_HINT), "SSL_use_psk_identity_hint"}, |
274 | {ERR_FUNC(SSL_F_SSL_USE_PSK_IDENTITY_HINT), "SSL_use_psk_identity_hint"}, | 274 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY), "SSL_use_RSAPrivateKey"}, |
275 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY), "SSL_use_RSAPrivateKey"}, | 275 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1), "SSL_use_RSAPrivateKey_ASN1"}, |
276 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1), "SSL_use_RSAPrivateKey_ASN1"}, | 276 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE), "SSL_use_RSAPrivateKey_file"}, |
277 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE), "SSL_use_RSAPrivateKey_file"}, | 277 | {ERR_FUNC(SSL_F_SSL_VERIFY_CERT_CHAIN), "SSL_VERIFY_CERT_CHAIN"}, |
278 | {ERR_FUNC(SSL_F_SSL_VERIFY_CERT_CHAIN), "SSL_VERIFY_CERT_CHAIN"}, | 278 | {ERR_FUNC(SSL_F_SSL_WRITE), "SSL_write"}, |
279 | {ERR_FUNC(SSL_F_SSL_WRITE), "SSL_write"}, | 279 | {ERR_FUNC(SSL_F_TLS1_CERT_VERIFY_MAC), "tls1_cert_verify_mac"}, |
280 | {ERR_FUNC(SSL_F_TLS1_CERT_VERIFY_MAC), "tls1_cert_verify_mac"}, | 280 | {ERR_FUNC(SSL_F_TLS1_CHANGE_CIPHER_STATE), "TLS1_CHANGE_CIPHER_STATE"}, |
281 | {ERR_FUNC(SSL_F_TLS1_CHANGE_CIPHER_STATE), "TLS1_CHANGE_CIPHER_STATE"}, | 281 | {ERR_FUNC(SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT), "TLS1_CHECK_SERVERHELLO_TLSEXT"}, |
282 | {ERR_FUNC(SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT), "TLS1_CHECK_SERVERHELLO_TLSEXT"}, | 282 | {ERR_FUNC(SSL_F_TLS1_ENC), "TLS1_ENC"}, |
283 | {ERR_FUNC(SSL_F_TLS1_ENC), "TLS1_ENC"}, | 283 | {ERR_FUNC(SSL_F_TLS1_EXPORT_KEYING_MATERIAL), "TLS1_EXPORT_KEYING_MATERIAL"}, |
284 | {ERR_FUNC(SSL_F_TLS1_EXPORT_KEYING_MATERIAL), "TLS1_EXPORT_KEYING_MATERIAL"}, | 284 | {ERR_FUNC(SSL_F_TLS1_HEARTBEAT), "SSL_F_TLS1_HEARTBEAT"}, |
285 | {ERR_FUNC(SSL_F_TLS1_HEARTBEAT), "SSL_F_TLS1_HEARTBEAT"}, | 285 | {ERR_FUNC(SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT), "TLS1_PREPARE_CLIENTHELLO_TLSEXT"}, |
286 | {ERR_FUNC(SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT), "TLS1_PREPARE_CLIENTHELLO_TLSEXT"}, | 286 | {ERR_FUNC(SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT), "TLS1_PREPARE_SERVERHELLO_TLSEXT"}, |
287 | {ERR_FUNC(SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT), "TLS1_PREPARE_SERVERHELLO_TLSEXT"}, | 287 | {ERR_FUNC(SSL_F_TLS1_PRF), "tls1_prf"}, |
288 | {ERR_FUNC(SSL_F_TLS1_PRF), "tls1_prf"}, | 288 | {ERR_FUNC(SSL_F_TLS1_SETUP_KEY_BLOCK), "TLS1_SETUP_KEY_BLOCK"}, |
289 | {ERR_FUNC(SSL_F_TLS1_SETUP_KEY_BLOCK), "TLS1_SETUP_KEY_BLOCK"}, | 289 | {ERR_FUNC(SSL_F_WRITE_PENDING), "WRITE_PENDING"}, |
290 | {ERR_FUNC(SSL_F_WRITE_PENDING), "WRITE_PENDING"}, | 290 | {0, NULL} |
291 | {0,NULL} | 291 | }; |
292 | }; | ||
293 | 292 | ||
294 | static ERR_STRING_DATA SSL_str_reasons[]= | 293 | static ERR_STRING_DATA SSL_str_reasons[]= { |
295 | { | 294 | {ERR_REASON(SSL_R_APP_DATA_IN_HANDSHAKE) , "app data in handshake"}, |
296 | {ERR_REASON(SSL_R_APP_DATA_IN_HANDSHAKE) ,"app data in handshake"}, | 295 | {ERR_REASON(SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT), "attempt to reuse session in different context"}, |
297 | {ERR_REASON(SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT),"attempt to reuse session in different context"}, | 296 | {ERR_REASON(SSL_R_BAD_ALERT_RECORD) , "bad alert record"}, |
298 | {ERR_REASON(SSL_R_BAD_ALERT_RECORD) ,"bad alert record"}, | 297 | {ERR_REASON(SSL_R_BAD_AUTHENTICATION_TYPE), "bad authentication type"}, |
299 | {ERR_REASON(SSL_R_BAD_AUTHENTICATION_TYPE),"bad authentication type"}, | 298 | {ERR_REASON(SSL_R_BAD_CHANGE_CIPHER_SPEC), "bad change cipher spec"}, |
300 | {ERR_REASON(SSL_R_BAD_CHANGE_CIPHER_SPEC),"bad change cipher spec"}, | 299 | {ERR_REASON(SSL_R_BAD_CHECKSUM) , "bad checksum"}, |
301 | {ERR_REASON(SSL_R_BAD_CHECKSUM) ,"bad checksum"}, | 300 | {ERR_REASON(SSL_R_BAD_DATA_RETURNED_BY_CALLBACK), "bad data returned by callback"}, |
302 | {ERR_REASON(SSL_R_BAD_DATA_RETURNED_BY_CALLBACK),"bad data returned by callback"}, | 301 | {ERR_REASON(SSL_R_BAD_DECOMPRESSION) , "bad decompression"}, |
303 | {ERR_REASON(SSL_R_BAD_DECOMPRESSION) ,"bad decompression"}, | 302 | {ERR_REASON(SSL_R_BAD_DH_G_LENGTH) , "bad dh g length"}, |
304 | {ERR_REASON(SSL_R_BAD_DH_G_LENGTH) ,"bad dh g length"}, | 303 | {ERR_REASON(SSL_R_BAD_DH_PUB_KEY_LENGTH) , "bad dh pub key length"}, |
305 | {ERR_REASON(SSL_R_BAD_DH_PUB_KEY_LENGTH) ,"bad dh pub key length"}, | 304 | {ERR_REASON(SSL_R_BAD_DH_P_LENGTH) , "bad dh p length"}, |
306 | {ERR_REASON(SSL_R_BAD_DH_P_LENGTH) ,"bad dh p length"}, | 305 | {ERR_REASON(SSL_R_BAD_DIGEST_LENGTH) , "bad digest length"}, |
307 | {ERR_REASON(SSL_R_BAD_DIGEST_LENGTH) ,"bad digest length"}, | 306 | {ERR_REASON(SSL_R_BAD_DSA_SIGNATURE) , "bad dsa signature"}, |
308 | {ERR_REASON(SSL_R_BAD_DSA_SIGNATURE) ,"bad dsa signature"}, | 307 | {ERR_REASON(SSL_R_BAD_ECC_CERT) , "bad ecc cert"}, |
309 | {ERR_REASON(SSL_R_BAD_ECC_CERT) ,"bad ecc cert"}, | 308 | {ERR_REASON(SSL_R_BAD_ECDSA_SIGNATURE) , "bad ecdsa signature"}, |
310 | {ERR_REASON(SSL_R_BAD_ECDSA_SIGNATURE) ,"bad ecdsa signature"}, | 309 | {ERR_REASON(SSL_R_BAD_ECPOINT) , "bad ecpoint"}, |
311 | {ERR_REASON(SSL_R_BAD_ECPOINT) ,"bad ecpoint"}, | 310 | {ERR_REASON(SSL_R_BAD_HANDSHAKE_LENGTH) , "bad handshake length"}, |
312 | {ERR_REASON(SSL_R_BAD_HANDSHAKE_LENGTH) ,"bad handshake length"}, | 311 | {ERR_REASON(SSL_R_BAD_HELLO_REQUEST) , "bad hello request"}, |
313 | {ERR_REASON(SSL_R_BAD_HELLO_REQUEST) ,"bad hello request"}, | 312 | {ERR_REASON(SSL_R_BAD_LENGTH) , "bad length"}, |
314 | {ERR_REASON(SSL_R_BAD_LENGTH) ,"bad length"}, | 313 | {ERR_REASON(SSL_R_BAD_MAC_DECODE) , "bad mac decode"}, |
315 | {ERR_REASON(SSL_R_BAD_MAC_DECODE) ,"bad mac decode"}, | 314 | {ERR_REASON(SSL_R_BAD_MAC_LENGTH) , "bad mac length"}, |
316 | {ERR_REASON(SSL_R_BAD_MAC_LENGTH) ,"bad mac length"}, | 315 | {ERR_REASON(SSL_R_BAD_MESSAGE_TYPE) , "bad message type"}, |
317 | {ERR_REASON(SSL_R_BAD_MESSAGE_TYPE) ,"bad message type"}, | 316 | {ERR_REASON(SSL_R_BAD_PACKET_LENGTH) , "bad packet length"}, |
318 | {ERR_REASON(SSL_R_BAD_PACKET_LENGTH) ,"bad packet length"}, | 317 | {ERR_REASON(SSL_R_BAD_PROTOCOL_VERSION_NUMBER), "bad protocol version number"}, |
319 | {ERR_REASON(SSL_R_BAD_PROTOCOL_VERSION_NUMBER),"bad protocol version number"}, | 318 | {ERR_REASON(SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH), "bad psk identity hint length"}, |
320 | {ERR_REASON(SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH),"bad psk identity hint length"}, | 319 | {ERR_REASON(SSL_R_BAD_RESPONSE_ARGUMENT) , "bad response argument"}, |
321 | {ERR_REASON(SSL_R_BAD_RESPONSE_ARGUMENT) ,"bad response argument"}, | 320 | {ERR_REASON(SSL_R_BAD_RSA_DECRYPT) , "bad rsa decrypt"}, |
322 | {ERR_REASON(SSL_R_BAD_RSA_DECRYPT) ,"bad rsa decrypt"}, | 321 | {ERR_REASON(SSL_R_BAD_RSA_ENCRYPT) , "bad rsa encrypt"}, |
323 | {ERR_REASON(SSL_R_BAD_RSA_ENCRYPT) ,"bad rsa encrypt"}, | 322 | {ERR_REASON(SSL_R_BAD_RSA_E_LENGTH) , "bad rsa e length"}, |
324 | {ERR_REASON(SSL_R_BAD_RSA_E_LENGTH) ,"bad rsa e length"}, | 323 | {ERR_REASON(SSL_R_BAD_RSA_MODULUS_LENGTH), "bad rsa modulus length"}, |
325 | {ERR_REASON(SSL_R_BAD_RSA_MODULUS_LENGTH),"bad rsa modulus length"}, | 324 | {ERR_REASON(SSL_R_BAD_RSA_SIGNATURE) , "bad rsa signature"}, |
326 | {ERR_REASON(SSL_R_BAD_RSA_SIGNATURE) ,"bad rsa signature"}, | 325 | {ERR_REASON(SSL_R_BAD_SIGNATURE) , "bad signature"}, |
327 | {ERR_REASON(SSL_R_BAD_SIGNATURE) ,"bad signature"}, | 326 | {ERR_REASON(SSL_R_BAD_SRP_A_LENGTH) , "bad srp a length"}, |
328 | {ERR_REASON(SSL_R_BAD_SRP_A_LENGTH) ,"bad srp a length"}, | 327 | {ERR_REASON(SSL_R_BAD_SRP_B_LENGTH) , "bad srp b length"}, |
329 | {ERR_REASON(SSL_R_BAD_SRP_B_LENGTH) ,"bad srp b length"}, | 328 | {ERR_REASON(SSL_R_BAD_SRP_G_LENGTH) , "bad srp g length"}, |
330 | {ERR_REASON(SSL_R_BAD_SRP_G_LENGTH) ,"bad srp g length"}, | 329 | {ERR_REASON(SSL_R_BAD_SRP_N_LENGTH) , "bad srp n length"}, |
331 | {ERR_REASON(SSL_R_BAD_SRP_N_LENGTH) ,"bad srp n length"}, | 330 | {ERR_REASON(SSL_R_BAD_SRP_S_LENGTH) , "bad srp s length"}, |
332 | {ERR_REASON(SSL_R_BAD_SRP_S_LENGTH) ,"bad srp s length"}, | 331 | {ERR_REASON(SSL_R_BAD_SRTP_MKI_VALUE) , "bad srtp mki value"}, |
333 | {ERR_REASON(SSL_R_BAD_SRTP_MKI_VALUE) ,"bad srtp mki value"}, | 332 | {ERR_REASON(SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST), "bad srtp protection profile list"}, |
334 | {ERR_REASON(SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST),"bad srtp protection profile list"}, | 333 | {ERR_REASON(SSL_R_BAD_SSL_FILETYPE) , "bad ssl filetype"}, |
335 | {ERR_REASON(SSL_R_BAD_SSL_FILETYPE) ,"bad ssl filetype"}, | 334 | {ERR_REASON(SSL_R_BAD_SSL_SESSION_ID_LENGTH), "bad ssl session id length"}, |
336 | {ERR_REASON(SSL_R_BAD_SSL_SESSION_ID_LENGTH),"bad ssl session id length"}, | 335 | {ERR_REASON(SSL_R_BAD_STATE) , "bad state"}, |
337 | {ERR_REASON(SSL_R_BAD_STATE) ,"bad state"}, | 336 | {ERR_REASON(SSL_R_BAD_WRITE_RETRY) , "bad write retry"}, |
338 | {ERR_REASON(SSL_R_BAD_WRITE_RETRY) ,"bad write retry"}, | 337 | {ERR_REASON(SSL_R_BIO_NOT_SET) , "bio not set"}, |
339 | {ERR_REASON(SSL_R_BIO_NOT_SET) ,"bio not set"}, | 338 | {ERR_REASON(SSL_R_BLOCK_CIPHER_PAD_IS_WRONG), "block cipher pad is wrong"}, |
340 | {ERR_REASON(SSL_R_BLOCK_CIPHER_PAD_IS_WRONG),"block cipher pad is wrong"}, | 339 | {ERR_REASON(SSL_R_BN_LIB) , "bn lib"}, |
341 | {ERR_REASON(SSL_R_BN_LIB) ,"bn lib"}, | 340 | {ERR_REASON(SSL_R_CA_DN_LENGTH_MISMATCH) , "ca dn length mismatch"}, |
342 | {ERR_REASON(SSL_R_CA_DN_LENGTH_MISMATCH) ,"ca dn length mismatch"}, | 341 | {ERR_REASON(SSL_R_CA_DN_TOO_LONG) , "ca dn too long"}, |
343 | {ERR_REASON(SSL_R_CA_DN_TOO_LONG) ,"ca dn too long"}, | 342 | {ERR_REASON(SSL_R_CCS_RECEIVED_EARLY) , "ccs received early"}, |
344 | {ERR_REASON(SSL_R_CCS_RECEIVED_EARLY) ,"ccs received early"}, | 343 | {ERR_REASON(SSL_R_CERTIFICATE_VERIFY_FAILED), "certificate verify failed"}, |
345 | {ERR_REASON(SSL_R_CERTIFICATE_VERIFY_FAILED),"certificate verify failed"}, | 344 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) , "cert length mismatch"}, |
346 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) ,"cert length mismatch"}, | 345 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT), "challenge is different"}, |
347 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT),"challenge is different"}, | 346 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH), "cipher code wrong length"}, |
348 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH),"cipher code wrong length"}, | 347 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE), "cipher or hash unavailable"}, |
349 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE),"cipher or hash unavailable"}, | 348 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR), "cipher table src error"}, |
350 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR),"cipher table src error"}, | 349 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) , "clienthello tlsext"}, |
351 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) ,"clienthello tlsext"}, | 350 | {ERR_REASON(SSL_R_COMPRESSED_LENGTH_TOO_LONG), "compressed length too long"}, |
352 | {ERR_REASON(SSL_R_COMPRESSED_LENGTH_TOO_LONG),"compressed length too long"}, | 351 | {ERR_REASON(SSL_R_COMPRESSION_DISABLED) , "compression disabled"}, |
353 | {ERR_REASON(SSL_R_COMPRESSION_DISABLED) ,"compression disabled"}, | 352 | {ERR_REASON(SSL_R_COMPRESSION_FAILURE) , "compression failure"}, |
354 | {ERR_REASON(SSL_R_COMPRESSION_FAILURE) ,"compression failure"}, | 353 | {ERR_REASON(SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE), "compression id not within private range"}, |
355 | {ERR_REASON(SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE),"compression id not within private range"}, | 354 | {ERR_REASON(SSL_R_COMPRESSION_LIBRARY_ERROR), "compression library error"}, |
356 | {ERR_REASON(SSL_R_COMPRESSION_LIBRARY_ERROR),"compression library error"}, | 355 | {ERR_REASON(SSL_R_CONNECTION_ID_IS_DIFFERENT), "connection id is different"}, |
357 | {ERR_REASON(SSL_R_CONNECTION_ID_IS_DIFFERENT),"connection id is different"}, | 356 | {ERR_REASON(SSL_R_CONNECTION_TYPE_NOT_SET), "connection type not set"}, |
358 | {ERR_REASON(SSL_R_CONNECTION_TYPE_NOT_SET),"connection type not set"}, | 357 | {ERR_REASON(SSL_R_COOKIE_MISMATCH) , "cookie mismatch"}, |
359 | {ERR_REASON(SSL_R_COOKIE_MISMATCH) ,"cookie mismatch"}, | 358 | {ERR_REASON(SSL_R_DATA_BETWEEN_CCS_AND_FINISHED), "data between ccs and finished"}, |
360 | {ERR_REASON(SSL_R_DATA_BETWEEN_CCS_AND_FINISHED),"data between ccs and finished"}, | 359 | {ERR_REASON(SSL_R_DATA_LENGTH_TOO_LONG) , "data length too long"}, |
361 | {ERR_REASON(SSL_R_DATA_LENGTH_TOO_LONG) ,"data length too long"}, | 360 | {ERR_REASON(SSL_R_DECRYPTION_FAILED) , "decryption failed"}, |
362 | {ERR_REASON(SSL_R_DECRYPTION_FAILED) ,"decryption failed"}, | 361 | {ERR_REASON(SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC), "decryption failed or bad record mac"}, |
363 | {ERR_REASON(SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC),"decryption failed or bad record mac"}, | 362 | {ERR_REASON(SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG), "dh public value length is wrong"}, |
364 | {ERR_REASON(SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG),"dh public value length is wrong"}, | 363 | {ERR_REASON(SSL_R_DIGEST_CHECK_FAILED) , "digest check failed"}, |
365 | {ERR_REASON(SSL_R_DIGEST_CHECK_FAILED) ,"digest check failed"}, | 364 | {ERR_REASON(SSL_R_DTLS_MESSAGE_TOO_BIG) , "dtls message too big"}, |
366 | {ERR_REASON(SSL_R_DTLS_MESSAGE_TOO_BIG) ,"dtls message too big"}, | 365 | {ERR_REASON(SSL_R_DUPLICATE_COMPRESSION_ID), "duplicate compression id"}, |
367 | {ERR_REASON(SSL_R_DUPLICATE_COMPRESSION_ID),"duplicate compression id"}, | 366 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT), "ecc cert not for key agreement"}, |
368 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT),"ecc cert not for key agreement"}, | 367 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_SIGNING), "ecc cert not for signing"}, |
369 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_SIGNING),"ecc cert not for signing"}, | 368 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE), "ecc cert should have rsa signature"}, |
370 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE),"ecc cert should have rsa signature"}, | 369 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE), "ecc cert should have sha1 signature"}, |
371 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE),"ecc cert should have sha1 signature"}, | 370 | {ERR_REASON(SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER), "ecgroup too large for cipher"}, |
372 | {ERR_REASON(SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER),"ecgroup too large for cipher"}, | 371 | {ERR_REASON(SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST), "empty srtp protection profile list"}, |
373 | {ERR_REASON(SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST),"empty srtp protection profile list"}, | 372 | {ERR_REASON(SSL_R_ENCRYPTED_LENGTH_TOO_LONG), "encrypted length too long"}, |
374 | {ERR_REASON(SSL_R_ENCRYPTED_LENGTH_TOO_LONG),"encrypted length too long"}, | 373 | {ERR_REASON(SSL_R_ERROR_GENERATING_TMP_RSA_KEY), "error generating tmp rsa key"}, |
375 | {ERR_REASON(SSL_R_ERROR_GENERATING_TMP_RSA_KEY),"error generating tmp rsa key"}, | 374 | {ERR_REASON(SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST), "error in received cipher list"}, |
376 | {ERR_REASON(SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST),"error in received cipher list"}, | 375 | {ERR_REASON(SSL_R_EXCESSIVE_MESSAGE_SIZE), "excessive message size"}, |
377 | {ERR_REASON(SSL_R_EXCESSIVE_MESSAGE_SIZE),"excessive message size"}, | 376 | {ERR_REASON(SSL_R_EXTRA_DATA_IN_MESSAGE) , "extra data in message"}, |
378 | {ERR_REASON(SSL_R_EXTRA_DATA_IN_MESSAGE) ,"extra data in message"}, | 377 | {ERR_REASON(SSL_R_GOT_A_FIN_BEFORE_A_CCS), "got a fin before a ccs"}, |
379 | {ERR_REASON(SSL_R_GOT_A_FIN_BEFORE_A_CCS),"got a fin before a ccs"}, | 378 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS), "got next proto before a ccs"}, |
380 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS),"got next proto before a ccs"}, | 379 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION), "got next proto without seeing extension"}, |
381 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION),"got next proto without seeing extension"}, | 380 | {ERR_REASON(SSL_R_HTTPS_PROXY_REQUEST) , "https proxy request"}, |
382 | {ERR_REASON(SSL_R_HTTPS_PROXY_REQUEST) ,"https proxy request"}, | 381 | {ERR_REASON(SSL_R_HTTP_REQUEST) , "http request"}, |
383 | {ERR_REASON(SSL_R_HTTP_REQUEST) ,"http request"}, | 382 | {ERR_REASON(SSL_R_ILLEGAL_PADDING) , "illegal padding"}, |
384 | {ERR_REASON(SSL_R_ILLEGAL_PADDING) ,"illegal padding"}, | 383 | {ERR_REASON(SSL_R_INCONSISTENT_COMPRESSION), "inconsistent compression"}, |
385 | {ERR_REASON(SSL_R_INCONSISTENT_COMPRESSION),"inconsistent compression"}, | 384 | {ERR_REASON(SSL_R_INVALID_CHALLENGE_LENGTH), "invalid challenge length"}, |
386 | {ERR_REASON(SSL_R_INVALID_CHALLENGE_LENGTH),"invalid challenge length"}, | 385 | {ERR_REASON(SSL_R_INVALID_COMMAND) , "invalid command"}, |
387 | {ERR_REASON(SSL_R_INVALID_COMMAND) ,"invalid command"}, | 386 | {ERR_REASON(SSL_R_INVALID_COMPRESSION_ALGORITHM), "invalid compression algorithm"}, |
388 | {ERR_REASON(SSL_R_INVALID_COMPRESSION_ALGORITHM),"invalid compression algorithm"}, | 387 | {ERR_REASON(SSL_R_INVALID_PURPOSE) , "invalid purpose"}, |
389 | {ERR_REASON(SSL_R_INVALID_PURPOSE) ,"invalid purpose"}, | 388 | {ERR_REASON(SSL_R_INVALID_SRP_USERNAME) , "invalid srp username"}, |
390 | {ERR_REASON(SSL_R_INVALID_SRP_USERNAME) ,"invalid srp username"}, | 389 | {ERR_REASON(SSL_R_INVALID_STATUS_RESPONSE), "invalid status response"}, |
391 | {ERR_REASON(SSL_R_INVALID_STATUS_RESPONSE),"invalid status response"}, | 390 | {ERR_REASON(SSL_R_INVALID_TICKET_KEYS_LENGTH), "invalid ticket keys length"}, |
392 | {ERR_REASON(SSL_R_INVALID_TICKET_KEYS_LENGTH),"invalid ticket keys length"}, | 391 | {ERR_REASON(SSL_R_INVALID_TRUST) , "invalid trust"}, |
393 | {ERR_REASON(SSL_R_INVALID_TRUST) ,"invalid trust"}, | 392 | {ERR_REASON(SSL_R_KEY_ARG_TOO_LONG) , "key arg too long"}, |
394 | {ERR_REASON(SSL_R_KEY_ARG_TOO_LONG) ,"key arg too long"}, | 393 | {ERR_REASON(SSL_R_KRB5) , "krb5"}, |
395 | {ERR_REASON(SSL_R_KRB5) ,"krb5"}, | 394 | {ERR_REASON(SSL_R_KRB5_C_CC_PRINC) , "krb5 client cc principal (no tkt?)"}, |
396 | {ERR_REASON(SSL_R_KRB5_C_CC_PRINC) ,"krb5 client cc principal (no tkt?)"}, | 395 | {ERR_REASON(SSL_R_KRB5_C_GET_CRED) , "krb5 client get cred"}, |
397 | {ERR_REASON(SSL_R_KRB5_C_GET_CRED) ,"krb5 client get cred"}, | 396 | {ERR_REASON(SSL_R_KRB5_C_INIT) , "krb5 client init"}, |
398 | {ERR_REASON(SSL_R_KRB5_C_INIT) ,"krb5 client init"}, | 397 | {ERR_REASON(SSL_R_KRB5_C_MK_REQ) , "krb5 client mk_req (expired tkt?)"}, |
399 | {ERR_REASON(SSL_R_KRB5_C_MK_REQ) ,"krb5 client mk_req (expired tkt?)"}, | 398 | {ERR_REASON(SSL_R_KRB5_S_BAD_TICKET) , "krb5 server bad ticket"}, |
400 | {ERR_REASON(SSL_R_KRB5_S_BAD_TICKET) ,"krb5 server bad ticket"}, | 399 | {ERR_REASON(SSL_R_KRB5_S_INIT) , "krb5 server init"}, |
401 | {ERR_REASON(SSL_R_KRB5_S_INIT) ,"krb5 server init"}, | 400 | {ERR_REASON(SSL_R_KRB5_S_RD_REQ) , "krb5 server rd_req (keytab perms?)"}, |
402 | {ERR_REASON(SSL_R_KRB5_S_RD_REQ) ,"krb5 server rd_req (keytab perms?)"}, | 401 | {ERR_REASON(SSL_R_KRB5_S_TKT_EXPIRED) , "krb5 server tkt expired"}, |
403 | {ERR_REASON(SSL_R_KRB5_S_TKT_EXPIRED) ,"krb5 server tkt expired"}, | 402 | {ERR_REASON(SSL_R_KRB5_S_TKT_NYV) , "krb5 server tkt not yet valid"}, |
404 | {ERR_REASON(SSL_R_KRB5_S_TKT_NYV) ,"krb5 server tkt not yet valid"}, | 403 | {ERR_REASON(SSL_R_KRB5_S_TKT_SKEW) , "krb5 server tkt skew"}, |
405 | {ERR_REASON(SSL_R_KRB5_S_TKT_SKEW) ,"krb5 server tkt skew"}, | 404 | {ERR_REASON(SSL_R_LENGTH_MISMATCH) , "length mismatch"}, |
406 | {ERR_REASON(SSL_R_LENGTH_MISMATCH) ,"length mismatch"}, | 405 | {ERR_REASON(SSL_R_LENGTH_TOO_SHORT) , "length too short"}, |
407 | {ERR_REASON(SSL_R_LENGTH_TOO_SHORT) ,"length too short"}, | 406 | {ERR_REASON(SSL_R_LIBRARY_BUG) , "library bug"}, |
408 | {ERR_REASON(SSL_R_LIBRARY_BUG) ,"library bug"}, | 407 | {ERR_REASON(SSL_R_LIBRARY_HAS_NO_CIPHERS), "library has no ciphers"}, |
409 | {ERR_REASON(SSL_R_LIBRARY_HAS_NO_CIPHERS),"library has no ciphers"}, | 408 | {ERR_REASON(SSL_R_MESSAGE_TOO_LONG) , "message too long"}, |
410 | {ERR_REASON(SSL_R_MESSAGE_TOO_LONG) ,"message too long"}, | 409 | {ERR_REASON(SSL_R_MISSING_DH_DSA_CERT) , "missing dh dsa cert"}, |
411 | {ERR_REASON(SSL_R_MISSING_DH_DSA_CERT) ,"missing dh dsa cert"}, | 410 | {ERR_REASON(SSL_R_MISSING_DH_KEY) , "missing dh key"}, |
412 | {ERR_REASON(SSL_R_MISSING_DH_KEY) ,"missing dh key"}, | 411 | {ERR_REASON(SSL_R_MISSING_DH_RSA_CERT) , "missing dh rsa cert"}, |
413 | {ERR_REASON(SSL_R_MISSING_DH_RSA_CERT) ,"missing dh rsa cert"}, | 412 | {ERR_REASON(SSL_R_MISSING_DSA_SIGNING_CERT), "missing dsa signing cert"}, |
414 | {ERR_REASON(SSL_R_MISSING_DSA_SIGNING_CERT),"missing dsa signing cert"}, | 413 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_DH_KEY), "missing export tmp dh key"}, |
415 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_DH_KEY),"missing export tmp dh key"}, | 414 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_RSA_KEY), "missing export tmp rsa key"}, |
416 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_RSA_KEY),"missing export tmp rsa key"}, | 415 | {ERR_REASON(SSL_R_MISSING_RSA_CERTIFICATE), "missing rsa certificate"}, |
417 | {ERR_REASON(SSL_R_MISSING_RSA_CERTIFICATE),"missing rsa certificate"}, | 416 | {ERR_REASON(SSL_R_MISSING_RSA_ENCRYPTING_CERT), "missing rsa encrypting cert"}, |
418 | {ERR_REASON(SSL_R_MISSING_RSA_ENCRYPTING_CERT),"missing rsa encrypting cert"}, | 417 | {ERR_REASON(SSL_R_MISSING_RSA_SIGNING_CERT), "missing rsa signing cert"}, |
419 | {ERR_REASON(SSL_R_MISSING_RSA_SIGNING_CERT),"missing rsa signing cert"}, | 418 | {ERR_REASON(SSL_R_MISSING_SRP_PARAM) , "can't find SRP server param"}, |
420 | {ERR_REASON(SSL_R_MISSING_SRP_PARAM) ,"can't find SRP server param"}, | 419 | {ERR_REASON(SSL_R_MISSING_TMP_DH_KEY) , "missing tmp dh key"}, |
421 | {ERR_REASON(SSL_R_MISSING_TMP_DH_KEY) ,"missing tmp dh key"}, | 420 | {ERR_REASON(SSL_R_MISSING_TMP_ECDH_KEY) , "missing tmp ecdh key"}, |
422 | {ERR_REASON(SSL_R_MISSING_TMP_ECDH_KEY) ,"missing tmp ecdh key"}, | 421 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_KEY) , "missing tmp rsa key"}, |
423 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_KEY) ,"missing tmp rsa key"}, | 422 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_PKEY) , "missing tmp rsa pkey"}, |
424 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_PKEY) ,"missing tmp rsa pkey"}, | 423 | {ERR_REASON(SSL_R_MISSING_VERIFY_MESSAGE), "missing verify message"}, |
425 | {ERR_REASON(SSL_R_MISSING_VERIFY_MESSAGE),"missing verify message"}, | 424 | {ERR_REASON(SSL_R_MULTIPLE_SGC_RESTARTS) , "multiple sgc restarts"}, |
426 | {ERR_REASON(SSL_R_MULTIPLE_SGC_RESTARTS) ,"multiple sgc restarts"}, | 425 | {ERR_REASON(SSL_R_NON_SSLV2_INITIAL_PACKET), "non sslv2 initial packet"}, |
427 | {ERR_REASON(SSL_R_NON_SSLV2_INITIAL_PACKET),"non sslv2 initial packet"}, | 426 | {ERR_REASON(SSL_R_NO_CERTIFICATES_RETURNED), "no certificates returned"}, |
428 | {ERR_REASON(SSL_R_NO_CERTIFICATES_RETURNED),"no certificates returned"}, | 427 | {ERR_REASON(SSL_R_NO_CERTIFICATE_ASSIGNED), "no certificate assigned"}, |
429 | {ERR_REASON(SSL_R_NO_CERTIFICATE_ASSIGNED),"no certificate assigned"}, | 428 | {ERR_REASON(SSL_R_NO_CERTIFICATE_RETURNED), "no certificate returned"}, |
430 | {ERR_REASON(SSL_R_NO_CERTIFICATE_RETURNED),"no certificate returned"}, | 429 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SET) , "no certificate set"}, |
431 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SET) ,"no certificate set"}, | 430 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SPECIFIED), "no certificate specified"}, |
432 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SPECIFIED),"no certificate specified"}, | 431 | {ERR_REASON(SSL_R_NO_CIPHERS_AVAILABLE) , "no ciphers available"}, |
433 | {ERR_REASON(SSL_R_NO_CIPHERS_AVAILABLE) ,"no ciphers available"}, | 432 | {ERR_REASON(SSL_R_NO_CIPHERS_PASSED) , "no ciphers passed"}, |
434 | {ERR_REASON(SSL_R_NO_CIPHERS_PASSED) ,"no ciphers passed"}, | 433 | {ERR_REASON(SSL_R_NO_CIPHERS_SPECIFIED) , "no ciphers specified"}, |
435 | {ERR_REASON(SSL_R_NO_CIPHERS_SPECIFIED) ,"no ciphers specified"}, | 434 | {ERR_REASON(SSL_R_NO_CIPHER_LIST) , "no cipher list"}, |
436 | {ERR_REASON(SSL_R_NO_CIPHER_LIST) ,"no cipher list"}, | 435 | {ERR_REASON(SSL_R_NO_CIPHER_MATCH) , "no cipher match"}, |
437 | {ERR_REASON(SSL_R_NO_CIPHER_MATCH) ,"no cipher match"}, | 436 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_METHOD) , "no client cert method"}, |
438 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_METHOD) ,"no client cert method"}, | 437 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_RECEIVED), "no client cert received"}, |
439 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_RECEIVED),"no client cert received"}, | 438 | {ERR_REASON(SSL_R_NO_COMPRESSION_SPECIFIED), "no compression specified"}, |
440 | {ERR_REASON(SSL_R_NO_COMPRESSION_SPECIFIED),"no compression specified"}, | 439 | {ERR_REASON(SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER), "Peer haven't sent GOST certificate, required for selected ciphersuite"}, |
441 | {ERR_REASON(SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER),"Peer haven't sent GOST certificate, required for selected ciphersuite"}, | 440 | {ERR_REASON(SSL_R_NO_METHOD_SPECIFIED) , "no method specified"}, |
442 | {ERR_REASON(SSL_R_NO_METHOD_SPECIFIED) ,"no method specified"}, | 441 | {ERR_REASON(SSL_R_NO_PRIVATEKEY) , "no privatekey"}, |
443 | {ERR_REASON(SSL_R_NO_PRIVATEKEY) ,"no privatekey"}, | 442 | {ERR_REASON(SSL_R_NO_PRIVATE_KEY_ASSIGNED), "no private key assigned"}, |
444 | {ERR_REASON(SSL_R_NO_PRIVATE_KEY_ASSIGNED),"no private key assigned"}, | 443 | {ERR_REASON(SSL_R_NO_PROTOCOLS_AVAILABLE), "no protocols available"}, |
445 | {ERR_REASON(SSL_R_NO_PROTOCOLS_AVAILABLE),"no protocols available"}, | 444 | {ERR_REASON(SSL_R_NO_PUBLICKEY) , "no publickey"}, |
446 | {ERR_REASON(SSL_R_NO_PUBLICKEY) ,"no publickey"}, | 445 | {ERR_REASON(SSL_R_NO_RENEGOTIATION) , "no renegotiation"}, |
447 | {ERR_REASON(SSL_R_NO_RENEGOTIATION) ,"no renegotiation"}, | 446 | {ERR_REASON(SSL_R_NO_REQUIRED_DIGEST) , "digest requred for handshake isn't computed"}, |
448 | {ERR_REASON(SSL_R_NO_REQUIRED_DIGEST) ,"digest requred for handshake isn't computed"}, | 447 | {ERR_REASON(SSL_R_NO_SHARED_CIPHER) , "no shared cipher"}, |
449 | {ERR_REASON(SSL_R_NO_SHARED_CIPHER) ,"no shared cipher"}, | 448 | {ERR_REASON(SSL_R_NO_SRTP_PROFILES) , "no srtp profiles"}, |
450 | {ERR_REASON(SSL_R_NO_SRTP_PROFILES) ,"no srtp profiles"}, | 449 | {ERR_REASON(SSL_R_NO_VERIFY_CALLBACK) , "no verify callback"}, |
451 | {ERR_REASON(SSL_R_NO_VERIFY_CALLBACK) ,"no verify callback"}, | 450 | {ERR_REASON(SSL_R_NULL_SSL_CTX) , "null ssl ctx"}, |
452 | {ERR_REASON(SSL_R_NULL_SSL_CTX) ,"null ssl ctx"}, | 451 | {ERR_REASON(SSL_R_NULL_SSL_METHOD_PASSED), "null ssl method passed"}, |
453 | {ERR_REASON(SSL_R_NULL_SSL_METHOD_PASSED),"null ssl method passed"}, | 452 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "old session cipher not returned"}, |
454 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED),"old session cipher not returned"}, | 453 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), "old session compression algorithm not returned"}, |
455 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED),"old session compression algorithm not returned"}, | 454 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE), "only tls allowed in fips mode"}, |
456 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE),"only tls allowed in fips mode"}, | 455 | {ERR_REASON(SSL_R_OPAQUE_PRF_INPUT_TOO_LONG), "opaque PRF input too long"}, |
457 | {ERR_REASON(SSL_R_OPAQUE_PRF_INPUT_TOO_LONG),"opaque PRF input too long"}, | 456 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG), "packet length too long"}, |
458 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG),"packet length too long"}, | 457 | {ERR_REASON(SSL_R_PARSE_TLSEXT) , "parse tlsext"}, |
459 | {ERR_REASON(SSL_R_PARSE_TLSEXT) ,"parse tlsext"}, | 458 | {ERR_REASON(SSL_R_PATH_TOO_LONG) , "path too long"}, |
460 | {ERR_REASON(SSL_R_PATH_TOO_LONG) ,"path too long"}, | 459 | {ERR_REASON(SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE), "peer did not return a certificate"}, |
461 | {ERR_REASON(SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE),"peer did not return a certificate"}, | 460 | {ERR_REASON(SSL_R_PEER_ERROR) , "peer error"}, |
462 | {ERR_REASON(SSL_R_PEER_ERROR) ,"peer error"}, | 461 | {ERR_REASON(SSL_R_PEER_ERROR_CERTIFICATE), "peer error certificate"}, |
463 | {ERR_REASON(SSL_R_PEER_ERROR_CERTIFICATE),"peer error certificate"}, | 462 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CERTIFICATE), "peer error no certificate"}, |
464 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CERTIFICATE),"peer error no certificate"}, | 463 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CIPHER) , "peer error no cipher"}, |
465 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CIPHER) ,"peer error no cipher"}, | 464 | {ERR_REASON(SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE), "peer error unsupported certificate type"}, |
466 | {ERR_REASON(SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE),"peer error unsupported certificate type"}, | 465 | {ERR_REASON(SSL_R_PRE_MAC_LENGTH_TOO_LONG), "pre mac length too long"}, |
467 | {ERR_REASON(SSL_R_PRE_MAC_LENGTH_TOO_LONG),"pre mac length too long"}, | 466 | {ERR_REASON(SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS), "problems mapping cipher functions"}, |
468 | {ERR_REASON(SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS),"problems mapping cipher functions"}, | 467 | {ERR_REASON(SSL_R_PROTOCOL_IS_SHUTDOWN) , "protocol is shutdown"}, |
469 | {ERR_REASON(SSL_R_PROTOCOL_IS_SHUTDOWN) ,"protocol is shutdown"}, | 468 | {ERR_REASON(SSL_R_PSK_IDENTITY_NOT_FOUND), "psk identity not found"}, |
470 | {ERR_REASON(SSL_R_PSK_IDENTITY_NOT_FOUND),"psk identity not found"}, | 469 | {ERR_REASON(SSL_R_PSK_NO_CLIENT_CB) , "psk no client cb"}, |
471 | {ERR_REASON(SSL_R_PSK_NO_CLIENT_CB) ,"psk no client cb"}, | 470 | {ERR_REASON(SSL_R_PSK_NO_SERVER_CB) , "psk no server cb"}, |
472 | {ERR_REASON(SSL_R_PSK_NO_SERVER_CB) ,"psk no server cb"}, | 471 | {ERR_REASON(SSL_R_PUBLIC_KEY_ENCRYPT_ERROR), "public key encrypt error"}, |
473 | {ERR_REASON(SSL_R_PUBLIC_KEY_ENCRYPT_ERROR),"public key encrypt error"}, | 472 | {ERR_REASON(SSL_R_PUBLIC_KEY_IS_NOT_RSA) , "public key is not rsa"}, |
474 | {ERR_REASON(SSL_R_PUBLIC_KEY_IS_NOT_RSA) ,"public key is not rsa"}, | 473 | {ERR_REASON(SSL_R_PUBLIC_KEY_NOT_RSA) , "public key not rsa"}, |
475 | {ERR_REASON(SSL_R_PUBLIC_KEY_NOT_RSA) ,"public key not rsa"}, | 474 | {ERR_REASON(SSL_R_READ_BIO_NOT_SET) , "read bio not set"}, |
476 | {ERR_REASON(SSL_R_READ_BIO_NOT_SET) ,"read bio not set"}, | 475 | {ERR_REASON(SSL_R_READ_TIMEOUT_EXPIRED) , "read timeout expired"}, |
477 | {ERR_REASON(SSL_R_READ_TIMEOUT_EXPIRED) ,"read timeout expired"}, | 476 | {ERR_REASON(SSL_R_READ_WRONG_PACKET_TYPE), "read wrong packet type"}, |
478 | {ERR_REASON(SSL_R_READ_WRONG_PACKET_TYPE),"read wrong packet type"}, | 477 | {ERR_REASON(SSL_R_RECORD_LENGTH_MISMATCH), "record length mismatch"}, |
479 | {ERR_REASON(SSL_R_RECORD_LENGTH_MISMATCH),"record length mismatch"}, | 478 | {ERR_REASON(SSL_R_RECORD_TOO_LARGE) , "record too large"}, |
480 | {ERR_REASON(SSL_R_RECORD_TOO_LARGE) ,"record too large"}, | 479 | {ERR_REASON(SSL_R_RECORD_TOO_SMALL) , "record too small"}, |
481 | {ERR_REASON(SSL_R_RECORD_TOO_SMALL) ,"record too small"}, | 480 | {ERR_REASON(SSL_R_RENEGOTIATE_EXT_TOO_LONG), "renegotiate ext too long"}, |
482 | {ERR_REASON(SSL_R_RENEGOTIATE_EXT_TOO_LONG),"renegotiate ext too long"}, | 481 | {ERR_REASON(SSL_R_RENEGOTIATION_ENCODING_ERR), "renegotiation encoding err"}, |
483 | {ERR_REASON(SSL_R_RENEGOTIATION_ENCODING_ERR),"renegotiation encoding err"}, | 482 | {ERR_REASON(SSL_R_RENEGOTIATION_MISMATCH), "renegotiation mismatch"}, |
484 | {ERR_REASON(SSL_R_RENEGOTIATION_MISMATCH),"renegotiation mismatch"}, | 483 | {ERR_REASON(SSL_R_REQUIRED_CIPHER_MISSING), "required cipher missing"}, |
485 | {ERR_REASON(SSL_R_REQUIRED_CIPHER_MISSING),"required cipher missing"}, | 484 | {ERR_REASON(SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING), "required compresssion algorithm missing"}, |
486 | {ERR_REASON(SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING),"required compresssion algorithm missing"}, | 485 | {ERR_REASON(SSL_R_REUSE_CERT_LENGTH_NOT_ZERO), "reuse cert length not zero"}, |
487 | {ERR_REASON(SSL_R_REUSE_CERT_LENGTH_NOT_ZERO),"reuse cert length not zero"}, | 486 | {ERR_REASON(SSL_R_REUSE_CERT_TYPE_NOT_ZERO), "reuse cert type not zero"}, |
488 | {ERR_REASON(SSL_R_REUSE_CERT_TYPE_NOT_ZERO),"reuse cert type not zero"}, | 487 | {ERR_REASON(SSL_R_REUSE_CIPHER_LIST_NOT_ZERO), "reuse cipher list not zero"}, |
489 | {ERR_REASON(SSL_R_REUSE_CIPHER_LIST_NOT_ZERO),"reuse cipher list not zero"}, | 488 | {ERR_REASON(SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING), "scsv received when renegotiating"}, |
490 | {ERR_REASON(SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING),"scsv received when renegotiating"}, | 489 | {ERR_REASON(SSL_R_SERVERHELLO_TLSEXT) , "serverhello tlsext"}, |
491 | {ERR_REASON(SSL_R_SERVERHELLO_TLSEXT) ,"serverhello tlsext"}, | 490 | {ERR_REASON(SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED), "session id context uninitialized"}, |
492 | {ERR_REASON(SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED),"session id context uninitialized"}, | 491 | {ERR_REASON(SSL_R_SHORT_READ) , "short read"}, |
493 | {ERR_REASON(SSL_R_SHORT_READ) ,"short read"}, | 492 | {ERR_REASON(SSL_R_SIGNATURE_ALGORITHMS_ERROR), "signature algorithms error"}, |
494 | {ERR_REASON(SSL_R_SIGNATURE_ALGORITHMS_ERROR),"signature algorithms error"}, | 493 | {ERR_REASON(SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE), "signature for non signing certificate"}, |
495 | {ERR_REASON(SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE),"signature for non signing certificate"}, | 494 | {ERR_REASON(SSL_R_SRP_A_CALC) , "error with the srp params"}, |
496 | {ERR_REASON(SSL_R_SRP_A_CALC) ,"error with the srp params"}, | 495 | {ERR_REASON(SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES), "srtp could not allocate profiles"}, |
497 | {ERR_REASON(SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES),"srtp could not allocate profiles"}, | 496 | {ERR_REASON(SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG), "srtp protection profile list too long"}, |
498 | {ERR_REASON(SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG),"srtp protection profile list too long"}, | 497 | {ERR_REASON(SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE), "srtp unknown protection profile"}, |
499 | {ERR_REASON(SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE),"srtp unknown protection profile"}, | 498 | {ERR_REASON(SSL_R_SSL23_DOING_SESSION_ID_REUSE), "ssl23 doing session id reuse"}, |
500 | {ERR_REASON(SSL_R_SSL23_DOING_SESSION_ID_REUSE),"ssl23 doing session id reuse"}, | 499 | {ERR_REASON(SSL_R_SSL2_CONNECTION_ID_TOO_LONG), "ssl2 connection id too long"}, |
501 | {ERR_REASON(SSL_R_SSL2_CONNECTION_ID_TOO_LONG),"ssl2 connection id too long"}, | 500 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT), "ssl3 ext invalid ecpointformat"}, |
502 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT),"ssl3 ext invalid ecpointformat"}, | 501 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME), "ssl3 ext invalid servername"}, |
503 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME),"ssl3 ext invalid servername"}, | 502 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE), "ssl3 ext invalid servername type"}, |
504 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE),"ssl3 ext invalid servername type"}, | 503 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_LONG), "ssl3 session id too long"}, |
505 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_LONG),"ssl3 session id too long"}, | 504 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_SHORT), "ssl3 session id too short"}, |
506 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_SHORT),"ssl3 session id too short"}, | 505 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_CERTIFICATE), "sslv3 alert bad certificate"}, |
507 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_CERTIFICATE),"sslv3 alert bad certificate"}, | 506 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_RECORD_MAC), "sslv3 alert bad record mac"}, |
508 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_RECORD_MAC),"sslv3 alert bad record mac"}, | 507 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED), "sslv3 alert certificate expired"}, |
509 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED),"sslv3 alert certificate expired"}, | 508 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED), "sslv3 alert certificate revoked"}, |
510 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED),"sslv3 alert certificate revoked"}, | 509 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN), "sslv3 alert certificate unknown"}, |
511 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN),"sslv3 alert certificate unknown"}, | 510 | {ERR_REASON(SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE), "sslv3 alert decompression failure"}, |
512 | {ERR_REASON(SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE),"sslv3 alert decompression failure"}, | 511 | {ERR_REASON(SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE), "sslv3 alert handshake failure"}, |
513 | {ERR_REASON(SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE),"sslv3 alert handshake failure"}, | 512 | {ERR_REASON(SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER), "sslv3 alert illegal parameter"}, |
514 | {ERR_REASON(SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER),"sslv3 alert illegal parameter"}, | 513 | {ERR_REASON(SSL_R_SSLV3_ALERT_NO_CERTIFICATE), "sslv3 alert no certificate"}, |
515 | {ERR_REASON(SSL_R_SSLV3_ALERT_NO_CERTIFICATE),"sslv3 alert no certificate"}, | 514 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE), "sslv3 alert unexpected message"}, |
516 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE),"sslv3 alert unexpected message"}, | 515 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE), "sslv3 alert unsupported certificate"}, |
517 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE),"sslv3 alert unsupported certificate"}, | 516 | {ERR_REASON(SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION), "ssl ctx has no default ssl version"}, |
518 | {ERR_REASON(SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION),"ssl ctx has no default ssl version"}, | 517 | {ERR_REASON(SSL_R_SSL_HANDSHAKE_FAILURE) , "ssl handshake failure"}, |
519 | {ERR_REASON(SSL_R_SSL_HANDSHAKE_FAILURE) ,"ssl handshake failure"}, | 518 | {ERR_REASON(SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS), "ssl library has no ciphers"}, |
520 | {ERR_REASON(SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS),"ssl library has no ciphers"}, | 519 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CALLBACK_FAILED), "ssl session id callback failed"}, |
521 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CALLBACK_FAILED),"ssl session id callback failed"}, | 520 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONFLICT), "ssl session id conflict"}, |
522 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONFLICT),"ssl session id conflict"}, | 521 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG), "ssl session id context too long"}, |
523 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG),"ssl session id context too long"}, | 522 | {ERR_REASON(SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH), "ssl session id has bad length"}, |
524 | {ERR_REASON(SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH),"ssl session id has bad length"}, | 523 | {ERR_REASON(SSL_R_SSL_SESSION_ID_IS_DIFFERENT), "ssl session id is different"}, |
525 | {ERR_REASON(SSL_R_SSL_SESSION_ID_IS_DIFFERENT),"ssl session id is different"}, | 524 | {ERR_REASON(SSL_R_TLSV1_ALERT_ACCESS_DENIED), "tlsv1 alert access denied"}, |
526 | {ERR_REASON(SSL_R_TLSV1_ALERT_ACCESS_DENIED),"tlsv1 alert access denied"}, | 525 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECODE_ERROR), "tlsv1 alert decode error"}, |
527 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECODE_ERROR),"tlsv1 alert decode error"}, | 526 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPTION_FAILED), "tlsv1 alert decryption failed"}, |
528 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPTION_FAILED),"tlsv1 alert decryption failed"}, | 527 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPT_ERROR), "tlsv1 alert decrypt error"}, |
529 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPT_ERROR),"tlsv1 alert decrypt error"}, | 528 | {ERR_REASON(SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION), "tlsv1 alert export restriction"}, |
530 | {ERR_REASON(SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION),"tlsv1 alert export restriction"}, | 529 | {ERR_REASON(SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY), "tlsv1 alert insufficient security"}, |
531 | {ERR_REASON(SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY),"tlsv1 alert insufficient security"}, | 530 | {ERR_REASON(SSL_R_TLSV1_ALERT_INTERNAL_ERROR), "tlsv1 alert internal error"}, |
532 | {ERR_REASON(SSL_R_TLSV1_ALERT_INTERNAL_ERROR),"tlsv1 alert internal error"}, | 531 | {ERR_REASON(SSL_R_TLSV1_ALERT_NO_RENEGOTIATION), "tlsv1 alert no renegotiation"}, |
533 | {ERR_REASON(SSL_R_TLSV1_ALERT_NO_RENEGOTIATION),"tlsv1 alert no renegotiation"}, | 532 | {ERR_REASON(SSL_R_TLSV1_ALERT_PROTOCOL_VERSION), "tlsv1 alert protocol version"}, |
534 | {ERR_REASON(SSL_R_TLSV1_ALERT_PROTOCOL_VERSION),"tlsv1 alert protocol version"}, | 533 | {ERR_REASON(SSL_R_TLSV1_ALERT_RECORD_OVERFLOW), "tlsv1 alert record overflow"}, |
535 | {ERR_REASON(SSL_R_TLSV1_ALERT_RECORD_OVERFLOW),"tlsv1 alert record overflow"}, | 534 | {ERR_REASON(SSL_R_TLSV1_ALERT_UNKNOWN_CA), "tlsv1 alert unknown ca"}, |
536 | {ERR_REASON(SSL_R_TLSV1_ALERT_UNKNOWN_CA),"tlsv1 alert unknown ca"}, | 535 | {ERR_REASON(SSL_R_TLSV1_ALERT_USER_CANCELLED), "tlsv1 alert user cancelled"}, |
537 | {ERR_REASON(SSL_R_TLSV1_ALERT_USER_CANCELLED),"tlsv1 alert user cancelled"}, | 536 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE), "tlsv1 bad certificate hash value"}, |
538 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE),"tlsv1 bad certificate hash value"}, | 537 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE), "tlsv1 bad certificate status response"}, |
539 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE),"tlsv1 bad certificate status response"}, | 538 | {ERR_REASON(SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE), "tlsv1 certificate unobtainable"}, |
540 | {ERR_REASON(SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE),"tlsv1 certificate unobtainable"}, | 539 | {ERR_REASON(SSL_R_TLSV1_UNRECOGNIZED_NAME), "tlsv1 unrecognized name"}, |
541 | {ERR_REASON(SSL_R_TLSV1_UNRECOGNIZED_NAME),"tlsv1 unrecognized name"}, | 540 | {ERR_REASON(SSL_R_TLSV1_UNSUPPORTED_EXTENSION), "tlsv1 unsupported extension"}, |
542 | {ERR_REASON(SSL_R_TLSV1_UNSUPPORTED_EXTENSION),"tlsv1 unsupported extension"}, | 541 | {ERR_REASON(SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER), "tls client cert req with anon cipher"}, |
543 | {ERR_REASON(SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER),"tls client cert req with anon cipher"}, | 542 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT), "peer does not accept heartbearts"}, |
544 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT),"peer does not accept heartbearts"}, | 543 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PENDING) , "heartbeat request already pending"}, |
545 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PENDING) ,"heartbeat request already pending"}, | 544 | {ERR_REASON(SSL_R_TLS_ILLEGAL_EXPORTER_LABEL), "tls illegal exporter label"}, |
546 | {ERR_REASON(SSL_R_TLS_ILLEGAL_EXPORTER_LABEL),"tls illegal exporter label"}, | 545 | {ERR_REASON(SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST), "tls invalid ecpointformat list"}, |
547 | {ERR_REASON(SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST),"tls invalid ecpointformat list"}, | 546 | {ERR_REASON(SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST), "tls peer did not respond with certificate list"}, |
548 | {ERR_REASON(SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST),"tls peer did not respond with certificate list"}, | 547 | {ERR_REASON(SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG), "tls rsa encrypted value length is wrong"}, |
549 | {ERR_REASON(SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG),"tls rsa encrypted value length is wrong"}, | 548 | {ERR_REASON(SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER), "tried to use unsupported cipher"}, |
550 | {ERR_REASON(SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER),"tried to use unsupported cipher"}, | 549 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_DH_CERTS), "unable to decode dh certs"}, |
551 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_DH_CERTS),"unable to decode dh certs"}, | 550 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_ECDH_CERTS), "unable to decode ecdh certs"}, |
552 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_ECDH_CERTS),"unable to decode ecdh certs"}, | 551 | {ERR_REASON(SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY), "unable to extract public key"}, |
553 | {ERR_REASON(SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY),"unable to extract public key"}, | 552 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_DH_PARAMETERS), "unable to find dh parameters"}, |
554 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_DH_PARAMETERS),"unable to find dh parameters"}, | 553 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS), "unable to find ecdh parameters"}, |
555 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS),"unable to find ecdh parameters"}, | 554 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS), "unable to find public key parameters"}, |
556 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS),"unable to find public key parameters"}, | 555 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_SSL_METHOD), "unable to find ssl method"}, |
557 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_SSL_METHOD),"unable to find ssl method"}, | 556 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES), "unable to load ssl2 md5 routines"}, |
558 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES),"unable to load ssl2 md5 routines"}, | 557 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES), "unable to load ssl3 md5 routines"}, |
559 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES),"unable to load ssl3 md5 routines"}, | 558 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES), "unable to load ssl3 sha1 routines"}, |
560 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES),"unable to load ssl3 sha1 routines"}, | 559 | {ERR_REASON(SSL_R_UNEXPECTED_MESSAGE) , "unexpected message"}, |
561 | {ERR_REASON(SSL_R_UNEXPECTED_MESSAGE) ,"unexpected message"}, | 560 | {ERR_REASON(SSL_R_UNEXPECTED_RECORD) , "unexpected record"}, |
562 | {ERR_REASON(SSL_R_UNEXPECTED_RECORD) ,"unexpected record"}, | 561 | {ERR_REASON(SSL_R_UNINITIALIZED) , "uninitialized"}, |
563 | {ERR_REASON(SSL_R_UNINITIALIZED) ,"uninitialized"}, | 562 | {ERR_REASON(SSL_R_UNKNOWN_ALERT_TYPE) , "unknown alert type"}, |
564 | {ERR_REASON(SSL_R_UNKNOWN_ALERT_TYPE) ,"unknown alert type"}, | 563 | {ERR_REASON(SSL_R_UNKNOWN_CERTIFICATE_TYPE), "unknown certificate type"}, |
565 | {ERR_REASON(SSL_R_UNKNOWN_CERTIFICATE_TYPE),"unknown certificate type"}, | 564 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_RETURNED), "unknown cipher returned"}, |
566 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_RETURNED),"unknown cipher returned"}, | 565 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_TYPE) , "unknown cipher type"}, |
567 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_TYPE) ,"unknown cipher type"}, | 566 | {ERR_REASON(SSL_R_UNKNOWN_DIGEST) , "unknown digest"}, |
568 | {ERR_REASON(SSL_R_UNKNOWN_DIGEST) ,"unknown digest"}, | 567 | {ERR_REASON(SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE), "unknown key exchange type"}, |
569 | {ERR_REASON(SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE),"unknown key exchange type"}, | 568 | {ERR_REASON(SSL_R_UNKNOWN_PKEY_TYPE) , "unknown pkey type"}, |
570 | {ERR_REASON(SSL_R_UNKNOWN_PKEY_TYPE) ,"unknown pkey type"}, | 569 | {ERR_REASON(SSL_R_UNKNOWN_PROTOCOL) , "unknown protocol"}, |
571 | {ERR_REASON(SSL_R_UNKNOWN_PROTOCOL) ,"unknown protocol"}, | 570 | {ERR_REASON(SSL_R_UNKNOWN_REMOTE_ERROR_TYPE), "unknown remote error type"}, |
572 | {ERR_REASON(SSL_R_UNKNOWN_REMOTE_ERROR_TYPE),"unknown remote error type"}, | 571 | {ERR_REASON(SSL_R_UNKNOWN_SSL_VERSION) , "unknown ssl version"}, |
573 | {ERR_REASON(SSL_R_UNKNOWN_SSL_VERSION) ,"unknown ssl version"}, | 572 | {ERR_REASON(SSL_R_UNKNOWN_STATE) , "unknown state"}, |
574 | {ERR_REASON(SSL_R_UNKNOWN_STATE) ,"unknown state"}, | 573 | {ERR_REASON(SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED), "unsafe legacy renegotiation disabled"}, |
575 | {ERR_REASON(SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED),"unsafe legacy renegotiation disabled"}, | 574 | {ERR_REASON(SSL_R_UNSUPPORTED_CIPHER) , "unsupported cipher"}, |
576 | {ERR_REASON(SSL_R_UNSUPPORTED_CIPHER) ,"unsupported cipher"}, | 575 | {ERR_REASON(SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM), "unsupported compression algorithm"}, |
577 | {ERR_REASON(SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM),"unsupported compression algorithm"}, | 576 | {ERR_REASON(SSL_R_UNSUPPORTED_DIGEST_TYPE), "unsupported digest type"}, |
578 | {ERR_REASON(SSL_R_UNSUPPORTED_DIGEST_TYPE),"unsupported digest type"}, | 577 | {ERR_REASON(SSL_R_UNSUPPORTED_ELLIPTIC_CURVE), "unsupported elliptic curve"}, |
579 | {ERR_REASON(SSL_R_UNSUPPORTED_ELLIPTIC_CURVE),"unsupported elliptic curve"}, | 578 | {ERR_REASON(SSL_R_UNSUPPORTED_PROTOCOL) , "unsupported protocol"}, |
580 | {ERR_REASON(SSL_R_UNSUPPORTED_PROTOCOL) ,"unsupported protocol"}, | 579 | {ERR_REASON(SSL_R_UNSUPPORTED_SSL_VERSION), "unsupported ssl version"}, |
581 | {ERR_REASON(SSL_R_UNSUPPORTED_SSL_VERSION),"unsupported ssl version"}, | 580 | {ERR_REASON(SSL_R_UNSUPPORTED_STATUS_TYPE), "unsupported status type"}, |
582 | {ERR_REASON(SSL_R_UNSUPPORTED_STATUS_TYPE),"unsupported status type"}, | 581 | {ERR_REASON(SSL_R_USE_SRTP_NOT_NEGOTIATED), "use srtp not negotiated"}, |
583 | {ERR_REASON(SSL_R_USE_SRTP_NOT_NEGOTIATED),"use srtp not negotiated"}, | 582 | {ERR_REASON(SSL_R_WRITE_BIO_NOT_SET) , "write bio not set"}, |
584 | {ERR_REASON(SSL_R_WRITE_BIO_NOT_SET) ,"write bio not set"}, | 583 | {ERR_REASON(SSL_R_WRONG_CIPHER_RETURNED) , "wrong cipher returned"}, |
585 | {ERR_REASON(SSL_R_WRONG_CIPHER_RETURNED) ,"wrong cipher returned"}, | 584 | {ERR_REASON(SSL_R_WRONG_MESSAGE_TYPE) , "wrong message type"}, |
586 | {ERR_REASON(SSL_R_WRONG_MESSAGE_TYPE) ,"wrong message type"}, | 585 | {ERR_REASON(SSL_R_WRONG_NUMBER_OF_KEY_BITS), "wrong number of key bits"}, |
587 | {ERR_REASON(SSL_R_WRONG_NUMBER_OF_KEY_BITS),"wrong number of key bits"}, | 586 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_LENGTH), "wrong signature length"}, |
588 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_LENGTH),"wrong signature length"}, | 587 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_SIZE) , "wrong signature size"}, |
589 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_SIZE) ,"wrong signature size"}, | 588 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_TYPE) , "wrong signature type"}, |
590 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_TYPE) ,"wrong signature type"}, | 589 | {ERR_REASON(SSL_R_WRONG_SSL_VERSION) , "wrong ssl version"}, |
591 | {ERR_REASON(SSL_R_WRONG_SSL_VERSION) ,"wrong ssl version"}, | 590 | {ERR_REASON(SSL_R_WRONG_VERSION_NUMBER) , "wrong version number"}, |
592 | {ERR_REASON(SSL_R_WRONG_VERSION_NUMBER) ,"wrong version number"}, | 591 | {ERR_REASON(SSL_R_X509_LIB) , "x509 lib"}, |
593 | {ERR_REASON(SSL_R_X509_LIB) ,"x509 lib"}, | 592 | {ERR_REASON(SSL_R_X509_VERIFICATION_SETUP_PROBLEMS), "x509 verification setup problems"}, |
594 | {ERR_REASON(SSL_R_X509_VERIFICATION_SETUP_PROBLEMS),"x509 verification setup problems"}, | 593 | {0, NULL} |
595 | {0,NULL} | 594 | }; |
596 | }; | ||
597 | 595 | ||
598 | #endif | 596 | #endif |
599 | 597 | ||
600 | void ERR_load_SSL_strings(void) | 598 | void |
601 | { | 599 | ERR_load_SSL_strings(void) |
600 | { | ||
602 | #ifndef OPENSSL_NO_ERR | 601 | #ifndef OPENSSL_NO_ERR |
603 | 602 | ||
604 | if (ERR_func_error_string(SSL_str_functs[0].error) == NULL) | 603 | if (ERR_func_error_string(SSL_str_functs[0].error) == NULL) { |
605 | { | 604 | ERR_load_strings(0, SSL_str_functs); |
606 | ERR_load_strings(0,SSL_str_functs); | 605 | ERR_load_strings(0, SSL_str_reasons); |
607 | ERR_load_strings(0,SSL_str_reasons); | ||
608 | } | ||
609 | #endif | ||
610 | } | 606 | } |
607 | #endif | ||
608 | } | ||
diff --git a/src/lib/libssl/src/ssl/ssl_err2.c b/src/lib/libssl/src/ssl/ssl_err2.c index ea95a5f983..cd781d38aa 100644 --- a/src/lib/libssl/src/ssl/ssl_err2.c +++ b/src/lib/libssl/src/ssl/ssl_err2.c | |||
@@ -60,11 +60,12 @@ | |||
60 | #include <openssl/err.h> | 60 | #include <openssl/err.h> |
61 | #include <openssl/ssl.h> | 61 | #include <openssl/ssl.h> |
62 | 62 | ||
63 | void SSL_load_error_strings(void) | 63 | void |
64 | { | 64 | SSL_load_error_strings(void) |
65 | { | ||
65 | #ifndef OPENSSL_NO_ERR | 66 | #ifndef OPENSSL_NO_ERR |
66 | ERR_load_crypto_strings(); | 67 | ERR_load_crypto_strings(); |
67 | ERR_load_SSL_strings(); | 68 | ERR_load_SSL_strings(); |
68 | #endif | 69 | #endif |
69 | } | 70 | } |
70 | 71 | ||
diff --git a/src/lib/libssl/src/ssl/ssl_lib.c b/src/lib/libssl/src/ssl/ssl_lib.c index d9a728493e..98764b82aa 100644 --- a/src/lib/libssl/src/ssl/ssl_lib.c +++ b/src/lib/libssl/src/ssl/ssl_lib.c | |||
@@ -160,11 +160,11 @@ | |||
160 | #include <openssl/engine.h> | 160 | #include <openssl/engine.h> |
161 | #endif | 161 | #endif |
162 | 162 | ||
163 | const char *SSL_version_str=OPENSSL_VERSION_TEXT; | 163 | const char *SSL_version_str = OPENSSL_VERSION_TEXT; |
164 | 164 | ||
165 | SSL3_ENC_METHOD ssl3_undef_enc_method={ | 165 | SSL3_ENC_METHOD ssl3_undef_enc_method = { |
166 | /* evil casts, but these functions are only called if there's a library bug */ | 166 | /* evil casts, but these functions are only called if there's a library bug */ |
167 | (int (*)(SSL *,int))ssl_undefined_function, | 167 | (int (*)(SSL *, int))ssl_undefined_function, |
168 | (int (*)(SSL *, unsigned char *, int))ssl_undefined_function, | 168 | (int (*)(SSL *, unsigned char *, int))ssl_undefined_function, |
169 | ssl_undefined_function, | 169 | ssl_undefined_function, |
170 | (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_function, | 170 | (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_function, |
@@ -178,129 +178,124 @@ SSL3_ENC_METHOD ssl3_undef_enc_method={ | |||
178 | 0, /* server_finished_label_len */ | 178 | 0, /* server_finished_label_len */ |
179 | (int (*)(int))ssl_undefined_function, | 179 | (int (*)(int))ssl_undefined_function, |
180 | (int (*)(SSL *, unsigned char *, size_t, const char *, | 180 | (int (*)(SSL *, unsigned char *, size_t, const char *, |
181 | size_t, const unsigned char *, size_t, | 181 | size_t, const unsigned char *, size_t, |
182 | int use_context)) ssl_undefined_function, | 182 | int use_context)) ssl_undefined_function, |
183 | }; | 183 | }; |
184 | 184 | ||
185 | int SSL_clear(SSL *s) | 185 | int |
186 | { | 186 | SSL_clear(SSL *s) |
187 | { | ||
187 | 188 | ||
188 | if (s->method == NULL) | 189 | if (s->method == NULL) { |
189 | { | 190 | SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED); |
190 | SSLerr(SSL_F_SSL_CLEAR,SSL_R_NO_METHOD_SPECIFIED); | 191 | return (0); |
191 | return(0); | 192 | } |
192 | } | ||
193 | 193 | ||
194 | if (ssl_clear_bad_session(s)) | 194 | if (ssl_clear_bad_session(s)) { |
195 | { | ||
196 | SSL_SESSION_free(s->session); | 195 | SSL_SESSION_free(s->session); |
197 | s->session=NULL; | 196 | s->session = NULL; |
198 | } | 197 | } |
199 | 198 | ||
200 | s->error=0; | 199 | s->error = 0; |
201 | s->hit=0; | 200 | s->hit = 0; |
202 | s->shutdown=0; | 201 | s->shutdown = 0; |
203 | 202 | ||
204 | #if 0 /* Disabled since version 1.10 of this file (early return not | 203 | #if 0 /* Disabled since version 1.10 of this file (early return not |
205 | * needed because SSL_clear is not called when doing renegotiation) */ | 204 | * needed because SSL_clear is not called when doing renegotiation) */ |
206 | /* This is set if we are doing dynamic renegotiation so keep | 205 | /* This is set if we are doing dynamic renegotiation so keep |
207 | * the old cipher. It is sort of a SSL_clear_lite :-) */ | 206 | * the old cipher. It is sort of a SSL_clear_lite :-) */ |
208 | if (s->renegotiate) return(1); | ||
209 | #else | ||
210 | if (s->renegotiate) | 207 | if (s->renegotiate) |
211 | { | 208 | return (1); |
212 | SSLerr(SSL_F_SSL_CLEAR,ERR_R_INTERNAL_ERROR); | 209 | #else |
210 | if (s->renegotiate) { | ||
211 | SSLerr(SSL_F_SSL_CLEAR, ERR_R_INTERNAL_ERROR); | ||
213 | return 0; | 212 | return 0; |
214 | } | 213 | } |
215 | #endif | 214 | #endif |
216 | 215 | ||
217 | s->type=0; | 216 | s->type = 0; |
218 | 217 | ||
219 | s->state=SSL_ST_BEFORE|((s->server)?SSL_ST_ACCEPT:SSL_ST_CONNECT); | 218 | s->state = SSL_ST_BEFORE|((s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT); |
220 | 219 | ||
221 | s->version=s->method->version; | 220 | s->version = s->method->version; |
222 | s->client_version=s->version; | 221 | s->client_version = s->version; |
223 | s->rwstate=SSL_NOTHING; | 222 | s->rwstate = SSL_NOTHING; |
224 | s->rstate=SSL_ST_READ_HEADER; | 223 | s->rstate = SSL_ST_READ_HEADER; |
225 | #if 0 | 224 | #if 0 |
226 | s->read_ahead=s->ctx->read_ahead; | 225 | s->read_ahead = s->ctx->read_ahead; |
227 | #endif | 226 | #endif |
228 | 227 | ||
229 | if (s->init_buf != NULL) | 228 | if (s->init_buf != NULL) { |
230 | { | ||
231 | BUF_MEM_free(s->init_buf); | 229 | BUF_MEM_free(s->init_buf); |
232 | s->init_buf=NULL; | 230 | s->init_buf = NULL; |
233 | } | 231 | } |
234 | 232 | ||
235 | ssl_clear_cipher_ctx(s); | 233 | ssl_clear_cipher_ctx(s); |
236 | ssl_clear_hash_ctx(&s->read_hash); | 234 | ssl_clear_hash_ctx(&s->read_hash); |
237 | ssl_clear_hash_ctx(&s->write_hash); | 235 | ssl_clear_hash_ctx(&s->write_hash); |
238 | 236 | ||
239 | s->first_packet=0; | 237 | s->first_packet = 0; |
240 | 238 | ||
241 | #if 1 | 239 | #if 1 |
242 | /* Check to see if we were changed into a different method, if | 240 | /* Check to see if we were changed into a different method, if |
243 | * so, revert back if we are not doing session-id reuse. */ | 241 | * so, revert back if we are not doing session-id reuse. */ |
244 | if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->method)) | 242 | if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->method)) { |
245 | { | ||
246 | s->method->ssl_free(s); | 243 | s->method->ssl_free(s); |
247 | s->method=s->ctx->method; | 244 | s->method = s->ctx->method; |
248 | if (!s->method->ssl_new(s)) | 245 | if (!s->method->ssl_new(s)) |
249 | return(0); | 246 | return (0); |
250 | } | 247 | } else |
251 | else | ||
252 | #endif | 248 | #endif |
253 | s->method->ssl_clear(s); | 249 | s->method->ssl_clear(s); |
254 | return(1); | 250 | return (1); |
255 | } | 251 | } |
256 | 252 | ||
257 | /** Used to change an SSL_CTXs default SSL method type */ | 253 | /** Used to change an SSL_CTXs default SSL method type */ |
258 | int SSL_CTX_set_ssl_version(SSL_CTX *ctx,const SSL_METHOD *meth) | 254 | int |
259 | { | 255 | SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth) |
256 | { | ||
260 | STACK_OF(SSL_CIPHER) *sk; | 257 | STACK_OF(SSL_CIPHER) *sk; |
261 | 258 | ||
262 | ctx->method=meth; | 259 | ctx->method = meth; |
263 | 260 | ||
264 | sk=ssl_create_cipher_list(ctx->method,&(ctx->cipher_list), | 261 | sk = ssl_create_cipher_list(ctx->method, &(ctx->cipher_list), |
265 | &(ctx->cipher_list_by_id), | 262 | &(ctx->cipher_list_by_id), |
266 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); | 263 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); |
267 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) | 264 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) { |
268 | { | 265 | SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); |
269 | SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION,SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); | 266 | return (0); |
270 | return(0); | ||
271 | } | ||
272 | return(1); | ||
273 | } | 267 | } |
268 | return (1); | ||
269 | } | ||
274 | 270 | ||
275 | SSL *SSL_new(SSL_CTX *ctx) | 271 | SSL |
276 | { | 272 | *SSL_new(SSL_CTX *ctx) |
273 | { | ||
277 | SSL *s; | 274 | SSL *s; |
278 | 275 | ||
279 | if (ctx == NULL) | 276 | if (ctx == NULL) { |
280 | { | 277 | SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX); |
281 | SSLerr(SSL_F_SSL_NEW,SSL_R_NULL_SSL_CTX); | 278 | return (NULL); |
282 | return(NULL); | 279 | } |
283 | } | 280 | if (ctx->method == NULL) { |
284 | if (ctx->method == NULL) | 281 | SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION); |
285 | { | 282 | return (NULL); |
286 | SSLerr(SSL_F_SSL_NEW,SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION); | 283 | } |
287 | return(NULL); | ||
288 | } | ||
289 | 284 | ||
290 | s=(SSL *)OPENSSL_malloc(sizeof(SSL)); | 285 | s = (SSL *)OPENSSL_malloc(sizeof(SSL)); |
291 | if (s == NULL) goto err; | 286 | if (s == NULL) |
292 | memset(s,0,sizeof(SSL)); | 287 | goto err; |
288 | memset(s, 0, sizeof(SSL)); | ||
293 | 289 | ||
294 | #ifndef OPENSSL_NO_KRB5 | 290 | #ifndef OPENSSL_NO_KRB5 |
295 | s->kssl_ctx = kssl_ctx_new(); | 291 | s->kssl_ctx = kssl_ctx_new(); |
296 | #endif /* OPENSSL_NO_KRB5 */ | 292 | #endif /* OPENSSL_NO_KRB5 */ |
297 | 293 | ||
298 | s->options=ctx->options; | 294 | s->options = ctx->options; |
299 | s->mode=ctx->mode; | 295 | s->mode = ctx->mode; |
300 | s->max_cert_list=ctx->max_cert_list; | 296 | s->max_cert_list = ctx->max_cert_list; |
301 | 297 | ||
302 | if (ctx->cert != NULL) | 298 | if (ctx->cert != NULL) { |
303 | { | ||
304 | /* Earlier library versions used to copy the pointer to | 299 | /* Earlier library versions used to copy the pointer to |
305 | * the CERT, not its contents; only when setting new | 300 | * the CERT, not its contents; only when setting new |
306 | * parameters for the per-SSL copy, ssl_cert_new would be | 301 | * parameters for the per-SSL copy, ssl_cert_new would be |
@@ -314,22 +309,21 @@ SSL *SSL_new(SSL_CTX *ctx) | |||
314 | s->cert = ssl_cert_dup(ctx->cert); | 309 | s->cert = ssl_cert_dup(ctx->cert); |
315 | if (s->cert == NULL) | 310 | if (s->cert == NULL) |
316 | goto err; | 311 | goto err; |
317 | } | 312 | } else |
318 | else | ||
319 | s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */ | 313 | s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */ |
320 | 314 | ||
321 | s->read_ahead=ctx->read_ahead; | 315 | s->read_ahead = ctx->read_ahead; |
322 | s->msg_callback=ctx->msg_callback; | 316 | s->msg_callback = ctx->msg_callback; |
323 | s->msg_callback_arg=ctx->msg_callback_arg; | 317 | s->msg_callback_arg = ctx->msg_callback_arg; |
324 | s->verify_mode=ctx->verify_mode; | 318 | s->verify_mode = ctx->verify_mode; |
325 | #if 0 | 319 | #if 0 |
326 | s->verify_depth=ctx->verify_depth; | 320 | s->verify_depth = ctx->verify_depth; |
327 | #endif | 321 | #endif |
328 | s->sid_ctx_length=ctx->sid_ctx_length; | 322 | s->sid_ctx_length = ctx->sid_ctx_length; |
329 | OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx); | 323 | OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx); |
330 | memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx)); | 324 | memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx)); |
331 | s->verify_callback=ctx->default_verify_callback; | 325 | s->verify_callback = ctx->default_verify_callback; |
332 | s->generate_session_id=ctx->generate_session_id; | 326 | s->generate_session_id = ctx->generate_session_id; |
333 | 327 | ||
334 | s->param = X509_VERIFY_PARAM_new(); | 328 | s->param = X509_VERIFY_PARAM_new(); |
335 | if (!s->param) | 329 | if (!s->param) |
@@ -339,11 +333,11 @@ SSL *SSL_new(SSL_CTX *ctx) | |||
339 | s->purpose = ctx->purpose; | 333 | s->purpose = ctx->purpose; |
340 | s->trust = ctx->trust; | 334 | s->trust = ctx->trust; |
341 | #endif | 335 | #endif |
342 | s->quiet_shutdown=ctx->quiet_shutdown; | 336 | s->quiet_shutdown = ctx->quiet_shutdown; |
343 | s->max_send_fragment = ctx->max_send_fragment; | 337 | s->max_send_fragment = ctx->max_send_fragment; |
344 | 338 | ||
345 | CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); | 339 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); |
346 | s->ctx=ctx; | 340 | s->ctx = ctx; |
347 | #ifndef OPENSSL_NO_TLSEXT | 341 | #ifndef OPENSSL_NO_TLSEXT |
348 | s->tlsext_debug_cb = 0; | 342 | s->tlsext_debug_cb = 0; |
349 | s->tlsext_debug_arg = NULL; | 343 | s->tlsext_debug_arg = NULL; |
@@ -354,93 +348,95 @@ SSL *SSL_new(SSL_CTX *ctx) | |||
354 | s->tlsext_ocsp_exts = NULL; | 348 | s->tlsext_ocsp_exts = NULL; |
355 | s->tlsext_ocsp_resp = NULL; | 349 | s->tlsext_ocsp_resp = NULL; |
356 | s->tlsext_ocsp_resplen = -1; | 350 | s->tlsext_ocsp_resplen = -1; |
357 | CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); | 351 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); |
358 | s->initial_ctx=ctx; | 352 | s->initial_ctx = ctx; |
359 | # ifndef OPENSSL_NO_NEXTPROTONEG | 353 | # ifndef OPENSSL_NO_NEXTPROTONEG |
360 | s->next_proto_negotiated = NULL; | 354 | s->next_proto_negotiated = NULL; |
361 | # endif | 355 | # endif |
362 | #endif | 356 | #endif |
363 | 357 | ||
364 | s->verify_result=X509_V_OK; | 358 | s->verify_result = X509_V_OK; |
365 | 359 | ||
366 | s->method=ctx->method; | 360 | s->method = ctx->method; |
367 | 361 | ||
368 | if (!s->method->ssl_new(s)) | 362 | if (!s->method->ssl_new(s)) |
369 | goto err; | 363 | goto err; |
370 | 364 | ||
371 | s->references=1; | 365 | s->references = 1; |
372 | s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1; | 366 | s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1; |
373 | 367 | ||
374 | SSL_clear(s); | 368 | SSL_clear(s); |
375 | 369 | ||
376 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); | 370 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); |
377 | 371 | ||
378 | #ifndef OPENSSL_NO_PSK | 372 | #ifndef OPENSSL_NO_PSK |
379 | s->psk_client_callback=ctx->psk_client_callback; | 373 | s->psk_client_callback = ctx->psk_client_callback; |
380 | s->psk_server_callback=ctx->psk_server_callback; | 374 | s->psk_server_callback = ctx->psk_server_callback; |
381 | #endif | 375 | #endif |
382 | 376 | ||
383 | return(s); | 377 | return (s); |
384 | err: | 378 | err: |
385 | if (s != NULL) | 379 | if (s != NULL) { |
386 | { | ||
387 | if (s->cert != NULL) | 380 | if (s->cert != NULL) |
388 | ssl_cert_free(s->cert); | 381 | ssl_cert_free(s->cert); |
389 | if (s->ctx != NULL) | 382 | if (s->ctx != NULL) |
390 | SSL_CTX_free(s->ctx); /* decrement reference count */ | 383 | SSL_CTX_free(s->ctx); /* decrement reference count */ |
391 | OPENSSL_free(s); | 384 | OPENSSL_free(s); |
392 | } | ||
393 | SSLerr(SSL_F_SSL_NEW,ERR_R_MALLOC_FAILURE); | ||
394 | return(NULL); | ||
395 | } | 385 | } |
386 | SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE); | ||
387 | return (NULL); | ||
388 | } | ||
396 | 389 | ||
397 | int SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx, | 390 | int |
398 | unsigned int sid_ctx_len) | 391 | SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, |
399 | { | 392 | unsigned int sid_ctx_len) |
400 | if(sid_ctx_len > sizeof ctx->sid_ctx) | 393 | { |
401 | { | 394 | if (sid_ctx_len > sizeof ctx->sid_ctx) { |
402 | SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); | 395 | SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); |
403 | return 0; | 396 | return 0; |
404 | } | 397 | } |
405 | ctx->sid_ctx_length=sid_ctx_len; | 398 | ctx->sid_ctx_length = sid_ctx_len; |
406 | memcpy(ctx->sid_ctx,sid_ctx,sid_ctx_len); | 399 | memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len); |
407 | 400 | ||
408 | return 1; | 401 | return 1; |
409 | } | 402 | } |
410 | 403 | ||
411 | int SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx, | 404 | int |
412 | unsigned int sid_ctx_len) | 405 | SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, |
413 | { | 406 | unsigned int sid_ctx_len) |
414 | if(sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) | 407 | { |
415 | { | 408 | if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) { |
416 | SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); | 409 | SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); |
417 | return 0; | 410 | return 0; |
418 | } | 411 | } |
419 | ssl->sid_ctx_length=sid_ctx_len; | 412 | ssl->sid_ctx_length = sid_ctx_len; |
420 | memcpy(ssl->sid_ctx,sid_ctx,sid_ctx_len); | 413 | memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len); |
421 | 414 | ||
422 | return 1; | 415 | return 1; |
423 | } | 416 | } |
424 | 417 | ||
425 | int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) | 418 | int |
426 | { | 419 | SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) |
420 | { | ||
427 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 421 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
428 | ctx->generate_session_id = cb; | 422 | ctx->generate_session_id = cb; |
429 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 423 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
430 | return 1; | 424 | return 1; |
431 | } | 425 | } |
432 | 426 | ||
433 | int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb) | 427 | int |
434 | { | 428 | SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb) |
429 | { | ||
435 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); | 430 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); |
436 | ssl->generate_session_id = cb; | 431 | ssl->generate_session_id = cb; |
437 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); | 432 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); |
438 | return 1; | 433 | return 1; |
439 | } | 434 | } |
440 | 435 | ||
441 | int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, | 436 | int |
442 | unsigned int id_len) | 437 | SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, |
443 | { | 438 | unsigned int id_len) |
439 | { | ||
444 | /* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how | 440 | /* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how |
445 | * we can "construct" a session to give us the desired check - ie. to | 441 | * we can "construct" a session to give us the desired check - ie. to |
446 | * find if there's a session in the hash table that would conflict with | 442 | * find if there's a session in the hash table that would conflict with |
@@ -448,7 +444,7 @@ int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, | |||
448 | * use by this SSL. */ | 444 | * use by this SSL. */ |
449 | SSL_SESSION r, *p; | 445 | SSL_SESSION r, *p; |
450 | 446 | ||
451 | if(id_len > sizeof r.session_id) | 447 | if (id_len > sizeof r.session_id) |
452 | return 0; | 448 | return 0; |
453 | 449 | ||
454 | r.ssl_version = ssl->version; | 450 | r.ssl_version = ssl->version; |
@@ -458,68 +454,74 @@ int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, | |||
458 | * callback is calling us to check the uniqueness of a shorter ID, it | 454 | * callback is calling us to check the uniqueness of a shorter ID, it |
459 | * must be compared as a padded-out ID because that is what it will be | 455 | * must be compared as a padded-out ID because that is what it will be |
460 | * converted to when the callback has finished choosing it. */ | 456 | * converted to when the callback has finished choosing it. */ |
461 | if((r.ssl_version == SSL2_VERSION) && | 457 | if ((r.ssl_version == SSL2_VERSION) && |
462 | (id_len < SSL2_SSL_SESSION_ID_LENGTH)) | 458 | (id_len < SSL2_SSL_SESSION_ID_LENGTH)) { |
463 | { | ||
464 | memset(r.session_id + id_len, 0, | 459 | memset(r.session_id + id_len, 0, |
465 | SSL2_SSL_SESSION_ID_LENGTH - id_len); | 460 | SSL2_SSL_SESSION_ID_LENGTH - id_len); |
466 | r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH; | 461 | r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH; |
467 | } | 462 | } |
468 | 463 | ||
469 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 464 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
470 | p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r); | 465 | p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r); |
471 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 466 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
472 | return (p != NULL); | 467 | return (p != NULL); |
473 | } | 468 | } |
474 | 469 | ||
475 | int SSL_CTX_set_purpose(SSL_CTX *s, int purpose) | 470 | int |
476 | { | 471 | SSL_CTX_set_purpose(SSL_CTX *s, int purpose) |
472 | { | ||
477 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); | 473 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); |
478 | } | 474 | } |
479 | 475 | ||
480 | int SSL_set_purpose(SSL *s, int purpose) | 476 | int |
481 | { | 477 | SSL_set_purpose(SSL *s, int purpose) |
478 | { | ||
482 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); | 479 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); |
483 | } | 480 | } |
484 | 481 | ||
485 | int SSL_CTX_set_trust(SSL_CTX *s, int trust) | 482 | int |
486 | { | 483 | SSL_CTX_set_trust(SSL_CTX *s, int trust) |
484 | { | ||
487 | return X509_VERIFY_PARAM_set_trust(s->param, trust); | 485 | return X509_VERIFY_PARAM_set_trust(s->param, trust); |
488 | } | 486 | } |
489 | 487 | ||
490 | int SSL_set_trust(SSL *s, int trust) | 488 | int |
491 | { | 489 | SSL_set_trust(SSL *s, int trust) |
490 | { | ||
492 | return X509_VERIFY_PARAM_set_trust(s->param, trust); | 491 | return X509_VERIFY_PARAM_set_trust(s->param, trust); |
493 | } | 492 | } |
494 | 493 | ||
495 | int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) | 494 | int |
496 | { | 495 | SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) |
496 | { | ||
497 | return X509_VERIFY_PARAM_set1(ctx->param, vpm); | 497 | return X509_VERIFY_PARAM_set1(ctx->param, vpm); |
498 | } | 498 | } |
499 | 499 | ||
500 | int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) | 500 | int |
501 | { | 501 | SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) |
502 | { | ||
502 | return X509_VERIFY_PARAM_set1(ssl->param, vpm); | 503 | return X509_VERIFY_PARAM_set1(ssl->param, vpm); |
503 | } | 504 | } |
504 | 505 | ||
505 | void SSL_free(SSL *s) | 506 | void |
506 | { | 507 | SSL_free(SSL *s) |
508 | { | ||
507 | int i; | 509 | int i; |
508 | 510 | ||
509 | if(s == NULL) | 511 | if (s == NULL) |
510 | return; | 512 | return; |
511 | 513 | ||
512 | i=CRYPTO_add(&s->references,-1,CRYPTO_LOCK_SSL); | 514 | i = CRYPTO_add(&s->references, -1, CRYPTO_LOCK_SSL); |
513 | #ifdef REF_PRINT | 515 | #ifdef REF_PRINT |
514 | REF_PRINT("SSL",s); | 516 | REF_PRINT("SSL", s); |
515 | #endif | 517 | #endif |
516 | if (i > 0) return; | 518 | if (i > 0) |
519 | return; | ||
517 | #ifdef REF_CHECK | 520 | #ifdef REF_CHECK |
518 | if (i < 0) | 521 | if (i < 0) { |
519 | { | 522 | fprintf(stderr, "SSL_free, bad reference count\n"); |
520 | fprintf(stderr,"SSL_free, bad reference count\n"); | ||
521 | abort(); /* ok */ | 523 | abort(); /* ok */ |
522 | } | 524 | } |
523 | #endif | 525 | #endif |
524 | 526 | ||
525 | if (s->param) | 527 | if (s->param) |
@@ -527,53 +529,58 @@ void SSL_free(SSL *s) | |||
527 | 529 | ||
528 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); | 530 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); |
529 | 531 | ||
530 | if (s->bbio != NULL) | 532 | if (s->bbio != NULL) { |
531 | { | ||
532 | /* If the buffering BIO is in place, pop it off */ | 533 | /* If the buffering BIO is in place, pop it off */ |
533 | if (s->bbio == s->wbio) | 534 | if (s->bbio == s->wbio) { |
534 | { | 535 | s->wbio = BIO_pop(s->wbio); |
535 | s->wbio=BIO_pop(s->wbio); | ||
536 | } | ||
537 | BIO_free(s->bbio); | ||
538 | s->bbio=NULL; | ||
539 | } | 536 | } |
537 | BIO_free(s->bbio); | ||
538 | s->bbio = NULL; | ||
539 | } | ||
540 | if (s->rbio != NULL) | 540 | if (s->rbio != NULL) |
541 | BIO_free_all(s->rbio); | 541 | BIO_free_all(s->rbio); |
542 | if ((s->wbio != NULL) && (s->wbio != s->rbio)) | 542 | if ((s->wbio != NULL) && (s->wbio != s->rbio)) |
543 | BIO_free_all(s->wbio); | 543 | BIO_free_all(s->wbio); |
544 | 544 | ||
545 | if (s->init_buf != NULL) BUF_MEM_free(s->init_buf); | 545 | if (s->init_buf != NULL) |
546 | BUF_MEM_free(s->init_buf); | ||
546 | 547 | ||
547 | /* add extra stuff */ | 548 | /* add extra stuff */ |
548 | if (s->cipher_list != NULL) sk_SSL_CIPHER_free(s->cipher_list); | 549 | if (s->cipher_list != NULL) |
549 | if (s->cipher_list_by_id != NULL) sk_SSL_CIPHER_free(s->cipher_list_by_id); | 550 | sk_SSL_CIPHER_free(s->cipher_list); |
551 | if (s->cipher_list_by_id != NULL) | ||
552 | sk_SSL_CIPHER_free(s->cipher_list_by_id); | ||
550 | 553 | ||
551 | /* Make the next call work :-) */ | 554 | /* Make the next call work :-) */ |
552 | if (s->session != NULL) | 555 | if (s->session != NULL) { |
553 | { | ||
554 | ssl_clear_bad_session(s); | 556 | ssl_clear_bad_session(s); |
555 | SSL_SESSION_free(s->session); | 557 | SSL_SESSION_free(s->session); |
556 | } | 558 | } |
557 | 559 | ||
558 | ssl_clear_cipher_ctx(s); | 560 | ssl_clear_cipher_ctx(s); |
559 | ssl_clear_hash_ctx(&s->read_hash); | 561 | ssl_clear_hash_ctx(&s->read_hash); |
560 | ssl_clear_hash_ctx(&s->write_hash); | 562 | ssl_clear_hash_ctx(&s->write_hash); |
561 | 563 | ||
562 | if (s->cert != NULL) ssl_cert_free(s->cert); | 564 | if (s->cert != NULL) |
565 | ssl_cert_free(s->cert); | ||
563 | /* Free up if allocated */ | 566 | /* Free up if allocated */ |
564 | 567 | ||
565 | #ifndef OPENSSL_NO_TLSEXT | 568 | #ifndef OPENSSL_NO_TLSEXT |
566 | if (s->tlsext_hostname) | 569 | if (s->tlsext_hostname) |
567 | OPENSSL_free(s->tlsext_hostname); | 570 | OPENSSL_free(s->tlsext_hostname); |
568 | if (s->initial_ctx) SSL_CTX_free(s->initial_ctx); | 571 | if (s->initial_ctx) |
572 | SSL_CTX_free(s->initial_ctx); | ||
569 | #ifndef OPENSSL_NO_EC | 573 | #ifndef OPENSSL_NO_EC |
570 | if (s->tlsext_ecpointformatlist) OPENSSL_free(s->tlsext_ecpointformatlist); | 574 | if (s->tlsext_ecpointformatlist) |
571 | if (s->tlsext_ellipticcurvelist) OPENSSL_free(s->tlsext_ellipticcurvelist); | 575 | OPENSSL_free(s->tlsext_ecpointformatlist); |
576 | if (s->tlsext_ellipticcurvelist) | ||
577 | OPENSSL_free(s->tlsext_ellipticcurvelist); | ||
572 | #endif /* OPENSSL_NO_EC */ | 578 | #endif /* OPENSSL_NO_EC */ |
573 | if (s->tlsext_opaque_prf_input) OPENSSL_free(s->tlsext_opaque_prf_input); | 579 | if (s->tlsext_opaque_prf_input) |
580 | OPENSSL_free(s->tlsext_opaque_prf_input); | ||
574 | if (s->tlsext_ocsp_exts) | 581 | if (s->tlsext_ocsp_exts) |
575 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, | 582 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, |
576 | X509_EXTENSION_free); | 583 | X509_EXTENSION_free); |
577 | if (s->tlsext_ocsp_ids) | 584 | if (s->tlsext_ocsp_ids) |
578 | sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free); | 585 | sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free); |
579 | if (s->tlsext_ocsp_resp) | 586 | if (s->tlsext_ocsp_resp) |
@@ -581,11 +588,13 @@ void SSL_free(SSL *s) | |||
581 | #endif | 588 | #endif |
582 | 589 | ||
583 | if (s->client_CA != NULL) | 590 | if (s->client_CA != NULL) |
584 | sk_X509_NAME_pop_free(s->client_CA,X509_NAME_free); | 591 | sk_X509_NAME_pop_free(s->client_CA, X509_NAME_free); |
585 | 592 | ||
586 | if (s->method != NULL) s->method->ssl_free(s); | 593 | if (s->method != NULL) |
594 | s->method->ssl_free(s); | ||
587 | 595 | ||
588 | if (s->ctx) SSL_CTX_free(s->ctx); | 596 | if (s->ctx) |
597 | SSL_CTX_free(s->ctx); | ||
589 | 598 | ||
590 | #ifndef OPENSSL_NO_KRB5 | 599 | #ifndef OPENSSL_NO_KRB5 |
591 | if (s->kssl_ctx != NULL) | 600 | if (s->kssl_ctx != NULL) |
@@ -598,223 +607,237 @@ void SSL_free(SSL *s) | |||
598 | #endif | 607 | #endif |
599 | 608 | ||
600 | #ifndef OPENSSL_NO_SRTP | 609 | #ifndef OPENSSL_NO_SRTP |
601 | if (s->srtp_profiles) | 610 | if (s->srtp_profiles) |
602 | sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); | 611 | sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); |
603 | #endif | 612 | #endif |
604 | 613 | ||
605 | OPENSSL_free(s); | 614 | OPENSSL_free(s); |
606 | } | 615 | } |
607 | 616 | ||
608 | void SSL_set_bio(SSL *s,BIO *rbio,BIO *wbio) | 617 | void |
609 | { | 618 | SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio) |
619 | { | ||
610 | /* If the output buffering BIO is still in place, remove it | 620 | /* If the output buffering BIO is still in place, remove it |
611 | */ | 621 | */ |
612 | if (s->bbio != NULL) | 622 | if (s->bbio != NULL) { |
613 | { | 623 | if (s->wbio == s->bbio) { |
614 | if (s->wbio == s->bbio) | 624 | s->wbio = s->wbio->next_bio; |
615 | { | 625 | s->bbio->next_bio = NULL; |
616 | s->wbio=s->wbio->next_bio; | ||
617 | s->bbio->next_bio=NULL; | ||
618 | } | ||
619 | } | 626 | } |
627 | } | ||
620 | if ((s->rbio != NULL) && (s->rbio != rbio)) | 628 | if ((s->rbio != NULL) && (s->rbio != rbio)) |
621 | BIO_free_all(s->rbio); | 629 | BIO_free_all(s->rbio); |
622 | if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio)) | 630 | if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio)) |
623 | BIO_free_all(s->wbio); | 631 | BIO_free_all(s->wbio); |
624 | s->rbio=rbio; | 632 | s->rbio = rbio; |
625 | s->wbio=wbio; | 633 | s->wbio = wbio; |
626 | } | 634 | } |
627 | 635 | ||
628 | BIO *SSL_get_rbio(const SSL *s) | 636 | BIO |
629 | { return(s->rbio); } | 637 | *SSL_get_rbio(const SSL *s) |
638 | { return (s->rbio); | ||
639 | } | ||
630 | 640 | ||
631 | BIO *SSL_get_wbio(const SSL *s) | 641 | BIO |
632 | { return(s->wbio); } | 642 | *SSL_get_wbio(const SSL *s) |
643 | { return (s->wbio); | ||
644 | } | ||
633 | 645 | ||
634 | int SSL_get_fd(const SSL *s) | 646 | int |
635 | { | 647 | SSL_get_fd(const SSL *s) |
636 | return(SSL_get_rfd(s)); | 648 | { |
637 | } | 649 | return (SSL_get_rfd(s)); |
650 | } | ||
638 | 651 | ||
639 | int SSL_get_rfd(const SSL *s) | 652 | int |
640 | { | 653 | SSL_get_rfd(const SSL *s) |
641 | int ret= -1; | 654 | { |
642 | BIO *b,*r; | 655 | int ret = -1; |
656 | BIO *b, *r; | ||
643 | 657 | ||
644 | b=SSL_get_rbio(s); | 658 | b = SSL_get_rbio(s); |
645 | r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR); | 659 | r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR); |
646 | if (r != NULL) | 660 | if (r != NULL) |
647 | BIO_get_fd(r,&ret); | 661 | BIO_get_fd(r, &ret); |
648 | return(ret); | 662 | return (ret); |
649 | } | 663 | } |
650 | 664 | ||
651 | int SSL_get_wfd(const SSL *s) | 665 | int |
652 | { | 666 | SSL_get_wfd(const SSL *s) |
653 | int ret= -1; | 667 | { |
654 | BIO *b,*r; | 668 | int ret = -1; |
669 | BIO *b, *r; | ||
655 | 670 | ||
656 | b=SSL_get_wbio(s); | 671 | b = SSL_get_wbio(s); |
657 | r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR); | 672 | r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR); |
658 | if (r != NULL) | 673 | if (r != NULL) |
659 | BIO_get_fd(r,&ret); | 674 | BIO_get_fd(r, &ret); |
660 | return(ret); | 675 | return (ret); |
661 | } | 676 | } |
662 | 677 | ||
663 | #ifndef OPENSSL_NO_SOCK | 678 | #ifndef OPENSSL_NO_SOCK |
664 | int SSL_set_fd(SSL *s,int fd) | 679 | int |
665 | { | 680 | SSL_set_fd(SSL *s, int fd) |
666 | int ret=0; | 681 | { |
667 | BIO *bio=NULL; | 682 | int ret = 0; |
683 | BIO *bio = NULL; | ||
668 | 684 | ||
669 | bio=BIO_new(BIO_s_socket()); | 685 | bio = BIO_new(BIO_s_socket()); |
670 | 686 | ||
671 | if (bio == NULL) | 687 | if (bio == NULL) { |
672 | { | 688 | SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB); |
673 | SSLerr(SSL_F_SSL_SET_FD,ERR_R_BUF_LIB); | ||
674 | goto err; | 689 | goto err; |
675 | } | ||
676 | BIO_set_fd(bio,fd,BIO_NOCLOSE); | ||
677 | SSL_set_bio(s,bio,bio); | ||
678 | ret=1; | ||
679 | err: | ||
680 | return(ret); | ||
681 | } | 690 | } |
691 | BIO_set_fd(bio, fd, BIO_NOCLOSE); | ||
692 | SSL_set_bio(s, bio, bio); | ||
693 | ret = 1; | ||
694 | err: | ||
695 | return (ret); | ||
696 | } | ||
682 | 697 | ||
683 | int SSL_set_wfd(SSL *s,int fd) | 698 | int |
684 | { | 699 | SSL_set_wfd(SSL *s, int fd) |
685 | int ret=0; | 700 | { |
686 | BIO *bio=NULL; | 701 | int ret = 0; |
702 | BIO *bio = NULL; | ||
687 | 703 | ||
688 | if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET) | 704 | if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET) |
689 | || ((int)BIO_get_fd(s->rbio,NULL) != fd)) | 705 | || ((int)BIO_get_fd(s->rbio, NULL) != fd)) { |
690 | { | 706 | bio = BIO_new(BIO_s_socket()); |
691 | bio=BIO_new(BIO_s_socket()); | ||
692 | 707 | ||
693 | if (bio == NULL) | 708 | if (bio == NULL) |
694 | { SSLerr(SSL_F_SSL_SET_WFD,ERR_R_BUF_LIB); goto err; } | 709 | { SSLerr(SSL_F_SSL_SET_WFD, ERR_R_BUF_LIB); |
695 | BIO_set_fd(bio,fd,BIO_NOCLOSE); | 710 | goto err; |
696 | SSL_set_bio(s,SSL_get_rbio(s),bio); | ||
697 | } | 711 | } |
698 | else | 712 | BIO_set_fd(bio, fd, BIO_NOCLOSE); |
699 | SSL_set_bio(s,SSL_get_rbio(s),SSL_get_rbio(s)); | 713 | SSL_set_bio(s, SSL_get_rbio(s), bio); |
700 | ret=1; | 714 | } else |
715 | SSL_set_bio(s, SSL_get_rbio(s), SSL_get_rbio(s)); | ||
716 | ret = 1; | ||
701 | err: | 717 | err: |
702 | return(ret); | 718 | return (ret); |
703 | } | 719 | } |
704 | 720 | ||
705 | int SSL_set_rfd(SSL *s,int fd) | 721 | int |
706 | { | 722 | SSL_set_rfd(SSL *s, int fd) |
707 | int ret=0; | 723 | { |
708 | BIO *bio=NULL; | 724 | int ret = 0; |
725 | BIO *bio = NULL; | ||
709 | 726 | ||
710 | if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET) | 727 | if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET) |
711 | || ((int)BIO_get_fd(s->wbio,NULL) != fd)) | 728 | || ((int)BIO_get_fd(s->wbio, NULL) != fd)) { |
712 | { | 729 | bio = BIO_new(BIO_s_socket()); |
713 | bio=BIO_new(BIO_s_socket()); | ||
714 | 730 | ||
715 | if (bio == NULL) | 731 | if (bio == NULL) { |
716 | { | 732 | SSLerr(SSL_F_SSL_SET_RFD, ERR_R_BUF_LIB); |
717 | SSLerr(SSL_F_SSL_SET_RFD,ERR_R_BUF_LIB); | ||
718 | goto err; | 733 | goto err; |
719 | } | ||
720 | BIO_set_fd(bio,fd,BIO_NOCLOSE); | ||
721 | SSL_set_bio(s,bio,SSL_get_wbio(s)); | ||
722 | } | 734 | } |
723 | else | 735 | BIO_set_fd(bio, fd, BIO_NOCLOSE); |
724 | SSL_set_bio(s,SSL_get_wbio(s),SSL_get_wbio(s)); | 736 | SSL_set_bio(s, bio, SSL_get_wbio(s)); |
725 | ret=1; | 737 | } else |
738 | SSL_set_bio(s, SSL_get_wbio(s), SSL_get_wbio(s)); | ||
739 | ret = 1; | ||
726 | err: | 740 | err: |
727 | return(ret); | 741 | return (ret); |
728 | } | 742 | } |
729 | #endif | 743 | #endif |
730 | 744 | ||
731 | 745 | ||
732 | /* return length of latest Finished message we sent, copy to 'buf' */ | 746 | /* return length of latest Finished message we sent, copy to 'buf' */ |
733 | size_t SSL_get_finished(const SSL *s, void *buf, size_t count) | 747 | size_t |
734 | { | 748 | SSL_get_finished(const SSL *s, void *buf, size_t count) |
749 | { | ||
735 | size_t ret = 0; | 750 | size_t ret = 0; |
736 | 751 | ||
737 | if (s->s3 != NULL) | 752 | if (s->s3 != NULL) { |
738 | { | ||
739 | ret = s->s3->tmp.finish_md_len; | 753 | ret = s->s3->tmp.finish_md_len; |
740 | if (count > ret) | 754 | if (count > ret) |
741 | count = ret; | 755 | count = ret; |
742 | memcpy(buf, s->s3->tmp.finish_md, count); | 756 | memcpy(buf, s->s3->tmp.finish_md, count); |
743 | } | ||
744 | return ret; | ||
745 | } | 757 | } |
758 | return ret; | ||
759 | } | ||
746 | 760 | ||
747 | /* return length of latest Finished message we expected, copy to 'buf' */ | 761 | /* return length of latest Finished message we expected, copy to 'buf' */ |
748 | size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count) | 762 | size_t |
749 | { | 763 | SSL_get_peer_finished(const SSL *s, void *buf, size_t count) |
764 | { | ||
750 | size_t ret = 0; | 765 | size_t ret = 0; |
751 | 766 | ||
752 | if (s->s3 != NULL) | 767 | if (s->s3 != NULL) { |
753 | { | ||
754 | ret = s->s3->tmp.peer_finish_md_len; | 768 | ret = s->s3->tmp.peer_finish_md_len; |
755 | if (count > ret) | 769 | if (count > ret) |
756 | count = ret; | 770 | count = ret; |
757 | memcpy(buf, s->s3->tmp.peer_finish_md, count); | 771 | memcpy(buf, s->s3->tmp.peer_finish_md, count); |
758 | } | ||
759 | return ret; | ||
760 | } | 772 | } |
773 | return ret; | ||
774 | } | ||
761 | 775 | ||
762 | 776 | ||
763 | int SSL_get_verify_mode(const SSL *s) | 777 | int |
764 | { | 778 | SSL_get_verify_mode(const SSL *s) |
765 | return(s->verify_mode); | 779 | { |
766 | } | 780 | return (s->verify_mode); |
781 | } | ||
767 | 782 | ||
768 | int SSL_get_verify_depth(const SSL *s) | 783 | int |
769 | { | 784 | SSL_get_verify_depth(const SSL *s) |
785 | { | ||
770 | return X509_VERIFY_PARAM_get_depth(s->param); | 786 | return X509_VERIFY_PARAM_get_depth(s->param); |
771 | } | 787 | } |
772 | 788 | ||
773 | int (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *) | 789 | int (*SSL_get_verify_callback(const SSL *s))(int, X509_STORE_CTX *) |
774 | { | 790 | { |
775 | return(s->verify_callback); | 791 | return (s->verify_callback); |
776 | } | 792 | } |
777 | 793 | ||
778 | int SSL_CTX_get_verify_mode(const SSL_CTX *ctx) | 794 | int |
779 | { | 795 | SSL_CTX_get_verify_mode(const SSL_CTX *ctx) |
780 | return(ctx->verify_mode); | 796 | { |
781 | } | 797 | return (ctx->verify_mode); |
798 | } | ||
782 | 799 | ||
783 | int SSL_CTX_get_verify_depth(const SSL_CTX *ctx) | 800 | int |
784 | { | 801 | SSL_CTX_get_verify_depth(const SSL_CTX *ctx) |
802 | { | ||
785 | return X509_VERIFY_PARAM_get_depth(ctx->param); | 803 | return X509_VERIFY_PARAM_get_depth(ctx->param); |
786 | } | 804 | } |
787 | 805 | ||
788 | int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *) | 806 | int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *) |
789 | { | 807 | { |
790 | return(ctx->default_verify_callback); | 808 | return (ctx->default_verify_callback); |
791 | } | 809 | } |
792 | 810 | ||
793 | void SSL_set_verify(SSL *s,int mode, | 811 | void |
794 | int (*callback)(int ok,X509_STORE_CTX *ctx)) | 812 | SSL_set_verify(SSL *s, int mode, |
795 | { | 813 | int (*callback)(int ok, X509_STORE_CTX *ctx)) |
796 | s->verify_mode=mode; | 814 | { |
815 | s->verify_mode = mode; | ||
797 | if (callback != NULL) | 816 | if (callback != NULL) |
798 | s->verify_callback=callback; | 817 | s->verify_callback = callback; |
799 | } | 818 | } |
800 | 819 | ||
801 | void SSL_set_verify_depth(SSL *s,int depth) | 820 | void |
802 | { | 821 | SSL_set_verify_depth(SSL *s, int depth) |
822 | { | ||
803 | X509_VERIFY_PARAM_set_depth(s->param, depth); | 823 | X509_VERIFY_PARAM_set_depth(s->param, depth); |
804 | } | 824 | } |
805 | 825 | ||
806 | void SSL_set_read_ahead(SSL *s,int yes) | 826 | void |
807 | { | 827 | SSL_set_read_ahead(SSL *s, int yes) |
808 | s->read_ahead=yes; | 828 | { |
809 | } | 829 | s->read_ahead = yes; |
830 | } | ||
810 | 831 | ||
811 | int SSL_get_read_ahead(const SSL *s) | 832 | int |
812 | { | 833 | SSL_get_read_ahead(const SSL *s) |
813 | return(s->read_ahead); | 834 | { |
814 | } | 835 | return (s->read_ahead); |
836 | } | ||
815 | 837 | ||
816 | int SSL_pending(const SSL *s) | 838 | int |
817 | { | 839 | SSL_pending(const SSL *s) |
840 | { | ||
818 | /* SSL_pending cannot work properly if read-ahead is enabled | 841 | /* SSL_pending cannot work properly if read-ahead is enabled |
819 | * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), | 842 | * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), |
820 | * and it is impossible to fix since SSL_pending cannot report | 843 | * and it is impossible to fix since SSL_pending cannot report |
@@ -822,264 +845,266 @@ int SSL_pending(const SSL *s) | |||
822 | * (Note that SSL_pending() is often used as a boolean value, | 845 | * (Note that SSL_pending() is often used as a boolean value, |
823 | * so we'd better not return -1.) | 846 | * so we'd better not return -1.) |
824 | */ | 847 | */ |
825 | return(s->method->ssl_pending(s)); | 848 | return (s->method->ssl_pending(s)); |
826 | } | 849 | } |
827 | 850 | ||
828 | X509 *SSL_get_peer_certificate(const SSL *s) | 851 | X509 |
829 | { | 852 | *SSL_get_peer_certificate(const SSL *s) |
853 | { | ||
830 | X509 *r; | 854 | X509 *r; |
831 | 855 | ||
832 | if ((s == NULL) || (s->session == NULL)) | 856 | if ((s == NULL) || (s->session == NULL)) |
833 | r=NULL; | 857 | r = NULL; |
834 | else | 858 | else |
835 | r=s->session->peer; | 859 | r = s->session->peer; |
836 | 860 | ||
837 | if (r == NULL) return(r); | 861 | if (r == NULL) |
862 | return (r); | ||
838 | 863 | ||
839 | CRYPTO_add(&r->references,1,CRYPTO_LOCK_X509); | 864 | CRYPTO_add(&r->references, 1, CRYPTO_LOCK_X509); |
840 | 865 | ||
841 | return(r); | 866 | return (r); |
842 | } | 867 | } |
843 | 868 | ||
844 | STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s) | 869 | STACK_OF(X509) |
845 | { | 870 | *SSL_get_peer_cert_chain(const SSL *s) |
871 | { | ||
846 | STACK_OF(X509) *r; | 872 | STACK_OF(X509) *r; |
847 | 873 | ||
848 | if ((s == NULL) || (s->session == NULL) || (s->session->sess_cert == NULL)) | 874 | if ((s == NULL) || (s->session == NULL) || (s->session->sess_cert == NULL)) |
849 | r=NULL; | 875 | r = NULL; |
850 | else | 876 | else |
851 | r=s->session->sess_cert->cert_chain; | 877 | r = s->session->sess_cert->cert_chain; |
852 | 878 | ||
853 | /* If we are a client, cert_chain includes the peer's own | 879 | /* If we are a client, cert_chain includes the peer's own |
854 | * certificate; if we are a server, it does not. */ | 880 | * certificate; |
855 | 881 | if we are a server, it does not. */ | |
856 | return(r); | 882 | |
857 | } | 883 | return (r); |
884 | } | ||
858 | 885 | ||
859 | /* Now in theory, since the calling process own 't' it should be safe to | 886 | /* Now in theory, since the calling process own 't' it should be safe to |
860 | * modify. We need to be able to read f without being hassled */ | 887 | * modify. We need to be able to read f without being hassled */ |
861 | void SSL_copy_session_id(SSL *t,const SSL *f) | 888 | void |
862 | { | 889 | SSL_copy_session_id(SSL *t, const SSL *f) |
890 | { | ||
863 | CERT *tmp; | 891 | CERT *tmp; |
864 | 892 | ||
865 | /* Do we need to to SSL locking? */ | 893 | /* Do we need to to SSL locking? */ |
866 | SSL_set_session(t,SSL_get_session(f)); | 894 | SSL_set_session(t, SSL_get_session(f)); |
867 | 895 | ||
868 | /* what if we are setup as SSLv2 but want to talk SSLv3 or | 896 | /* what if we are setup as SSLv2 but want to talk SSLv3 or |
869 | * vice-versa */ | 897 | * vice-versa */ |
870 | if (t->method != f->method) | 898 | if (t->method != f->method) { |
871 | { | ||
872 | t->method->ssl_free(t); /* cleanup current */ | 899 | t->method->ssl_free(t); /* cleanup current */ |
873 | t->method=f->method; /* change method */ | 900 | t->method=f->method; /* change method */ |
874 | t->method->ssl_new(t); /* setup new */ | 901 | t->method->ssl_new(t); /* setup new */ |
875 | } | ||
876 | |||
877 | tmp=t->cert; | ||
878 | if (f->cert != NULL) | ||
879 | { | ||
880 | CRYPTO_add(&f->cert->references,1,CRYPTO_LOCK_SSL_CERT); | ||
881 | t->cert=f->cert; | ||
882 | } | ||
883 | else | ||
884 | t->cert=NULL; | ||
885 | if (tmp != NULL) ssl_cert_free(tmp); | ||
886 | SSL_set_session_id_context(t,f->sid_ctx,f->sid_ctx_length); | ||
887 | } | 902 | } |
888 | 903 | ||
904 | tmp = t->cert; | ||
905 | if (f->cert != NULL) { | ||
906 | CRYPTO_add(&f->cert->references, 1, CRYPTO_LOCK_SSL_CERT); | ||
907 | t->cert = f->cert; | ||
908 | } else | ||
909 | t->cert = NULL; | ||
910 | if (tmp != NULL) | ||
911 | ssl_cert_free(tmp); | ||
912 | SSL_set_session_id_context(t, f->sid_ctx, f->sid_ctx_length); | ||
913 | } | ||
914 | |||
889 | /* Fix this so it checks all the valid key/cert options */ | 915 | /* Fix this so it checks all the valid key/cert options */ |
890 | int SSL_CTX_check_private_key(const SSL_CTX *ctx) | 916 | int |
891 | { | 917 | SSL_CTX_check_private_key(const SSL_CTX *ctx) |
892 | if ( (ctx == NULL) || | 918 | { |
919 | if ((ctx == NULL) || | ||
893 | (ctx->cert == NULL) || | 920 | (ctx->cert == NULL) || |
894 | (ctx->cert->key->x509 == NULL)) | 921 | (ctx->cert->key->x509 == NULL)) { |
895 | { | 922 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED); |
896 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED); | 923 | return (0); |
897 | return(0); | 924 | } |
898 | } | 925 | if (ctx->cert->key->privatekey == NULL) { |
899 | if (ctx->cert->key->privatekey == NULL) | 926 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED); |
900 | { | 927 | return (0); |
901 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED); | ||
902 | return(0); | ||
903 | } | ||
904 | return(X509_check_private_key(ctx->cert->key->x509, ctx->cert->key->privatekey)); | ||
905 | } | 928 | } |
929 | return (X509_check_private_key(ctx->cert->key->x509, ctx->cert->key->privatekey)); | ||
930 | } | ||
906 | 931 | ||
907 | /* Fix this function so that it takes an optional type parameter */ | 932 | /* Fix this function so that it takes an optional type parameter */ |
908 | int SSL_check_private_key(const SSL *ssl) | 933 | int |
909 | { | 934 | SSL_check_private_key(const SSL *ssl) |
910 | if (ssl == NULL) | 935 | { |
911 | { | 936 | if (ssl == NULL) { |
912 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,ERR_R_PASSED_NULL_PARAMETER); | 937 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, ERR_R_PASSED_NULL_PARAMETER); |
913 | return(0); | 938 | return (0); |
914 | } | 939 | } |
915 | if (ssl->cert == NULL) | 940 | if (ssl->cert == NULL) { |
916 | { | 941 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED); |
917 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED); | ||
918 | return 0; | 942 | return 0; |
919 | } | ||
920 | if (ssl->cert->key->x509 == NULL) | ||
921 | { | ||
922 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED); | ||
923 | return(0); | ||
924 | } | ||
925 | if (ssl->cert->key->privatekey == NULL) | ||
926 | { | ||
927 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED); | ||
928 | return(0); | ||
929 | } | ||
930 | return(X509_check_private_key(ssl->cert->key->x509, | ||
931 | ssl->cert->key->privatekey)); | ||
932 | } | 943 | } |
944 | if (ssl->cert->key->x509 == NULL) { | ||
945 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED); | ||
946 | return (0); | ||
947 | } | ||
948 | if (ssl->cert->key->privatekey == NULL) { | ||
949 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED); | ||
950 | return (0); | ||
951 | } | ||
952 | return(X509_check_private_key(ssl->cert->key->x509, | ||
953 | ssl->cert->key->privatekey)); | ||
954 | } | ||
933 | 955 | ||
934 | int SSL_accept(SSL *s) | 956 | int |
935 | { | 957 | SSL_accept(SSL *s) |
958 | { | ||
936 | if (s->handshake_func == 0) | 959 | if (s->handshake_func == 0) |
937 | /* Not properly initialized yet */ | 960 | /* Not properly initialized yet */ |
938 | SSL_set_accept_state(s); | 961 | SSL_set_accept_state(s); |
939 | 962 | ||
940 | return(s->method->ssl_accept(s)); | 963 | return (s->method->ssl_accept(s)); |
941 | } | 964 | } |
942 | 965 | ||
943 | int SSL_connect(SSL *s) | 966 | int |
944 | { | 967 | SSL_connect(SSL *s) |
968 | { | ||
945 | if (s->handshake_func == 0) | 969 | if (s->handshake_func == 0) |
946 | /* Not properly initialized yet */ | 970 | /* Not properly initialized yet */ |
947 | SSL_set_connect_state(s); | 971 | SSL_set_connect_state(s); |
948 | 972 | ||
949 | return(s->method->ssl_connect(s)); | 973 | return (s->method->ssl_connect(s)); |
950 | } | 974 | } |
951 | 975 | ||
952 | long SSL_get_default_timeout(const SSL *s) | 976 | long |
953 | { | 977 | SSL_get_default_timeout(const SSL *s) |
954 | return(s->method->get_timeout()); | 978 | { |
955 | } | 979 | return (s->method->get_timeout()); |
980 | } | ||
956 | 981 | ||
957 | int SSL_read(SSL *s,void *buf,int num) | 982 | int |
958 | { | 983 | SSL_read(SSL *s, void *buf, int num) |
959 | if (s->handshake_func == 0) | 984 | { |
960 | { | 985 | if (s->handshake_func == 0) { |
961 | SSLerr(SSL_F_SSL_READ, SSL_R_UNINITIALIZED); | 986 | SSLerr(SSL_F_SSL_READ, SSL_R_UNINITIALIZED); |
962 | return -1; | 987 | return -1; |
963 | } | 988 | } |
964 | 989 | ||
965 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 990 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
966 | { | 991 | s->rwstate = SSL_NOTHING; |
967 | s->rwstate=SSL_NOTHING; | 992 | return (0); |
968 | return(0); | ||
969 | } | ||
970 | return(s->method->ssl_read(s,buf,num)); | ||
971 | } | 993 | } |
994 | return (s->method->ssl_read(s, buf, num)); | ||
995 | } | ||
972 | 996 | ||
973 | int SSL_peek(SSL *s,void *buf,int num) | 997 | int |
974 | { | 998 | SSL_peek(SSL *s, void *buf, int num) |
975 | if (s->handshake_func == 0) | 999 | { |
976 | { | 1000 | if (s->handshake_func == 0) { |
977 | SSLerr(SSL_F_SSL_PEEK, SSL_R_UNINITIALIZED); | 1001 | SSLerr(SSL_F_SSL_PEEK, SSL_R_UNINITIALIZED); |
978 | return -1; | 1002 | return -1; |
979 | } | 1003 | } |
980 | 1004 | ||
981 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 1005 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
982 | { | 1006 | return (0); |
983 | return(0); | ||
984 | } | ||
985 | return(s->method->ssl_peek(s,buf,num)); | ||
986 | } | 1007 | } |
1008 | return (s->method->ssl_peek(s, buf, num)); | ||
1009 | } | ||
987 | 1010 | ||
988 | int SSL_write(SSL *s,const void *buf,int num) | 1011 | int |
989 | { | 1012 | SSL_write(SSL *s, const void *buf, int num) |
990 | if (s->handshake_func == 0) | 1013 | { |
991 | { | 1014 | if (s->handshake_func == 0) { |
992 | SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED); | 1015 | SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED); |
993 | return -1; | 1016 | return -1; |
994 | } | 1017 | } |
995 | 1018 | ||
996 | if (s->shutdown & SSL_SENT_SHUTDOWN) | 1019 | if (s->shutdown & SSL_SENT_SHUTDOWN) { |
997 | { | 1020 | s->rwstate = SSL_NOTHING; |
998 | s->rwstate=SSL_NOTHING; | 1021 | SSLerr(SSL_F_SSL_WRITE, SSL_R_PROTOCOL_IS_SHUTDOWN); |
999 | SSLerr(SSL_F_SSL_WRITE,SSL_R_PROTOCOL_IS_SHUTDOWN); | 1022 | return (-1); |
1000 | return(-1); | ||
1001 | } | ||
1002 | return(s->method->ssl_write(s,buf,num)); | ||
1003 | } | 1023 | } |
1024 | return (s->method->ssl_write(s, buf, num)); | ||
1025 | } | ||
1004 | 1026 | ||
1005 | int SSL_shutdown(SSL *s) | 1027 | int |
1006 | { | 1028 | SSL_shutdown(SSL *s) |
1029 | { | ||
1007 | /* Note that this function behaves differently from what one might | 1030 | /* Note that this function behaves differently from what one might |
1008 | * expect. Return values are 0 for no success (yet), | 1031 | * expect. Return values are 0 for no success (yet), |
1009 | * 1 for success; but calling it once is usually not enough, | 1032 | * 1 for success; but calling it once is usually not enough, |
1010 | * even if blocking I/O is used (see ssl3_shutdown). | 1033 | * even if blocking I/O is used (see ssl3_shutdown). |
1011 | */ | 1034 | */ |
1012 | 1035 | ||
1013 | if (s->handshake_func == 0) | 1036 | if (s->handshake_func == 0) { |
1014 | { | ||
1015 | SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED); | 1037 | SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED); |
1016 | return -1; | 1038 | return -1; |
1017 | } | 1039 | } |
1018 | 1040 | ||
1019 | if ((s != NULL) && !SSL_in_init(s)) | 1041 | if ((s != NULL) && !SSL_in_init(s)) |
1020 | return(s->method->ssl_shutdown(s)); | 1042 | return (s->method->ssl_shutdown(s)); |
1021 | else | 1043 | else |
1022 | return(1); | 1044 | return (1); |
1023 | } | 1045 | } |
1024 | 1046 | ||
1025 | int SSL_renegotiate(SSL *s) | 1047 | int |
1026 | { | 1048 | SSL_renegotiate(SSL *s) |
1049 | { | ||
1027 | if (s->renegotiate == 0) | 1050 | if (s->renegotiate == 0) |
1028 | s->renegotiate=1; | 1051 | s->renegotiate = 1; |
1029 | 1052 | ||
1030 | s->new_session=1; | 1053 | s->new_session = 1; |
1031 | 1054 | ||
1032 | return(s->method->ssl_renegotiate(s)); | 1055 | return (s->method->ssl_renegotiate(s)); |
1033 | } | 1056 | } |
1034 | 1057 | ||
1035 | int SSL_renegotiate_abbreviated(SSL *s) | 1058 | int |
1036 | { | 1059 | SSL_renegotiate_abbreviated(SSL *s) |
1060 | { | ||
1037 | if (s->renegotiate == 0) | 1061 | if (s->renegotiate == 0) |
1038 | s->renegotiate=1; | 1062 | s->renegotiate = 1; |
1039 | 1063 | ||
1040 | s->new_session=0; | 1064 | s->new_session = 0; |
1041 | 1065 | ||
1042 | return(s->method->ssl_renegotiate(s)); | 1066 | return (s->method->ssl_renegotiate(s)); |
1043 | } | 1067 | } |
1044 | 1068 | ||
1045 | int SSL_renegotiate_pending(SSL *s) | 1069 | int |
1046 | { | 1070 | SSL_renegotiate_pending(SSL *s) |
1071 | { | ||
1047 | /* becomes true when negotiation is requested; | 1072 | /* becomes true when negotiation is requested; |
1048 | * false again once a handshake has finished */ | 1073 | * false again once a handshake has finished */ |
1049 | return (s->renegotiate != 0); | 1074 | return (s->renegotiate != 0); |
1050 | } | 1075 | } |
1051 | 1076 | ||
1052 | long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) | 1077 | long |
1053 | { | 1078 | SSL_ctrl(SSL *s, int cmd, long larg, void *parg) |
1079 | { | ||
1054 | long l; | 1080 | long l; |
1055 | 1081 | ||
1056 | switch (cmd) | 1082 | switch (cmd) { |
1057 | { | ||
1058 | case SSL_CTRL_GET_READ_AHEAD: | 1083 | case SSL_CTRL_GET_READ_AHEAD: |
1059 | return(s->read_ahead); | 1084 | return (s->read_ahead); |
1060 | case SSL_CTRL_SET_READ_AHEAD: | 1085 | case SSL_CTRL_SET_READ_AHEAD: |
1061 | l=s->read_ahead; | 1086 | l = s->read_ahead; |
1062 | s->read_ahead=larg; | 1087 | s->read_ahead = larg; |
1063 | return(l); | 1088 | return (l); |
1064 | 1089 | ||
1065 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: | 1090 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: |
1066 | s->msg_callback_arg = parg; | 1091 | s->msg_callback_arg = parg; |
1067 | return 1; | 1092 | return 1; |
1068 | 1093 | ||
1069 | case SSL_CTRL_OPTIONS: | 1094 | case SSL_CTRL_OPTIONS: |
1070 | return(s->options|=larg); | 1095 | return (s->options|=larg); |
1071 | case SSL_CTRL_CLEAR_OPTIONS: | 1096 | case SSL_CTRL_CLEAR_OPTIONS: |
1072 | return(s->options&=~larg); | 1097 | return (s->options&=~larg); |
1073 | case SSL_CTRL_MODE: | 1098 | case SSL_CTRL_MODE: |
1074 | return(s->mode|=larg); | 1099 | return (s->mode|=larg); |
1075 | case SSL_CTRL_CLEAR_MODE: | 1100 | case SSL_CTRL_CLEAR_MODE: |
1076 | return(s->mode &=~larg); | 1101 | return (s->mode &=~larg); |
1077 | case SSL_CTRL_GET_MAX_CERT_LIST: | 1102 | case SSL_CTRL_GET_MAX_CERT_LIST: |
1078 | return(s->max_cert_list); | 1103 | return (s->max_cert_list); |
1079 | case SSL_CTRL_SET_MAX_CERT_LIST: | 1104 | case SSL_CTRL_SET_MAX_CERT_LIST: |
1080 | l=s->max_cert_list; | 1105 | l = s->max_cert_list; |
1081 | s->max_cert_list=larg; | 1106 | s->max_cert_list = larg; |
1082 | return(l); | 1107 | return (l); |
1083 | case SSL_CTRL_SET_MTU: | 1108 | case SSL_CTRL_SET_MTU: |
1084 | #ifndef OPENSSL_NO_DTLS1 | 1109 | #ifndef OPENSSL_NO_DTLS1 |
1085 | if (larg < (long)dtls1_min_mtu()) | 1110 | if (larg < (long)dtls1_min_mtu()) |
@@ -1087,11 +1112,10 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) | |||
1087 | #endif | 1112 | #endif |
1088 | 1113 | ||
1089 | if (SSL_version(s) == DTLS1_VERSION || | 1114 | if (SSL_version(s) == DTLS1_VERSION || |
1090 | SSL_version(s) == DTLS1_BAD_VER) | 1115 | SSL_version(s) == DTLS1_BAD_VER) { |
1091 | { | ||
1092 | s->d1->mtu = larg; | 1116 | s->d1->mtu = larg; |
1093 | return larg; | 1117 | return larg; |
1094 | } | 1118 | } |
1095 | return 0; | 1119 | return 0; |
1096 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: | 1120 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: |
1097 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) | 1121 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) |
@@ -1103,203 +1127,204 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) | |||
1103 | return s->s3->send_connection_binding; | 1127 | return s->s3->send_connection_binding; |
1104 | else return 0; | 1128 | else return 0; |
1105 | default: | 1129 | default: |
1106 | return(s->method->ssl_ctrl(s,cmd,larg,parg)); | 1130 | return (s->method->ssl_ctrl(s, cmd, larg, parg)); |
1107 | } | ||
1108 | } | 1131 | } |
1132 | } | ||
1109 | 1133 | ||
1110 | long SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | 1134 | long |
1111 | { | 1135 | SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) |
1112 | switch(cmd) | 1136 | { |
1113 | { | 1137 | switch (cmd) { |
1114 | case SSL_CTRL_SET_MSG_CALLBACK: | 1138 | case SSL_CTRL_SET_MSG_CALLBACK: |
1115 | s->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); | 1139 | s->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); |
1116 | return 1; | 1140 | return 1; |
1117 | 1141 | ||
1118 | default: | 1142 | default: |
1119 | return(s->method->ssl_callback_ctrl(s,cmd,fp)); | 1143 | return (s->method->ssl_callback_ctrl(s, cmd, fp)); |
1120 | } | ||
1121 | } | 1144 | } |
1145 | } | ||
1122 | 1146 | ||
1123 | LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx) | 1147 | LHASH_OF(SSL_SESSION) |
1124 | { | 1148 | *SSL_CTX_sessions(SSL_CTX *ctx) |
1149 | { | ||
1125 | return ctx->sessions; | 1150 | return ctx->sessions; |
1126 | } | 1151 | } |
1127 | 1152 | ||
1128 | long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,void *parg) | 1153 | long |
1129 | { | 1154 | SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) |
1155 | { | ||
1130 | long l; | 1156 | long l; |
1131 | 1157 | ||
1132 | switch (cmd) | 1158 | switch (cmd) { |
1133 | { | ||
1134 | case SSL_CTRL_GET_READ_AHEAD: | 1159 | case SSL_CTRL_GET_READ_AHEAD: |
1135 | return(ctx->read_ahead); | 1160 | return (ctx->read_ahead); |
1136 | case SSL_CTRL_SET_READ_AHEAD: | 1161 | case SSL_CTRL_SET_READ_AHEAD: |
1137 | l=ctx->read_ahead; | 1162 | l = ctx->read_ahead; |
1138 | ctx->read_ahead=larg; | 1163 | ctx->read_ahead = larg; |
1139 | return(l); | 1164 | return (l); |
1140 | 1165 | ||
1141 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: | 1166 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: |
1142 | ctx->msg_callback_arg = parg; | 1167 | ctx->msg_callback_arg = parg; |
1143 | return 1; | 1168 | return 1; |
1144 | 1169 | ||
1145 | case SSL_CTRL_GET_MAX_CERT_LIST: | 1170 | case SSL_CTRL_GET_MAX_CERT_LIST: |
1146 | return(ctx->max_cert_list); | 1171 | return (ctx->max_cert_list); |
1147 | case SSL_CTRL_SET_MAX_CERT_LIST: | 1172 | case SSL_CTRL_SET_MAX_CERT_LIST: |
1148 | l=ctx->max_cert_list; | 1173 | l = ctx->max_cert_list; |
1149 | ctx->max_cert_list=larg; | 1174 | ctx->max_cert_list = larg; |
1150 | return(l); | 1175 | return (l); |
1151 | 1176 | ||
1152 | case SSL_CTRL_SET_SESS_CACHE_SIZE: | 1177 | case SSL_CTRL_SET_SESS_CACHE_SIZE: |
1153 | l=ctx->session_cache_size; | 1178 | l = ctx->session_cache_size; |
1154 | ctx->session_cache_size=larg; | 1179 | ctx->session_cache_size = larg; |
1155 | return(l); | 1180 | return (l); |
1156 | case SSL_CTRL_GET_SESS_CACHE_SIZE: | 1181 | case SSL_CTRL_GET_SESS_CACHE_SIZE: |
1157 | return(ctx->session_cache_size); | 1182 | return (ctx->session_cache_size); |
1158 | case SSL_CTRL_SET_SESS_CACHE_MODE: | 1183 | case SSL_CTRL_SET_SESS_CACHE_MODE: |
1159 | l=ctx->session_cache_mode; | 1184 | l = ctx->session_cache_mode; |
1160 | ctx->session_cache_mode=larg; | 1185 | ctx->session_cache_mode = larg; |
1161 | return(l); | 1186 | return (l); |
1162 | case SSL_CTRL_GET_SESS_CACHE_MODE: | 1187 | case SSL_CTRL_GET_SESS_CACHE_MODE: |
1163 | return(ctx->session_cache_mode); | 1188 | return (ctx->session_cache_mode); |
1164 | 1189 | ||
1165 | case SSL_CTRL_SESS_NUMBER: | 1190 | case SSL_CTRL_SESS_NUMBER: |
1166 | return(lh_SSL_SESSION_num_items(ctx->sessions)); | 1191 | return (lh_SSL_SESSION_num_items(ctx->sessions)); |
1167 | case SSL_CTRL_SESS_CONNECT: | 1192 | case SSL_CTRL_SESS_CONNECT: |
1168 | return(ctx->stats.sess_connect); | 1193 | return (ctx->stats.sess_connect); |
1169 | case SSL_CTRL_SESS_CONNECT_GOOD: | 1194 | case SSL_CTRL_SESS_CONNECT_GOOD: |
1170 | return(ctx->stats.sess_connect_good); | 1195 | return (ctx->stats.sess_connect_good); |
1171 | case SSL_CTRL_SESS_CONNECT_RENEGOTIATE: | 1196 | case SSL_CTRL_SESS_CONNECT_RENEGOTIATE: |
1172 | return(ctx->stats.sess_connect_renegotiate); | 1197 | return (ctx->stats.sess_connect_renegotiate); |
1173 | case SSL_CTRL_SESS_ACCEPT: | 1198 | case SSL_CTRL_SESS_ACCEPT: |
1174 | return(ctx->stats.sess_accept); | 1199 | return (ctx->stats.sess_accept); |
1175 | case SSL_CTRL_SESS_ACCEPT_GOOD: | 1200 | case SSL_CTRL_SESS_ACCEPT_GOOD: |
1176 | return(ctx->stats.sess_accept_good); | 1201 | return (ctx->stats.sess_accept_good); |
1177 | case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE: | 1202 | case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE: |
1178 | return(ctx->stats.sess_accept_renegotiate); | 1203 | return (ctx->stats.sess_accept_renegotiate); |
1179 | case SSL_CTRL_SESS_HIT: | 1204 | case SSL_CTRL_SESS_HIT: |
1180 | return(ctx->stats.sess_hit); | 1205 | return (ctx->stats.sess_hit); |
1181 | case SSL_CTRL_SESS_CB_HIT: | 1206 | case SSL_CTRL_SESS_CB_HIT: |
1182 | return(ctx->stats.sess_cb_hit); | 1207 | return (ctx->stats.sess_cb_hit); |
1183 | case SSL_CTRL_SESS_MISSES: | 1208 | case SSL_CTRL_SESS_MISSES: |
1184 | return(ctx->stats.sess_miss); | 1209 | return (ctx->stats.sess_miss); |
1185 | case SSL_CTRL_SESS_TIMEOUTS: | 1210 | case SSL_CTRL_SESS_TIMEOUTS: |
1186 | return(ctx->stats.sess_timeout); | 1211 | return (ctx->stats.sess_timeout); |
1187 | case SSL_CTRL_SESS_CACHE_FULL: | 1212 | case SSL_CTRL_SESS_CACHE_FULL: |
1188 | return(ctx->stats.sess_cache_full); | 1213 | return (ctx->stats.sess_cache_full); |
1189 | case SSL_CTRL_OPTIONS: | 1214 | case SSL_CTRL_OPTIONS: |
1190 | return(ctx->options|=larg); | 1215 | return (ctx->options|=larg); |
1191 | case SSL_CTRL_CLEAR_OPTIONS: | 1216 | case SSL_CTRL_CLEAR_OPTIONS: |
1192 | return(ctx->options&=~larg); | 1217 | return (ctx->options&=~larg); |
1193 | case SSL_CTRL_MODE: | 1218 | case SSL_CTRL_MODE: |
1194 | return(ctx->mode|=larg); | 1219 | return (ctx->mode|=larg); |
1195 | case SSL_CTRL_CLEAR_MODE: | 1220 | case SSL_CTRL_CLEAR_MODE: |
1196 | return(ctx->mode&=~larg); | 1221 | return (ctx->mode&=~larg); |
1197 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: | 1222 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: |
1198 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) | 1223 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) |
1199 | return 0; | 1224 | return 0; |
1200 | ctx->max_send_fragment = larg; | 1225 | ctx->max_send_fragment = larg; |
1201 | return 1; | 1226 | return 1; |
1202 | default: | 1227 | default: |
1203 | return(ctx->method->ssl_ctx_ctrl(ctx,cmd,larg,parg)); | 1228 | return (ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg)); |
1204 | } | ||
1205 | } | 1229 | } |
1230 | } | ||
1206 | 1231 | ||
1207 | long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | 1232 | long |
1208 | { | 1233 | SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) |
1209 | switch(cmd) | 1234 | { |
1210 | { | 1235 | switch (cmd) { |
1211 | case SSL_CTRL_SET_MSG_CALLBACK: | 1236 | case SSL_CTRL_SET_MSG_CALLBACK: |
1212 | ctx->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); | 1237 | ctx->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); |
1213 | return 1; | 1238 | return 1; |
1214 | 1239 | ||
1215 | default: | 1240 | default: |
1216 | return(ctx->method->ssl_ctx_callback_ctrl(ctx,cmd,fp)); | 1241 | return (ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp)); |
1217 | } | ||
1218 | } | 1242 | } |
1243 | } | ||
1219 | 1244 | ||
1220 | int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b) | 1245 | int |
1221 | { | 1246 | ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b) |
1247 | { | ||
1222 | long l; | 1248 | long l; |
1223 | 1249 | ||
1224 | l=a->id-b->id; | 1250 | l = a->id - b->id; |
1225 | if (l == 0L) | 1251 | if (l == 0L) |
1226 | return(0); | 1252 | return (0); |
1227 | else | 1253 | else |
1228 | return((l > 0)?1:-1); | 1254 | return ((l > 0) ? 1:-1); |
1229 | } | 1255 | } |
1230 | 1256 | ||
1231 | int ssl_cipher_ptr_id_cmp(const SSL_CIPHER * const *ap, | 1257 | int |
1232 | const SSL_CIPHER * const *bp) | 1258 | ssl_cipher_ptr_id_cmp(const SSL_CIPHER * const *ap, |
1233 | { | 1259 | const SSL_CIPHER * const *bp) |
1260 | { | ||
1234 | long l; | 1261 | long l; |
1235 | 1262 | ||
1236 | l=(*ap)->id-(*bp)->id; | 1263 | l = (*ap)->id - (*bp)->id; |
1237 | if (l == 0L) | 1264 | if (l == 0L) |
1238 | return(0); | 1265 | return (0); |
1239 | else | 1266 | else |
1240 | return((l > 0)?1:-1); | 1267 | return ((l > 0) ? 1:-1); |
1241 | } | 1268 | } |
1242 | 1269 | ||
1243 | /** return a STACK of the ciphers available for the SSL and in order of | 1270 | /** return a STACK of the ciphers available for the SSL and in order of |
1244 | * preference */ | 1271 | * preference */ |
1245 | STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s) | 1272 | STACK_OF(SSL_CIPHER) |
1246 | { | 1273 | *SSL_get_ciphers(const SSL *s) |
1247 | if (s != NULL) | 1274 | { |
1248 | { | 1275 | if (s != NULL) { |
1249 | if (s->cipher_list != NULL) | 1276 | if (s->cipher_list != NULL) { |
1250 | { | 1277 | return (s->cipher_list); |
1251 | return(s->cipher_list); | 1278 | } else if ((s->ctx != NULL) && |
1252 | } | 1279 | (s->ctx->cipher_list != NULL)) { |
1253 | else if ((s->ctx != NULL) && | 1280 | return (s->ctx->cipher_list); |
1254 | (s->ctx->cipher_list != NULL)) | ||
1255 | { | ||
1256 | return(s->ctx->cipher_list); | ||
1257 | } | ||
1258 | } | 1281 | } |
1259 | return(NULL); | ||
1260 | } | 1282 | } |
1283 | return (NULL); | ||
1284 | } | ||
1261 | 1285 | ||
1262 | /** return a STACK of the ciphers available for the SSL and in order of | 1286 | /** return a STACK of the ciphers available for the SSL and in order of |
1263 | * algorithm id */ | 1287 | * algorithm id */ |
1264 | STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s) | 1288 | STACK_OF(SSL_CIPHER) |
1265 | { | 1289 | *ssl_get_ciphers_by_id(SSL *s) |
1266 | if (s != NULL) | 1290 | { |
1267 | { | 1291 | if (s != NULL) { |
1268 | if (s->cipher_list_by_id != NULL) | 1292 | if (s->cipher_list_by_id != NULL) { |
1269 | { | 1293 | return (s->cipher_list_by_id); |
1270 | return(s->cipher_list_by_id); | 1294 | } else if ((s->ctx != NULL) && |
1271 | } | 1295 | (s->ctx->cipher_list_by_id != NULL)) { |
1272 | else if ((s->ctx != NULL) && | 1296 | return (s->ctx->cipher_list_by_id); |
1273 | (s->ctx->cipher_list_by_id != NULL)) | ||
1274 | { | ||
1275 | return(s->ctx->cipher_list_by_id); | ||
1276 | } | ||
1277 | } | 1297 | } |
1278 | return(NULL); | ||
1279 | } | 1298 | } |
1299 | return (NULL); | ||
1300 | } | ||
1280 | 1301 | ||
1281 | /** The old interface to get the same thing as SSL_get_ciphers() */ | 1302 | /** The old interface to get the same thing as SSL_get_ciphers() */ |
1282 | const char *SSL_get_cipher_list(const SSL *s,int n) | 1303 | const char |
1283 | { | 1304 | *SSL_get_cipher_list(const SSL *s, int n) |
1305 | { | ||
1284 | SSL_CIPHER *c; | 1306 | SSL_CIPHER *c; |
1285 | STACK_OF(SSL_CIPHER) *sk; | 1307 | STACK_OF(SSL_CIPHER) *sk; |
1286 | 1308 | ||
1287 | if (s == NULL) return(NULL); | 1309 | if (s == NULL) |
1288 | sk=SSL_get_ciphers(s); | 1310 | return (NULL); |
1311 | sk = SSL_get_ciphers(s); | ||
1289 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n)) | 1312 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n)) |
1290 | return(NULL); | 1313 | return (NULL); |
1291 | c=sk_SSL_CIPHER_value(sk,n); | 1314 | c = sk_SSL_CIPHER_value(sk, n); |
1292 | if (c == NULL) return(NULL); | 1315 | if (c == NULL) |
1293 | return(c->name); | 1316 | return (NULL); |
1294 | } | 1317 | return (c->name); |
1318 | } | ||
1295 | 1319 | ||
1296 | /** specify the ciphers to be used by default by the SSL_CTX */ | 1320 | /** specify the ciphers to be used by default by the SSL_CTX */ |
1297 | int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) | 1321 | int |
1298 | { | 1322 | SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) |
1323 | { | ||
1299 | STACK_OF(SSL_CIPHER) *sk; | 1324 | STACK_OF(SSL_CIPHER) *sk; |
1300 | 1325 | ||
1301 | sk=ssl_create_cipher_list(ctx->method,&ctx->cipher_list, | 1326 | sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list, |
1302 | &ctx->cipher_list_by_id,str); | 1327 | &ctx->cipher_list_by_id, str); |
1303 | /* ssl_create_cipher_list may return an empty stack if it | 1328 | /* ssl_create_cipher_list may return an empty stack if it |
1304 | * was unable to find a cipher matching the given rule string | 1329 | * was unable to find a cipher matching the given rule string |
1305 | * (for example if the rule string specifies a cipher which | 1330 | * (for example if the rule string specifies a cipher which |
@@ -1309,35 +1334,35 @@ int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) | |||
1309 | * updated. */ | 1334 | * updated. */ |
1310 | if (sk == NULL) | 1335 | if (sk == NULL) |
1311 | return 0; | 1336 | return 0; |
1312 | else if (sk_SSL_CIPHER_num(sk) == 0) | 1337 | else if (sk_SSL_CIPHER_num(sk) == 0) { |
1313 | { | ||
1314 | SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); | 1338 | SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); |
1315 | return 0; | 1339 | return 0; |
1316 | } | ||
1317 | return 1; | ||
1318 | } | 1340 | } |
1341 | return 1; | ||
1342 | } | ||
1319 | 1343 | ||
1320 | /** specify the ciphers to be used by the SSL */ | 1344 | /** specify the ciphers to be used by the SSL */ |
1321 | int SSL_set_cipher_list(SSL *s,const char *str) | 1345 | int |
1322 | { | 1346 | SSL_set_cipher_list(SSL *s, const char *str) |
1347 | { | ||
1323 | STACK_OF(SSL_CIPHER) *sk; | 1348 | STACK_OF(SSL_CIPHER) *sk; |
1324 | 1349 | ||
1325 | sk=ssl_create_cipher_list(s->ctx->method,&s->cipher_list, | 1350 | sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list, |
1326 | &s->cipher_list_by_id,str); | 1351 | &s->cipher_list_by_id, str); |
1327 | /* see comment in SSL_CTX_set_cipher_list */ | 1352 | /* see comment in SSL_CTX_set_cipher_list */ |
1328 | if (sk == NULL) | 1353 | if (sk == NULL) |
1329 | return 0; | 1354 | return 0; |
1330 | else if (sk_SSL_CIPHER_num(sk) == 0) | 1355 | else if (sk_SSL_CIPHER_num(sk) == 0) { |
1331 | { | ||
1332 | SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); | 1356 | SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); |
1333 | return 0; | 1357 | return 0; |
1334 | } | ||
1335 | return 1; | ||
1336 | } | 1358 | } |
1359 | return 1; | ||
1360 | } | ||
1337 | 1361 | ||
1338 | /* works well for SSLv2, not so good for SSLv3 */ | 1362 | /* works well for SSLv2, not so good for SSLv3 */ |
1339 | char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) | 1363 | char |
1340 | { | 1364 | *SSL_get_shared_ciphers(const SSL *s, char *buf, int len) |
1365 | { | ||
1341 | char *end; | 1366 | char *end; |
1342 | STACK_OF(SSL_CIPHER) *sk; | 1367 | STACK_OF(SSL_CIPHER) *sk; |
1343 | SSL_CIPHER *c; | 1368 | SSL_CIPHER *c; |
@@ -1346,146 +1371,138 @@ char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) | |||
1346 | 1371 | ||
1347 | if ((s->session == NULL) || (s->session->ciphers == NULL) || | 1372 | if ((s->session == NULL) || (s->session->ciphers == NULL) || |
1348 | (len < 2)) | 1373 | (len < 2)) |
1349 | return(NULL); | 1374 | return (NULL); |
1350 | 1375 | ||
1351 | sk=s->session->ciphers; | 1376 | sk = s->session->ciphers; |
1352 | buf[0] = '\0'; | 1377 | buf[0] = '\0'; |
1353 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) | 1378 | for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { |
1354 | { | 1379 | c = sk_SSL_CIPHER_value(sk, i); |
1355 | c=sk_SSL_CIPHER_value(sk,i); | ||
1356 | end = buf + curlen; | 1380 | end = buf + curlen; |
1357 | if (strlcat(buf, c->name, len) >= len || | 1381 | if (strlcat(buf, c->name, len) >= len || |
1358 | (curlen = strlcat(buf, ":", len)) >= len) | 1382 | (curlen = strlcat(buf, ":", len)) >= len) { |
1359 | { | ||
1360 | /* remove truncated cipher from list */ | 1383 | /* remove truncated cipher from list */ |
1361 | *end = '\0'; | 1384 | *end = '\0'; |
1362 | break; | 1385 | break; |
1363 | } | ||
1364 | } | 1386 | } |
1387 | } | ||
1365 | /* remove trailing colon */ | 1388 | /* remove trailing colon */ |
1366 | if ((end = strrchr(buf, ':')) != NULL) | 1389 | if ((end = strrchr(buf, ':')) != NULL) |
1367 | *end = '\0'; | 1390 | *end = '\0'; |
1368 | return(buf); | 1391 | return (buf); |
1369 | } | 1392 | } |
1370 | 1393 | ||
1371 | int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p, | 1394 | int |
1372 | int (*put_cb)(const SSL_CIPHER *, unsigned char *)) | 1395 | ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk, unsigned char *p, |
1373 | { | 1396 | int (*put_cb)(const SSL_CIPHER *, unsigned char *)) |
1374 | int i,j=0; | 1397 | { |
1398 | int i, j = 0; | ||
1375 | SSL_CIPHER *c; | 1399 | SSL_CIPHER *c; |
1376 | unsigned char *q; | 1400 | unsigned char *q; |
1377 | #ifndef OPENSSL_NO_KRB5 | 1401 | #ifndef OPENSSL_NO_KRB5 |
1378 | int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx); | 1402 | int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx); |
1379 | #endif /* OPENSSL_NO_KRB5 */ | 1403 | #endif /* OPENSSL_NO_KRB5 */ |
1380 | 1404 | ||
1381 | if (sk == NULL) return(0); | 1405 | if (sk == NULL) |
1382 | q=p; | 1406 | return (0); |
1407 | q = p; | ||
1383 | 1408 | ||
1384 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) | 1409 | for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { |
1385 | { | 1410 | c = sk_SSL_CIPHER_value(sk, i); |
1386 | c=sk_SSL_CIPHER_value(sk,i); | ||
1387 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ | 1411 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ |
1388 | if ((c->algorithm_ssl & SSL_TLSV1_2) && | 1412 | if ((c->algorithm_ssl & SSL_TLSV1_2) && |
1389 | (TLS1_get_client_version(s) < TLS1_2_VERSION)) | 1413 | (TLS1_get_client_version(s) < TLS1_2_VERSION)) |
1390 | continue; | 1414 | continue; |
1391 | #ifndef OPENSSL_NO_KRB5 | 1415 | #ifndef OPENSSL_NO_KRB5 |
1392 | if (((c->algorithm_mkey & SSL_kKRB5) || (c->algorithm_auth & SSL_aKRB5)) && | 1416 | if (((c->algorithm_mkey & SSL_kKRB5) || (c->algorithm_auth & SSL_aKRB5)) && |
1393 | nokrb5) | 1417 | nokrb5) |
1394 | continue; | 1418 | continue; |
1395 | #endif /* OPENSSL_NO_KRB5 */ | 1419 | #endif /* OPENSSL_NO_KRB5 */ |
1396 | #ifndef OPENSSL_NO_PSK | 1420 | #ifndef OPENSSL_NO_PSK |
1397 | /* with PSK there must be client callback set */ | 1421 | /* with PSK there must be client callback set */ |
1398 | if (((c->algorithm_mkey & SSL_kPSK) || (c->algorithm_auth & SSL_aPSK)) && | 1422 | if (((c->algorithm_mkey & SSL_kPSK) || (c->algorithm_auth & SSL_aPSK)) && |
1399 | s->psk_client_callback == NULL) | 1423 | s->psk_client_callback == NULL) |
1400 | continue; | 1424 | continue; |
1401 | #endif /* OPENSSL_NO_PSK */ | 1425 | #endif /* OPENSSL_NO_PSK */ |
1402 | j = put_cb ? put_cb(c,p) : ssl_put_cipher_by_char(s,c,p); | 1426 | j = put_cb ? put_cb(c, p) : ssl_put_cipher_by_char(s, c, p); |
1403 | p+=j; | 1427 | p += j; |
1404 | } | 1428 | } |
1405 | /* If p == q, no ciphers and caller indicates an error. Otherwise | 1429 | /* If p == q, no ciphers and caller indicates an error. Otherwise |
1406 | * add SCSV if not renegotiating. | 1430 | * add SCSV if not renegotiating. |
1407 | */ | 1431 | */ |
1408 | if (p != q && !s->renegotiate) | 1432 | if (p != q && !s->renegotiate) { |
1409 | { | 1433 | static SSL_CIPHER scsv = { |
1410 | static SSL_CIPHER scsv = | ||
1411 | { | ||
1412 | 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 1434 | 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
1413 | }; | 1435 | }; |
1414 | j = put_cb ? put_cb(&scsv,p) : ssl_put_cipher_by_char(s,&scsv,p); | 1436 | j = put_cb ? put_cb(&scsv, p) : ssl_put_cipher_by_char(s, &scsv, p); |
1415 | p+=j; | 1437 | p += j; |
1416 | #ifdef OPENSSL_RI_DEBUG | 1438 | #ifdef OPENSSL_RI_DEBUG |
1417 | fprintf(stderr, "SCSV sent by client\n"); | 1439 | fprintf(stderr, "SCSV sent by client\n"); |
1418 | #endif | 1440 | #endif |
1419 | } | ||
1420 | |||
1421 | return(p-q); | ||
1422 | } | 1441 | } |
1423 | 1442 | ||
1424 | STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num, | 1443 | return (p - q); |
1425 | STACK_OF(SSL_CIPHER) **skp) | 1444 | } |
1426 | { | 1445 | |
1446 | STACK_OF(SSL_CIPHER) | ||
1447 | *ssl_bytes_to_cipher_list(SSL *s, unsigned char *p, int num, | ||
1448 | STACK_OF(SSL_CIPHER) **skp) | ||
1449 | { | ||
1427 | const SSL_CIPHER *c; | 1450 | const SSL_CIPHER *c; |
1428 | STACK_OF(SSL_CIPHER) *sk; | 1451 | STACK_OF(SSL_CIPHER) *sk; |
1429 | int i,n; | 1452 | int i, n; |
1430 | if (s->s3) | 1453 | if (s->s3) |
1431 | s->s3->send_connection_binding = 0; | 1454 | s->s3->send_connection_binding = 0; |
1432 | 1455 | ||
1433 | n=ssl_put_cipher_by_char(s,NULL,NULL); | 1456 | n = ssl_put_cipher_by_char(s, NULL, NULL); |
1434 | if ((num%n) != 0) | 1457 | if ((num % n) != 0) { |
1435 | { | 1458 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); |
1436 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); | 1459 | return (NULL); |
1437 | return(NULL); | 1460 | } |
1438 | } | ||
1439 | if ((skp == NULL) || (*skp == NULL)) | 1461 | if ((skp == NULL) || (*skp == NULL)) |
1440 | sk=sk_SSL_CIPHER_new_null(); /* change perhaps later */ | 1462 | sk=sk_SSL_CIPHER_new_null(); /* change perhaps later */ |
1441 | else | 1463 | else { |
1442 | { | ||
1443 | sk= *skp; | 1464 | sk= *skp; |
1444 | sk_SSL_CIPHER_zero(sk); | 1465 | sk_SSL_CIPHER_zero(sk); |
1445 | } | 1466 | } |
1446 | 1467 | ||
1447 | for (i=0; i<num; i+=n) | 1468 | for (i = 0; i < num; i += n) { |
1448 | { | ||
1449 | /* Check for SCSV */ | 1469 | /* Check for SCSV */ |
1450 | if (s->s3 && (n != 3 || !p[0]) && | 1470 | if (s->s3 && (n != 3 || !p[0]) && |
1451 | (p[n-2] == ((SSL3_CK_SCSV >> 8) & 0xff)) && | 1471 | (p[n - 2] == ((SSL3_CK_SCSV >> 8) & 0xff)) && |
1452 | (p[n-1] == (SSL3_CK_SCSV & 0xff))) | 1472 | (p[n - 1] == (SSL3_CK_SCSV & 0xff))) { |
1453 | { | ||
1454 | /* SCSV fatal if renegotiating */ | 1473 | /* SCSV fatal if renegotiating */ |
1455 | if (s->renegotiate) | 1474 | if (s->renegotiate) { |
1456 | { | 1475 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING); |
1457 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING); | 1476 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); |
1458 | ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE); | 1477 | |
1459 | goto err; | 1478 | goto err; |
1460 | } | 1479 | } |
1461 | s->s3->send_connection_binding = 1; | 1480 | s->s3->send_connection_binding = 1; |
1462 | p += n; | 1481 | p += n; |
1463 | #ifdef OPENSSL_RI_DEBUG | 1482 | #ifdef OPENSSL_RI_DEBUG |
1464 | fprintf(stderr, "SCSV received by server\n"); | 1483 | fprintf(stderr, "SCSV received by server\n"); |
1465 | #endif | 1484 | #endif |
1466 | continue; | 1485 | continue; |
1467 | } | 1486 | } |
1468 | 1487 | ||
1469 | c=ssl_get_cipher_by_char(s,p); | 1488 | c = ssl_get_cipher_by_char(s, p); |
1470 | p+=n; | 1489 | p += n; |
1471 | if (c != NULL) | 1490 | if (c != NULL) { |
1472 | { | 1491 | if (!sk_SSL_CIPHER_push(sk, c)) { |
1473 | if (!sk_SSL_CIPHER_push(sk,c)) | 1492 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE); |
1474 | { | ||
1475 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,ERR_R_MALLOC_FAILURE); | ||
1476 | goto err; | 1493 | goto err; |
1477 | } | ||
1478 | } | 1494 | } |
1479 | } | 1495 | } |
1496 | } | ||
1480 | 1497 | ||
1481 | if (skp != NULL) | 1498 | if (skp != NULL) |
1482 | *skp=sk; | 1499 | *skp = sk; |
1483 | return(sk); | 1500 | return (sk); |
1484 | err: | 1501 | err: |
1485 | if ((skp == NULL) || (*skp == NULL)) | 1502 | if ((skp == NULL) || (*skp == NULL)) |
1486 | sk_SSL_CIPHER_free(sk); | 1503 | sk_SSL_CIPHER_free(sk); |
1487 | return(NULL); | 1504 | return (NULL); |
1488 | } | 1505 | } |
1489 | 1506 | ||
1490 | 1507 | ||
1491 | #ifndef OPENSSL_NO_TLSEXT | 1508 | #ifndef OPENSSL_NO_TLSEXT |
@@ -1493,22 +1510,24 @@ err: | |||
1493 | * So far, only host_name types are defined (RFC 3546). | 1510 | * So far, only host_name types are defined (RFC 3546). |
1494 | */ | 1511 | */ |
1495 | 1512 | ||
1496 | const char *SSL_get_servername(const SSL *s, const int type) | 1513 | const char |
1497 | { | 1514 | *SSL_get_servername(const SSL *s, const int type) |
1515 | { | ||
1498 | if (type != TLSEXT_NAMETYPE_host_name) | 1516 | if (type != TLSEXT_NAMETYPE_host_name) |
1499 | return NULL; | 1517 | return NULL; |
1500 | 1518 | ||
1501 | return s->session && !s->tlsext_hostname ? | 1519 | return s->session && !s->tlsext_hostname ? |
1502 | s->session->tlsext_hostname : | 1520 | s->session->tlsext_hostname : |
1503 | s->tlsext_hostname; | 1521 | s->tlsext_hostname; |
1504 | } | 1522 | } |
1505 | 1523 | ||
1506 | int SSL_get_servername_type(const SSL *s) | 1524 | int |
1507 | { | 1525 | SSL_get_servername_type(const SSL *s) |
1526 | { | ||
1508 | if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s->tlsext_hostname)) | 1527 | if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s->tlsext_hostname)) |
1509 | return TLSEXT_NAMETYPE_host_name; | 1528 | return TLSEXT_NAMETYPE_host_name; |
1510 | return -1; | 1529 | return -1; |
1511 | } | 1530 | } |
1512 | 1531 | ||
1513 | # ifndef OPENSSL_NO_NEXTPROTONEG | 1532 | # ifndef OPENSSL_NO_NEXTPROTONEG |
1514 | /* SSL_select_next_proto implements the standard protocol selection. It is | 1533 | /* SSL_select_next_proto implements the standard protocol selection. It is |
@@ -1541,31 +1560,29 @@ int SSL_get_servername_type(const SSL *s) | |||
1541 | * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or | 1560 | * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or |
1542 | * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached. | 1561 | * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached. |
1543 | */ | 1562 | */ |
1544 | int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len) | 1563 | int |
1545 | { | 1564 | SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len) |
1565 | { | ||
1546 | unsigned int i, j; | 1566 | unsigned int i, j; |
1547 | const unsigned char *result; | 1567 | const unsigned char *result; |
1548 | int status = OPENSSL_NPN_UNSUPPORTED; | 1568 | int status = OPENSSL_NPN_UNSUPPORTED; |
1549 | 1569 | ||
1550 | /* For each protocol in server preference order, see if we support it. */ | 1570 | /* For each protocol in server preference order, see if we support it. */ |
1551 | for (i = 0; i < server_len; ) | 1571 | for (i = 0; i < server_len; ) { |
1552 | { | 1572 | for (j = 0; j < client_len; ) { |
1553 | for (j = 0; j < client_len; ) | ||
1554 | { | ||
1555 | if (server[i] == client[j] && | 1573 | if (server[i] == client[j] && |
1556 | memcmp(&server[i+1], &client[j+1], server[i]) == 0) | 1574 | memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) { |
1557 | { | ||
1558 | /* We found a match */ | 1575 | /* We found a match */ |
1559 | result = &server[i]; | 1576 | result = &server[i]; |
1560 | status = OPENSSL_NPN_NEGOTIATED; | 1577 | status = OPENSSL_NPN_NEGOTIATED; |
1561 | goto found; | 1578 | goto found; |
1562 | } | 1579 | } |
1563 | j += client[j]; | 1580 | j += client[j]; |
1564 | j++; | 1581 | j++; |
1565 | } | 1582 | } |
1566 | i += server[i]; | 1583 | i += server[i]; |
1567 | i++; | 1584 | i++; |
1568 | } | 1585 | } |
1569 | 1586 | ||
1570 | /* There's no overlap between our protocols and the server's list. */ | 1587 | /* There's no overlap between our protocols and the server's list. */ |
1571 | result = client; | 1588 | result = client; |
@@ -1575,7 +1592,7 @@ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsi | |||
1575 | *out = (unsigned char *) result + 1; | 1592 | *out = (unsigned char *) result + 1; |
1576 | *outlen = result[0]; | 1593 | *outlen = result[0]; |
1577 | return status; | 1594 | return status; |
1578 | } | 1595 | } |
1579 | 1596 | ||
1580 | /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's | 1597 | /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's |
1581 | * requested protocol for this connection and returns 0. If the client didn't | 1598 | * requested protocol for this connection and returns 0. If the client didn't |
@@ -1585,8 +1602,9 @@ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsi | |||
1585 | * from this function need not be a member of the list of supported protocols | 1602 | * from this function need not be a member of the list of supported protocols |
1586 | * provided by the callback. | 1603 | * provided by the callback. |
1587 | */ | 1604 | */ |
1588 | void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len) | 1605 | void |
1589 | { | 1606 | SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len) |
1607 | { | ||
1590 | *data = s->next_proto_negotiated; | 1608 | *data = s->next_proto_negotiated; |
1591 | if (!*data) { | 1609 | if (!*data) { |
1592 | *len = 0; | 1610 | *len = 0; |
@@ -1604,11 +1622,12 @@ void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, un | |||
1604 | * | 1622 | * |
1605 | * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no | 1623 | * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no |
1606 | * such extension will be included in the ServerHello. */ | 1624 | * such extension will be included in the ServerHello. */ |
1607 | void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg) | 1625 | void |
1608 | { | 1626 | SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg) |
1627 | { | ||
1609 | ctx->next_protos_advertised_cb = cb; | 1628 | ctx->next_protos_advertised_cb = cb; |
1610 | ctx->next_protos_advertised_cb_arg = arg; | 1629 | ctx->next_protos_advertised_cb_arg = arg; |
1611 | } | 1630 | } |
1612 | 1631 | ||
1613 | /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a | 1632 | /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a |
1614 | * client needs to select a protocol from the server's provided list. |out| | 1633 | * client needs to select a protocol from the server's provided list. |out| |
@@ -1620,183 +1639,186 @@ void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, co | |||
1620 | * The client must select a protocol. It is fatal to the connection if this | 1639 | * The client must select a protocol. It is fatal to the connection if this |
1621 | * callback returns a value other than SSL_TLSEXT_ERR_OK. | 1640 | * callback returns a value other than SSL_TLSEXT_ERR_OK. |
1622 | */ | 1641 | */ |
1623 | void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg) | 1642 | void |
1624 | { | 1643 | SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg) |
1644 | { | ||
1625 | ctx->next_proto_select_cb = cb; | 1645 | ctx->next_proto_select_cb = cb; |
1626 | ctx->next_proto_select_cb_arg = arg; | 1646 | ctx->next_proto_select_cb_arg = arg; |
1627 | } | 1647 | } |
1628 | # endif | 1648 | # endif |
1629 | #endif | 1649 | #endif |
1630 | 1650 | ||
1631 | int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, | 1651 | int |
1632 | const char *label, size_t llen, const unsigned char *p, size_t plen, | 1652 | SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, |
1633 | int use_context) | 1653 | const char *label, size_t llen, const unsigned char *p, size_t plen, |
1634 | { | 1654 | int use_context) |
1655 | { | ||
1635 | if (s->version < TLS1_VERSION) | 1656 | if (s->version < TLS1_VERSION) |
1636 | return -1; | 1657 | return -1; |
1637 | 1658 | ||
1638 | return s->method->ssl3_enc->export_keying_material(s, out, olen, label, | 1659 | return s->method->ssl3_enc->export_keying_material(s, out, olen, label, |
1639 | llen, p, plen, | 1660 | llen, p, plen, |
1640 | use_context); | 1661 | use_context); |
1641 | } | 1662 | } |
1642 | 1663 | ||
1643 | static unsigned long ssl_session_hash(const SSL_SESSION *a) | 1664 | static unsigned long |
1644 | { | 1665 | ssl_session_hash(const SSL_SESSION *a) |
1666 | { | ||
1645 | unsigned long l; | 1667 | unsigned long l; |
1646 | 1668 | ||
1647 | l=(unsigned long) | 1669 | l = (unsigned long) |
1648 | ((unsigned int) a->session_id[0] )| | 1670 | ((unsigned int) a->session_id[0] )| |
1649 | ((unsigned int) a->session_id[1]<< 8L)| | 1671 | ((unsigned int) a->session_id[1]<< 8L)| |
1650 | ((unsigned long)a->session_id[2]<<16L)| | 1672 | ((unsigned long)a->session_id[2]<<16L)| |
1651 | ((unsigned long)a->session_id[3]<<24L); | 1673 | ((unsigned long)a->session_id[3]<<24L); |
1652 | return(l); | 1674 | return (l); |
1653 | } | 1675 | } |
1654 | 1676 | ||
1655 | /* NB: If this function (or indeed the hash function which uses a sort of | 1677 | /* NB: If this function (or indeed the hash function which uses a sort of |
1656 | * coarser function than this one) is changed, ensure | 1678 | * coarser function than this one) is changed, ensure |
1657 | * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being | 1679 | * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being |
1658 | * able to construct an SSL_SESSION that will collide with any existing session | 1680 | * able to construct an SSL_SESSION that will collide with any existing session |
1659 | * with a matching session ID. */ | 1681 | * with a matching session ID. */ |
1660 | static int ssl_session_cmp(const SSL_SESSION *a,const SSL_SESSION *b) | 1682 | static int |
1661 | { | 1683 | ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b) |
1684 | { | ||
1662 | if (a->ssl_version != b->ssl_version) | 1685 | if (a->ssl_version != b->ssl_version) |
1663 | return(1); | 1686 | return (1); |
1664 | if (a->session_id_length != b->session_id_length) | 1687 | if (a->session_id_length != b->session_id_length) |
1665 | return(1); | 1688 | return (1); |
1666 | return(memcmp(a->session_id,b->session_id,a->session_id_length)); | 1689 | return (memcmp(a->session_id, b->session_id, a->session_id_length)); |
1667 | } | 1690 | } |
1668 | 1691 | ||
1669 | /* These wrapper functions should remain rather than redeclaring | 1692 | /* These wrapper functions should remain rather than redeclaring |
1670 | * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each | 1693 | * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each |
1671 | * variable. The reason is that the functions aren't static, they're exposed via | 1694 | * variable. The reason is that the functions aren't static, they're exposed via |
1672 | * ssl.h. */ | 1695 | * ssl.h. */ |
1673 | static IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION) | 1696 | static |
1674 | static IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION) | 1697 | IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION) |
1698 | static | ||
1699 | IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION) | ||
1675 | 1700 | ||
1676 | SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | 1701 | SSL_CTX |
1677 | { | 1702 | *SSL_CTX_new(const SSL_METHOD *meth) |
1678 | SSL_CTX *ret=NULL; | 1703 | { |
1704 | SSL_CTX *ret = NULL; | ||
1679 | 1705 | ||
1680 | if (meth == NULL) | 1706 | if (meth == NULL) { |
1681 | { | 1707 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED); |
1682 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED); | 1708 | return (NULL); |
1683 | return(NULL); | 1709 | } |
1684 | } | ||
1685 | 1710 | ||
1686 | #ifdef OPENSSL_FIPS | 1711 | #ifdef OPENSSL_FIPS |
1687 | if (FIPS_mode() && (meth->version < TLS1_VERSION)) | 1712 | if (FIPS_mode() && (meth->version < TLS1_VERSION)) { |
1688 | { | ||
1689 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE); | 1713 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE); |
1690 | return NULL; | 1714 | return NULL; |
1691 | } | 1715 | } |
1692 | #endif | 1716 | #endif |
1693 | 1717 | ||
1694 | if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) | 1718 | if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) { |
1695 | { | 1719 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); |
1696 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); | ||
1697 | goto err; | 1720 | goto err; |
1698 | } | 1721 | } |
1699 | ret=(SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX)); | 1722 | ret = (SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX)); |
1700 | if (ret == NULL) | 1723 | if (ret == NULL) |
1701 | goto err; | 1724 | goto err; |
1702 | 1725 | ||
1703 | memset(ret,0,sizeof(SSL_CTX)); | 1726 | memset(ret, 0, sizeof(SSL_CTX)); |
1704 | 1727 | ||
1705 | ret->method=meth; | 1728 | ret->method = meth; |
1706 | 1729 | ||
1707 | ret->cert_store=NULL; | 1730 | ret->cert_store = NULL; |
1708 | ret->session_cache_mode=SSL_SESS_CACHE_SERVER; | 1731 | ret->session_cache_mode = SSL_SESS_CACHE_SERVER; |
1709 | ret->session_cache_size=SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; | 1732 | ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; |
1710 | ret->session_cache_head=NULL; | 1733 | ret->session_cache_head = NULL; |
1711 | ret->session_cache_tail=NULL; | 1734 | ret->session_cache_tail = NULL; |
1712 | 1735 | ||
1713 | /* We take the system default */ | 1736 | /* We take the system default */ |
1714 | ret->session_timeout=meth->get_timeout(); | 1737 | ret->session_timeout = meth->get_timeout(); |
1715 | 1738 | ||
1716 | ret->new_session_cb=0; | 1739 | ret->new_session_cb = 0; |
1717 | ret->remove_session_cb=0; | 1740 | ret->remove_session_cb = 0; |
1718 | ret->get_session_cb=0; | 1741 | ret->get_session_cb = 0; |
1719 | ret->generate_session_id=0; | 1742 | ret->generate_session_id = 0; |
1720 | 1743 | ||
1721 | memset((char *)&ret->stats,0,sizeof(ret->stats)); | 1744 | memset((char *)&ret->stats, 0, sizeof(ret->stats)); |
1722 | 1745 | ||
1723 | ret->references=1; | 1746 | ret->references = 1; |
1724 | ret->quiet_shutdown=0; | 1747 | ret->quiet_shutdown = 0; |
1725 | 1748 | ||
1726 | /* ret->cipher=NULL;*/ | 1749 | /* ret->cipher=NULL;*/ |
1727 | /* ret->s2->challenge=NULL; | 1750 | /* ret->s2->challenge=NULL; |
1728 | ret->master_key=NULL; | 1751 | ret->master_key=NULL; |
1729 | ret->key_arg=NULL; | 1752 | ret->key_arg=NULL; |
1730 | ret->s2->conn_id=NULL; */ | 1753 | ret->s2->conn_id=NULL; |
1754 | */ | ||
1731 | 1755 | ||
1732 | ret->info_callback=NULL; | 1756 | ret->info_callback = NULL; |
1733 | 1757 | ||
1734 | ret->app_verify_callback=0; | 1758 | ret->app_verify_callback = 0; |
1735 | ret->app_verify_arg=NULL; | 1759 | ret->app_verify_arg = NULL; |
1736 | 1760 | ||
1737 | ret->max_cert_list=SSL_MAX_CERT_LIST_DEFAULT; | 1761 | ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; |
1738 | ret->read_ahead=0; | 1762 | ret->read_ahead = 0; |
1739 | ret->msg_callback=0; | 1763 | ret->msg_callback = 0; |
1740 | ret->msg_callback_arg=NULL; | 1764 | ret->msg_callback_arg = NULL; |
1741 | ret->verify_mode=SSL_VERIFY_NONE; | 1765 | ret->verify_mode = SSL_VERIFY_NONE; |
1742 | #if 0 | 1766 | #if 0 |
1743 | ret->verify_depth=-1; /* Don't impose a limit (but x509_lu.c does) */ | 1767 | ret->verify_depth=-1; /* Don't impose a limit (but x509_lu.c does) */ |
1744 | #endif | 1768 | #endif |
1745 | ret->sid_ctx_length=0; | 1769 | ret->sid_ctx_length = 0; |
1746 | ret->default_verify_callback=NULL; | 1770 | ret->default_verify_callback = NULL; |
1747 | if ((ret->cert=ssl_cert_new()) == NULL) | 1771 | if ((ret->cert = ssl_cert_new()) == NULL) |
1748 | goto err; | 1772 | goto err; |
1749 | 1773 | ||
1750 | ret->default_passwd_callback=0; | 1774 | ret->default_passwd_callback = 0; |
1751 | ret->default_passwd_callback_userdata=NULL; | 1775 | ret->default_passwd_callback_userdata = NULL; |
1752 | ret->client_cert_cb=0; | 1776 | ret->client_cert_cb = 0; |
1753 | ret->app_gen_cookie_cb=0; | 1777 | ret->app_gen_cookie_cb = 0; |
1754 | ret->app_verify_cookie_cb=0; | 1778 | ret->app_verify_cookie_cb = 0; |
1755 | 1779 | ||
1756 | ret->sessions=lh_SSL_SESSION_new(); | 1780 | ret->sessions = lh_SSL_SESSION_new(); |
1757 | if (ret->sessions == NULL) goto err; | 1781 | if (ret->sessions == NULL) |
1758 | ret->cert_store=X509_STORE_new(); | 1782 | goto err; |
1759 | if (ret->cert_store == NULL) goto err; | 1783 | ret->cert_store = X509_STORE_new(); |
1784 | if (ret->cert_store == NULL) | ||
1785 | goto err; | ||
1760 | 1786 | ||
1761 | ssl_create_cipher_list(ret->method, | 1787 | ssl_create_cipher_list(ret->method, |
1762 | &ret->cipher_list,&ret->cipher_list_by_id, | 1788 | &ret->cipher_list, &ret->cipher_list_by_id, |
1763 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); | 1789 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); |
1764 | if (ret->cipher_list == NULL | 1790 | if (ret->cipher_list == NULL |
1765 | || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) | 1791 | || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) { |
1766 | { | 1792 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS); |
1767 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_LIBRARY_HAS_NO_CIPHERS); | ||
1768 | goto err2; | 1793 | goto err2; |
1769 | } | 1794 | } |
1770 | 1795 | ||
1771 | ret->param = X509_VERIFY_PARAM_new(); | 1796 | ret->param = X509_VERIFY_PARAM_new(); |
1772 | if (!ret->param) | 1797 | if (!ret->param) |
1773 | goto err; | 1798 | goto err; |
1774 | 1799 | ||
1775 | if ((ret->rsa_md5=EVP_get_digestbyname("ssl2-md5")) == NULL) | 1800 | if ((ret->rsa_md5 = EVP_get_digestbyname("ssl2-md5")) == NULL) { |
1776 | { | 1801 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES); |
1777 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES); | ||
1778 | goto err2; | 1802 | goto err2; |
1779 | } | 1803 | } |
1780 | if ((ret->md5=EVP_get_digestbyname("ssl3-md5")) == NULL) | 1804 | if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) { |
1781 | { | 1805 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES); |
1782 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES); | ||
1783 | goto err2; | 1806 | goto err2; |
1784 | } | 1807 | } |
1785 | if ((ret->sha1=EVP_get_digestbyname("ssl3-sha1")) == NULL) | 1808 | if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) { |
1786 | { | 1809 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES); |
1787 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES); | ||
1788 | goto err2; | 1810 | goto err2; |
1789 | } | 1811 | } |
1790 | 1812 | ||
1791 | if ((ret->client_CA=sk_X509_NAME_new_null()) == NULL) | 1813 | if ((ret->client_CA = sk_X509_NAME_new_null()) == NULL) |
1792 | goto err; | 1814 | goto err; |
1793 | 1815 | ||
1794 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); | 1816 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); |
1795 | 1817 | ||
1796 | ret->extra_certs=NULL; | 1818 | ret->extra_certs = NULL; |
1797 | /* No compression for DTLS */ | 1819 | /* No compression for DTLS */ |
1798 | if (meth->version != DTLS1_VERSION) | 1820 | if (meth->version != DTLS1_VERSION) |
1799 | ret->comp_methods=SSL_COMP_get_compression_methods(); | 1821 | ret->comp_methods = SSL_COMP_get_compression_methods(); |
1800 | 1822 | ||
1801 | ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; | 1823 | ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; |
1802 | 1824 | ||
@@ -1806,8 +1828,8 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1806 | /* Setup RFC4507 ticket keys */ | 1828 | /* Setup RFC4507 ticket keys */ |
1807 | if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0) | 1829 | if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0) |
1808 | || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0) | 1830 | || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0) |
1809 | || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0)) | 1831 | || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0)) |
1810 | ret->options |= SSL_OP_NO_TICKET; | 1832 | ret->options |= SSL_OP_NO_TICKET; |
1811 | 1833 | ||
1812 | ret->tlsext_status_cb = 0; | 1834 | ret->tlsext_status_cb = 0; |
1813 | ret->tlsext_status_arg = NULL; | 1835 | ret->tlsext_status_arg = NULL; |
@@ -1818,9 +1840,9 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1818 | # endif | 1840 | # endif |
1819 | #endif | 1841 | #endif |
1820 | #ifndef OPENSSL_NO_PSK | 1842 | #ifndef OPENSSL_NO_PSK |
1821 | ret->psk_identity_hint=NULL; | 1843 | ret->psk_identity_hint = NULL; |
1822 | ret->psk_client_callback=NULL; | 1844 | ret->psk_client_callback = NULL; |
1823 | ret->psk_server_callback=NULL; | 1845 | ret->psk_server_callback = NULL; |
1824 | #endif | 1846 | #endif |
1825 | #ifndef OPENSSL_NO_SRP | 1847 | #ifndef OPENSSL_NO_SRP |
1826 | SSL_CTX_SRP_CTX_init(ret); | 1848 | SSL_CTX_SRP_CTX_init(ret); |
@@ -1834,11 +1856,10 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1834 | ret->rbuf_freelist->len = 0; | 1856 | ret->rbuf_freelist->len = 0; |
1835 | ret->rbuf_freelist->head = NULL; | 1857 | ret->rbuf_freelist->head = NULL; |
1836 | ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST)); | 1858 | ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST)); |
1837 | if (!ret->wbuf_freelist) | 1859 | if (!ret->wbuf_freelist) { |
1838 | { | ||
1839 | OPENSSL_free(ret->rbuf_freelist); | 1860 | OPENSSL_free(ret->rbuf_freelist); |
1840 | goto err; | 1861 | goto err; |
1841 | } | 1862 | } |
1842 | ret->wbuf_freelist->chunklen = 0; | 1863 | ret->wbuf_freelist->chunklen = 0; |
1843 | ret->wbuf_freelist->len = 0; | 1864 | ret->wbuf_freelist->len = 0; |
1844 | ret->wbuf_freelist->head = NULL; | 1865 | ret->wbuf_freelist->head = NULL; |
@@ -1850,16 +1871,15 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1850 | #define eng_str(x) eng_strx(x) | 1871 | #define eng_str(x) eng_strx(x) |
1851 | /* Use specific client engine automatically... ignore errors */ | 1872 | /* Use specific client engine automatically... ignore errors */ |
1852 | { | 1873 | { |
1853 | ENGINE *eng; | 1874 | ENGINE *eng; |
1854 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); | ||
1855 | if (!eng) | ||
1856 | { | ||
1857 | ERR_clear_error(); | ||
1858 | ENGINE_load_builtin_engines(); | ||
1859 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); | 1875 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); |
1876 | if (!eng) { | ||
1877 | ERR_clear_error(); | ||
1878 | ENGINE_load_builtin_engines(); | ||
1879 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); | ||
1860 | } | 1880 | } |
1861 | if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng)) | 1881 | if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng)) |
1862 | ERR_clear_error(); | 1882 | ERR_clear_error(); |
1863 | } | 1883 | } |
1864 | #endif | 1884 | #endif |
1865 | #endif | 1885 | #endif |
@@ -1868,50 +1888,54 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1868 | */ | 1888 | */ |
1869 | ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; | 1889 | ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; |
1870 | 1890 | ||
1871 | return(ret); | 1891 | return (ret); |
1872 | err: | 1892 | err: |
1873 | SSLerr(SSL_F_SSL_CTX_NEW,ERR_R_MALLOC_FAILURE); | 1893 | SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE); |
1874 | err2: | 1894 | err2: |
1875 | if (ret != NULL) SSL_CTX_free(ret); | 1895 | if (ret != NULL) |
1876 | return(NULL); | 1896 | SSL_CTX_free(ret); |
1877 | } | 1897 | return (NULL); |
1898 | } | ||
1878 | 1899 | ||
1879 | #if 0 | 1900 | #if 0 |
1880 | static void SSL_COMP_free(SSL_COMP *comp) | 1901 | static void |
1881 | { OPENSSL_free(comp); } | 1902 | SSL_COMP_free(SSL_COMP *comp) |
1903 | { OPENSSL_free(comp); | ||
1904 | } | ||
1882 | #endif | 1905 | #endif |
1883 | 1906 | ||
1884 | #ifndef OPENSSL_NO_BUF_FREELISTS | 1907 | #ifndef OPENSSL_NO_BUF_FREELISTS |
1885 | static void | 1908 | static void |
1886 | ssl_buf_freelist_free(SSL3_BUF_FREELIST *list) | 1909 | ssl_buf_freelist_free(SSL3_BUF_FREELIST *list) |
1887 | { | 1910 | { |
1888 | SSL3_BUF_FREELIST_ENTRY *ent, *next; | 1911 | SSL3_BUF_FREELIST_ENTRY *ent, *next; |
1889 | for (ent = list->head; ent; ent = next) | 1912 | for (ent = list->head; ent; ent = next) { |
1890 | { | ||
1891 | next = ent->next; | 1913 | next = ent->next; |
1892 | OPENSSL_free(ent); | 1914 | OPENSSL_free(ent); |
1893 | } | ||
1894 | OPENSSL_free(list); | ||
1895 | } | 1915 | } |
1916 | OPENSSL_free(list); | ||
1917 | } | ||
1896 | #endif | 1918 | #endif |
1897 | 1919 | ||
1898 | void SSL_CTX_free(SSL_CTX *a) | 1920 | void |
1899 | { | 1921 | SSL_CTX_free(SSL_CTX *a) |
1922 | { | ||
1900 | int i; | 1923 | int i; |
1901 | 1924 | ||
1902 | if (a == NULL) return; | 1925 | if (a == NULL) |
1926 | return; | ||
1903 | 1927 | ||
1904 | i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_SSL_CTX); | 1928 | i = CRYPTO_add(&a->references, -1, CRYPTO_LOCK_SSL_CTX); |
1905 | #ifdef REF_PRINT | 1929 | #ifdef REF_PRINT |
1906 | REF_PRINT("SSL_CTX",a); | 1930 | REF_PRINT("SSL_CTX", a); |
1907 | #endif | 1931 | #endif |
1908 | if (i > 0) return; | 1932 | if (i > 0) |
1933 | return; | ||
1909 | #ifdef REF_CHECK | 1934 | #ifdef REF_CHECK |
1910 | if (i < 0) | 1935 | if (i < 0) { |
1911 | { | 1936 | fprintf(stderr, "SSL_CTX_free, bad reference count\n"); |
1912 | fprintf(stderr,"SSL_CTX_free, bad reference count\n"); | ||
1913 | abort(); /* ok */ | 1937 | abort(); /* ok */ |
1914 | } | 1938 | } |
1915 | #endif | 1939 | #endif |
1916 | 1940 | ||
1917 | if (a->param) | 1941 | if (a->param) |
@@ -1927,7 +1951,7 @@ void SSL_CTX_free(SSL_CTX *a) | |||
1927 | * (See ticket [openssl.org #212].) | 1951 | * (See ticket [openssl.org #212].) |
1928 | */ | 1952 | */ |
1929 | if (a->sessions != NULL) | 1953 | if (a->sessions != NULL) |
1930 | SSL_CTX_flush_sessions(a,0); | 1954 | SSL_CTX_flush_sessions(a, 0); |
1931 | 1955 | ||
1932 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); | 1956 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); |
1933 | 1957 | ||
@@ -1943,19 +1967,19 @@ void SSL_CTX_free(SSL_CTX *a) | |||
1943 | if (a->cert != NULL) | 1967 | if (a->cert != NULL) |
1944 | ssl_cert_free(a->cert); | 1968 | ssl_cert_free(a->cert); |
1945 | if (a->client_CA != NULL) | 1969 | if (a->client_CA != NULL) |
1946 | sk_X509_NAME_pop_free(a->client_CA,X509_NAME_free); | 1970 | sk_X509_NAME_pop_free(a->client_CA, X509_NAME_free); |
1947 | if (a->extra_certs != NULL) | 1971 | if (a->extra_certs != NULL) |
1948 | sk_X509_pop_free(a->extra_certs,X509_free); | 1972 | sk_X509_pop_free(a->extra_certs, X509_free); |
1949 | #if 0 /* This should never be done, since it removes a global database */ | 1973 | #if 0 /* This should never be done, since it removes a global database */ |
1950 | if (a->comp_methods != NULL) | 1974 | if (a->comp_methods != NULL) |
1951 | sk_SSL_COMP_pop_free(a->comp_methods,SSL_COMP_free); | 1975 | sk_SSL_COMP_pop_free(a->comp_methods, SSL_COMP_free); |
1952 | #else | 1976 | #else |
1953 | a->comp_methods = NULL; | 1977 | a->comp_methods = NULL; |
1954 | #endif | 1978 | #endif |
1955 | 1979 | ||
1956 | #ifndef OPENSSL_NO_SRTP | 1980 | #ifndef OPENSSL_NO_SRTP |
1957 | if (a->srtp_profiles) | 1981 | if (a->srtp_profiles) |
1958 | sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); | 1982 | sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); |
1959 | #endif | 1983 | #endif |
1960 | 1984 | ||
1961 | #ifndef OPENSSL_NO_PSK | 1985 | #ifndef OPENSSL_NO_PSK |
@@ -1978,42 +2002,48 @@ void SSL_CTX_free(SSL_CTX *a) | |||
1978 | #endif | 2002 | #endif |
1979 | 2003 | ||
1980 | OPENSSL_free(a); | 2004 | OPENSSL_free(a); |
1981 | } | 2005 | } |
1982 | 2006 | ||
1983 | void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) | 2007 | void |
1984 | { | 2008 | SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) |
1985 | ctx->default_passwd_callback=cb; | 2009 | { |
1986 | } | 2010 | ctx->default_passwd_callback = cb; |
2011 | } | ||
1987 | 2012 | ||
1988 | void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u) | 2013 | void |
1989 | { | 2014 | SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) |
1990 | ctx->default_passwd_callback_userdata=u; | 2015 | { |
1991 | } | 2016 | ctx->default_passwd_callback_userdata = u; |
2017 | } | ||
1992 | 2018 | ||
1993 | void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg) | 2019 | void |
1994 | { | 2020 | SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *, void *), void *arg) |
1995 | ctx->app_verify_callback=cb; | 2021 | { |
1996 | ctx->app_verify_arg=arg; | 2022 | ctx->app_verify_callback = cb; |
1997 | } | 2023 | ctx->app_verify_arg = arg; |
2024 | } | ||
1998 | 2025 | ||
1999 | void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*cb)(int, X509_STORE_CTX *)) | 2026 | void |
2000 | { | 2027 | SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb)(int, X509_STORE_CTX *)) |
2001 | ctx->verify_mode=mode; | 2028 | { |
2002 | ctx->default_verify_callback=cb; | 2029 | ctx->verify_mode = mode; |
2003 | } | 2030 | ctx->default_verify_callback = cb; |
2031 | } | ||
2004 | 2032 | ||
2005 | void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth) | 2033 | void |
2006 | { | 2034 | SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth) |
2035 | { | ||
2007 | X509_VERIFY_PARAM_set_depth(ctx->param, depth); | 2036 | X509_VERIFY_PARAM_set_depth(ctx->param, depth); |
2008 | } | 2037 | } |
2009 | 2038 | ||
2010 | void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | 2039 | void |
2011 | { | 2040 | ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) |
2041 | { | ||
2012 | CERT_PKEY *cpk; | 2042 | CERT_PKEY *cpk; |
2013 | int rsa_enc,rsa_tmp,rsa_sign,dh_tmp,dh_rsa,dh_dsa,dsa_sign; | 2043 | int rsa_enc, rsa_tmp, rsa_sign, dh_tmp, dh_rsa, dh_dsa, dsa_sign; |
2014 | int rsa_enc_export,dh_rsa_export,dh_dsa_export; | 2044 | int rsa_enc_export, dh_rsa_export, dh_dsa_export; |
2015 | int rsa_tmp_export,dh_tmp_export,kl; | 2045 | int rsa_tmp_export, dh_tmp_export, kl; |
2016 | unsigned long mask_k,mask_a,emask_k,emask_a; | 2046 | unsigned long mask_k, mask_a, emask_k, emask_a; |
2017 | int have_ecc_cert, ecdh_ok, ecdsa_ok, ecc_pkey_size; | 2047 | int have_ecc_cert, ecdh_ok, ecdsa_ok, ecc_pkey_size; |
2018 | #ifndef OPENSSL_NO_ECDH | 2048 | #ifndef OPENSSL_NO_ECDH |
2019 | int have_ecdh_tmp; | 2049 | int have_ecdh_tmp; |
@@ -2022,57 +2052,58 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2022 | EVP_PKEY *ecc_pkey = NULL; | 2052 | EVP_PKEY *ecc_pkey = NULL; |
2023 | int signature_nid = 0, pk_nid = 0, md_nid = 0; | 2053 | int signature_nid = 0, pk_nid = 0, md_nid = 0; |
2024 | 2054 | ||
2025 | if (c == NULL) return; | 2055 | if (c == NULL) |
2056 | return; | ||
2026 | 2057 | ||
2027 | kl=SSL_C_EXPORT_PKEYLENGTH(cipher); | 2058 | kl = SSL_C_EXPORT_PKEYLENGTH(cipher); |
2028 | 2059 | ||
2029 | #ifndef OPENSSL_NO_RSA | 2060 | #ifndef OPENSSL_NO_RSA |
2030 | rsa_tmp=(c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL); | 2061 | rsa_tmp = (c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL); |
2031 | rsa_tmp_export=(c->rsa_tmp_cb != NULL || | 2062 | rsa_tmp_export = (c->rsa_tmp_cb != NULL || |
2032 | (rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl)); | 2063 | (rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl)); |
2033 | #else | 2064 | #else |
2034 | rsa_tmp=rsa_tmp_export=0; | 2065 | rsa_tmp = rsa_tmp_export = 0; |
2035 | #endif | 2066 | #endif |
2036 | #ifndef OPENSSL_NO_DH | 2067 | #ifndef OPENSSL_NO_DH |
2037 | dh_tmp=(c->dh_tmp != NULL || c->dh_tmp_cb != NULL); | 2068 | dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL); |
2038 | dh_tmp_export=(c->dh_tmp_cb != NULL || | 2069 | dh_tmp_export = (c->dh_tmp_cb != NULL || |
2039 | (dh_tmp && DH_size(c->dh_tmp)*8 <= kl)); | 2070 | (dh_tmp && DH_size(c->dh_tmp)*8 <= kl)); |
2040 | #else | 2071 | #else |
2041 | dh_tmp=dh_tmp_export=0; | 2072 | dh_tmp = dh_tmp_export = 0; |
2042 | #endif | 2073 | #endif |
2043 | 2074 | ||
2044 | #ifndef OPENSSL_NO_ECDH | 2075 | #ifndef OPENSSL_NO_ECDH |
2045 | have_ecdh_tmp=(c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL); | 2076 | have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL); |
2046 | #endif | 2077 | #endif |
2047 | cpk= &(c->pkeys[SSL_PKEY_RSA_ENC]); | 2078 | cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]); |
2048 | rsa_enc= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2079 | rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2049 | rsa_enc_export=(rsa_enc && EVP_PKEY_size(cpk->privatekey)*8 <= kl); | 2080 | rsa_enc_export = (rsa_enc && EVP_PKEY_size(cpk->privatekey)*8 <= kl); |
2050 | cpk= &(c->pkeys[SSL_PKEY_RSA_SIGN]); | 2081 | cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]); |
2051 | rsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL); | 2082 | rsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2052 | cpk= &(c->pkeys[SSL_PKEY_DSA_SIGN]); | 2083 | cpk = &(c->pkeys[SSL_PKEY_DSA_SIGN]); |
2053 | dsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL); | 2084 | dsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2054 | cpk= &(c->pkeys[SSL_PKEY_DH_RSA]); | 2085 | cpk = &(c->pkeys[SSL_PKEY_DH_RSA]); |
2055 | dh_rsa= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2086 | dh_rsa = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2056 | dh_rsa_export=(dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); | 2087 | dh_rsa_export = (dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); |
2057 | cpk= &(c->pkeys[SSL_PKEY_DH_DSA]); | 2088 | cpk = &(c->pkeys[SSL_PKEY_DH_DSA]); |
2058 | /* FIX THIS EAY EAY EAY */ | 2089 | /* FIX THIS EAY EAY EAY */ |
2059 | dh_dsa= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2090 | dh_dsa = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2060 | dh_dsa_export=(dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); | 2091 | dh_dsa_export = (dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); |
2061 | cpk= &(c->pkeys[SSL_PKEY_ECC]); | 2092 | cpk = &(c->pkeys[SSL_PKEY_ECC]); |
2062 | have_ecc_cert= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2093 | have_ecc_cert = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2063 | mask_k=0; | 2094 | mask_k = 0; |
2064 | mask_a=0; | 2095 | mask_a = 0; |
2065 | emask_k=0; | 2096 | emask_k = 0; |
2066 | emask_a=0; | 2097 | emask_a = 0; |
2098 | |||
2067 | 2099 | ||
2068 | |||
2069 | 2100 | ||
2070 | #ifdef CIPHER_DEBUG | 2101 | #ifdef CIPHER_DEBUG |
2071 | printf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n", | 2102 | printf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n", |
2072 | rsa_tmp,rsa_tmp_export,dh_tmp,have_ecdh_tmp, | 2103 | rsa_tmp, rsa_tmp_export, dh_tmp, have_ecdh_tmp, |
2073 | rsa_enc,rsa_enc_export,rsa_sign,dsa_sign,dh_rsa,dh_dsa); | 2104 | rsa_enc, rsa_enc_export, rsa_sign, dsa_sign, dh_rsa, dh_dsa); |
2074 | #endif | 2105 | #endif |
2075 | 2106 | ||
2076 | cpk = &(c->pkeys[SSL_PKEY_GOST01]); | 2107 | cpk = &(c->pkeys[SSL_PKEY_GOST01]); |
2077 | if (cpk->x509 != NULL && cpk->privatekey !=NULL) { | 2108 | if (cpk->x509 != NULL && cpk->privatekey !=NULL) { |
2078 | mask_k |= SSL_kGOST; | 2109 | mask_k |= SSL_kGOST; |
@@ -2091,12 +2122,12 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2091 | 2122 | ||
2092 | #if 0 | 2123 | #if 0 |
2093 | /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */ | 2124 | /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */ |
2094 | if ( (dh_tmp || dh_rsa || dh_dsa) && | 2125 | if ((dh_tmp || dh_rsa || dh_dsa) && |
2095 | (rsa_enc || rsa_sign || dsa_sign)) | 2126 | (rsa_enc || rsa_sign || dsa_sign)) |
2096 | mask_k|=SSL_kEDH; | 2127 | mask_k|=SSL_kEDH; |
2097 | if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) && | 2128 | if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) && |
2098 | (rsa_enc || rsa_sign || dsa_sign)) | 2129 | (rsa_enc || rsa_sign || dsa_sign)) |
2099 | emask_k|=SSL_kEDH; | 2130 | emask_k|=SSL_kEDH; |
2100 | #endif | 2131 | #endif |
2101 | 2132 | ||
2102 | if (dh_tmp_export) | 2133 | if (dh_tmp_export) |
@@ -2105,23 +2136,25 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2105 | if (dh_tmp) | 2136 | if (dh_tmp) |
2106 | mask_k|=SSL_kEDH; | 2137 | mask_k|=SSL_kEDH; |
2107 | 2138 | ||
2108 | if (dh_rsa) mask_k|=SSL_kDHr; | 2139 | if (dh_rsa) |
2109 | if (dh_rsa_export) emask_k|=SSL_kDHr; | 2140 | mask_k|=SSL_kDHr; |
2141 | if (dh_rsa_export) | ||
2142 | emask_k|=SSL_kDHr; | ||
2110 | 2143 | ||
2111 | if (dh_dsa) mask_k|=SSL_kDHd; | 2144 | if (dh_dsa) |
2112 | if (dh_dsa_export) emask_k|=SSL_kDHd; | 2145 | mask_k|=SSL_kDHd; |
2146 | if (dh_dsa_export) | ||
2147 | emask_k|=SSL_kDHd; | ||
2113 | 2148 | ||
2114 | if (rsa_enc || rsa_sign) | 2149 | if (rsa_enc || rsa_sign) { |
2115 | { | ||
2116 | mask_a|=SSL_aRSA; | 2150 | mask_a|=SSL_aRSA; |
2117 | emask_a|=SSL_aRSA; | 2151 | emask_a|=SSL_aRSA; |
2118 | } | 2152 | } |
2119 | 2153 | ||
2120 | if (dsa_sign) | 2154 | if (dsa_sign) { |
2121 | { | ||
2122 | mask_a|=SSL_aDSS; | 2155 | mask_a|=SSL_aDSS; |
2123 | emask_a|=SSL_aDSS; | 2156 | emask_a|=SSL_aDSS; |
2124 | } | 2157 | } |
2125 | 2158 | ||
2126 | mask_a|=SSL_aNULL; | 2159 | mask_a|=SSL_aNULL; |
2127 | emask_a|=SSL_aNULL; | 2160 | emask_a|=SSL_aNULL; |
@@ -2136,66 +2169,57 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2136 | /* An ECC certificate may be usable for ECDH and/or | 2169 | /* An ECC certificate may be usable for ECDH and/or |
2137 | * ECDSA cipher suites depending on the key usage extension. | 2170 | * ECDSA cipher suites depending on the key usage extension. |
2138 | */ | 2171 | */ |
2139 | if (have_ecc_cert) | 2172 | if (have_ecc_cert) { |
2140 | { | ||
2141 | /* This call populates extension flags (ex_flags) */ | 2173 | /* This call populates extension flags (ex_flags) */ |
2142 | x = (c->pkeys[SSL_PKEY_ECC]).x509; | 2174 | x = (c->pkeys[SSL_PKEY_ECC]).x509; |
2143 | X509_check_purpose(x, -1, 0); | 2175 | X509_check_purpose(x, -1, 0); |
2144 | ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ? | 2176 | ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ? |
2145 | (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1; | 2177 | (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1; |
2146 | ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ? | 2178 | ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ? |
2147 | (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1; | 2179 | (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1; |
2148 | ecc_pkey = X509_get_pubkey(x); | 2180 | ecc_pkey = X509_get_pubkey(x); |
2149 | ecc_pkey_size = (ecc_pkey != NULL) ? | 2181 | ecc_pkey_size = (ecc_pkey != NULL) ? |
2150 | EVP_PKEY_bits(ecc_pkey) : 0; | 2182 | EVP_PKEY_bits(ecc_pkey) : 0; |
2151 | EVP_PKEY_free(ecc_pkey); | 2183 | EVP_PKEY_free(ecc_pkey); |
2152 | if ((x->sig_alg) && (x->sig_alg->algorithm)) | 2184 | if ((x->sig_alg) && (x->sig_alg->algorithm)) { |
2153 | { | ||
2154 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); | 2185 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); |
2155 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); | 2186 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); |
2156 | } | 2187 | } |
2157 | #ifndef OPENSSL_NO_ECDH | 2188 | #ifndef OPENSSL_NO_ECDH |
2158 | if (ecdh_ok) | 2189 | if (ecdh_ok) { |
2159 | { | ||
2160 | 2190 | ||
2161 | if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa) | 2191 | if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa) { |
2162 | { | ||
2163 | mask_k|=SSL_kECDHr; | 2192 | mask_k|=SSL_kECDHr; |
2164 | mask_a|=SSL_aECDH; | 2193 | mask_a|=SSL_aECDH; |
2165 | if (ecc_pkey_size <= 163) | 2194 | if (ecc_pkey_size <= 163) { |
2166 | { | ||
2167 | emask_k|=SSL_kECDHr; | 2195 | emask_k|=SSL_kECDHr; |
2168 | emask_a|=SSL_aECDH; | 2196 | emask_a|=SSL_aECDH; |
2169 | } | ||
2170 | } | 2197 | } |
2198 | } | ||
2171 | 2199 | ||
2172 | if (pk_nid == NID_X9_62_id_ecPublicKey) | 2200 | if (pk_nid == NID_X9_62_id_ecPublicKey) { |
2173 | { | ||
2174 | mask_k|=SSL_kECDHe; | 2201 | mask_k|=SSL_kECDHe; |
2175 | mask_a|=SSL_aECDH; | 2202 | mask_a|=SSL_aECDH; |
2176 | if (ecc_pkey_size <= 163) | 2203 | if (ecc_pkey_size <= 163) { |
2177 | { | ||
2178 | emask_k|=SSL_kECDHe; | 2204 | emask_k|=SSL_kECDHe; |
2179 | emask_a|=SSL_aECDH; | 2205 | emask_a|=SSL_aECDH; |
2180 | } | ||
2181 | } | 2206 | } |
2182 | } | 2207 | } |
2208 | } | ||
2183 | #endif | 2209 | #endif |
2184 | #ifndef OPENSSL_NO_ECDSA | 2210 | #ifndef OPENSSL_NO_ECDSA |
2185 | if (ecdsa_ok) | 2211 | if (ecdsa_ok) { |
2186 | { | ||
2187 | mask_a|=SSL_aECDSA; | 2212 | mask_a|=SSL_aECDSA; |
2188 | emask_a|=SSL_aECDSA; | 2213 | emask_a|=SSL_aECDSA; |
2189 | } | ||
2190 | #endif | ||
2191 | } | 2214 | } |
2215 | #endif | ||
2216 | } | ||
2192 | 2217 | ||
2193 | #ifndef OPENSSL_NO_ECDH | 2218 | #ifndef OPENSSL_NO_ECDH |
2194 | if (have_ecdh_tmp) | 2219 | if (have_ecdh_tmp) { |
2195 | { | ||
2196 | mask_k|=SSL_kEECDH; | 2220 | mask_k|=SSL_kEECDH; |
2197 | emask_k|=SSL_kEECDH; | 2221 | emask_k|=SSL_kEECDH; |
2198 | } | 2222 | } |
2199 | #endif | 2223 | #endif |
2200 | 2224 | ||
2201 | #ifndef OPENSSL_NO_PSK | 2225 | #ifndef OPENSSL_NO_PSK |
@@ -2205,12 +2229,12 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2205 | emask_a |= SSL_aPSK; | 2229 | emask_a |= SSL_aPSK; |
2206 | #endif | 2230 | #endif |
2207 | 2231 | ||
2208 | c->mask_k=mask_k; | 2232 | c->mask_k = mask_k; |
2209 | c->mask_a=mask_a; | 2233 | c->mask_a = mask_a; |
2210 | c->export_mask_k=emask_k; | 2234 | c->export_mask_k = emask_k; |
2211 | c->export_mask_a=emask_a; | 2235 | c->export_mask_a = emask_a; |
2212 | c->valid=1; | 2236 | c->valid = 1; |
2213 | } | 2237 | } |
2214 | 2238 | ||
2215 | /* This handy macro borrowed from crypto/x509v3/v3_purp.c */ | 2239 | /* This handy macro borrowed from crypto/x509v3/v3_purp.c */ |
2216 | #define ku_reject(x, usage) \ | 2240 | #define ku_reject(x, usage) \ |
@@ -2218,8 +2242,9 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2218 | 2242 | ||
2219 | #ifndef OPENSSL_NO_EC | 2243 | #ifndef OPENSSL_NO_EC |
2220 | 2244 | ||
2221 | int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) | 2245 | int |
2222 | { | 2246 | ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) |
2247 | { | ||
2223 | unsigned long alg_k, alg_a; | 2248 | unsigned long alg_k, alg_a; |
2224 | EVP_PKEY *pkey = NULL; | 2249 | EVP_PKEY *pkey = NULL; |
2225 | int keysize = 0; | 2250 | int keysize = 0; |
@@ -2229,81 +2254,74 @@ int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) | |||
2229 | alg_k = cs->algorithm_mkey; | 2254 | alg_k = cs->algorithm_mkey; |
2230 | alg_a = cs->algorithm_auth; | 2255 | alg_a = cs->algorithm_auth; |
2231 | 2256 | ||
2232 | if (SSL_C_IS_EXPORT(cs)) | 2257 | if (SSL_C_IS_EXPORT(cs)) { |
2233 | { | ||
2234 | /* ECDH key length in export ciphers must be <= 163 bits */ | 2258 | /* ECDH key length in export ciphers must be <= 163 bits */ |
2235 | pkey = X509_get_pubkey(x); | 2259 | pkey = X509_get_pubkey(x); |
2236 | if (pkey == NULL) return 0; | 2260 | if (pkey == NULL) |
2261 | return 0; | ||
2237 | keysize = EVP_PKEY_bits(pkey); | 2262 | keysize = EVP_PKEY_bits(pkey); |
2238 | EVP_PKEY_free(pkey); | 2263 | EVP_PKEY_free(pkey); |
2239 | if (keysize > 163) return 0; | 2264 | if (keysize > 163) |
2240 | } | 2265 | return 0; |
2266 | } | ||
2241 | 2267 | ||
2242 | /* This call populates the ex_flags field correctly */ | 2268 | /* This call populates the ex_flags field correctly */ |
2243 | X509_check_purpose(x, -1, 0); | 2269 | X509_check_purpose(x, -1, 0); |
2244 | if ((x->sig_alg) && (x->sig_alg->algorithm)) | 2270 | if ((x->sig_alg) && (x->sig_alg->algorithm)) { |
2245 | { | ||
2246 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); | 2271 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); |
2247 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); | 2272 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); |
2248 | } | 2273 | } |
2249 | if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr) | 2274 | if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr) { |
2250 | { | ||
2251 | /* key usage, if present, must allow key agreement */ | 2275 | /* key usage, if present, must allow key agreement */ |
2252 | if (ku_reject(x, X509v3_KU_KEY_AGREEMENT)) | 2276 | if (ku_reject(x, X509v3_KU_KEY_AGREEMENT)) { |
2253 | { | ||
2254 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT); | 2277 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT); |
2255 | return 0; | 2278 | return 0; |
2256 | } | 2279 | } |
2257 | if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION) | 2280 | if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION) { |
2258 | { | ||
2259 | /* signature alg must be ECDSA */ | 2281 | /* signature alg must be ECDSA */ |
2260 | if (pk_nid != NID_X9_62_id_ecPublicKey) | 2282 | if (pk_nid != NID_X9_62_id_ecPublicKey) { |
2261 | { | ||
2262 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE); | 2283 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE); |
2263 | return 0; | 2284 | return 0; |
2264 | } | ||
2265 | } | 2285 | } |
2266 | if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION) | 2286 | } |
2267 | { | 2287 | if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION) { |
2268 | /* signature alg must be RSA */ | 2288 | /* signature alg must be RSA */ |
2269 | 2289 | ||
2270 | if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa) | 2290 | if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa) { |
2271 | { | ||
2272 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE); | 2291 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE); |
2273 | return 0; | 2292 | return 0; |
2274 | } | ||
2275 | } | 2293 | } |
2276 | } | 2294 | } |
2277 | if (alg_a & SSL_aECDSA) | 2295 | } |
2278 | { | 2296 | if (alg_a & SSL_aECDSA) { |
2279 | /* key usage, if present, must allow signing */ | 2297 | /* key usage, if present, must allow signing */ |
2280 | if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) | 2298 | if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) { |
2281 | { | ||
2282 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_SIGNING); | 2299 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_SIGNING); |
2283 | return 0; | 2300 | return 0; |
2284 | } | ||
2285 | } | 2301 | } |
2286 | |||
2287 | return 1; /* all checks are ok */ | ||
2288 | } | 2302 | } |
2289 | 2303 | ||
2304 | return 1; | ||
2305 | /* all checks are ok */ | ||
2306 | } | ||
2307 | |||
2290 | #endif | 2308 | #endif |
2291 | 2309 | ||
2292 | /* THIS NEEDS CLEANING UP */ | 2310 | /* THIS NEEDS CLEANING UP */ |
2293 | CERT_PKEY *ssl_get_server_send_pkey(const SSL *s) | 2311 | CERT_PKEY |
2294 | { | 2312 | *ssl_get_server_send_pkey(const SSL *s) |
2295 | unsigned long alg_k,alg_a; | 2313 | { |
2314 | unsigned long alg_k, alg_a; | ||
2296 | CERT *c; | 2315 | CERT *c; |
2297 | int i; | 2316 | int i; |
2298 | 2317 | ||
2299 | c=s->cert; | 2318 | c = s->cert; |
2300 | ssl_set_cert_masks(c, s->s3->tmp.new_cipher); | 2319 | ssl_set_cert_masks(c, s->s3->tmp.new_cipher); |
2301 | 2320 | ||
2302 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 2321 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
2303 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; | 2322 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; |
2304 | 2323 | ||
2305 | if (alg_k & (SSL_kECDHr|SSL_kECDHe)) | 2324 | if (alg_k & (SSL_kECDHr|SSL_kECDHe)) { |
2306 | { | ||
2307 | /* we don't need to look at SSL_kEECDH | 2325 | /* we don't need to look at SSL_kEECDH |
2308 | * since no certificate is needed for | 2326 | * since no certificate is needed for |
2309 | * anon ECDH and for authenticated | 2327 | * anon ECDH and for authenticated |
@@ -2315,171 +2333,162 @@ CERT_PKEY *ssl_get_server_send_pkey(const SSL *s) | |||
2315 | * checks for SSL_kECDH before RSA | 2333 | * checks for SSL_kECDH before RSA |
2316 | * checks ensures the correct cert is chosen. | 2334 | * checks ensures the correct cert is chosen. |
2317 | */ | 2335 | */ |
2318 | i=SSL_PKEY_ECC; | 2336 | i = SSL_PKEY_ECC; |
2319 | } | 2337 | } else if (alg_a & SSL_aECDSA) { |
2320 | else if (alg_a & SSL_aECDSA) | 2338 | i = SSL_PKEY_ECC; |
2321 | { | 2339 | } else if (alg_k & SSL_kDHr) |
2322 | i=SSL_PKEY_ECC; | 2340 | i = SSL_PKEY_DH_RSA; |
2323 | } | ||
2324 | else if (alg_k & SSL_kDHr) | ||
2325 | i=SSL_PKEY_DH_RSA; | ||
2326 | else if (alg_k & SSL_kDHd) | 2341 | else if (alg_k & SSL_kDHd) |
2327 | i=SSL_PKEY_DH_DSA; | 2342 | i = SSL_PKEY_DH_DSA; |
2328 | else if (alg_a & SSL_aDSS) | 2343 | else if (alg_a & SSL_aDSS) |
2329 | i=SSL_PKEY_DSA_SIGN; | 2344 | i = SSL_PKEY_DSA_SIGN; |
2330 | else if (alg_a & SSL_aRSA) | 2345 | else if (alg_a & SSL_aRSA) { |
2331 | { | ||
2332 | if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL) | 2346 | if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL) |
2333 | i=SSL_PKEY_RSA_SIGN; | 2347 | i = SSL_PKEY_RSA_SIGN; |
2334 | else | 2348 | else |
2335 | i=SSL_PKEY_RSA_ENC; | 2349 | i = SSL_PKEY_RSA_ENC; |
2336 | } | 2350 | } else if (alg_a & SSL_aKRB5) { |
2337 | else if (alg_a & SSL_aKRB5) | ||
2338 | { | ||
2339 | /* VRS something else here? */ | 2351 | /* VRS something else here? */ |
2340 | return(NULL); | 2352 | return (NULL); |
2341 | } | 2353 | } else if (alg_a & SSL_aGOST94) |
2342 | else if (alg_a & SSL_aGOST94) | 2354 | i = SSL_PKEY_GOST94; |
2343 | i=SSL_PKEY_GOST94; | ||
2344 | else if (alg_a & SSL_aGOST01) | 2355 | else if (alg_a & SSL_aGOST01) |
2345 | i=SSL_PKEY_GOST01; | 2356 | i = SSL_PKEY_GOST01; |
2346 | else /* if (alg_a & SSL_aNULL) */ | 2357 | else /* if (alg_a & SSL_aNULL) */ |
2347 | { | 2358 | { |
2348 | SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY,ERR_R_INTERNAL_ERROR); | 2359 | SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY, ERR_R_INTERNAL_ERROR); |
2349 | return(NULL); | 2360 | return (NULL); |
2350 | } | 2361 | } |
2351 | 2362 | ||
2352 | return c->pkeys + i; | 2363 | return c->pkeys + i; |
2353 | } | 2364 | } |
2354 | 2365 | ||
2355 | X509 *ssl_get_server_send_cert(const SSL *s) | 2366 | X509 |
2356 | { | 2367 | *ssl_get_server_send_cert(const SSL *s) |
2368 | { | ||
2357 | CERT_PKEY *cpk; | 2369 | CERT_PKEY *cpk; |
2358 | cpk = ssl_get_server_send_pkey(s); | 2370 | cpk = ssl_get_server_send_pkey(s); |
2359 | if (!cpk) | 2371 | if (!cpk) |
2360 | return NULL; | 2372 | return NULL; |
2361 | return cpk->x509; | 2373 | return cpk->x509; |
2362 | } | 2374 | } |
2363 | 2375 | ||
2364 | EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd) | 2376 | EVP_PKEY |
2365 | { | 2377 | *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher, const EVP_MD **pmd) |
2378 | { | ||
2366 | unsigned long alg_a; | 2379 | unsigned long alg_a; |
2367 | CERT *c; | 2380 | CERT *c; |
2368 | int idx = -1; | 2381 | int idx = -1; |
2369 | 2382 | ||
2370 | alg_a = cipher->algorithm_auth; | 2383 | alg_a = cipher->algorithm_auth; |
2371 | c=s->cert; | 2384 | c = s->cert; |
2372 | 2385 | ||
2373 | if ((alg_a & SSL_aDSS) && | 2386 | if ((alg_a & SSL_aDSS) && |
2374 | (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL)) | 2387 | (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL)) |
2375 | idx = SSL_PKEY_DSA_SIGN; | 2388 | idx = SSL_PKEY_DSA_SIGN; |
2376 | else if (alg_a & SSL_aRSA) | 2389 | else if (alg_a & SSL_aRSA) { |
2377 | { | ||
2378 | if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) | 2390 | if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) |
2379 | idx = SSL_PKEY_RSA_SIGN; | 2391 | idx = SSL_PKEY_RSA_SIGN; |
2380 | else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) | 2392 | else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) |
2381 | idx = SSL_PKEY_RSA_ENC; | 2393 | idx = SSL_PKEY_RSA_ENC; |
2382 | } | 2394 | } else if ((alg_a & SSL_aECDSA) && |
2383 | else if ((alg_a & SSL_aECDSA) && | 2395 | (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) |
2384 | (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) | 2396 | idx = SSL_PKEY_ECC; |
2385 | idx = SSL_PKEY_ECC; | 2397 | if (idx == -1) { |
2386 | if (idx == -1) | 2398 | SSLerr(SSL_F_SSL_GET_SIGN_PKEY, ERR_R_INTERNAL_ERROR); |
2387 | { | 2399 | return (NULL); |
2388 | SSLerr(SSL_F_SSL_GET_SIGN_PKEY,ERR_R_INTERNAL_ERROR); | 2400 | } |
2389 | return(NULL); | ||
2390 | } | ||
2391 | if (pmd) | 2401 | if (pmd) |
2392 | *pmd = c->pkeys[idx].digest; | 2402 | *pmd = c->pkeys[idx].digest; |
2393 | return c->pkeys[idx].privatekey; | 2403 | return c->pkeys[idx].privatekey; |
2394 | } | 2404 | } |
2395 | 2405 | ||
2396 | void ssl_update_cache(SSL *s,int mode) | 2406 | void |
2397 | { | 2407 | ssl_update_cache(SSL *s, int mode) |
2408 | { | ||
2398 | int i; | 2409 | int i; |
2399 | 2410 | ||
2400 | /* If the session_id_length is 0, we are not supposed to cache it, | 2411 | /* If the session_id_length is 0, we are not supposed to cache it, |
2401 | * and it would be rather hard to do anyway :-) */ | 2412 | * and it would be rather hard to do anyway :-) */ |
2402 | if (s->session->session_id_length == 0) return; | 2413 | if (s->session->session_id_length == 0) |
2414 | return; | ||
2403 | 2415 | ||
2404 | i=s->session_ctx->session_cache_mode; | 2416 | i = s->session_ctx->session_cache_mode; |
2405 | if ((i & mode) && (!s->hit) | 2417 | if ((i & mode) && (!s->hit) |
2406 | && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) | 2418 | && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) |
2407 | || SSL_CTX_add_session(s->session_ctx,s->session)) | 2419 | || SSL_CTX_add_session(s->session_ctx, s->session)) |
2408 | && (s->session_ctx->new_session_cb != NULL)) | 2420 | && (s->session_ctx->new_session_cb != NULL)) { |
2409 | { | 2421 | CRYPTO_add(&s->session->references, 1, CRYPTO_LOCK_SSL_SESSION); |
2410 | CRYPTO_add(&s->session->references,1,CRYPTO_LOCK_SSL_SESSION); | 2422 | if (!s->session_ctx->new_session_cb(s, s->session)) |
2411 | if (!s->session_ctx->new_session_cb(s,s->session)) | ||
2412 | SSL_SESSION_free(s->session); | 2423 | SSL_SESSION_free(s->session); |
2413 | } | 2424 | } |
2414 | 2425 | ||
2415 | /* auto flush every 255 connections */ | 2426 | /* auto flush every 255 connections */ |
2416 | if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && | 2427 | if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && |
2417 | ((i & mode) == mode)) | 2428 | ((i & mode) == mode)) { |
2418 | { | 2429 | if ((((mode & SSL_SESS_CACHE_CLIENT) |
2419 | if ( (((mode & SSL_SESS_CACHE_CLIENT) | ||
2420 | ?s->session_ctx->stats.sess_connect_good | 2430 | ?s->session_ctx->stats.sess_connect_good |
2421 | :s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff) | 2431 | :s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff) { |
2422 | { | ||
2423 | SSL_CTX_flush_sessions(s->session_ctx,(unsigned long)time(NULL)); | 2432 | SSL_CTX_flush_sessions(s->session_ctx,(unsigned long)time(NULL)); |
2424 | } | ||
2425 | } | 2433 | } |
2426 | } | 2434 | } |
2435 | } | ||
2427 | 2436 | ||
2428 | const SSL_METHOD *SSL_get_ssl_method(SSL *s) | 2437 | const SSL_METHOD |
2429 | { | 2438 | *SSL_get_ssl_method(SSL *s) |
2430 | return(s->method); | 2439 | { |
2431 | } | 2440 | return (s->method); |
2441 | } | ||
2432 | 2442 | ||
2433 | int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth) | 2443 | int |
2434 | { | 2444 | SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth) |
2435 | int conn= -1; | 2445 | { |
2436 | int ret=1; | 2446 | int conn = -1; |
2447 | int ret = 1; | ||
2437 | 2448 | ||
2438 | if (s->method != meth) | 2449 | if (s->method != meth) { |
2439 | { | ||
2440 | if (s->handshake_func != NULL) | 2450 | if (s->handshake_func != NULL) |
2441 | conn=(s->handshake_func == s->method->ssl_connect); | 2451 | conn = (s->handshake_func == s->method->ssl_connect); |
2442 | 2452 | ||
2443 | if (s->method->version == meth->version) | 2453 | if (s->method->version == meth->version) |
2444 | s->method=meth; | 2454 | s->method = meth; |
2445 | else | 2455 | else { |
2446 | { | ||
2447 | s->method->ssl_free(s); | 2456 | s->method->ssl_free(s); |
2448 | s->method=meth; | 2457 | s->method = meth; |
2449 | ret=s->method->ssl_new(s); | 2458 | ret = s->method->ssl_new(s); |
2450 | } | 2459 | } |
2451 | 2460 | ||
2452 | if (conn == 1) | 2461 | if (conn == 1) |
2453 | s->handshake_func=meth->ssl_connect; | 2462 | s->handshake_func = meth->ssl_connect; |
2454 | else if (conn == 0) | 2463 | else if (conn == 0) |
2455 | s->handshake_func=meth->ssl_accept; | 2464 | s->handshake_func = meth->ssl_accept; |
2456 | } | ||
2457 | return(ret); | ||
2458 | } | 2465 | } |
2466 | return (ret); | ||
2467 | } | ||
2459 | 2468 | ||
2460 | int SSL_get_error(const SSL *s,int i) | 2469 | int |
2461 | { | 2470 | SSL_get_error(const SSL *s, int i) |
2471 | { | ||
2462 | int reason; | 2472 | int reason; |
2463 | unsigned long l; | 2473 | unsigned long l; |
2464 | BIO *bio; | 2474 | BIO *bio; |
2465 | 2475 | ||
2466 | if (i > 0) return(SSL_ERROR_NONE); | 2476 | if (i > 0) |
2477 | return (SSL_ERROR_NONE); | ||
2467 | 2478 | ||
2468 | /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake | 2479 | /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake |
2469 | * etc, where we do encode the error */ | 2480 | * etc, where we do encode the error */ |
2470 | if ((l=ERR_peek_error()) != 0) | 2481 | if ((l = ERR_peek_error()) != 0) { |
2471 | { | ||
2472 | if (ERR_GET_LIB(l) == ERR_LIB_SYS) | 2482 | if (ERR_GET_LIB(l) == ERR_LIB_SYS) |
2473 | return(SSL_ERROR_SYSCALL); | 2483 | return (SSL_ERROR_SYSCALL); |
2474 | else | 2484 | else |
2475 | return(SSL_ERROR_SSL); | 2485 | return (SSL_ERROR_SSL); |
2476 | } | 2486 | } |
2477 | 2487 | ||
2478 | if ((i < 0) && SSL_want_read(s)) | 2488 | if ((i < 0) && SSL_want_read(s)) { |
2479 | { | 2489 | bio = SSL_get_rbio(s); |
2480 | bio=SSL_get_rbio(s); | ||
2481 | if (BIO_should_read(bio)) | 2490 | if (BIO_should_read(bio)) |
2482 | return(SSL_ERROR_WANT_READ); | 2491 | return (SSL_ERROR_WANT_READ); |
2483 | else if (BIO_should_write(bio)) | 2492 | else if (BIO_should_write(bio)) |
2484 | /* This one doesn't make too much sense ... We never try | 2493 | /* This one doesn't make too much sense ... We never try |
2485 | * to write to the rbio, and an application program where | 2494 | * to write to the rbio, and an application program where |
@@ -2490,131 +2499,129 @@ int SSL_get_error(const SSL *s,int i) | |||
2490 | * SSL_want_write(s)) and rbio and wbio *are* the same, | 2499 | * SSL_want_write(s)) and rbio and wbio *are* the same, |
2491 | * this test works around that bug; so it might be safer | 2500 | * this test works around that bug; so it might be safer |
2492 | * to keep it. */ | 2501 | * to keep it. */ |
2493 | return(SSL_ERROR_WANT_WRITE); | 2502 | return (SSL_ERROR_WANT_WRITE); |
2494 | else if (BIO_should_io_special(bio)) | 2503 | else if (BIO_should_io_special(bio)) { |
2495 | { | 2504 | reason = BIO_get_retry_reason(bio); |
2496 | reason=BIO_get_retry_reason(bio); | ||
2497 | if (reason == BIO_RR_CONNECT) | 2505 | if (reason == BIO_RR_CONNECT) |
2498 | return(SSL_ERROR_WANT_CONNECT); | 2506 | return (SSL_ERROR_WANT_CONNECT); |
2499 | else if (reason == BIO_RR_ACCEPT) | 2507 | else if (reason == BIO_RR_ACCEPT) |
2500 | return(SSL_ERROR_WANT_ACCEPT); | 2508 | return (SSL_ERROR_WANT_ACCEPT); |
2501 | else | 2509 | else |
2502 | return(SSL_ERROR_SYSCALL); /* unknown */ | 2510 | return(SSL_ERROR_SYSCALL); /* unknown */ |
2503 | } | ||
2504 | } | 2511 | } |
2512 | } | ||
2505 | 2513 | ||
2506 | if ((i < 0) && SSL_want_write(s)) | 2514 | if ((i < 0) && SSL_want_write(s)) { |
2507 | { | 2515 | bio = SSL_get_wbio(s); |
2508 | bio=SSL_get_wbio(s); | ||
2509 | if (BIO_should_write(bio)) | 2516 | if (BIO_should_write(bio)) |
2510 | return(SSL_ERROR_WANT_WRITE); | 2517 | return (SSL_ERROR_WANT_WRITE); |
2511 | else if (BIO_should_read(bio)) | 2518 | else if (BIO_should_read(bio)) |
2512 | /* See above (SSL_want_read(s) with BIO_should_write(bio)) */ | 2519 | /* See above (SSL_want_read(s) with BIO_should_write(bio)) */ |
2513 | return(SSL_ERROR_WANT_READ); | 2520 | return (SSL_ERROR_WANT_READ); |
2514 | else if (BIO_should_io_special(bio)) | 2521 | else if (BIO_should_io_special(bio)) { |
2515 | { | 2522 | reason = BIO_get_retry_reason(bio); |
2516 | reason=BIO_get_retry_reason(bio); | ||
2517 | if (reason == BIO_RR_CONNECT) | 2523 | if (reason == BIO_RR_CONNECT) |
2518 | return(SSL_ERROR_WANT_CONNECT); | 2524 | return (SSL_ERROR_WANT_CONNECT); |
2519 | else if (reason == BIO_RR_ACCEPT) | 2525 | else if (reason == BIO_RR_ACCEPT) |
2520 | return(SSL_ERROR_WANT_ACCEPT); | 2526 | return (SSL_ERROR_WANT_ACCEPT); |
2521 | else | 2527 | else |
2522 | return(SSL_ERROR_SYSCALL); | 2528 | return (SSL_ERROR_SYSCALL); |
2523 | } | ||
2524 | } | ||
2525 | if ((i < 0) && SSL_want_x509_lookup(s)) | ||
2526 | { | ||
2527 | return(SSL_ERROR_WANT_X509_LOOKUP); | ||
2528 | } | 2529 | } |
2530 | } | ||
2531 | if ((i < 0) && SSL_want_x509_lookup(s)) { | ||
2532 | return (SSL_ERROR_WANT_X509_LOOKUP); | ||
2533 | } | ||
2529 | 2534 | ||
2530 | if (i == 0) | 2535 | if (i == 0) { |
2531 | { | 2536 | if (s->version == SSL2_VERSION) { |
2532 | if (s->version == SSL2_VERSION) | ||
2533 | { | ||
2534 | /* assume it is the socket being closed */ | 2537 | /* assume it is the socket being closed */ |
2535 | return(SSL_ERROR_ZERO_RETURN); | 2538 | return (SSL_ERROR_ZERO_RETURN); |
2536 | } | 2539 | } else { |
2537 | else | ||
2538 | { | ||
2539 | if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) && | 2540 | if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) && |
2540 | (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY)) | 2541 | (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY)) |
2541 | return(SSL_ERROR_ZERO_RETURN); | 2542 | return (SSL_ERROR_ZERO_RETURN); |
2542 | } | ||
2543 | } | 2543 | } |
2544 | return(SSL_ERROR_SYSCALL); | ||
2545 | } | 2544 | } |
2545 | return (SSL_ERROR_SYSCALL); | ||
2546 | } | ||
2546 | 2547 | ||
2547 | int SSL_do_handshake(SSL *s) | 2548 | int |
2548 | { | 2549 | SSL_do_handshake(SSL *s) |
2549 | int ret=1; | 2550 | { |
2551 | int ret = 1; | ||
2550 | 2552 | ||
2551 | if (s->handshake_func == NULL) | 2553 | if (s->handshake_func == NULL) { |
2552 | { | 2554 | SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET); |
2553 | SSLerr(SSL_F_SSL_DO_HANDSHAKE,SSL_R_CONNECTION_TYPE_NOT_SET); | 2555 | return (-1); |
2554 | return(-1); | 2556 | } |
2555 | } | ||
2556 | 2557 | ||
2557 | s->method->ssl_renegotiate_check(s); | 2558 | s->method->ssl_renegotiate_check(s); |
2558 | 2559 | ||
2559 | if (SSL_in_init(s) || SSL_in_before(s)) | 2560 | if (SSL_in_init(s) || SSL_in_before(s)) { |
2560 | { | 2561 | ret = s->handshake_func(s); |
2561 | ret=s->handshake_func(s); | ||
2562 | } | ||
2563 | return(ret); | ||
2564 | } | 2562 | } |
2563 | return (ret); | ||
2564 | } | ||
2565 | 2565 | ||
2566 | /* For the next 2 functions, SSL_clear() sets shutdown and so | 2566 | /* For the next 2 functions, SSL_clear() sets shutdown and so |
2567 | * one of these calls will reset it */ | 2567 | * one of these calls will reset it */ |
2568 | void SSL_set_accept_state(SSL *s) | 2568 | void |
2569 | { | 2569 | SSL_set_accept_state(SSL *s) |
2570 | s->server=1; | 2570 | { |
2571 | s->shutdown=0; | 2571 | s->server = 1; |
2572 | s->state=SSL_ST_ACCEPT|SSL_ST_BEFORE; | 2572 | s->shutdown = 0; |
2573 | s->handshake_func=s->method->ssl_accept; | 2573 | s->state = SSL_ST_ACCEPT|SSL_ST_BEFORE; |
2574 | s->handshake_func = s->method->ssl_accept; | ||
2574 | /* clear the current cipher */ | 2575 | /* clear the current cipher */ |
2575 | ssl_clear_cipher_ctx(s); | 2576 | ssl_clear_cipher_ctx(s); |
2576 | ssl_clear_hash_ctx(&s->read_hash); | 2577 | ssl_clear_hash_ctx(&s->read_hash); |
2577 | ssl_clear_hash_ctx(&s->write_hash); | 2578 | ssl_clear_hash_ctx(&s->write_hash); |
2578 | } | 2579 | } |
2579 | 2580 | ||
2580 | void SSL_set_connect_state(SSL *s) | 2581 | void |
2581 | { | 2582 | SSL_set_connect_state(SSL *s) |
2582 | s->server=0; | 2583 | { |
2583 | s->shutdown=0; | 2584 | s->server = 0; |
2584 | s->state=SSL_ST_CONNECT|SSL_ST_BEFORE; | 2585 | s->shutdown = 0; |
2585 | s->handshake_func=s->method->ssl_connect; | 2586 | s->state = SSL_ST_CONNECT|SSL_ST_BEFORE; |
2587 | s->handshake_func = s->method->ssl_connect; | ||
2586 | /* clear the current cipher */ | 2588 | /* clear the current cipher */ |
2587 | ssl_clear_cipher_ctx(s); | 2589 | ssl_clear_cipher_ctx(s); |
2588 | ssl_clear_hash_ctx(&s->read_hash); | 2590 | ssl_clear_hash_ctx(&s->read_hash); |
2589 | ssl_clear_hash_ctx(&s->write_hash); | 2591 | ssl_clear_hash_ctx(&s->write_hash); |
2590 | } | 2592 | } |
2591 | 2593 | ||
2592 | int ssl_undefined_function(SSL *s) | 2594 | int |
2593 | { | 2595 | ssl_undefined_function(SSL *s) |
2594 | SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2596 | { |
2595 | return(0); | 2597 | SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2596 | } | 2598 | return (0); |
2599 | } | ||
2597 | 2600 | ||
2598 | int ssl_undefined_void_function(void) | 2601 | int |
2599 | { | 2602 | ssl_undefined_void_function(void) |
2600 | SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2603 | { |
2601 | return(0); | 2604 | SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2602 | } | 2605 | return (0); |
2606 | } | ||
2603 | 2607 | ||
2604 | int ssl_undefined_const_function(const SSL *s) | 2608 | int |
2605 | { | 2609 | ssl_undefined_const_function(const SSL *s) |
2606 | SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2610 | { |
2607 | return(0); | 2611 | SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2608 | } | 2612 | return (0); |
2613 | } | ||
2609 | 2614 | ||
2610 | SSL_METHOD *ssl_bad_method(int ver) | 2615 | SSL_METHOD |
2611 | { | 2616 | *ssl_bad_method(int ver) |
2612 | SSLerr(SSL_F_SSL_BAD_METHOD,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2617 | { |
2613 | return(NULL); | 2618 | SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2614 | } | 2619 | return (NULL); |
2620 | } | ||
2615 | 2621 | ||
2616 | const char *SSL_get_version(const SSL *s) | 2622 | const char |
2617 | { | 2623 | *SSL_get_version(const SSL *s) |
2624 | { | ||
2618 | if (s->version == TLS1_2_VERSION) | 2625 | if (s->version == TLS1_2_VERSION) |
2619 | return("TLSv1.2"); | 2626 | return("TLSv1.2"); |
2620 | else if (s->version == TLS1_1_VERSION) | 2627 | else if (s->version == TLS1_1_VERSION) |
@@ -2627,29 +2634,27 @@ const char *SSL_get_version(const SSL *s) | |||
2627 | return("SSLv2"); | 2634 | return("SSLv2"); |
2628 | else | 2635 | else |
2629 | return("unknown"); | 2636 | return("unknown"); |
2630 | } | 2637 | } |
2631 | 2638 | ||
2632 | SSL *SSL_dup(SSL *s) | 2639 | SSL |
2633 | { | 2640 | *SSL_dup(SSL *s) |
2641 | { | ||
2634 | STACK_OF(X509_NAME) *sk; | 2642 | STACK_OF(X509_NAME) *sk; |
2635 | X509_NAME *xn; | 2643 | X509_NAME *xn; |
2636 | SSL *ret; | 2644 | SSL *ret; |
2637 | int i; | 2645 | int i; |
2638 | 2646 | ||
2639 | if ((ret=SSL_new(SSL_get_SSL_CTX(s))) == NULL) | 2647 | if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL) |
2640 | return(NULL); | 2648 | return (NULL); |
2641 | 2649 | ||
2642 | ret->version = s->version; | 2650 | ret->version = s->version; |
2643 | ret->type = s->type; | 2651 | ret->type = s->type; |
2644 | ret->method = s->method; | 2652 | ret->method = s->method; |
2645 | 2653 | ||
2646 | if (s->session != NULL) | 2654 | if (s->session != NULL) { |
2647 | { | ||
2648 | /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */ | 2655 | /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */ |
2649 | SSL_copy_session_id(ret,s); | 2656 | SSL_copy_session_id(ret, s); |
2650 | } | 2657 | } else { |
2651 | else | ||
2652 | { | ||
2653 | /* No session has been established yet, so we have to expect | 2658 | /* No session has been established yet, so we have to expect |
2654 | * that s->cert or ret->cert will be changed later -- | 2659 | * that s->cert or ret->cert will be changed later -- |
2655 | * they should not both point to the same object, | 2660 | * they should not both point to the same object, |
@@ -2659,56 +2664,50 @@ SSL *SSL_dup(SSL *s) | |||
2659 | ret->method = s->method; | 2664 | ret->method = s->method; |
2660 | ret->method->ssl_new(ret); | 2665 | ret->method->ssl_new(ret); |
2661 | 2666 | ||
2662 | if (s->cert != NULL) | 2667 | if (s->cert != NULL) { |
2663 | { | 2668 | if (ret->cert != NULL) { |
2664 | if (ret->cert != NULL) | ||
2665 | { | ||
2666 | ssl_cert_free(ret->cert); | 2669 | ssl_cert_free(ret->cert); |
2667 | } | 2670 | } |
2668 | ret->cert = ssl_cert_dup(s->cert); | 2671 | ret->cert = ssl_cert_dup(s->cert); |
2669 | if (ret->cert == NULL) | 2672 | if (ret->cert == NULL) |
2670 | goto err; | 2673 | goto err; |
2671 | } | ||
2672 | |||
2673 | SSL_set_session_id_context(ret, | ||
2674 | s->sid_ctx, s->sid_ctx_length); | ||
2675 | } | 2674 | } |
2676 | 2675 | ||
2677 | ret->options=s->options; | 2676 | SSL_set_session_id_context(ret, |
2678 | ret->mode=s->mode; | 2677 | s->sid_ctx, s->sid_ctx_length); |
2679 | SSL_set_max_cert_list(ret,SSL_get_max_cert_list(s)); | 2678 | } |
2680 | SSL_set_read_ahead(ret,SSL_get_read_ahead(s)); | 2679 | |
2680 | ret->options = s->options; | ||
2681 | ret->mode = s->mode; | ||
2682 | SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s)); | ||
2683 | SSL_set_read_ahead(ret, SSL_get_read_ahead(s)); | ||
2681 | ret->msg_callback = s->msg_callback; | 2684 | ret->msg_callback = s->msg_callback; |
2682 | ret->msg_callback_arg = s->msg_callback_arg; | 2685 | ret->msg_callback_arg = s->msg_callback_arg; |
2683 | SSL_set_verify(ret,SSL_get_verify_mode(s), | 2686 | SSL_set_verify(ret, SSL_get_verify_mode(s), |
2684 | SSL_get_verify_callback(s)); | 2687 | SSL_get_verify_callback(s)); |
2685 | SSL_set_verify_depth(ret,SSL_get_verify_depth(s)); | 2688 | SSL_set_verify_depth(ret, SSL_get_verify_depth(s)); |
2686 | ret->generate_session_id = s->generate_session_id; | 2689 | ret->generate_session_id = s->generate_session_id; |
2687 | 2690 | ||
2688 | SSL_set_info_callback(ret,SSL_get_info_callback(s)); | 2691 | SSL_set_info_callback(ret, SSL_get_info_callback(s)); |
2689 | 2692 | ||
2690 | ret->debug=s->debug; | 2693 | ret->debug = s->debug; |
2691 | 2694 | ||
2692 | /* copy app data, a little dangerous perhaps */ | 2695 | /* copy app data, a little dangerous perhaps */ |
2693 | if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data)) | 2696 | if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data)) |
2694 | goto err; | 2697 | goto err; |
2695 | 2698 | ||
2696 | /* setup rbio, and wbio */ | 2699 | /* setup rbio, and wbio */ |
2697 | if (s->rbio != NULL) | 2700 | if (s->rbio != NULL) { |
2698 | { | ||
2699 | if (!BIO_dup_state(s->rbio,(char *)&ret->rbio)) | 2701 | if (!BIO_dup_state(s->rbio,(char *)&ret->rbio)) |
2700 | goto err; | 2702 | goto err; |
2701 | } | 2703 | } |
2702 | if (s->wbio != NULL) | 2704 | if (s->wbio != NULL) { |
2703 | { | 2705 | if (s->wbio != s->rbio) { |
2704 | if (s->wbio != s->rbio) | ||
2705 | { | ||
2706 | if (!BIO_dup_state(s->wbio,(char *)&ret->wbio)) | 2706 | if (!BIO_dup_state(s->wbio,(char *)&ret->wbio)) |
2707 | goto err; | 2707 | goto err; |
2708 | } | 2708 | } else |
2709 | else | 2709 | ret->wbio = ret->rbio; |
2710 | ret->wbio=ret->rbio; | 2710 | } |
2711 | } | ||
2712 | ret->rwstate = s->rwstate; | 2711 | ret->rwstate = s->rwstate; |
2713 | ret->in_handshake = s->in_handshake; | 2712 | ret->in_handshake = s->in_handshake; |
2714 | ret->handshake_func = s->handshake_func; | 2713 | ret->handshake_func = s->handshake_func; |
@@ -2716,222 +2715,228 @@ SSL *SSL_dup(SSL *s) | |||
2716 | ret->renegotiate = s->renegotiate; | 2715 | ret->renegotiate = s->renegotiate; |
2717 | ret->new_session = s->new_session; | 2716 | ret->new_session = s->new_session; |
2718 | ret->quiet_shutdown = s->quiet_shutdown; | 2717 | ret->quiet_shutdown = s->quiet_shutdown; |
2719 | ret->shutdown=s->shutdown; | 2718 | ret->shutdown = s->shutdown; |
2720 | ret->state=s->state; /* SSL_dup does not really work at any state, though */ | 2719 | ret->state=s->state; /* SSL_dup does not really work at any state, though */ |
2721 | ret->rstate=s->rstate; | 2720 | ret->rstate = s->rstate; |
2722 | ret->init_num = 0; /* would have to copy ret->init_buf, ret->init_msg, ret->init_num, ret->init_off */ | 2721 | ret->init_num = 0; /* would have to copy ret->init_buf, ret->init_msg, ret->init_num, ret->init_off */ |
2723 | ret->hit=s->hit; | 2722 | ret->hit = s->hit; |
2724 | 2723 | ||
2725 | X509_VERIFY_PARAM_inherit(ret->param, s->param); | 2724 | X509_VERIFY_PARAM_inherit(ret->param, s->param); |
2726 | 2725 | ||
2727 | /* dup the cipher_list and cipher_list_by_id stacks */ | 2726 | /* dup the cipher_list and cipher_list_by_id stacks */ |
2728 | if (s->cipher_list != NULL) | 2727 | if (s->cipher_list != NULL) { |
2729 | { | 2728 | if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL) |
2730 | if ((ret->cipher_list=sk_SSL_CIPHER_dup(s->cipher_list)) == NULL) | ||
2731 | goto err; | 2729 | goto err; |
2732 | } | 2730 | } |
2733 | if (s->cipher_list_by_id != NULL) | 2731 | if (s->cipher_list_by_id != NULL) |
2734 | if ((ret->cipher_list_by_id=sk_SSL_CIPHER_dup(s->cipher_list_by_id)) | 2732 | if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id)) |
2735 | == NULL) | 2733 | == NULL) |
2736 | goto err; | 2734 | goto err; |
2737 | 2735 | ||
2738 | /* Dup the client_CA list */ | 2736 | /* Dup the client_CA list */ |
2739 | if (s->client_CA != NULL) | 2737 | if (s->client_CA != NULL) { |
2740 | { | 2738 | if ((sk = sk_X509_NAME_dup(s->client_CA)) == NULL) goto err; |
2741 | if ((sk=sk_X509_NAME_dup(s->client_CA)) == NULL) goto err; | 2739 | ret->client_CA = sk; |
2742 | ret->client_CA=sk; | 2740 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { |
2743 | for (i=0; i<sk_X509_NAME_num(sk); i++) | 2741 | xn = sk_X509_NAME_value(sk, i); |
2744 | { | 2742 | if (sk_X509_NAME_set(sk, i, X509_NAME_dup(xn)) == NULL) { |
2745 | xn=sk_X509_NAME_value(sk,i); | ||
2746 | if (sk_X509_NAME_set(sk,i,X509_NAME_dup(xn)) == NULL) | ||
2747 | { | ||
2748 | X509_NAME_free(xn); | 2743 | X509_NAME_free(xn); |
2749 | goto err; | 2744 | goto err; |
2750 | } | ||
2751 | } | 2745 | } |
2752 | } | 2746 | } |
2747 | } | ||
2753 | 2748 | ||
2754 | if (0) | 2749 | if (0) { |
2755 | { | ||
2756 | err: | 2750 | err: |
2757 | if (ret != NULL) SSL_free(ret); | 2751 | if (ret != NULL) |
2758 | ret=NULL; | 2752 | SSL_free(ret); |
2759 | } | 2753 | ret = NULL; |
2760 | return(ret); | ||
2761 | } | 2754 | } |
2755 | return (ret); | ||
2756 | } | ||
2762 | 2757 | ||
2763 | void ssl_clear_cipher_ctx(SSL *s) | 2758 | void |
2764 | { | 2759 | ssl_clear_cipher_ctx(SSL *s) |
2765 | if (s->enc_read_ctx != NULL) | 2760 | { |
2766 | { | 2761 | if (s->enc_read_ctx != NULL) { |
2767 | EVP_CIPHER_CTX_cleanup(s->enc_read_ctx); | 2762 | EVP_CIPHER_CTX_cleanup(s->enc_read_ctx); |
2768 | OPENSSL_free(s->enc_read_ctx); | 2763 | OPENSSL_free(s->enc_read_ctx); |
2769 | s->enc_read_ctx=NULL; | 2764 | s->enc_read_ctx = NULL; |
2770 | } | 2765 | } |
2771 | if (s->enc_write_ctx != NULL) | 2766 | if (s->enc_write_ctx != NULL) { |
2772 | { | ||
2773 | EVP_CIPHER_CTX_cleanup(s->enc_write_ctx); | 2767 | EVP_CIPHER_CTX_cleanup(s->enc_write_ctx); |
2774 | OPENSSL_free(s->enc_write_ctx); | 2768 | OPENSSL_free(s->enc_write_ctx); |
2775 | s->enc_write_ctx=NULL; | 2769 | s->enc_write_ctx = NULL; |
2776 | } | 2770 | } |
2777 | #ifndef OPENSSL_NO_COMP | 2771 | #ifndef OPENSSL_NO_COMP |
2778 | if (s->expand != NULL) | 2772 | if (s->expand != NULL) { |
2779 | { | ||
2780 | COMP_CTX_free(s->expand); | 2773 | COMP_CTX_free(s->expand); |
2781 | s->expand=NULL; | 2774 | s->expand = NULL; |
2782 | } | 2775 | } |
2783 | if (s->compress != NULL) | 2776 | if (s->compress != NULL) { |
2784 | { | ||
2785 | COMP_CTX_free(s->compress); | 2777 | COMP_CTX_free(s->compress); |
2786 | s->compress=NULL; | 2778 | s->compress = NULL; |
2787 | } | ||
2788 | #endif | ||
2789 | } | 2779 | } |
2780 | #endif | ||
2781 | } | ||
2790 | 2782 | ||
2791 | /* Fix this function so that it takes an optional type parameter */ | 2783 | /* Fix this function so that it takes an optional type parameter */ |
2792 | X509 *SSL_get_certificate(const SSL *s) | 2784 | X509 |
2793 | { | 2785 | *SSL_get_certificate(const SSL *s) |
2786 | { | ||
2794 | if (s->cert != NULL) | 2787 | if (s->cert != NULL) |
2795 | return(s->cert->key->x509); | 2788 | return (s->cert->key->x509); |
2796 | else | 2789 | else |
2797 | return(NULL); | 2790 | return (NULL); |
2798 | } | 2791 | } |
2799 | 2792 | ||
2800 | /* Fix this function so that it takes an optional type parameter */ | 2793 | /* Fix this function so that it takes an optional type parameter */ |
2801 | EVP_PKEY *SSL_get_privatekey(SSL *s) | 2794 | EVP_PKEY |
2802 | { | 2795 | *SSL_get_privatekey(SSL *s) |
2796 | { | ||
2803 | if (s->cert != NULL) | 2797 | if (s->cert != NULL) |
2804 | return(s->cert->key->privatekey); | 2798 | return (s->cert->key->privatekey); |
2805 | else | 2799 | else |
2806 | return(NULL); | 2800 | return (NULL); |
2807 | } | 2801 | } |
2808 | 2802 | ||
2809 | const SSL_CIPHER *SSL_get_current_cipher(const SSL *s) | 2803 | const SSL_CIPHER |
2810 | { | 2804 | *SSL_get_current_cipher(const SSL *s) |
2805 | { | ||
2811 | if ((s->session != NULL) && (s->session->cipher != NULL)) | 2806 | if ((s->session != NULL) && (s->session->cipher != NULL)) |
2812 | return(s->session->cipher); | 2807 | return (s->session->cipher); |
2813 | return(NULL); | 2808 | return (NULL); |
2814 | } | 2809 | } |
2815 | #ifdef OPENSSL_NO_COMP | 2810 | #ifdef OPENSSL_NO_COMP |
2816 | const void *SSL_get_current_compression(SSL *s) | 2811 | const void |
2817 | { | 2812 | *SSL_get_current_compression(SSL *s) |
2813 | { | ||
2818 | return NULL; | 2814 | return NULL; |
2819 | } | 2815 | } |
2820 | const void *SSL_get_current_expansion(SSL *s) | 2816 | |
2821 | { | 2817 | const void |
2818 | *SSL_get_current_expansion(SSL *s) | ||
2819 | { | ||
2822 | return NULL; | 2820 | return NULL; |
2823 | } | 2821 | } |
2824 | #else | 2822 | #else |
2825 | 2823 | ||
2826 | const COMP_METHOD *SSL_get_current_compression(SSL *s) | 2824 | const COMP_METHOD |
2827 | { | 2825 | *SSL_get_current_compression(SSL *s) |
2826 | { | ||
2828 | if (s->compress != NULL) | 2827 | if (s->compress != NULL) |
2829 | return(s->compress->meth); | 2828 | return (s->compress->meth); |
2830 | return(NULL); | 2829 | return (NULL); |
2831 | } | 2830 | } |
2832 | 2831 | ||
2833 | const COMP_METHOD *SSL_get_current_expansion(SSL *s) | 2832 | const COMP_METHOD |
2834 | { | 2833 | *SSL_get_current_expansion(SSL *s) |
2834 | { | ||
2835 | if (s->expand != NULL) | 2835 | if (s->expand != NULL) |
2836 | return(s->expand->meth); | 2836 | return (s->expand->meth); |
2837 | return(NULL); | 2837 | return (NULL); |
2838 | } | 2838 | } |
2839 | #endif | 2839 | #endif |
2840 | 2840 | ||
2841 | int ssl_init_wbio_buffer(SSL *s,int push) | 2841 | int |
2842 | { | 2842 | ssl_init_wbio_buffer(SSL *s, int push) |
2843 | { | ||
2843 | BIO *bbio; | 2844 | BIO *bbio; |
2844 | 2845 | ||
2845 | if (s->bbio == NULL) | 2846 | if (s->bbio == NULL) { |
2846 | { | 2847 | bbio = BIO_new(BIO_f_buffer()); |
2847 | bbio=BIO_new(BIO_f_buffer()); | 2848 | if (bbio == NULL) |
2848 | if (bbio == NULL) return(0); | 2849 | return (0); |
2849 | s->bbio=bbio; | 2850 | s->bbio = bbio; |
2850 | } | 2851 | } else { |
2851 | else | 2852 | bbio = s->bbio; |
2852 | { | ||
2853 | bbio=s->bbio; | ||
2854 | if (s->bbio == s->wbio) | 2853 | if (s->bbio == s->wbio) |
2855 | s->wbio=BIO_pop(s->wbio); | 2854 | s->wbio = BIO_pop(s->wbio); |
2856 | } | 2855 | } |
2857 | (void)BIO_reset(bbio); | 2856 | (void)BIO_reset(bbio); |
2858 | /* if (!BIO_set_write_buffer_size(bbio,16*1024)) */ | 2857 | /* if (!BIO_set_write_buffer_size(bbio,16*1024)) */ |
2859 | if (!BIO_set_read_buffer_size(bbio,1)) | 2858 | if (!BIO_set_read_buffer_size(bbio, 1)) { |
2860 | { | 2859 | SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB); |
2861 | SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER,ERR_R_BUF_LIB); | 2860 | return (0); |
2862 | return(0); | 2861 | } |
2863 | } | 2862 | if (push) { |
2864 | if (push) | ||
2865 | { | ||
2866 | if (s->wbio != bbio) | 2863 | if (s->wbio != bbio) |
2867 | s->wbio=BIO_push(bbio,s->wbio); | 2864 | s->wbio = BIO_push(bbio, s->wbio); |
2868 | } | 2865 | } else { |
2869 | else | ||
2870 | { | ||
2871 | if (s->wbio == bbio) | 2866 | if (s->wbio == bbio) |
2872 | s->wbio=BIO_pop(bbio); | 2867 | s->wbio = BIO_pop(bbio); |
2873 | } | ||
2874 | return(1); | ||
2875 | } | 2868 | } |
2869 | return (1); | ||
2870 | } | ||
2876 | 2871 | ||
2877 | void ssl_free_wbio_buffer(SSL *s) | 2872 | void |
2878 | { | 2873 | ssl_free_wbio_buffer(SSL *s) |
2879 | if (s->bbio == NULL) return; | 2874 | { |
2875 | if (s->bbio == NULL) | ||
2876 | return; | ||
2880 | 2877 | ||
2881 | if (s->bbio == s->wbio) | 2878 | if (s->bbio == s->wbio) { |
2882 | { | ||
2883 | /* remove buffering */ | 2879 | /* remove buffering */ |
2884 | s->wbio=BIO_pop(s->wbio); | 2880 | s->wbio = BIO_pop(s->wbio); |
2885 | #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more preprocessor symbol */ | 2881 | #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more preprocessor symbol */ |
2886 | assert(s->wbio != NULL); | 2882 | assert(s->wbio != NULL); |
2887 | #endif | 2883 | #endif |
2888 | } | 2884 | } |
2889 | BIO_free(s->bbio); | 2885 | BIO_free(s->bbio); |
2890 | s->bbio=NULL; | 2886 | s->bbio = NULL; |
2891 | } | 2887 | } |
2892 | |||
2893 | void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode) | ||
2894 | { | ||
2895 | ctx->quiet_shutdown=mode; | ||
2896 | } | ||
2897 | 2888 | ||
2898 | int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) | 2889 | void |
2899 | { | 2890 | SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) |
2900 | return(ctx->quiet_shutdown); | 2891 | { |
2901 | } | 2892 | ctx->quiet_shutdown = mode; |
2893 | } | ||
2902 | 2894 | ||
2903 | void SSL_set_quiet_shutdown(SSL *s,int mode) | 2895 | int |
2904 | { | 2896 | SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) |
2905 | s->quiet_shutdown=mode; | 2897 | { |
2906 | } | 2898 | return (ctx->quiet_shutdown); |
2899 | } | ||
2907 | 2900 | ||
2908 | int SSL_get_quiet_shutdown(const SSL *s) | 2901 | void |
2909 | { | 2902 | SSL_set_quiet_shutdown(SSL *s, int mode) |
2910 | return(s->quiet_shutdown); | 2903 | { |
2911 | } | 2904 | s->quiet_shutdown = mode; |
2905 | } | ||
2912 | 2906 | ||
2913 | void SSL_set_shutdown(SSL *s,int mode) | 2907 | int |
2914 | { | 2908 | SSL_get_quiet_shutdown(const SSL *s) |
2915 | s->shutdown=mode; | 2909 | { |
2916 | } | 2910 | return (s->quiet_shutdown); |
2911 | } | ||
2917 | 2912 | ||
2918 | int SSL_get_shutdown(const SSL *s) | 2913 | void |
2919 | { | 2914 | SSL_set_shutdown(SSL *s, int mode) |
2920 | return(s->shutdown); | 2915 | { |
2921 | } | 2916 | s->shutdown = mode; |
2917 | } | ||
2922 | 2918 | ||
2923 | int SSL_version(const SSL *s) | 2919 | int |
2924 | { | 2920 | SSL_get_shutdown(const SSL *s) |
2925 | return(s->version); | 2921 | { |
2926 | } | 2922 | return (s->shutdown); |
2923 | } | ||
2927 | 2924 | ||
2928 | SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) | 2925 | int |
2929 | { | 2926 | SSL_version(const SSL *s) |
2930 | return(ssl->ctx); | 2927 | { |
2931 | } | 2928 | return (s->version); |
2929 | } | ||
2932 | 2930 | ||
2933 | SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) | 2931 | SSL_CTX |
2934 | { | 2932 | *SSL_get_SSL_CTX(const SSL *ssl) |
2933 | { | ||
2934 | return (ssl->ctx); | ||
2935 | } | ||
2936 | |||
2937 | SSL_CTX | ||
2938 | *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) | ||
2939 | { | ||
2935 | if (ssl->ctx == ctx) | 2940 | if (ssl->ctx == ctx) |
2936 | return ssl->ctx; | 2941 | return ssl->ctx; |
2937 | #ifndef OPENSSL_NO_TLSEXT | 2942 | #ifndef OPENSSL_NO_TLSEXT |
@@ -2941,114 +2946,131 @@ SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) | |||
2941 | if (ssl->cert != NULL) | 2946 | if (ssl->cert != NULL) |
2942 | ssl_cert_free(ssl->cert); | 2947 | ssl_cert_free(ssl->cert); |
2943 | ssl->cert = ssl_cert_dup(ctx->cert); | 2948 | ssl->cert = ssl_cert_dup(ctx->cert); |
2944 | CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); | 2949 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); |
2945 | if (ssl->ctx != NULL) | 2950 | if (ssl->ctx != NULL) |
2946 | SSL_CTX_free(ssl->ctx); /* decrement reference count */ | 2951 | SSL_CTX_free(ssl->ctx); /* decrement reference count */ |
2947 | ssl->ctx = ctx; | 2952 | ssl->ctx = ctx; |
2948 | return(ssl->ctx); | 2953 | return (ssl->ctx); |
2949 | } | 2954 | } |
2950 | 2955 | ||
2951 | #ifndef OPENSSL_NO_STDIO | 2956 | #ifndef OPENSSL_NO_STDIO |
2952 | int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) | 2957 | int |
2953 | { | 2958 | SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) |
2954 | return(X509_STORE_set_default_paths(ctx->cert_store)); | 2959 | { |
2955 | } | 2960 | return (X509_STORE_set_default_paths(ctx->cert_store)); |
2961 | } | ||
2956 | 2962 | ||
2957 | int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, | 2963 | int |
2958 | const char *CApath) | 2964 | SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, |
2959 | { | 2965 | const char *CApath) |
2960 | return(X509_STORE_load_locations(ctx->cert_store,CAfile,CApath)); | 2966 | { |
2961 | } | 2967 | return (X509_STORE_load_locations(ctx->cert_store, CAfile, CApath)); |
2968 | } | ||
2962 | #endif | 2969 | #endif |
2963 | 2970 | ||
2964 | void SSL_set_info_callback(SSL *ssl, | 2971 | void |
2965 | void (*cb)(const SSL *ssl,int type,int val)) | 2972 | SSL_set_info_callback(SSL *ssl, |
2966 | { | 2973 | void (*cb)(const SSL *ssl, int type, int val)) |
2967 | ssl->info_callback=cb; | 2974 | { |
2968 | } | 2975 | ssl->info_callback = cb; |
2976 | } | ||
2969 | 2977 | ||
2970 | /* One compiler (Diab DCC) doesn't like argument names in returned | 2978 | /* One compiler (Diab DCC) doesn't like argument names in returned |
2971 | function pointer. */ | 2979 | function pointer. */ |
2972 | void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,int /*val*/) | 2980 | void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,int /*val*/) |
2973 | { | 2981 | { |
2974 | return ssl->info_callback; | 2982 | return ssl->info_callback; |
2975 | } | 2983 | } |
2976 | 2984 | ||
2977 | int SSL_state(const SSL *ssl) | 2985 | int |
2978 | { | 2986 | SSL_state(const SSL *ssl) |
2979 | return(ssl->state); | 2987 | { |
2980 | } | 2988 | return (ssl->state); |
2989 | } | ||
2981 | 2990 | ||
2982 | void SSL_set_state(SSL *ssl, int state) | 2991 | void |
2983 | { | 2992 | SSL_set_state(SSL *ssl, int state) |
2993 | { | ||
2984 | ssl->state = state; | 2994 | ssl->state = state; |
2985 | } | 2995 | } |
2986 | 2996 | ||
2987 | void SSL_set_verify_result(SSL *ssl,long arg) | 2997 | void |
2988 | { | 2998 | SSL_set_verify_result(SSL *ssl, long arg) |
2989 | ssl->verify_result=arg; | 2999 | { |
2990 | } | 3000 | ssl->verify_result = arg; |
3001 | } | ||
2991 | 3002 | ||
2992 | long SSL_get_verify_result(const SSL *ssl) | 3003 | long |
2993 | { | 3004 | SSL_get_verify_result(const SSL *ssl) |
2994 | return(ssl->verify_result); | 3005 | { |
2995 | } | 3006 | return (ssl->verify_result); |
3007 | } | ||
2996 | 3008 | ||
2997 | int SSL_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func, | 3009 | int |
2998 | CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func) | 3010 | SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
2999 | { | 3011 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
3012 | { | ||
3000 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp, | 3013 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp, |
3001 | new_func, dup_func, free_func); | 3014 | new_func, dup_func, free_func); |
3002 | } | 3015 | } |
3003 | 3016 | ||
3004 | int SSL_set_ex_data(SSL *s,int idx,void *arg) | 3017 | int |
3005 | { | 3018 | SSL_set_ex_data(SSL *s, int idx, void *arg) |
3006 | return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); | 3019 | { |
3007 | } | 3020 | return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); |
3021 | } | ||
3008 | 3022 | ||
3009 | void *SSL_get_ex_data(const SSL *s,int idx) | 3023 | void |
3010 | { | 3024 | *SSL_get_ex_data(const SSL *s, int idx) |
3011 | return(CRYPTO_get_ex_data(&s->ex_data,idx)); | 3025 | { |
3012 | } | 3026 | return (CRYPTO_get_ex_data(&s->ex_data, idx)); |
3027 | } | ||
3013 | 3028 | ||
3014 | int SSL_CTX_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func, | 3029 | int |
3015 | CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func) | 3030 | SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
3016 | { | 3031 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
3032 | { | ||
3017 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp, | 3033 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp, |
3018 | new_func, dup_func, free_func); | 3034 | new_func, dup_func, free_func); |
3019 | } | 3035 | } |
3020 | 3036 | ||
3021 | int SSL_CTX_set_ex_data(SSL_CTX *s,int idx,void *arg) | 3037 | int |
3022 | { | 3038 | SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg) |
3023 | return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); | 3039 | { |
3024 | } | 3040 | return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); |
3041 | } | ||
3025 | 3042 | ||
3026 | void *SSL_CTX_get_ex_data(const SSL_CTX *s,int idx) | 3043 | void |
3027 | { | 3044 | *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx) |
3028 | return(CRYPTO_get_ex_data(&s->ex_data,idx)); | 3045 | { |
3029 | } | 3046 | return (CRYPTO_get_ex_data(&s->ex_data, idx)); |
3047 | } | ||
3030 | 3048 | ||
3031 | int ssl_ok(SSL *s) | 3049 | int |
3032 | { | 3050 | ssl_ok(SSL *s) |
3033 | return(1); | 3051 | { |
3034 | } | 3052 | return (1); |
3053 | } | ||
3035 | 3054 | ||
3036 | X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx) | 3055 | X509_STORE |
3037 | { | 3056 | *SSL_CTX_get_cert_store(const SSL_CTX *ctx) |
3038 | return(ctx->cert_store); | 3057 | { |
3039 | } | 3058 | return (ctx->cert_store); |
3059 | } | ||
3040 | 3060 | ||
3041 | void SSL_CTX_set_cert_store(SSL_CTX *ctx,X509_STORE *store) | 3061 | void |
3042 | { | 3062 | SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store) |
3063 | { | ||
3043 | if (ctx->cert_store != NULL) | 3064 | if (ctx->cert_store != NULL) |
3044 | X509_STORE_free(ctx->cert_store); | 3065 | X509_STORE_free(ctx->cert_store); |
3045 | ctx->cert_store=store; | 3066 | ctx->cert_store = store; |
3046 | } | 3067 | } |
3047 | 3068 | ||
3048 | int SSL_want(const SSL *s) | 3069 | int |
3049 | { | 3070 | SSL_want(const SSL *s) |
3050 | return(s->rwstate); | 3071 | { |
3051 | } | 3072 | return (s->rwstate); |
3073 | } | ||
3052 | 3074 | ||
3053 | /*! | 3075 | /*! |
3054 | * \brief Set the callback for generating temporary RSA keys. | 3076 | * \brief Set the callback for generating temporary RSA keys. |
@@ -3057,19 +3079,21 @@ int SSL_want(const SSL *s) | |||
3057 | */ | 3079 | */ |
3058 | 3080 | ||
3059 | #ifndef OPENSSL_NO_RSA | 3081 | #ifndef OPENSSL_NO_RSA |
3060 | void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,RSA *(*cb)(SSL *ssl, | 3082 | void |
3061 | int is_export, | 3083 | SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb)(SSL *ssl, |
3062 | int keylength)) | 3084 | int is_export, |
3063 | { | 3085 | int keylength)) |
3064 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); | 3086 | { |
3065 | } | 3087 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); |
3066 | 3088 | } | |
3067 | void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl, | 3089 | |
3068 | int is_export, | 3090 | void |
3069 | int keylength)) | 3091 | SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb)(SSL *ssl, |
3070 | { | 3092 | int is_export, |
3071 | SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); | 3093 | int keylength)) |
3072 | } | 3094 | { |
3095 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); | ||
3096 | } | ||
3073 | #endif | 3097 | #endif |
3074 | 3098 | ||
3075 | #ifdef DOXYGEN | 3099 | #ifdef DOXYGEN |
@@ -3083,8 +3107,9 @@ void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl, | |||
3083 | * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback | 3107 | * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback |
3084 | */ | 3108 | */ |
3085 | 3109 | ||
3086 | RSA *cb(SSL *ssl,int is_export,int keylength) | 3110 | RSA |
3087 | {} | 3111 | *cb(SSL *ssl, int is_export, int keylength) |
3112 | {} | ||
3088 | #endif | 3113 | #endif |
3089 | 3114 | ||
3090 | /*! | 3115 | /*! |
@@ -3094,133 +3119,142 @@ RSA *cb(SSL *ssl,int is_export,int keylength) | |||
3094 | */ | 3119 | */ |
3095 | 3120 | ||
3096 | #ifndef OPENSSL_NO_DH | 3121 | #ifndef OPENSSL_NO_DH |
3097 | void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,DH *(*dh)(SSL *ssl,int is_export, | 3122 | void |
3098 | int keylength)) | 3123 | SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh)(SSL *ssl, int is_export, |
3099 | { | 3124 | int keylength)) |
3100 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); | 3125 | { |
3101 | } | 3126 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); |
3127 | } | ||
3102 | 3128 | ||
3103 | void SSL_set_tmp_dh_callback(SSL *ssl,DH *(*dh)(SSL *ssl,int is_export, | 3129 | void |
3104 | int keylength)) | 3130 | SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh)(SSL *ssl, int is_export, |
3105 | { | 3131 | int keylength)) |
3106 | SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); | 3132 | { |
3107 | } | 3133 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); |
3134 | } | ||
3108 | #endif | 3135 | #endif |
3109 | 3136 | ||
3110 | #ifndef OPENSSL_NO_ECDH | 3137 | #ifndef OPENSSL_NO_ECDH |
3111 | void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,EC_KEY *(*ecdh)(SSL *ssl,int is_export, | 3138 | void |
3112 | int keylength)) | 3139 | SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, EC_KEY *(*ecdh)(SSL *ssl, int is_export, |
3113 | { | 3140 | int keylength)) |
3114 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); | 3141 | { |
3115 | } | 3142 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); |
3143 | } | ||
3116 | 3144 | ||
3117 | void SSL_set_tmp_ecdh_callback(SSL *ssl,EC_KEY *(*ecdh)(SSL *ssl,int is_export, | 3145 | void |
3118 | int keylength)) | 3146 | SSL_set_tmp_ecdh_callback(SSL *ssl, EC_KEY *(*ecdh)(SSL *ssl, int is_export, |
3119 | { | 3147 | int keylength)) |
3120 | SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); | 3148 | { |
3121 | } | 3149 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); |
3150 | } | ||
3122 | #endif | 3151 | #endif |
3123 | 3152 | ||
3124 | #ifndef OPENSSL_NO_PSK | 3153 | #ifndef OPENSSL_NO_PSK |
3125 | int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) | 3154 | int |
3126 | { | 3155 | SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) |
3127 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) | 3156 | { |
3128 | { | 3157 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) { |
3129 | SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); | 3158 | SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); |
3130 | return 0; | 3159 | return 0; |
3131 | } | 3160 | } |
3132 | if (ctx->psk_identity_hint != NULL) | 3161 | if (ctx->psk_identity_hint != NULL) |
3133 | OPENSSL_free(ctx->psk_identity_hint); | 3162 | OPENSSL_free(ctx->psk_identity_hint); |
3134 | if (identity_hint != NULL) | 3163 | if (identity_hint != NULL) { |
3135 | { | ||
3136 | ctx->psk_identity_hint = BUF_strdup(identity_hint); | 3164 | ctx->psk_identity_hint = BUF_strdup(identity_hint); |
3137 | if (ctx->psk_identity_hint == NULL) | 3165 | if (ctx->psk_identity_hint == NULL) |
3138 | return 0; | 3166 | return 0; |
3139 | } | 3167 | } else |
3140 | else | ||
3141 | ctx->psk_identity_hint = NULL; | 3168 | ctx->psk_identity_hint = NULL; |
3142 | return 1; | 3169 | return 1; |
3143 | } | 3170 | } |
3144 | 3171 | ||
3145 | int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint) | 3172 | int |
3146 | { | 3173 | SSL_use_psk_identity_hint(SSL *s, const char *identity_hint) |
3174 | { | ||
3147 | if (s == NULL) | 3175 | if (s == NULL) |
3148 | return 0; | 3176 | return 0; |
3149 | 3177 | ||
3150 | if (s->session == NULL) | 3178 | if (s->session == NULL) |
3151 | return 1; /* session not created yet, ignored */ | 3179 | return 1; /* session not created yet, ignored */ |
3152 | 3180 | ||
3153 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) | 3181 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) { |
3154 | { | ||
3155 | SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); | 3182 | SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); |
3156 | return 0; | 3183 | return 0; |
3157 | } | 3184 | } |
3158 | if (s->session->psk_identity_hint != NULL) | 3185 | if (s->session->psk_identity_hint != NULL) |
3159 | OPENSSL_free(s->session->psk_identity_hint); | 3186 | OPENSSL_free(s->session->psk_identity_hint); |
3160 | if (identity_hint != NULL) | 3187 | if (identity_hint != NULL) { |
3161 | { | ||
3162 | s->session->psk_identity_hint = BUF_strdup(identity_hint); | 3188 | s->session->psk_identity_hint = BUF_strdup(identity_hint); |
3163 | if (s->session->psk_identity_hint == NULL) | 3189 | if (s->session->psk_identity_hint == NULL) |
3164 | return 0; | 3190 | return 0; |
3165 | } | 3191 | } else |
3166 | else | ||
3167 | s->session->psk_identity_hint = NULL; | 3192 | s->session->psk_identity_hint = NULL; |
3168 | return 1; | 3193 | return 1; |
3169 | } | 3194 | } |
3170 | 3195 | ||
3171 | const char *SSL_get_psk_identity_hint(const SSL *s) | 3196 | const char |
3172 | { | 3197 | *SSL_get_psk_identity_hint(const SSL *s) |
3198 | { | ||
3173 | if (s == NULL || s->session == NULL) | 3199 | if (s == NULL || s->session == NULL) |
3174 | return NULL; | 3200 | return NULL; |
3175 | return(s->session->psk_identity_hint); | 3201 | return (s->session->psk_identity_hint); |
3176 | } | 3202 | } |
3177 | 3203 | ||
3178 | const char *SSL_get_psk_identity(const SSL *s) | 3204 | const char |
3179 | { | 3205 | *SSL_get_psk_identity(const SSL *s) |
3206 | { | ||
3180 | if (s == NULL || s->session == NULL) | 3207 | if (s == NULL || s->session == NULL) |
3181 | return NULL; | 3208 | return NULL; |
3182 | return(s->session->psk_identity); | 3209 | return (s->session->psk_identity); |
3183 | } | 3210 | } |
3184 | 3211 | ||
3185 | void SSL_set_psk_client_callback(SSL *s, | 3212 | void |
3213 | SSL_set_psk_client_callback(SSL *s, | ||
3186 | unsigned int (*cb)(SSL *ssl, const char *hint, | 3214 | unsigned int (*cb)(SSL *ssl, const char *hint, |
3187 | char *identity, unsigned int max_identity_len, unsigned char *psk, | 3215 | char *identity, unsigned int max_identity_len, unsigned char *psk, |
3188 | unsigned int max_psk_len)) | 3216 | unsigned int max_psk_len)) |
3189 | { | 3217 | { |
3190 | s->psk_client_callback = cb; | 3218 | s->psk_client_callback = cb; |
3191 | } | 3219 | } |
3192 | 3220 | ||
3193 | void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, | 3221 | void |
3222 | SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, | ||
3194 | unsigned int (*cb)(SSL *ssl, const char *hint, | 3223 | unsigned int (*cb)(SSL *ssl, const char *hint, |
3195 | char *identity, unsigned int max_identity_len, unsigned char *psk, | 3224 | char *identity, unsigned int max_identity_len, unsigned char *psk, |
3196 | unsigned int max_psk_len)) | 3225 | unsigned int max_psk_len)) |
3197 | { | 3226 | { |
3198 | ctx->psk_client_callback = cb; | 3227 | ctx->psk_client_callback = cb; |
3199 | } | 3228 | } |
3200 | 3229 | ||
3201 | void SSL_set_psk_server_callback(SSL *s, | 3230 | void |
3231 | SSL_set_psk_server_callback(SSL *s, | ||
3202 | unsigned int (*cb)(SSL *ssl, const char *identity, | 3232 | unsigned int (*cb)(SSL *ssl, const char *identity, |
3203 | unsigned char *psk, unsigned int max_psk_len)) | 3233 | unsigned char *psk, unsigned int max_psk_len)) |
3204 | { | 3234 | { |
3205 | s->psk_server_callback = cb; | 3235 | s->psk_server_callback = cb; |
3206 | } | 3236 | } |
3207 | 3237 | ||
3208 | void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, | 3238 | void |
3239 | SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, | ||
3209 | unsigned int (*cb)(SSL *ssl, const char *identity, | 3240 | unsigned int (*cb)(SSL *ssl, const char *identity, |
3210 | unsigned char *psk, unsigned int max_psk_len)) | 3241 | unsigned char *psk, unsigned int max_psk_len)) |
3211 | { | 3242 | { |
3212 | ctx->psk_server_callback = cb; | 3243 | ctx->psk_server_callback = cb; |
3213 | } | 3244 | } |
3214 | #endif | 3245 | #endif |
3215 | 3246 | ||
3216 | void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) | 3247 | void |
3217 | { | 3248 | SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) |
3249 | { | ||
3218 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); | 3250 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); |
3219 | } | 3251 | } |
3220 | void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) | 3252 | |
3221 | { | 3253 | void |
3254 | SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) | ||
3255 | { | ||
3222 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); | 3256 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); |
3223 | } | 3257 | } |
3224 | 3258 | ||
3225 | /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer | 3259 | /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer |
3226 | * vairable, freeing EVP_MD_CTX previously stored in that variable, if | 3260 | * vairable, freeing EVP_MD_CTX previously stored in that variable, if |
@@ -3228,31 +3262,38 @@ void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int con | |||
3228 | * Returns newly allocated ctx; | 3262 | * Returns newly allocated ctx; |
3229 | */ | 3263 | */ |
3230 | 3264 | ||
3231 | EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash,const EVP_MD *md) | 3265 | EVP_MD_CTX |
3266 | *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md) | ||
3232 | { | 3267 | { |
3233 | ssl_clear_hash_ctx(hash); | 3268 | ssl_clear_hash_ctx(hash); |
3234 | *hash = EVP_MD_CTX_create(); | 3269 | *hash = EVP_MD_CTX_create(); |
3235 | if (md) EVP_DigestInit_ex(*hash,md,NULL); | 3270 | if (md) |
3271 | EVP_DigestInit_ex(*hash, md, NULL); | ||
3236 | return *hash; | 3272 | return *hash; |
3237 | } | 3273 | } |
3238 | void ssl_clear_hash_ctx(EVP_MD_CTX **hash) | 3274 | |
3275 | void | ||
3276 | ssl_clear_hash_ctx(EVP_MD_CTX **hash) | ||
3239 | { | 3277 | { |
3240 | 3278 | ||
3241 | if (*hash) EVP_MD_CTX_destroy(*hash); | 3279 | if (*hash) |
3242 | *hash=NULL; | 3280 | EVP_MD_CTX_destroy(*hash); |
3281 | *hash = NULL; | ||
3243 | } | 3282 | } |
3244 | 3283 | ||
3245 | void SSL_set_debug(SSL *s, int debug) | 3284 | void |
3246 | { | 3285 | SSL_set_debug(SSL *s, int debug) |
3286 | { | ||
3247 | s->debug = debug; | 3287 | s->debug = debug; |
3248 | } | 3288 | } |
3249 | 3289 | ||
3250 | int SSL_cache_hit(SSL *s) | 3290 | int |
3251 | { | 3291 | SSL_cache_hit(SSL *s) |
3292 | { | ||
3252 | return s->hit; | 3293 | return s->hit; |
3253 | } | 3294 | } |
3254 | 3295 | ||
3255 | IMPLEMENT_STACK_OF(SSL_CIPHER) | 3296 | IMPLEMENT_STACK_OF(SSL_CIPHER) |
3256 | IMPLEMENT_STACK_OF(SSL_COMP) | 3297 | IMPLEMENT_STACK_OF(SSL_COMP) |
3257 | IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, | 3298 | IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, |
3258 | ssl_cipher_id); | 3299 | ssl_cipher_id); |
diff --git a/src/lib/libssl/src/ssl/ssl_rsa.c b/src/lib/libssl/src/ssl/ssl_rsa.c index 60e7b66859..078df55f06 100644 --- a/src/lib/libssl/src/ssl/ssl_rsa.c +++ b/src/lib/libssl/src/ssl/ssl_rsa.c | |||
@@ -66,135 +66,126 @@ | |||
66 | 66 | ||
67 | static int ssl_set_cert(CERT *c, X509 *x509); | 67 | static int ssl_set_cert(CERT *c, X509 *x509); |
68 | static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey); | 68 | static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey); |
69 | int SSL_use_certificate(SSL *ssl, X509 *x) | 69 | int |
70 | { | 70 | SSL_use_certificate(SSL *ssl, X509 *x) |
71 | if (x == NULL) | 71 | { |
72 | { | 72 | if (x == NULL) { |
73 | SSLerr(SSL_F_SSL_USE_CERTIFICATE,ERR_R_PASSED_NULL_PARAMETER); | 73 | SSLerr(SSL_F_SSL_USE_CERTIFICATE, ERR_R_PASSED_NULL_PARAMETER); |
74 | return(0); | 74 | return (0); |
75 | } | 75 | } |
76 | if (!ssl_cert_inst(&ssl->cert)) | 76 | if (!ssl_cert_inst(&ssl->cert)) { |
77 | { | 77 | SSLerr(SSL_F_SSL_USE_CERTIFICATE, ERR_R_MALLOC_FAILURE); |
78 | SSLerr(SSL_F_SSL_USE_CERTIFICATE,ERR_R_MALLOC_FAILURE); | 78 | return (0); |
79 | return(0); | ||
80 | } | ||
81 | return(ssl_set_cert(ssl->cert,x)); | ||
82 | } | 79 | } |
80 | return (ssl_set_cert(ssl->cert, x)); | ||
81 | } | ||
83 | 82 | ||
84 | #ifndef OPENSSL_NO_STDIO | 83 | #ifndef OPENSSL_NO_STDIO |
85 | int SSL_use_certificate_file(SSL *ssl, const char *file, int type) | 84 | int |
86 | { | 85 | SSL_use_certificate_file(SSL *ssl, const char *file, int type) |
86 | { | ||
87 | int j; | 87 | int j; |
88 | BIO *in; | 88 | BIO *in; |
89 | int ret=0; | 89 | int ret = 0; |
90 | X509 *x=NULL; | 90 | X509 *x = NULL; |
91 | 91 | ||
92 | in=BIO_new(BIO_s_file_internal()); | 92 | in = BIO_new(BIO_s_file_internal()); |
93 | if (in == NULL) | 93 | if (in == NULL) { |
94 | { | 94 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, ERR_R_BUF_LIB); |
95 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,ERR_R_BUF_LIB); | ||
96 | goto end; | 95 | goto end; |
97 | } | 96 | } |
98 | 97 | ||
99 | if (BIO_read_filename(in,file) <= 0) | 98 | if (BIO_read_filename(in, file) <= 0) { |
100 | { | 99 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, ERR_R_SYS_LIB); |
101 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,ERR_R_SYS_LIB); | ||
102 | goto end; | 100 | goto end; |
103 | } | 101 | } |
104 | if (type == SSL_FILETYPE_ASN1) | 102 | if (type == SSL_FILETYPE_ASN1) { |
105 | { | 103 | j = ERR_R_ASN1_LIB; |
106 | j=ERR_R_ASN1_LIB; | 104 | x = d2i_X509_bio(in, NULL); |
107 | x=d2i_X509_bio(in,NULL); | 105 | } else if (type == SSL_FILETYPE_PEM) { |
108 | } | 106 | j = ERR_R_PEM_LIB; |
109 | else if (type == SSL_FILETYPE_PEM) | 107 | x = PEM_read_bio_X509(in, NULL, ssl->ctx->default_passwd_callback, ssl->ctx->default_passwd_callback_userdata); |
110 | { | 108 | } else { |
111 | j=ERR_R_PEM_LIB; | 109 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); |
112 | x=PEM_read_bio_X509(in,NULL,ssl->ctx->default_passwd_callback,ssl->ctx->default_passwd_callback_userdata); | ||
113 | } | ||
114 | else | ||
115 | { | ||
116 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
117 | goto end; | 110 | goto end; |
118 | } | 111 | } |
119 | 112 | ||
120 | if (x == NULL) | 113 | if (x == NULL) { |
121 | { | 114 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, j); |
122 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,j); | ||
123 | goto end; | 115 | goto end; |
124 | } | 116 | } |
125 | 117 | ||
126 | ret=SSL_use_certificate(ssl,x); | 118 | ret = SSL_use_certificate(ssl, x); |
127 | end: | 119 | end: |
128 | if (x != NULL) X509_free(x); | 120 | if (x != NULL) |
129 | if (in != NULL) BIO_free(in); | 121 | X509_free(x); |
130 | return(ret); | 122 | if (in != NULL) |
131 | } | 123 | BIO_free(in); |
124 | return (ret); | ||
125 | } | ||
132 | #endif | 126 | #endif |
133 | 127 | ||
134 | int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len) | 128 | int |
135 | { | 129 | SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len) |
130 | { | ||
136 | X509 *x; | 131 | X509 *x; |
137 | int ret; | 132 | int ret; |
138 | 133 | ||
139 | x=d2i_X509(NULL,&d,(long)len); | 134 | x = d2i_X509(NULL, &d,(long)len); |
140 | if (x == NULL) | 135 | if (x == NULL) { |
141 | { | 136 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_ASN1, ERR_R_ASN1_LIB); |
142 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_ASN1,ERR_R_ASN1_LIB); | 137 | return (0); |
143 | return(0); | 138 | } |
144 | } | ||
145 | 139 | ||
146 | ret=SSL_use_certificate(ssl,x); | 140 | ret = SSL_use_certificate(ssl, x); |
147 | X509_free(x); | 141 | X509_free(x); |
148 | return(ret); | 142 | return (ret); |
149 | } | 143 | } |
150 | 144 | ||
151 | #ifndef OPENSSL_NO_RSA | 145 | #ifndef OPENSSL_NO_RSA |
152 | int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) | 146 | int |
153 | { | 147 | SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) |
148 | { | ||
154 | EVP_PKEY *pkey; | 149 | EVP_PKEY *pkey; |
155 | int ret; | 150 | int ret; |
156 | 151 | ||
157 | if (rsa == NULL) | 152 | if (rsa == NULL) { |
158 | { | 153 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
159 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 154 | return (0); |
160 | return(0); | 155 | } |
161 | } | 156 | if (!ssl_cert_inst(&ssl->cert)) { |
162 | if (!ssl_cert_inst(&ssl->cert)) | 157 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY, ERR_R_MALLOC_FAILURE); |
163 | { | 158 | return (0); |
164 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY,ERR_R_MALLOC_FAILURE); | 159 | } |
165 | return(0); | 160 | if ((pkey = EVP_PKEY_new()) == NULL) { |
166 | } | 161 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY, ERR_R_EVP_LIB); |
167 | if ((pkey=EVP_PKEY_new()) == NULL) | 162 | return (0); |
168 | { | 163 | } |
169 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY,ERR_R_EVP_LIB); | ||
170 | return(0); | ||
171 | } | ||
172 | 164 | ||
173 | RSA_up_ref(rsa); | 165 | RSA_up_ref(rsa); |
174 | EVP_PKEY_assign_RSA(pkey,rsa); | 166 | EVP_PKEY_assign_RSA(pkey, rsa); |
175 | 167 | ||
176 | ret=ssl_set_pkey(ssl->cert,pkey); | 168 | ret = ssl_set_pkey(ssl->cert, pkey); |
177 | EVP_PKEY_free(pkey); | 169 | EVP_PKEY_free(pkey); |
178 | return(ret); | 170 | return (ret); |
179 | } | 171 | } |
180 | #endif | 172 | #endif |
181 | 173 | ||
182 | static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey) | 174 | static int |
183 | { | 175 | ssl_set_pkey(CERT *c, EVP_PKEY *pkey) |
176 | { | ||
184 | int i; | 177 | int i; |
185 | 178 | ||
186 | i=ssl_cert_type(NULL,pkey); | 179 | i = ssl_cert_type(NULL, pkey); |
187 | if (i < 0) | 180 | if (i < 0) { |
188 | { | 181 | SSLerr(SSL_F_SSL_SET_PKEY, SSL_R_UNKNOWN_CERTIFICATE_TYPE); |
189 | SSLerr(SSL_F_SSL_SET_PKEY,SSL_R_UNKNOWN_CERTIFICATE_TYPE); | 182 | return (0); |
190 | return(0); | 183 | } |
191 | } | ||
192 | 184 | ||
193 | if (c->pkeys[i].x509 != NULL) | 185 | if (c->pkeys[i].x509 != NULL) { |
194 | { | ||
195 | EVP_PKEY *pktmp; | 186 | EVP_PKEY *pktmp; |
196 | pktmp = X509_get_pubkey(c->pkeys[i].x509); | 187 | pktmp = X509_get_pubkey(c->pkeys[i].x509); |
197 | EVP_PKEY_copy_parameters(pktmp,pkey); | 188 | EVP_PKEY_copy_parameters(pktmp, pkey); |
198 | EVP_PKEY_free(pktmp); | 189 | EVP_PKEY_free(pktmp); |
199 | ERR_clear_error(); | 190 | ERR_clear_error(); |
200 | 191 | ||
@@ -203,217 +194,200 @@ static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey) | |||
203 | * for smart cards. */ | 194 | * for smart cards. */ |
204 | if ((pkey->type == EVP_PKEY_RSA) && | 195 | if ((pkey->type == EVP_PKEY_RSA) && |
205 | (RSA_flags(pkey->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) | 196 | (RSA_flags(pkey->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) |
206 | ; | 197 | ; |
207 | else | 198 | else |
208 | #endif | 199 | #endif |
209 | if (!X509_check_private_key(c->pkeys[i].x509,pkey)) | 200 | if (!X509_check_private_key(c->pkeys[i].x509, pkey)) { |
210 | { | ||
211 | X509_free(c->pkeys[i].x509); | 201 | X509_free(c->pkeys[i].x509); |
212 | c->pkeys[i].x509 = NULL; | 202 | c->pkeys[i].x509 = NULL; |
213 | return 0; | 203 | return 0; |
214 | } | ||
215 | } | 204 | } |
205 | } | ||
216 | 206 | ||
217 | if (c->pkeys[i].privatekey != NULL) | 207 | if (c->pkeys[i].privatekey != NULL) |
218 | EVP_PKEY_free(c->pkeys[i].privatekey); | 208 | EVP_PKEY_free(c->pkeys[i].privatekey); |
219 | CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY); | 209 | CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); |
220 | c->pkeys[i].privatekey=pkey; | 210 | c->pkeys[i].privatekey = pkey; |
221 | c->key= &(c->pkeys[i]); | 211 | c->key = &(c->pkeys[i]); |
222 | 212 | ||
223 | c->valid=0; | 213 | c->valid = 0; |
224 | return(1); | 214 | return (1); |
225 | } | 215 | } |
226 | 216 | ||
227 | #ifndef OPENSSL_NO_RSA | 217 | #ifndef OPENSSL_NO_RSA |
228 | #ifndef OPENSSL_NO_STDIO | 218 | #ifndef OPENSSL_NO_STDIO |
229 | int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type) | 219 | int |
230 | { | 220 | SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type) |
231 | int j,ret=0; | 221 | { |
222 | int j, ret = 0; | ||
232 | BIO *in; | 223 | BIO *in; |
233 | RSA *rsa=NULL; | 224 | RSA *rsa = NULL; |
234 | 225 | ||
235 | in=BIO_new(BIO_s_file_internal()); | 226 | in = BIO_new(BIO_s_file_internal()); |
236 | if (in == NULL) | 227 | if (in == NULL) { |
237 | { | 228 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, ERR_R_BUF_LIB); |
238 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
239 | goto end; | 229 | goto end; |
240 | } | 230 | } |
241 | 231 | ||
242 | if (BIO_read_filename(in,file) <= 0) | 232 | if (BIO_read_filename(in, file) <= 0) { |
243 | { | 233 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, ERR_R_SYS_LIB); |
244 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
245 | goto end; | 234 | goto end; |
246 | } | 235 | } |
247 | if (type == SSL_FILETYPE_ASN1) | 236 | if (type == SSL_FILETYPE_ASN1) { |
248 | { | 237 | j = ERR_R_ASN1_LIB; |
249 | j=ERR_R_ASN1_LIB; | 238 | rsa = d2i_RSAPrivateKey_bio(in, NULL); |
250 | rsa=d2i_RSAPrivateKey_bio(in,NULL); | 239 | } else if (type == SSL_FILETYPE_PEM) { |
251 | } | 240 | j = ERR_R_PEM_LIB; |
252 | else if (type == SSL_FILETYPE_PEM) | 241 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, |
253 | { | 242 | ssl->ctx->default_passwd_callback, ssl->ctx->default_passwd_callback_userdata); |
254 | j=ERR_R_PEM_LIB; | 243 | } else { |
255 | rsa=PEM_read_bio_RSAPrivateKey(in,NULL, | 244 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
256 | ssl->ctx->default_passwd_callback,ssl->ctx->default_passwd_callback_userdata); | ||
257 | } | ||
258 | else | ||
259 | { | ||
260 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
261 | goto end; | 245 | goto end; |
262 | } | 246 | } |
263 | if (rsa == NULL) | 247 | if (rsa == NULL) { |
264 | { | 248 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, j); |
265 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,j); | ||
266 | goto end; | 249 | goto end; |
267 | } | 250 | } |
268 | ret=SSL_use_RSAPrivateKey(ssl,rsa); | 251 | ret = SSL_use_RSAPrivateKey(ssl, rsa); |
269 | RSA_free(rsa); | 252 | RSA_free(rsa); |
270 | end: | 253 | end: |
271 | if (in != NULL) BIO_free(in); | 254 | if (in != NULL) |
272 | return(ret); | 255 | BIO_free(in); |
273 | } | 256 | return (ret); |
257 | } | ||
274 | #endif | 258 | #endif |
275 | 259 | ||
276 | int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len) | 260 | int |
277 | { | 261 | SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len) |
262 | { | ||
278 | int ret; | 263 | int ret; |
279 | const unsigned char *p; | 264 | const unsigned char *p; |
280 | RSA *rsa; | 265 | RSA *rsa; |
281 | 266 | ||
282 | p=d; | 267 | p = d; |
283 | if ((rsa=d2i_RSAPrivateKey(NULL,&p,(long)len)) == NULL) | 268 | if ((rsa = d2i_RSAPrivateKey(NULL, &p,(long)len)) == NULL) { |
284 | { | 269 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
285 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 270 | return (0); |
286 | return(0); | 271 | } |
287 | } | ||
288 | 272 | ||
289 | ret=SSL_use_RSAPrivateKey(ssl,rsa); | 273 | ret = SSL_use_RSAPrivateKey(ssl, rsa); |
290 | RSA_free(rsa); | 274 | RSA_free(rsa); |
291 | return(ret); | 275 | return (ret); |
292 | } | 276 | } |
293 | #endif /* !OPENSSL_NO_RSA */ | 277 | #endif /* !OPENSSL_NO_RSA */ |
294 | 278 | ||
295 | int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) | 279 | int |
296 | { | 280 | SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) |
281 | { | ||
297 | int ret; | 282 | int ret; |
298 | 283 | ||
299 | if (pkey == NULL) | 284 | if (pkey == NULL) { |
300 | { | 285 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
301 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 286 | return (0); |
302 | return(0); | 287 | } |
303 | } | 288 | if (!ssl_cert_inst(&ssl->cert)) { |
304 | if (!ssl_cert_inst(&ssl->cert)) | 289 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY, ERR_R_MALLOC_FAILURE); |
305 | { | 290 | return (0); |
306 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY,ERR_R_MALLOC_FAILURE); | ||
307 | return(0); | ||
308 | } | ||
309 | ret=ssl_set_pkey(ssl->cert,pkey); | ||
310 | return(ret); | ||
311 | } | 291 | } |
292 | ret = ssl_set_pkey(ssl->cert, pkey); | ||
293 | return (ret); | ||
294 | } | ||
312 | 295 | ||
313 | #ifndef OPENSSL_NO_STDIO | 296 | #ifndef OPENSSL_NO_STDIO |
314 | int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type) | 297 | int |
315 | { | 298 | SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type) |
316 | int j,ret=0; | 299 | { |
300 | int j, ret = 0; | ||
317 | BIO *in; | 301 | BIO *in; |
318 | EVP_PKEY *pkey=NULL; | 302 | EVP_PKEY *pkey = NULL; |
319 | 303 | ||
320 | in=BIO_new(BIO_s_file_internal()); | 304 | in = BIO_new(BIO_s_file_internal()); |
321 | if (in == NULL) | 305 | if (in == NULL) { |
322 | { | 306 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, ERR_R_BUF_LIB); |
323 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
324 | goto end; | 307 | goto end; |
325 | } | 308 | } |
326 | 309 | ||
327 | if (BIO_read_filename(in,file) <= 0) | 310 | if (BIO_read_filename(in, file) <= 0) { |
328 | { | 311 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, ERR_R_SYS_LIB); |
329 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
330 | goto end; | 312 | goto end; |
331 | } | 313 | } |
332 | if (type == SSL_FILETYPE_PEM) | 314 | if (type == SSL_FILETYPE_PEM) { |
333 | { | 315 | j = ERR_R_PEM_LIB; |
334 | j=ERR_R_PEM_LIB; | 316 | pkey = PEM_read_bio_PrivateKey(in, NULL, |
335 | pkey=PEM_read_bio_PrivateKey(in,NULL, | 317 | ssl->ctx->default_passwd_callback, ssl->ctx->default_passwd_callback_userdata); |
336 | ssl->ctx->default_passwd_callback,ssl->ctx->default_passwd_callback_userdata); | 318 | } else if (type == SSL_FILETYPE_ASN1) { |
337 | } | ||
338 | else if (type == SSL_FILETYPE_ASN1) | ||
339 | { | ||
340 | j = ERR_R_ASN1_LIB; | 319 | j = ERR_R_ASN1_LIB; |
341 | pkey = d2i_PrivateKey_bio(in,NULL); | 320 | pkey = d2i_PrivateKey_bio(in, NULL); |
342 | } | 321 | } else { |
343 | else | 322 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
344 | { | ||
345 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
346 | goto end; | 323 | goto end; |
347 | } | 324 | } |
348 | if (pkey == NULL) | 325 | if (pkey == NULL) { |
349 | { | 326 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, j); |
350 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,j); | ||
351 | goto end; | 327 | goto end; |
352 | } | 328 | } |
353 | ret=SSL_use_PrivateKey(ssl,pkey); | 329 | ret = SSL_use_PrivateKey(ssl, pkey); |
354 | EVP_PKEY_free(pkey); | 330 | EVP_PKEY_free(pkey); |
355 | end: | 331 | end: |
356 | if (in != NULL) BIO_free(in); | 332 | if (in != NULL) |
357 | return(ret); | 333 | BIO_free(in); |
358 | } | 334 | return (ret); |
335 | } | ||
359 | #endif | 336 | #endif |
360 | 337 | ||
361 | int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len) | 338 | int |
362 | { | 339 | SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len) |
340 | { | ||
363 | int ret; | 341 | int ret; |
364 | const unsigned char *p; | 342 | const unsigned char *p; |
365 | EVP_PKEY *pkey; | 343 | EVP_PKEY *pkey; |
366 | 344 | ||
367 | p=d; | 345 | p = d; |
368 | if ((pkey=d2i_PrivateKey(type,NULL,&p,(long)len)) == NULL) | 346 | if ((pkey = d2i_PrivateKey(type, NULL, &p,(long)len)) == NULL) { |
369 | { | 347 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
370 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 348 | return (0); |
371 | return(0); | 349 | } |
372 | } | ||
373 | 350 | ||
374 | ret=SSL_use_PrivateKey(ssl,pkey); | 351 | ret = SSL_use_PrivateKey(ssl, pkey); |
375 | EVP_PKEY_free(pkey); | 352 | EVP_PKEY_free(pkey); |
376 | return(ret); | 353 | return (ret); |
354 | } | ||
355 | |||
356 | int | ||
357 | SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) | ||
358 | { | ||
359 | if (x == NULL) { | ||
360 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_PASSED_NULL_PARAMETER); | ||
361 | return (0); | ||
377 | } | 362 | } |
378 | 363 | if (!ssl_cert_inst(&ctx->cert)) { | |
379 | int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) | 364 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_MALLOC_FAILURE); |
380 | { | 365 | return (0); |
381 | if (x == NULL) | ||
382 | { | ||
383 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE,ERR_R_PASSED_NULL_PARAMETER); | ||
384 | return(0); | ||
385 | } | ||
386 | if (!ssl_cert_inst(&ctx->cert)) | ||
387 | { | ||
388 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE,ERR_R_MALLOC_FAILURE); | ||
389 | return(0); | ||
390 | } | ||
391 | return(ssl_set_cert(ctx->cert, x)); | ||
392 | } | 366 | } |
367 | return (ssl_set_cert(ctx->cert, x)); | ||
368 | } | ||
393 | 369 | ||
394 | static int ssl_set_cert(CERT *c, X509 *x) | 370 | static int |
395 | { | 371 | ssl_set_cert(CERT *c, X509 *x) |
372 | { | ||
396 | EVP_PKEY *pkey; | 373 | EVP_PKEY *pkey; |
397 | int i; | 374 | int i; |
398 | 375 | ||
399 | pkey=X509_get_pubkey(x); | 376 | pkey = X509_get_pubkey(x); |
400 | if (pkey == NULL) | 377 | if (pkey == NULL) { |
401 | { | 378 | SSLerr(SSL_F_SSL_SET_CERT, SSL_R_X509_LIB); |
402 | SSLerr(SSL_F_SSL_SET_CERT,SSL_R_X509_LIB); | 379 | return (0); |
403 | return(0); | 380 | } |
404 | } | ||
405 | 381 | ||
406 | i=ssl_cert_type(x,pkey); | 382 | i = ssl_cert_type(x, pkey); |
407 | if (i < 0) | 383 | if (i < 0) { |
408 | { | 384 | SSLerr(SSL_F_SSL_SET_CERT, SSL_R_UNKNOWN_CERTIFICATE_TYPE); |
409 | SSLerr(SSL_F_SSL_SET_CERT,SSL_R_UNKNOWN_CERTIFICATE_TYPE); | ||
410 | EVP_PKEY_free(pkey); | 385 | EVP_PKEY_free(pkey); |
411 | return(0); | 386 | return (0); |
412 | } | 387 | } |
413 | 388 | ||
414 | if (c->pkeys[i].privatekey != NULL) | 389 | if (c->pkeys[i].privatekey != NULL) { |
415 | { | 390 | EVP_PKEY_copy_parameters(pkey, c->pkeys[i].privatekey); |
416 | EVP_PKEY_copy_parameters(pkey,c->pkeys[i].privatekey); | ||
417 | ERR_clear_error(); | 391 | ERR_clear_error(); |
418 | 392 | ||
419 | #ifndef OPENSSL_NO_RSA | 393 | #ifndef OPENSSL_NO_RSA |
@@ -421,280 +395,259 @@ static int ssl_set_cert(CERT *c, X509 *x) | |||
421 | * for smart cards. */ | 395 | * for smart cards. */ |
422 | if ((c->pkeys[i].privatekey->type == EVP_PKEY_RSA) && | 396 | if ((c->pkeys[i].privatekey->type == EVP_PKEY_RSA) && |
423 | (RSA_flags(c->pkeys[i].privatekey->pkey.rsa) & | 397 | (RSA_flags(c->pkeys[i].privatekey->pkey.rsa) & |
424 | RSA_METHOD_FLAG_NO_CHECK)) | 398 | RSA_METHOD_FLAG_NO_CHECK)) |
425 | ; | 399 | ; |
426 | else | 400 | else |
427 | #endif /* OPENSSL_NO_RSA */ | 401 | #endif /* OPENSSL_NO_RSA */ |
428 | if (!X509_check_private_key(x,c->pkeys[i].privatekey)) | 402 | if (!X509_check_private_key(x, c->pkeys[i].privatekey)) { |
429 | { | ||
430 | /* don't fail for a cert/key mismatch, just free | 403 | /* don't fail for a cert/key mismatch, just free |
431 | * current private key (when switching to a different | 404 | * current private key (when switching to a different |
432 | * cert & key, first this function should be used, | 405 | * cert & key, first this function should be used, |
433 | * then ssl_set_pkey */ | 406 | * then ssl_set_pkey */ |
434 | EVP_PKEY_free(c->pkeys[i].privatekey); | 407 | EVP_PKEY_free(c->pkeys[i].privatekey); |
435 | c->pkeys[i].privatekey=NULL; | 408 | c->pkeys[i].privatekey = NULL; |
436 | /* clear error queue */ | 409 | /* clear error queue */ |
437 | ERR_clear_error(); | 410 | ERR_clear_error(); |
438 | } | ||
439 | } | 411 | } |
412 | } | ||
440 | 413 | ||
441 | EVP_PKEY_free(pkey); | 414 | EVP_PKEY_free(pkey); |
442 | 415 | ||
443 | if (c->pkeys[i].x509 != NULL) | 416 | if (c->pkeys[i].x509 != NULL) |
444 | X509_free(c->pkeys[i].x509); | 417 | X509_free(c->pkeys[i].x509); |
445 | CRYPTO_add(&x->references,1,CRYPTO_LOCK_X509); | 418 | CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); |
446 | c->pkeys[i].x509=x; | 419 | c->pkeys[i].x509 = x; |
447 | c->key= &(c->pkeys[i]); | 420 | c->key = &(c->pkeys[i]); |
448 | 421 | ||
449 | c->valid=0; | 422 | c->valid = 0; |
450 | return(1); | 423 | return (1); |
451 | } | 424 | } |
452 | 425 | ||
453 | #ifndef OPENSSL_NO_STDIO | 426 | #ifndef OPENSSL_NO_STDIO |
454 | int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type) | 427 | int |
455 | { | 428 | SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type) |
429 | { | ||
456 | int j; | 430 | int j; |
457 | BIO *in; | 431 | BIO *in; |
458 | int ret=0; | 432 | int ret = 0; |
459 | X509 *x=NULL; | 433 | X509 *x = NULL; |
460 | 434 | ||
461 | in=BIO_new(BIO_s_file_internal()); | 435 | in = BIO_new(BIO_s_file_internal()); |
462 | if (in == NULL) | 436 | if (in == NULL) { |
463 | { | 437 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, ERR_R_BUF_LIB); |
464 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,ERR_R_BUF_LIB); | ||
465 | goto end; | 438 | goto end; |
466 | } | 439 | } |
467 | 440 | ||
468 | if (BIO_read_filename(in,file) <= 0) | 441 | if (BIO_read_filename(in, file) <= 0) { |
469 | { | 442 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, ERR_R_SYS_LIB); |
470 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,ERR_R_SYS_LIB); | ||
471 | goto end; | 443 | goto end; |
472 | } | 444 | } |
473 | if (type == SSL_FILETYPE_ASN1) | 445 | if (type == SSL_FILETYPE_ASN1) { |
474 | { | 446 | j = ERR_R_ASN1_LIB; |
475 | j=ERR_R_ASN1_LIB; | 447 | x = d2i_X509_bio(in, NULL); |
476 | x=d2i_X509_bio(in,NULL); | 448 | } else if (type == SSL_FILETYPE_PEM) { |
477 | } | 449 | j = ERR_R_PEM_LIB; |
478 | else if (type == SSL_FILETYPE_PEM) | 450 | x = PEM_read_bio_X509(in, NULL, ctx->default_passwd_callback, ctx->default_passwd_callback_userdata); |
479 | { | 451 | } else { |
480 | j=ERR_R_PEM_LIB; | 452 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); |
481 | x=PEM_read_bio_X509(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); | ||
482 | } | ||
483 | else | ||
484 | { | ||
485 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
486 | goto end; | 453 | goto end; |
487 | } | 454 | } |
488 | 455 | ||
489 | if (x == NULL) | 456 | if (x == NULL) { |
490 | { | 457 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, j); |
491 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,j); | ||
492 | goto end; | 458 | goto end; |
493 | } | 459 | } |
494 | 460 | ||
495 | ret=SSL_CTX_use_certificate(ctx,x); | 461 | ret = SSL_CTX_use_certificate(ctx, x); |
496 | end: | 462 | end: |
497 | if (x != NULL) X509_free(x); | 463 | if (x != NULL) |
498 | if (in != NULL) BIO_free(in); | 464 | X509_free(x); |
499 | return(ret); | 465 | if (in != NULL) |
500 | } | 466 | BIO_free(in); |
467 | return (ret); | ||
468 | } | ||
501 | #endif | 469 | #endif |
502 | 470 | ||
503 | int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) | 471 | int |
504 | { | 472 | SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) |
473 | { | ||
505 | X509 *x; | 474 | X509 *x; |
506 | int ret; | 475 | int ret; |
507 | 476 | ||
508 | x=d2i_X509(NULL,&d,(long)len); | 477 | x = d2i_X509(NULL, &d,(long)len); |
509 | if (x == NULL) | 478 | if (x == NULL) { |
510 | { | 479 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1, ERR_R_ASN1_LIB); |
511 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1,ERR_R_ASN1_LIB); | 480 | return (0); |
512 | return(0); | 481 | } |
513 | } | ||
514 | 482 | ||
515 | ret=SSL_CTX_use_certificate(ctx,x); | 483 | ret = SSL_CTX_use_certificate(ctx, x); |
516 | X509_free(x); | 484 | X509_free(x); |
517 | return(ret); | 485 | return (ret); |
518 | } | 486 | } |
519 | 487 | ||
520 | #ifndef OPENSSL_NO_RSA | 488 | #ifndef OPENSSL_NO_RSA |
521 | int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) | 489 | int |
522 | { | 490 | SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) |
491 | { | ||
523 | int ret; | 492 | int ret; |
524 | EVP_PKEY *pkey; | 493 | EVP_PKEY *pkey; |
525 | 494 | ||
526 | if (rsa == NULL) | 495 | if (rsa == NULL) { |
527 | { | 496 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
528 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 497 | return (0); |
529 | return(0); | 498 | } |
530 | } | 499 | if (!ssl_cert_inst(&ctx->cert)) { |
531 | if (!ssl_cert_inst(&ctx->cert)) | 500 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_MALLOC_FAILURE); |
532 | { | 501 | return (0); |
533 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY,ERR_R_MALLOC_FAILURE); | 502 | } |
534 | return(0); | 503 | if ((pkey = EVP_PKEY_new()) == NULL) { |
535 | } | 504 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_EVP_LIB); |
536 | if ((pkey=EVP_PKEY_new()) == NULL) | 505 | return (0); |
537 | { | 506 | } |
538 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY,ERR_R_EVP_LIB); | ||
539 | return(0); | ||
540 | } | ||
541 | 507 | ||
542 | RSA_up_ref(rsa); | 508 | RSA_up_ref(rsa); |
543 | EVP_PKEY_assign_RSA(pkey,rsa); | 509 | EVP_PKEY_assign_RSA(pkey, rsa); |
544 | 510 | ||
545 | ret=ssl_set_pkey(ctx->cert, pkey); | 511 | ret = ssl_set_pkey(ctx->cert, pkey); |
546 | EVP_PKEY_free(pkey); | 512 | EVP_PKEY_free(pkey); |
547 | return(ret); | 513 | return (ret); |
548 | } | 514 | } |
549 | 515 | ||
550 | #ifndef OPENSSL_NO_STDIO | 516 | #ifndef OPENSSL_NO_STDIO |
551 | int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type) | 517 | int |
552 | { | 518 | SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type) |
553 | int j,ret=0; | 519 | { |
520 | int j, ret = 0; | ||
554 | BIO *in; | 521 | BIO *in; |
555 | RSA *rsa=NULL; | 522 | RSA *rsa = NULL; |
556 | 523 | ||
557 | in=BIO_new(BIO_s_file_internal()); | 524 | in = BIO_new(BIO_s_file_internal()); |
558 | if (in == NULL) | 525 | if (in == NULL) { |
559 | { | 526 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, ERR_R_BUF_LIB); |
560 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
561 | goto end; | 527 | goto end; |
562 | } | 528 | } |
563 | 529 | ||
564 | if (BIO_read_filename(in,file) <= 0) | 530 | if (BIO_read_filename(in, file) <= 0) { |
565 | { | 531 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, ERR_R_SYS_LIB); |
566 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
567 | goto end; | 532 | goto end; |
568 | } | 533 | } |
569 | if (type == SSL_FILETYPE_ASN1) | 534 | if (type == SSL_FILETYPE_ASN1) { |
570 | { | 535 | j = ERR_R_ASN1_LIB; |
571 | j=ERR_R_ASN1_LIB; | 536 | rsa = d2i_RSAPrivateKey_bio(in, NULL); |
572 | rsa=d2i_RSAPrivateKey_bio(in,NULL); | 537 | } else if (type == SSL_FILETYPE_PEM) { |
573 | } | 538 | j = ERR_R_PEM_LIB; |
574 | else if (type == SSL_FILETYPE_PEM) | 539 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, |
575 | { | 540 | ctx->default_passwd_callback, ctx->default_passwd_callback_userdata); |
576 | j=ERR_R_PEM_LIB; | 541 | } else { |
577 | rsa=PEM_read_bio_RSAPrivateKey(in,NULL, | 542 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
578 | ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); | ||
579 | } | ||
580 | else | ||
581 | { | ||
582 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
583 | goto end; | 543 | goto end; |
584 | } | 544 | } |
585 | if (rsa == NULL) | 545 | if (rsa == NULL) { |
586 | { | 546 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, j); |
587 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,j); | ||
588 | goto end; | 547 | goto end; |
589 | } | 548 | } |
590 | ret=SSL_CTX_use_RSAPrivateKey(ctx,rsa); | 549 | ret = SSL_CTX_use_RSAPrivateKey(ctx, rsa); |
591 | RSA_free(rsa); | 550 | RSA_free(rsa); |
592 | end: | 551 | end: |
593 | if (in != NULL) BIO_free(in); | 552 | if (in != NULL) |
594 | return(ret); | 553 | BIO_free(in); |
595 | } | 554 | return (ret); |
555 | } | ||
596 | #endif | 556 | #endif |
597 | 557 | ||
598 | int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len) | 558 | int |
599 | { | 559 | SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len) |
560 | { | ||
600 | int ret; | 561 | int ret; |
601 | const unsigned char *p; | 562 | const unsigned char *p; |
602 | RSA *rsa; | 563 | RSA *rsa; |
603 | 564 | ||
604 | p=d; | 565 | p = d; |
605 | if ((rsa=d2i_RSAPrivateKey(NULL,&p,(long)len)) == NULL) | 566 | if ((rsa = d2i_RSAPrivateKey(NULL, &p,(long)len)) == NULL) { |
606 | { | 567 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
607 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 568 | return (0); |
608 | return(0); | 569 | } |
609 | } | ||
610 | 570 | ||
611 | ret=SSL_CTX_use_RSAPrivateKey(ctx,rsa); | 571 | ret = SSL_CTX_use_RSAPrivateKey(ctx, rsa); |
612 | RSA_free(rsa); | 572 | RSA_free(rsa); |
613 | return(ret); | 573 | return (ret); |
614 | } | 574 | } |
615 | #endif /* !OPENSSL_NO_RSA */ | 575 | #endif /* !OPENSSL_NO_RSA */ |
616 | 576 | ||
617 | int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) | 577 | int |
618 | { | 578 | SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) |
619 | if (pkey == NULL) | 579 | { |
620 | { | 580 | if (pkey == NULL) { |
621 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 581 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
622 | return(0); | 582 | return (0); |
623 | } | ||
624 | if (!ssl_cert_inst(&ctx->cert)) | ||
625 | { | ||
626 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY,ERR_R_MALLOC_FAILURE); | ||
627 | return(0); | ||
628 | } | ||
629 | return(ssl_set_pkey(ctx->cert,pkey)); | ||
630 | } | 583 | } |
584 | if (!ssl_cert_inst(&ctx->cert)) { | ||
585 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY, ERR_R_MALLOC_FAILURE); | ||
586 | return (0); | ||
587 | } | ||
588 | return (ssl_set_pkey(ctx->cert, pkey)); | ||
589 | } | ||
631 | 590 | ||
632 | #ifndef OPENSSL_NO_STDIO | 591 | #ifndef OPENSSL_NO_STDIO |
633 | int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) | 592 | int |
634 | { | 593 | SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) |
635 | int j,ret=0; | 594 | { |
595 | int j, ret = 0; | ||
636 | BIO *in; | 596 | BIO *in; |
637 | EVP_PKEY *pkey=NULL; | 597 | EVP_PKEY *pkey = NULL; |
638 | 598 | ||
639 | in=BIO_new(BIO_s_file_internal()); | 599 | in = BIO_new(BIO_s_file_internal()); |
640 | if (in == NULL) | 600 | if (in == NULL) { |
641 | { | 601 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, ERR_R_BUF_LIB); |
642 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
643 | goto end; | 602 | goto end; |
644 | } | 603 | } |
645 | 604 | ||
646 | if (BIO_read_filename(in,file) <= 0) | 605 | if (BIO_read_filename(in, file) <= 0) { |
647 | { | 606 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, ERR_R_SYS_LIB); |
648 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
649 | goto end; | 607 | goto end; |
650 | } | 608 | } |
651 | if (type == SSL_FILETYPE_PEM) | 609 | if (type == SSL_FILETYPE_PEM) { |
652 | { | 610 | j = ERR_R_PEM_LIB; |
653 | j=ERR_R_PEM_LIB; | 611 | pkey = PEM_read_bio_PrivateKey(in, NULL, |
654 | pkey=PEM_read_bio_PrivateKey(in,NULL, | 612 | ctx->default_passwd_callback, ctx->default_passwd_callback_userdata); |
655 | ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); | 613 | } else if (type == SSL_FILETYPE_ASN1) { |
656 | } | ||
657 | else if (type == SSL_FILETYPE_ASN1) | ||
658 | { | ||
659 | j = ERR_R_ASN1_LIB; | 614 | j = ERR_R_ASN1_LIB; |
660 | pkey = d2i_PrivateKey_bio(in,NULL); | 615 | pkey = d2i_PrivateKey_bio(in, NULL); |
661 | } | 616 | } else { |
662 | else | 617 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
663 | { | ||
664 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
665 | goto end; | 618 | goto end; |
666 | } | 619 | } |
667 | if (pkey == NULL) | 620 | if (pkey == NULL) { |
668 | { | 621 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, j); |
669 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,j); | ||
670 | goto end; | 622 | goto end; |
671 | } | 623 | } |
672 | ret=SSL_CTX_use_PrivateKey(ctx,pkey); | 624 | ret = SSL_CTX_use_PrivateKey(ctx, pkey); |
673 | EVP_PKEY_free(pkey); | 625 | EVP_PKEY_free(pkey); |
674 | end: | 626 | end: |
675 | if (in != NULL) BIO_free(in); | 627 | if (in != NULL) |
676 | return(ret); | 628 | BIO_free(in); |
677 | } | 629 | return (ret); |
630 | } | ||
678 | #endif | 631 | #endif |
679 | 632 | ||
680 | int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, | 633 | int |
681 | long len) | 634 | SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, |
682 | { | 635 | long len) |
636 | { | ||
683 | int ret; | 637 | int ret; |
684 | const unsigned char *p; | 638 | const unsigned char *p; |
685 | EVP_PKEY *pkey; | 639 | EVP_PKEY *pkey; |
686 | 640 | ||
687 | p=d; | 641 | p = d; |
688 | if ((pkey=d2i_PrivateKey(type,NULL,&p,(long)len)) == NULL) | 642 | if ((pkey = d2i_PrivateKey(type, NULL, &p,(long)len)) == NULL) { |
689 | { | 643 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
690 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 644 | return (0); |
691 | return(0); | 645 | } |
692 | } | ||
693 | 646 | ||
694 | ret=SSL_CTX_use_PrivateKey(ctx,pkey); | 647 | ret = SSL_CTX_use_PrivateKey(ctx, pkey); |
695 | EVP_PKEY_free(pkey); | 648 | EVP_PKEY_free(pkey); |
696 | return(ret); | 649 | return (ret); |
697 | } | 650 | } |
698 | 651 | ||
699 | 652 | ||
700 | #ifndef OPENSSL_NO_STDIO | 653 | #ifndef OPENSSL_NO_STDIO |
@@ -702,82 +655,79 @@ int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, | |||
702 | * possibly followed by a sequence of CA certificates that should be | 655 | * possibly followed by a sequence of CA certificates that should be |
703 | * sent to the peer in the Certificate message. | 656 | * sent to the peer in the Certificate message. |
704 | */ | 657 | */ |
705 | int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file) | 658 | int |
706 | { | 659 | SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file) |
660 | { | ||
707 | BIO *in; | 661 | BIO *in; |
708 | int ret=0; | 662 | int ret = 0; |
709 | X509 *x=NULL; | 663 | X509 *x = NULL; |
710 | 664 | ||
711 | ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ | 665 | ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ |
712 | 666 | ||
713 | in = BIO_new(BIO_s_file_internal()); | 667 | in = BIO_new(BIO_s_file_internal()); |
714 | if (in == NULL) | 668 | if (in == NULL) { |
715 | { | 669 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_BUF_LIB); |
716 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_BUF_LIB); | ||
717 | goto end; | 670 | goto end; |
718 | } | 671 | } |
719 | 672 | ||
720 | if (BIO_read_filename(in,file) <= 0) | 673 | if (BIO_read_filename(in, file) <= 0) { |
721 | { | 674 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_SYS_LIB); |
722 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_SYS_LIB); | ||
723 | goto end; | 675 | goto end; |
724 | } | 676 | } |
725 | 677 | ||
726 | x=PEM_read_bio_X509_AUX(in,NULL,ctx->default_passwd_callback, | 678 | x = PEM_read_bio_X509_AUX(in, NULL, ctx->default_passwd_callback, |
727 | ctx->default_passwd_callback_userdata); | 679 | ctx->default_passwd_callback_userdata); |
728 | if (x == NULL) | 680 | if (x == NULL) { |
729 | { | 681 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_PEM_LIB); |
730 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_PEM_LIB); | ||
731 | goto end; | 682 | goto end; |
732 | } | 683 | } |
733 | 684 | ||
734 | ret = SSL_CTX_use_certificate(ctx, x); | 685 | ret = SSL_CTX_use_certificate(ctx, x); |
735 | 686 | ||
736 | if (ERR_peek_error() != 0) | 687 | if (ERR_peek_error() != 0) |
737 | ret = 0; /* Key/certificate mismatch doesn't imply ret==0 ... */ | 688 | ret = 0; |
738 | if (ret) | 689 | /* Key/certificate mismatch doesn't imply ret==0 ... */ |
739 | { | 690 | if (ret) { |
740 | /* If we could set up our certificate, now proceed to | 691 | /* If we could set up our certificate, now proceed to |
741 | * the CA certificates. | 692 | * the CA certificates. |
742 | */ | 693 | */ |
743 | X509 *ca; | 694 | X509 *ca; |
744 | int r; | 695 | int r; |
745 | unsigned long err; | 696 | unsigned long err; |
746 | 697 | ||
747 | if (ctx->extra_certs != NULL) | 698 | if (ctx->extra_certs != NULL) { |
748 | { | ||
749 | sk_X509_pop_free(ctx->extra_certs, X509_free); | 699 | sk_X509_pop_free(ctx->extra_certs, X509_free); |
750 | ctx->extra_certs = NULL; | 700 | ctx->extra_certs = NULL; |
751 | } | 701 | } |
752 | 702 | ||
753 | while ((ca = PEM_read_bio_X509(in, NULL, | 703 | while ((ca = PEM_read_bio_X509(in, NULL, |
754 | ctx->default_passwd_callback, | 704 | ctx->default_passwd_callback, |
755 | ctx->default_passwd_callback_userdata)) | 705 | ctx->default_passwd_callback_userdata)) |
756 | != NULL) | 706 | != NULL) { |
757 | { | ||
758 | r = SSL_CTX_add_extra_chain_cert(ctx, ca); | 707 | r = SSL_CTX_add_extra_chain_cert(ctx, ca); |
759 | if (!r) | 708 | if (!r) { |
760 | { | ||
761 | X509_free(ca); | 709 | X509_free(ca); |
762 | ret = 0; | 710 | ret = 0; |
763 | goto end; | 711 | goto end; |
764 | } | 712 | } |
765 | /* Note that we must not free r if it was successfully | 713 | /* Note that we must not free r if it was successfully |
766 | * added to the chain (while we must free the main | 714 | * added to the chain (while we must free the main |
767 | * certificate, since its reference count is increased | 715 | * certificate, since its reference count is increased |
768 | * by SSL_CTX_use_certificate). */ | 716 | * by SSL_CTX_use_certificate). */ |
769 | } | 717 | } |
770 | /* When the while loop ends, it's usually just EOF. */ | 718 | /* When the while loop ends, it's usually just EOF. */ |
771 | err = ERR_peek_last_error(); | 719 | err = ERR_peek_last_error(); |
772 | if (ERR_GET_LIB(err) == ERR_LIB_PEM && ERR_GET_REASON(err) == PEM_R_NO_START_LINE) | 720 | if (ERR_GET_LIB(err) == ERR_LIB_PEM && ERR_GET_REASON(err) == PEM_R_NO_START_LINE) |
773 | ERR_clear_error(); | 721 | ERR_clear_error(); |
774 | else | 722 | else |
775 | ret = 0; /* some real error */ | 723 | ret = 0; /* some real error */ |
776 | } | 724 | } |
777 | 725 | ||
778 | end: | 726 | end: |
779 | if (x != NULL) X509_free(x); | 727 | if (x != NULL) |
780 | if (in != NULL) BIO_free(in); | 728 | X509_free(x); |
781 | return(ret); | 729 | if (in != NULL) |
782 | } | 730 | BIO_free(in); |
731 | return (ret); | ||
732 | } | ||
783 | #endif | 733 | #endif |
diff --git a/src/lib/libssl/src/ssl/ssl_sess.c b/src/lib/libssl/src/ssl/ssl_sess.c index ad40fadd02..b29115862b 100644 --- a/src/lib/libssl/src/ssl/ssl_sess.c +++ b/src/lib/libssl/src/ssl/ssl_sess.c | |||
@@ -144,68 +144,74 @@ | |||
144 | #include "ssl_locl.h" | 144 | #include "ssl_locl.h" |
145 | 145 | ||
146 | static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s); | 146 | static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s); |
147 | static void SSL_SESSION_list_add(SSL_CTX *ctx,SSL_SESSION *s); | 147 | static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s); |
148 | static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck); | 148 | static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck); |
149 | 149 | ||
150 | SSL_SESSION *SSL_get_session(const SSL *ssl) | 150 | SSL_SESSION |
151 | *SSL_get_session(const SSL *ssl) | ||
151 | /* aka SSL_get0_session; gets 0 objects, just returns a copy of the pointer */ | 152 | /* aka SSL_get0_session; gets 0 objects, just returns a copy of the pointer */ |
152 | { | 153 | { |
153 | return(ssl->session); | 154 | return (ssl->session); |
154 | } | 155 | } |
155 | 156 | ||
156 | SSL_SESSION *SSL_get1_session(SSL *ssl) | 157 | SSL_SESSION |
158 | *SSL_get1_session(SSL *ssl) | ||
157 | /* variant of SSL_get_session: caller really gets something */ | 159 | /* variant of SSL_get_session: caller really gets something */ |
158 | { | 160 | { |
159 | SSL_SESSION *sess; | 161 | SSL_SESSION *sess; |
160 | /* Need to lock this all up rather than just use CRYPTO_add so that | 162 | /* Need to lock this all up rather than just use CRYPTO_add so that |
161 | * somebody doesn't free ssl->session between when we check it's | 163 | * somebody doesn't free ssl->session between when we check it's |
162 | * non-null and when we up the reference count. */ | 164 | * non-null and when we up the reference count. */ |
163 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_SESSION); | 165 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_SESSION); |
164 | sess = ssl->session; | 166 | sess = ssl->session; |
165 | if(sess) | 167 | if (sess) |
166 | sess->references++; | 168 | sess->references++; |
167 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_SESSION); | 169 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_SESSION); |
168 | return(sess); | 170 | return (sess); |
169 | } | 171 | } |
170 | 172 | ||
171 | int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | 173 | int |
172 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) | 174 | SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
173 | { | 175 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
176 | { | ||
174 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, argl, argp, | 177 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, argl, argp, |
175 | new_func, dup_func, free_func); | 178 | new_func, dup_func, free_func); |
176 | } | 179 | } |
177 | 180 | ||
178 | int SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, void *arg) | 181 | int |
179 | { | 182 | SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, void *arg) |
180 | return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); | 183 | { |
181 | } | 184 | return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); |
185 | } | ||
182 | 186 | ||
183 | void *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx) | 187 | void |
184 | { | 188 | *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx) |
185 | return(CRYPTO_get_ex_data(&s->ex_data,idx)); | 189 | { |
186 | } | 190 | return (CRYPTO_get_ex_data(&s->ex_data, idx)); |
191 | } | ||
187 | 192 | ||
188 | SSL_SESSION *SSL_SESSION_new(void) | 193 | SSL_SESSION |
189 | { | 194 | *SSL_SESSION_new(void) |
195 | { | ||
190 | SSL_SESSION *ss; | 196 | SSL_SESSION *ss; |
191 | 197 | ||
192 | ss=(SSL_SESSION *)OPENSSL_malloc(sizeof(SSL_SESSION)); | 198 | ss = (SSL_SESSION *)OPENSSL_malloc(sizeof(SSL_SESSION)); |
193 | if (ss == NULL) | 199 | if (ss == NULL) { |
194 | { | 200 | SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE); |
195 | SSLerr(SSL_F_SSL_SESSION_NEW,ERR_R_MALLOC_FAILURE); | 201 | return (0); |
196 | return(0); | 202 | } |
197 | } | 203 | memset(ss, 0, sizeof(SSL_SESSION)); |
198 | memset(ss,0,sizeof(SSL_SESSION)); | ||
199 | 204 | ||
200 | ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */ | 205 | ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */ |
201 | ss->references=1; | 206 | ss->references = 1; |
202 | ss->timeout=60*5+4; /* 5 minute timeout by default */ | 207 | ss->timeout=60*5+4; /* 5 minute timeout by default */ |
203 | ss->time=(unsigned long)time(NULL); | 208 | ss->time = (unsigned long)time(NULL); |
204 | ss->prev=NULL; | 209 | ss->prev = NULL; |
205 | ss->next=NULL; | 210 | ss->next = NULL; |
206 | ss->compress_meth=0; | 211 | ss->compress_meth = 0; |
207 | #ifndef OPENSSL_NO_TLSEXT | 212 | #ifndef OPENSSL_NO_TLSEXT |
208 | ss->tlsext_hostname = NULL; | 213 | ss->tlsext_hostname = NULL; |
214 | |||
209 | #ifndef OPENSSL_NO_EC | 215 | #ifndef OPENSSL_NO_EC |
210 | ss->tlsext_ecpointformatlist_length = 0; | 216 | ss->tlsext_ecpointformatlist_length = 0; |
211 | ss->tlsext_ecpointformatlist = NULL; | 217 | ss->tlsext_ecpointformatlist = NULL; |
@@ -215,26 +221,28 @@ SSL_SESSION *SSL_SESSION_new(void) | |||
215 | #endif | 221 | #endif |
216 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); | 222 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); |
217 | #ifndef OPENSSL_NO_PSK | 223 | #ifndef OPENSSL_NO_PSK |
218 | ss->psk_identity_hint=NULL; | 224 | ss->psk_identity_hint = NULL; |
219 | ss->psk_identity=NULL; | 225 | ss->psk_identity = NULL; |
220 | #endif | 226 | #endif |
221 | #ifndef OPENSSL_NO_SRP | 227 | #ifndef OPENSSL_NO_SRP |
222 | ss->srp_username=NULL; | 228 | ss->srp_username = NULL; |
223 | #endif | 229 | #endif |
224 | return(ss); | 230 | return (ss); |
225 | } | 231 | } |
226 | 232 | ||
227 | const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len) | 233 | const unsigned char |
228 | { | 234 | *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len) |
229 | if(len) | 235 | { |
236 | if (len) | ||
230 | *len = s->session_id_length; | 237 | *len = s->session_id_length; |
231 | return s->session_id; | 238 | return s->session_id; |
232 | } | 239 | } |
233 | 240 | ||
234 | unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s) | 241 | unsigned int |
235 | { | 242 | SSL_SESSION_get_compress_id(const SSL_SESSION *s) |
243 | { | ||
236 | return s->compress_meth; | 244 | return s->compress_meth; |
237 | } | 245 | } |
238 | 246 | ||
239 | /* Even with SSLv2, we have 16 bytes (128 bits) of session ID space. SSLv3/TLSv1 | 247 | /* Even with SSLv2, we have 16 bytes (128 bits) of session ID space. SSLv3/TLSv1 |
240 | * has 32 bytes (256 bits). As such, filling the ID with random gunk repeatedly | 248 | * has 32 bytes (256 bits). As such, filling the ID with random gunk repeatedly |
@@ -246,16 +254,17 @@ unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s) | |||
246 | * store that many sessions is perhaps a more interesting question ... */ | 254 | * store that many sessions is perhaps a more interesting question ... */ |
247 | 255 | ||
248 | #define MAX_SESS_ID_ATTEMPTS 10 | 256 | #define MAX_SESS_ID_ATTEMPTS 10 |
249 | static int def_generate_session_id(const SSL *ssl, unsigned char *id, | 257 | static int |
250 | unsigned int *id_len) | 258 | def_generate_session_id(const SSL *ssl, unsigned char *id, |
259 | unsigned int *id_len) | ||
251 | { | 260 | { |
252 | unsigned int retry = 0; | 261 | unsigned int retry = 0; |
253 | do | 262 | do |
254 | if (RAND_pseudo_bytes(id, *id_len) <= 0) | 263 | if (RAND_pseudo_bytes(id, *id_len) <= 0) |
255 | return 0; | 264 | return 0; |
256 | while(SSL_has_matching_session_id(ssl, id, *id_len) && | 265 | while (SSL_has_matching_session_id(ssl, id, *id_len) && |
257 | (++retry < MAX_SESS_ID_ATTEMPTS)); | 266 | (++retry < MAX_SESS_ID_ATTEMPTS)); |
258 | if(retry < MAX_SESS_ID_ATTEMPTS) | 267 | if (retry < MAX_SESS_ID_ATTEMPTS) |
259 | return 1; | 268 | return 1; |
260 | /* else - woops a session_id match */ | 269 | /* else - woops a session_id match */ |
261 | /* XXX We should also check the external cache -- | 270 | /* XXX We should also check the external cache -- |
@@ -269,120 +278,100 @@ static int def_generate_session_id(const SSL *ssl, unsigned char *id, | |||
269 | return 0; | 278 | return 0; |
270 | } | 279 | } |
271 | 280 | ||
272 | int ssl_get_new_session(SSL *s, int session) | 281 | int |
273 | { | 282 | ssl_get_new_session(SSL *s, int session) |
283 | { | ||
274 | /* This gets used by clients and servers. */ | 284 | /* This gets used by clients and servers. */ |
275 | 285 | ||
276 | unsigned int tmp; | 286 | unsigned int tmp; |
277 | SSL_SESSION *ss=NULL; | 287 | SSL_SESSION *ss = NULL; |
278 | GEN_SESSION_CB cb = def_generate_session_id; | 288 | GEN_SESSION_CB cb = def_generate_session_id; |
279 | 289 | ||
280 | if ((ss=SSL_SESSION_new()) == NULL) return(0); | 290 | if ((ss = SSL_SESSION_new()) == NULL) return (0); |
281 | 291 | ||
282 | /* If the context has a default timeout, use it */ | 292 | /* If the context has a default timeout, use it */ |
283 | if (s->session_ctx->session_timeout == 0) | 293 | if (s->session_ctx->session_timeout == 0) |
284 | ss->timeout=SSL_get_default_timeout(s); | 294 | ss->timeout = SSL_get_default_timeout(s); |
285 | else | 295 | else |
286 | ss->timeout=s->session_ctx->session_timeout; | 296 | ss->timeout = s->session_ctx->session_timeout; |
287 | 297 | ||
288 | if (s->session != NULL) | 298 | if (s->session != NULL) { |
289 | { | ||
290 | SSL_SESSION_free(s->session); | 299 | SSL_SESSION_free(s->session); |
291 | s->session=NULL; | 300 | s->session = NULL; |
292 | } | 301 | } |
293 | 302 | ||
294 | if (session) | 303 | if (session) { |
295 | { | 304 | if (s->version == SSL2_VERSION) { |
296 | if (s->version == SSL2_VERSION) | 305 | ss->ssl_version = SSL2_VERSION; |
297 | { | 306 | ss->session_id_length = SSL2_SSL_SESSION_ID_LENGTH; |
298 | ss->ssl_version=SSL2_VERSION; | 307 | } else if (s->version == SSL3_VERSION) { |
299 | ss->session_id_length=SSL2_SSL_SESSION_ID_LENGTH; | 308 | ss->ssl_version = SSL3_VERSION; |
300 | } | 309 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
301 | else if (s->version == SSL3_VERSION) | 310 | } else if (s->version == TLS1_VERSION) { |
302 | { | 311 | ss->ssl_version = TLS1_VERSION; |
303 | ss->ssl_version=SSL3_VERSION; | 312 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
304 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | 313 | } else if (s->version == TLS1_1_VERSION) { |
305 | } | 314 | ss->ssl_version = TLS1_1_VERSION; |
306 | else if (s->version == TLS1_VERSION) | 315 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
307 | { | 316 | } else if (s->version == TLS1_2_VERSION) { |
308 | ss->ssl_version=TLS1_VERSION; | 317 | ss->ssl_version = TLS1_2_VERSION; |
309 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | 318 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
310 | } | 319 | } else if (s->version == DTLS1_BAD_VER) { |
311 | else if (s->version == TLS1_1_VERSION) | 320 | ss->ssl_version = DTLS1_BAD_VER; |
312 | { | 321 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
313 | ss->ssl_version=TLS1_1_VERSION; | 322 | } else if (s->version == DTLS1_VERSION) { |
314 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | 323 | ss->ssl_version = DTLS1_VERSION; |
315 | } | 324 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
316 | else if (s->version == TLS1_2_VERSION) | 325 | } else { |
317 | { | 326 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, SSL_R_UNSUPPORTED_SSL_VERSION); |
318 | ss->ssl_version=TLS1_2_VERSION; | ||
319 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | ||
320 | } | ||
321 | else if (s->version == DTLS1_BAD_VER) | ||
322 | { | ||
323 | ss->ssl_version=DTLS1_BAD_VER; | ||
324 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | ||
325 | } | ||
326 | else if (s->version == DTLS1_VERSION) | ||
327 | { | ||
328 | ss->ssl_version=DTLS1_VERSION; | ||
329 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | ||
330 | } | ||
331 | else | ||
332 | { | ||
333 | SSLerr(SSL_F_SSL_GET_NEW_SESSION,SSL_R_UNSUPPORTED_SSL_VERSION); | ||
334 | SSL_SESSION_free(ss); | 327 | SSL_SESSION_free(ss); |
335 | return(0); | 328 | return (0); |
336 | } | 329 | } |
337 | #ifndef OPENSSL_NO_TLSEXT | 330 | #ifndef OPENSSL_NO_TLSEXT |
338 | /* If RFC4507 ticket use empty session ID */ | 331 | /* If RFC4507 ticket use empty session ID */ |
339 | if (s->tlsext_ticket_expected) | 332 | if (s->tlsext_ticket_expected) { |
340 | { | ||
341 | ss->session_id_length = 0; | 333 | ss->session_id_length = 0; |
342 | goto sess_id_done; | 334 | goto sess_id_done; |
343 | } | 335 | } |
344 | #endif | 336 | #endif |
345 | /* Choose which callback will set the session ID */ | 337 | /* Choose which callback will set the session ID */ |
346 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 338 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
347 | if(s->generate_session_id) | 339 | if (s->generate_session_id) |
348 | cb = s->generate_session_id; | 340 | cb = s->generate_session_id; |
349 | else if(s->session_ctx->generate_session_id) | 341 | else if (s->session_ctx->generate_session_id) |
350 | cb = s->session_ctx->generate_session_id; | 342 | cb = s->session_ctx->generate_session_id; |
351 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 343 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
352 | /* Choose a session ID */ | 344 | /* Choose a session ID */ |
353 | tmp = ss->session_id_length; | 345 | tmp = ss->session_id_length; |
354 | if(!cb(s, ss->session_id, &tmp)) | 346 | if (!cb(s, ss->session_id, &tmp)) { |
355 | { | ||
356 | /* The callback failed */ | 347 | /* The callback failed */ |
357 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, | 348 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, |
358 | SSL_R_SSL_SESSION_ID_CALLBACK_FAILED); | 349 | SSL_R_SSL_SESSION_ID_CALLBACK_FAILED); |
359 | SSL_SESSION_free(ss); | 350 | SSL_SESSION_free(ss); |
360 | return(0); | 351 | return (0); |
361 | } | 352 | } |
362 | /* Don't allow the callback to set the session length to zero. | 353 | /* Don't allow the callback to set the session length to zero. |
363 | * nor set it higher than it was. */ | 354 | * nor set it higher than it was. */ |
364 | if(!tmp || (tmp > ss->session_id_length)) | 355 | if (!tmp || (tmp > ss->session_id_length)) { |
365 | { | ||
366 | /* The callback set an illegal length */ | 356 | /* The callback set an illegal length */ |
367 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, | 357 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, |
368 | SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH); | 358 | SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH); |
369 | SSL_SESSION_free(ss); | 359 | SSL_SESSION_free(ss); |
370 | return(0); | 360 | return (0); |
371 | } | 361 | } |
372 | /* If the session length was shrunk and we're SSLv2, pad it */ | 362 | /* If the session length was shrunk and we're SSLv2, pad it */ |
373 | if((tmp < ss->session_id_length) && (s->version == SSL2_VERSION)) | 363 | if ((tmp < ss->session_id_length) && (s->version == SSL2_VERSION)) |
374 | memset(ss->session_id + tmp, 0, ss->session_id_length - tmp); | 364 | memset(ss->session_id + tmp, 0, ss->session_id_length - tmp); |
375 | else | 365 | else |
376 | ss->session_id_length = tmp; | 366 | ss->session_id_length = tmp; |
377 | /* Finally, check for a conflict */ | 367 | /* Finally, check for a conflict */ |
378 | if(SSL_has_matching_session_id(s, ss->session_id, | 368 | if (SSL_has_matching_session_id(s, ss->session_id, |
379 | ss->session_id_length)) | 369 | ss->session_id_length)) { |
380 | { | ||
381 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, | 370 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, |
382 | SSL_R_SSL_SESSION_ID_CONFLICT); | 371 | SSL_R_SSL_SESSION_ID_CONFLICT); |
383 | SSL_SESSION_free(ss); | 372 | SSL_SESSION_free(ss); |
384 | return(0); | 373 | return (0); |
385 | } | 374 | } |
386 | #ifndef OPENSSL_NO_TLSEXT | 375 | #ifndef OPENSSL_NO_TLSEXT |
387 | sess_id_done: | 376 | sess_id_done: |
388 | if (s->tlsext_hostname) { | 377 | if (s->tlsext_hostname) { |
@@ -391,55 +380,50 @@ int ssl_get_new_session(SSL *s, int session) | |||
391 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); | 380 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); |
392 | SSL_SESSION_free(ss); | 381 | SSL_SESSION_free(ss); |
393 | return 0; | 382 | return 0; |
394 | } | ||
395 | } | 383 | } |
384 | } | ||
396 | #ifndef OPENSSL_NO_EC | 385 | #ifndef OPENSSL_NO_EC |
397 | if (s->tlsext_ecpointformatlist) | 386 | if (s->tlsext_ecpointformatlist) { |
398 | { | 387 | if (ss->tlsext_ecpointformatlist != NULL) |
399 | if (ss->tlsext_ecpointformatlist != NULL) OPENSSL_free(ss->tlsext_ecpointformatlist); | 388 | OPENSSL_free(ss->tlsext_ecpointformatlist); |
400 | if ((ss->tlsext_ecpointformatlist = OPENSSL_malloc(s->tlsext_ecpointformatlist_length)) == NULL) | 389 | if ((ss->tlsext_ecpointformatlist = OPENSSL_malloc(s->tlsext_ecpointformatlist_length)) == NULL) { |
401 | { | ||
402 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); | 390 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); |
403 | SSL_SESSION_free(ss); | 391 | SSL_SESSION_free(ss); |
404 | return 0; | 392 | return 0; |
405 | } | 393 | } |
406 | ss->tlsext_ecpointformatlist_length = s->tlsext_ecpointformatlist_length; | 394 | ss->tlsext_ecpointformatlist_length = s->tlsext_ecpointformatlist_length; |
407 | memcpy(ss->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length); | 395 | memcpy(ss->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length); |
408 | } | 396 | } |
409 | if (s->tlsext_ellipticcurvelist) | 397 | if (s->tlsext_ellipticcurvelist) { |
410 | { | 398 | if (ss->tlsext_ellipticcurvelist != NULL) |
411 | if (ss->tlsext_ellipticcurvelist != NULL) OPENSSL_free(ss->tlsext_ellipticcurvelist); | 399 | OPENSSL_free(ss->tlsext_ellipticcurvelist); |
412 | if ((ss->tlsext_ellipticcurvelist = OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) == NULL) | 400 | if ((ss->tlsext_ellipticcurvelist = OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) == NULL) { |
413 | { | ||
414 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); | 401 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); |
415 | SSL_SESSION_free(ss); | 402 | SSL_SESSION_free(ss); |
416 | return 0; | 403 | return 0; |
417 | } | 404 | } |
418 | ss->tlsext_ellipticcurvelist_length = s->tlsext_ellipticcurvelist_length; | 405 | ss->tlsext_ellipticcurvelist_length = s->tlsext_ellipticcurvelist_length; |
419 | memcpy(ss->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length); | 406 | memcpy(ss->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length); |
420 | } | 407 | } |
421 | #endif | 408 | #endif |
422 | #endif | 409 | #endif |
423 | } | 410 | } else { |
424 | else | 411 | ss->session_id_length = 0; |
425 | { | 412 | } |
426 | ss->session_id_length=0; | ||
427 | } | ||
428 | 413 | ||
429 | if (s->sid_ctx_length > sizeof ss->sid_ctx) | 414 | if (s->sid_ctx_length > sizeof ss->sid_ctx) { |
430 | { | ||
431 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); | 415 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); |
432 | SSL_SESSION_free(ss); | 416 | SSL_SESSION_free(ss); |
433 | return 0; | 417 | return 0; |
434 | } | 418 | } |
435 | memcpy(ss->sid_ctx,s->sid_ctx,s->sid_ctx_length); | 419 | memcpy(ss->sid_ctx, s->sid_ctx, s->sid_ctx_length); |
436 | ss->sid_ctx_length=s->sid_ctx_length; | 420 | ss->sid_ctx_length = s->sid_ctx_length; |
437 | s->session=ss; | 421 | s->session = ss; |
438 | ss->ssl_version=s->version; | 422 | ss->ssl_version = s->version; |
439 | ss->verify_result = X509_V_OK; | 423 | ss->verify_result = X509_V_OK; |
440 | 424 | ||
441 | return(1); | 425 | return (1); |
442 | } | 426 | } |
443 | 427 | ||
444 | /* ssl_get_prev attempts to find an SSL_SESSION to be used to resume this | 428 | /* ssl_get_prev attempts to find an SSL_SESSION to be used to resume this |
445 | * connection. It is only called by servers. | 429 | * connection. It is only called by servers. |
@@ -460,12 +444,13 @@ int ssl_get_new_session(SSL *s, int session) | |||
460 | * - Both for new and resumed sessions, s->tlsext_ticket_expected is set to 1 | 444 | * - Both for new and resumed sessions, s->tlsext_ticket_expected is set to 1 |
461 | * if the server should issue a new session ticket (to 0 otherwise). | 445 | * if the server should issue a new session ticket (to 0 otherwise). |
462 | */ | 446 | */ |
463 | int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | 447 | int |
464 | const unsigned char *limit) | 448 | ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, |
465 | { | 449 | const unsigned char *limit) |
450 | { | ||
466 | /* This is used only by servers. */ | 451 | /* This is used only by servers. */ |
467 | 452 | ||
468 | SSL_SESSION *ret=NULL; | 453 | SSL_SESSION *ret = NULL; |
469 | int fatal = 0; | 454 | int fatal = 0; |
470 | int try_session_cache = 1; | 455 | int try_session_cache = 1; |
471 | #ifndef OPENSSL_NO_TLSEXT | 456 | #ifndef OPENSSL_NO_TLSEXT |
@@ -480,8 +465,7 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
480 | 465 | ||
481 | #ifndef OPENSSL_NO_TLSEXT | 466 | #ifndef OPENSSL_NO_TLSEXT |
482 | r = tls1_process_ticket(s, session_id, len, limit, &ret); /* sets s->tlsext_ticket_expected */ | 467 | r = tls1_process_ticket(s, session_id, len, limit, &ret); /* sets s->tlsext_ticket_expected */ |
483 | switch (r) | 468 | switch (r) { |
484 | { | ||
485 | case -1: /* Error during processing */ | 469 | case -1: /* Error during processing */ |
486 | fatal = 1; | 470 | fatal = 1; |
487 | goto err; | 471 | goto err; |
@@ -494,39 +478,35 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
494 | break; | 478 | break; |
495 | default: | 479 | default: |
496 | abort(); | 480 | abort(); |
497 | } | 481 | } |
498 | #endif | 482 | #endif |
499 | 483 | ||
500 | if (try_session_cache && | 484 | if (try_session_cache && |
501 | ret == NULL && | 485 | ret == NULL && |
502 | !(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) | 486 | !(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) { |
503 | { | ||
504 | SSL_SESSION data; | 487 | SSL_SESSION data; |
505 | data.ssl_version=s->version; | 488 | data.ssl_version = s->version; |
506 | data.session_id_length=len; | 489 | data.session_id_length = len; |
507 | if (len == 0) | 490 | if (len == 0) |
508 | return 0; | 491 | return 0; |
509 | memcpy(data.session_id,session_id,len); | 492 | memcpy(data.session_id, session_id, len); |
510 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 493 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
511 | ret=lh_SSL_SESSION_retrieve(s->session_ctx->sessions,&data); | 494 | ret = lh_SSL_SESSION_retrieve(s->session_ctx->sessions, &data); |
512 | if (ret != NULL) | 495 | if (ret != NULL) { |
513 | { | ||
514 | /* don't allow other threads to steal it: */ | 496 | /* don't allow other threads to steal it: */ |
515 | CRYPTO_add(&ret->references,1,CRYPTO_LOCK_SSL_SESSION); | 497 | CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_SSL_SESSION); |
516 | } | 498 | } |
517 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 499 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
518 | if (ret == NULL) | 500 | if (ret == NULL) |
519 | s->session_ctx->stats.sess_miss++; | 501 | s->session_ctx->stats.sess_miss++; |
520 | } | 502 | } |
521 | 503 | ||
522 | if (try_session_cache && | 504 | if (try_session_cache && |
523 | ret == NULL && | 505 | ret == NULL && |
524 | s->session_ctx->get_session_cb != NULL) | 506 | s->session_ctx->get_session_cb != NULL) { |
525 | { | 507 | int copy = 1; |
526 | int copy=1; | 508 | |
527 | 509 | if ((ret = s->session_ctx->get_session_cb(s, session_id, len, ©))) { | |
528 | if ((ret=s->session_ctx->get_session_cb(s,session_id,len,©))) | ||
529 | { | ||
530 | s->session_ctx->stats.sess_cb_hit++; | 510 | s->session_ctx->stats.sess_cb_hit++; |
531 | 511 | ||
532 | /* Increment reference count now if the session callback | 512 | /* Increment reference count now if the session callback |
@@ -535,16 +515,16 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
535 | * it must handle the reference count itself [i.e. copy == 0], | 515 | * it must handle the reference count itself [i.e. copy == 0], |
536 | * or things won't be thread-safe). */ | 516 | * or things won't be thread-safe). */ |
537 | if (copy) | 517 | if (copy) |
538 | CRYPTO_add(&ret->references,1,CRYPTO_LOCK_SSL_SESSION); | 518 | CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_SSL_SESSION); |
539 | 519 | ||
540 | /* Add the externally cached session to the internal | 520 | /* Add the externally cached session to the internal |
541 | * cache as well if and only if we are supposed to. */ | 521 | * cache as well if and only if we are supposed to. */ |
542 | if(!(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_STORE)) | 522 | if (!(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_STORE)) |
543 | /* The following should not return 1, otherwise, | 523 | /* The following should not return 1, otherwise, |
544 | * things are very strange */ | 524 | * things are very strange */ |
545 | SSL_CTX_add_session(s->session_ctx,ret); | 525 | SSL_CTX_add_session(s->session_ctx, ret); |
546 | } | ||
547 | } | 526 | } |
527 | } | ||
548 | 528 | ||
549 | if (ret == NULL) | 529 | if (ret == NULL) |
550 | goto err; | 530 | goto err; |
@@ -552,15 +532,13 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
552 | /* Now ret is non-NULL and we own one of its reference counts. */ | 532 | /* Now ret is non-NULL and we own one of its reference counts. */ |
553 | 533 | ||
554 | if (ret->sid_ctx_length != s->sid_ctx_length | 534 | if (ret->sid_ctx_length != s->sid_ctx_length |
555 | || memcmp(ret->sid_ctx,s->sid_ctx,ret->sid_ctx_length)) | 535 | || memcmp(ret->sid_ctx, s->sid_ctx, ret->sid_ctx_length)) { |
556 | { | ||
557 | /* We have the session requested by the client, but we don't | 536 | /* We have the session requested by the client, but we don't |
558 | * want to use it in this context. */ | 537 | * want to use it in this context. */ |
559 | goto err; /* treat like cache miss */ | 538 | goto err; /* treat like cache miss */ |
560 | } | 539 | } |
561 | 540 | ||
562 | if((s->verify_mode & SSL_VERIFY_PEER) && s->sid_ctx_length == 0) | 541 | if ((s->verify_mode & SSL_VERIFY_PEER) && s->sid_ctx_length == 0) { |
563 | { | ||
564 | /* We can't be sure if this session is being used out of | 542 | /* We can't be sure if this session is being used out of |
565 | * context, which is especially important for SSL_VERIFY_PEER. | 543 | * context, which is especially important for SSL_VERIFY_PEER. |
566 | * The application should have used SSL[_CTX]_set_session_id_context. | 544 | * The application should have used SSL[_CTX]_set_session_id_context. |
@@ -570,87 +548,83 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
570 | * applications to effectively disable the session cache by | 548 | * applications to effectively disable the session cache by |
571 | * accident without anyone noticing). | 549 | * accident without anyone noticing). |
572 | */ | 550 | */ |
573 | 551 | ||
574 | SSLerr(SSL_F_SSL_GET_PREV_SESSION,SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED); | 552 | SSLerr(SSL_F_SSL_GET_PREV_SESSION, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED); |
575 | fatal = 1; | 553 | fatal = 1; |
576 | goto err; | 554 | goto err; |
577 | } | 555 | } |
578 | 556 | ||
579 | if (ret->cipher == NULL) | 557 | if (ret->cipher == NULL) { |
580 | { | 558 | unsigned char buf[5], *p; |
581 | unsigned char buf[5],*p; | ||
582 | unsigned long l; | 559 | unsigned long l; |
583 | 560 | ||
584 | p=buf; | 561 | p = buf; |
585 | l=ret->cipher_id; | 562 | l = ret->cipher_id; |
586 | l2n(l,p); | 563 | l2n(l, p); |
587 | if ((ret->ssl_version>>8) >= SSL3_VERSION_MAJOR) | 564 | if ((ret->ssl_version >> 8) >= SSL3_VERSION_MAJOR) |
588 | ret->cipher=ssl_get_cipher_by_char(s,&(buf[2])); | 565 | ret->cipher = ssl_get_cipher_by_char(s, &(buf[2])); |
589 | else | 566 | else |
590 | ret->cipher=ssl_get_cipher_by_char(s,&(buf[1])); | 567 | ret->cipher = ssl_get_cipher_by_char(s, &(buf[1])); |
591 | if (ret->cipher == NULL) | 568 | if (ret->cipher == NULL) |
592 | goto err; | 569 | goto err; |
593 | } | 570 | } |
594 | 571 | ||
595 | if (ret->timeout < (long)(time(NULL) - ret->time)) /* timeout */ | 572 | if (ret->timeout < (long)(time(NULL) - ret->time)) /* timeout */ |
596 | { | 573 | { |
597 | s->session_ctx->stats.sess_timeout++; | 574 | s->session_ctx->stats.sess_timeout++; |
598 | if (try_session_cache) | 575 | if (try_session_cache) { |
599 | { | ||
600 | /* session was from the cache, so remove it */ | 576 | /* session was from the cache, so remove it */ |
601 | SSL_CTX_remove_session(s->session_ctx,ret); | 577 | SSL_CTX_remove_session(s->session_ctx, ret); |
602 | } | ||
603 | goto err; | ||
604 | } | 578 | } |
579 | goto err; | ||
580 | } | ||
605 | 581 | ||
606 | s->session_ctx->stats.sess_hit++; | 582 | s->session_ctx->stats.sess_hit++; |
607 | 583 | ||
608 | if (s->session != NULL) | 584 | if (s->session != NULL) |
609 | SSL_SESSION_free(s->session); | 585 | SSL_SESSION_free(s->session); |
610 | s->session=ret; | 586 | s->session = ret; |
611 | s->verify_result = s->session->verify_result; | 587 | s->verify_result = s->session->verify_result; |
612 | return 1; | 588 | return 1; |
613 | 589 | ||
614 | err: | 590 | err: |
615 | if (ret != NULL) | 591 | if (ret != NULL) { |
616 | { | ||
617 | SSL_SESSION_free(ret); | 592 | SSL_SESSION_free(ret); |
618 | #ifndef OPENSSL_NO_TLSEXT | 593 | #ifndef OPENSSL_NO_TLSEXT |
619 | if (!try_session_cache) | 594 | if (!try_session_cache) { |
620 | { | ||
621 | /* The session was from a ticket, so we should | 595 | /* The session was from a ticket, so we should |
622 | * issue a ticket for the new session */ | 596 | * issue a ticket for the new session */ |
623 | s->tlsext_ticket_expected = 1; | 597 | s->tlsext_ticket_expected = 1; |
624 | } | ||
625 | #endif | ||
626 | } | 598 | } |
599 | #endif | ||
600 | } | ||
627 | if (fatal) | 601 | if (fatal) |
628 | return -1; | 602 | return -1; |
629 | else | 603 | else |
630 | return 0; | 604 | return 0; |
631 | } | 605 | } |
632 | 606 | ||
633 | int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) | 607 | int |
634 | { | 608 | SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) |
635 | int ret=0; | 609 | { |
610 | int ret = 0; | ||
636 | SSL_SESSION *s; | 611 | SSL_SESSION *s; |
637 | 612 | ||
638 | /* add just 1 reference count for the SSL_CTX's session cache | 613 | /* add just 1 reference count for the SSL_CTX's session cache |
639 | * even though it has two ways of access: each session is in a | 614 | * even though it has two ways of access: each session is in a |
640 | * doubly linked list and an lhash */ | 615 | * doubly linked list and an lhash */ |
641 | CRYPTO_add(&c->references,1,CRYPTO_LOCK_SSL_SESSION); | 616 | CRYPTO_add(&c->references, 1, CRYPTO_LOCK_SSL_SESSION); |
642 | /* if session c is in already in cache, we take back the increment later */ | 617 | /* if session c is in already in cache, we take back the increment later */ |
643 | 618 | ||
644 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 619 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
645 | s=lh_SSL_SESSION_insert(ctx->sessions,c); | 620 | s = lh_SSL_SESSION_insert(ctx->sessions, c); |
646 | 621 | ||
647 | /* s != NULL iff we already had a session with the given PID. | 622 | /* s != NULL iff we already had a session with the given PID. |
648 | * In this case, s == c should hold (then we did not really modify | 623 | * In this case, s == c should hold (then we did not really modify |
649 | * ctx->sessions), or we're in trouble. */ | 624 | * ctx->sessions), or we're in trouble. */ |
650 | if (s != NULL && s != c) | 625 | if (s != NULL && s != c) { |
651 | { | ||
652 | /* We *are* in trouble ... */ | 626 | /* We *are* in trouble ... */ |
653 | SSL_SESSION_list_remove(ctx,s); | 627 | SSL_SESSION_list_remove(ctx, s); |
654 | SSL_SESSION_free(s); | 628 | SSL_SESSION_free(s); |
655 | /* ... so pretend the other session did not exist in cache | 629 | /* ... so pretend the other session did not exist in cache |
656 | * (we cannot handle two SSL_SESSION structures with identical | 630 | * (we cannot handle two SSL_SESSION structures with identical |
@@ -658,114 +632,117 @@ int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) | |||
658 | * two threads concurrently obtain the same session from an external | 632 | * two threads concurrently obtain the same session from an external |
659 | * cache) */ | 633 | * cache) */ |
660 | s = NULL; | 634 | s = NULL; |
661 | } | 635 | } |
662 | 636 | ||
663 | /* Put at the head of the queue unless it is already in the cache */ | 637 | /* Put at the head of the queue unless it is already in the cache */ |
664 | if (s == NULL) | 638 | if (s == NULL) |
665 | SSL_SESSION_list_add(ctx,c); | 639 | SSL_SESSION_list_add(ctx, c); |
666 | 640 | ||
667 | if (s != NULL) | 641 | if (s != NULL) { |
668 | { | ||
669 | /* existing cache entry -- decrement previously incremented reference | 642 | /* existing cache entry -- decrement previously incremented reference |
670 | * count because it already takes into account the cache */ | 643 | * count because it already takes into account the cache */ |
671 | 644 | ||
672 | SSL_SESSION_free(s); /* s == c */ | 645 | SSL_SESSION_free(s); /* s == c */ |
673 | ret=0; | 646 | ret = 0; |
674 | } | 647 | } else { |
675 | else | ||
676 | { | ||
677 | /* new cache entry -- remove old ones if cache has become too large */ | 648 | /* new cache entry -- remove old ones if cache has become too large */ |
678 | |||
679 | ret=1; | ||
680 | 649 | ||
681 | if (SSL_CTX_sess_get_cache_size(ctx) > 0) | 650 | ret = 1; |
682 | { | 651 | |
652 | if (SSL_CTX_sess_get_cache_size(ctx) > 0) { | ||
683 | while (SSL_CTX_sess_number(ctx) > | 653 | while (SSL_CTX_sess_number(ctx) > |
684 | SSL_CTX_sess_get_cache_size(ctx)) | 654 | SSL_CTX_sess_get_cache_size(ctx)) { |
685 | { | ||
686 | if (!remove_session_lock(ctx, | 655 | if (!remove_session_lock(ctx, |
687 | ctx->session_cache_tail, 0)) | 656 | ctx->session_cache_tail, 0)) |
688 | break; | 657 | break; |
689 | else | 658 | else |
690 | ctx->stats.sess_cache_full++; | 659 | ctx->stats.sess_cache_full++; |
691 | } | ||
692 | } | 660 | } |
693 | } | 661 | } |
694 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | ||
695 | return(ret); | ||
696 | } | 662 | } |
663 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | ||
664 | return (ret); | ||
665 | } | ||
697 | 666 | ||
698 | int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c) | 667 | int |
668 | SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c) | ||
699 | { | 669 | { |
700 | return remove_session_lock(ctx, c, 1); | 670 | return remove_session_lock(ctx, c, 1); |
701 | } | 671 | } |
702 | 672 | ||
703 | static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck) | 673 | static int |
704 | { | 674 | remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck) |
675 | { | ||
705 | SSL_SESSION *r; | 676 | SSL_SESSION *r; |
706 | int ret=0; | 677 | int ret = 0; |
707 | 678 | ||
708 | if ((c != NULL) && (c->session_id_length != 0)) | 679 | if ((c != NULL) && (c->session_id_length != 0)) { |
709 | { | 680 | if (lck) |
710 | if(lck) CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 681 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
711 | if ((r = lh_SSL_SESSION_retrieve(ctx->sessions,c)) == c) | 682 | if ((r = lh_SSL_SESSION_retrieve(ctx->sessions, c)) == c) { |
712 | { | 683 | ret = 1; |
713 | ret=1; | 684 | r = lh_SSL_SESSION_delete(ctx->sessions, c); |
714 | r=lh_SSL_SESSION_delete(ctx->sessions,c); | 685 | SSL_SESSION_list_remove(ctx, c); |
715 | SSL_SESSION_list_remove(ctx,c); | 686 | } |
716 | } | ||
717 | 687 | ||
718 | if(lck) CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 688 | if (lck) |
689 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | ||
719 | 690 | ||
720 | if (ret) | 691 | if (ret) { |
721 | { | 692 | r->not_resumable = 1; |
722 | r->not_resumable=1; | ||
723 | if (ctx->remove_session_cb != NULL) | 693 | if (ctx->remove_session_cb != NULL) |
724 | ctx->remove_session_cb(ctx,r); | 694 | ctx->remove_session_cb(ctx, r); |
725 | SSL_SESSION_free(r); | 695 | SSL_SESSION_free(r); |
726 | } | ||
727 | } | 696 | } |
728 | else | 697 | } else |
729 | ret=0; | 698 | ret = 0; |
730 | return(ret); | 699 | return (ret); |
731 | } | 700 | } |
732 | 701 | ||
733 | void SSL_SESSION_free(SSL_SESSION *ss) | 702 | void |
734 | { | 703 | SSL_SESSION_free(SSL_SESSION *ss) |
704 | { | ||
735 | int i; | 705 | int i; |
736 | 706 | ||
737 | if(ss == NULL) | 707 | if (ss == NULL) |
738 | return; | 708 | return; |
739 | 709 | ||
740 | i=CRYPTO_add(&ss->references,-1,CRYPTO_LOCK_SSL_SESSION); | 710 | i = CRYPTO_add(&ss->references, -1, CRYPTO_LOCK_SSL_SESSION); |
741 | #ifdef REF_PRINT | 711 | #ifdef REF_PRINT |
742 | REF_PRINT("SSL_SESSION",ss); | 712 | REF_PRINT("SSL_SESSION", ss); |
743 | #endif | 713 | #endif |
744 | if (i > 0) return; | 714 | if (i > 0) |
715 | return; | ||
745 | #ifdef REF_CHECK | 716 | #ifdef REF_CHECK |
746 | if (i < 0) | 717 | if (i < 0) { |
747 | { | 718 | fprintf(stderr, "SSL_SESSION_free, bad reference count\n"); |
748 | fprintf(stderr,"SSL_SESSION_free, bad reference count\n"); | ||
749 | abort(); /* ok */ | 719 | abort(); /* ok */ |
750 | } | 720 | } |
751 | #endif | 721 | #endif |
752 | 722 | ||
753 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); | 723 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); |
754 | 724 | ||
755 | OPENSSL_cleanse(ss->key_arg,sizeof ss->key_arg); | 725 | OPENSSL_cleanse(ss->key_arg, sizeof ss->key_arg); |
756 | OPENSSL_cleanse(ss->master_key,sizeof ss->master_key); | 726 | OPENSSL_cleanse(ss->master_key, sizeof ss->master_key); |
757 | OPENSSL_cleanse(ss->session_id,sizeof ss->session_id); | 727 | OPENSSL_cleanse(ss->session_id, sizeof ss->session_id); |
758 | if (ss->sess_cert != NULL) ssl_sess_cert_free(ss->sess_cert); | 728 | if (ss->sess_cert != NULL) |
759 | if (ss->peer != NULL) X509_free(ss->peer); | 729 | ssl_sess_cert_free(ss->sess_cert); |
760 | if (ss->ciphers != NULL) sk_SSL_CIPHER_free(ss->ciphers); | 730 | if (ss->peer != NULL) |
731 | X509_free(ss->peer); | ||
732 | if (ss->ciphers != NULL) | ||
733 | sk_SSL_CIPHER_free(ss->ciphers); | ||
761 | #ifndef OPENSSL_NO_TLSEXT | 734 | #ifndef OPENSSL_NO_TLSEXT |
762 | if (ss->tlsext_hostname != NULL) OPENSSL_free(ss->tlsext_hostname); | 735 | if (ss->tlsext_hostname != NULL) |
763 | if (ss->tlsext_tick != NULL) OPENSSL_free(ss->tlsext_tick); | 736 | OPENSSL_free(ss->tlsext_hostname); |
737 | if (ss->tlsext_tick != NULL) | ||
738 | OPENSSL_free(ss->tlsext_tick); | ||
764 | #ifndef OPENSSL_NO_EC | 739 | #ifndef OPENSSL_NO_EC |
765 | ss->tlsext_ecpointformatlist_length = 0; | 740 | ss->tlsext_ecpointformatlist_length = 0; |
766 | if (ss->tlsext_ecpointformatlist != NULL) OPENSSL_free(ss->tlsext_ecpointformatlist); | 741 | if (ss->tlsext_ecpointformatlist != NULL) |
742 | OPENSSL_free(ss->tlsext_ecpointformatlist); | ||
767 | ss->tlsext_ellipticcurvelist_length = 0; | 743 | ss->tlsext_ellipticcurvelist_length = 0; |
768 | if (ss->tlsext_ellipticcurvelist != NULL) OPENSSL_free(ss->tlsext_ellipticcurvelist); | 744 | if (ss->tlsext_ellipticcurvelist != NULL) |
745 | OPENSSL_free(ss->tlsext_ellipticcurvelist); | ||
769 | #endif /* OPENSSL_NO_EC */ | 746 | #endif /* OPENSSL_NO_EC */ |
770 | #endif | 747 | #endif |
771 | #ifndef OPENSSL_NO_PSK | 748 | #ifndef OPENSSL_NO_PSK |
@@ -778,382 +755,389 @@ void SSL_SESSION_free(SSL_SESSION *ss) | |||
778 | if (ss->srp_username != NULL) | 755 | if (ss->srp_username != NULL) |
779 | OPENSSL_free(ss->srp_username); | 756 | OPENSSL_free(ss->srp_username); |
780 | #endif | 757 | #endif |
781 | OPENSSL_cleanse(ss,sizeof(*ss)); | 758 | OPENSSL_cleanse(ss, sizeof(*ss)); |
782 | OPENSSL_free(ss); | 759 | OPENSSL_free(ss); |
783 | } | 760 | } |
784 | 761 | ||
785 | int SSL_set_session(SSL *s, SSL_SESSION *session) | 762 | int |
786 | { | 763 | SSL_set_session(SSL *s, SSL_SESSION *session) |
787 | int ret=0; | 764 | { |
765 | int ret = 0; | ||
788 | const SSL_METHOD *meth; | 766 | const SSL_METHOD *meth; |
789 | 767 | ||
790 | if (session != NULL) | 768 | if (session != NULL) { |
791 | { | 769 | meth = s->ctx->method->get_ssl_method(session->ssl_version); |
792 | meth=s->ctx->method->get_ssl_method(session->ssl_version); | ||
793 | if (meth == NULL) | 770 | if (meth == NULL) |
794 | meth=s->method->get_ssl_method(session->ssl_version); | 771 | meth = s->method->get_ssl_method(session->ssl_version); |
795 | if (meth == NULL) | 772 | if (meth == NULL) { |
796 | { | 773 | SSLerr(SSL_F_SSL_SET_SESSION, SSL_R_UNABLE_TO_FIND_SSL_METHOD); |
797 | SSLerr(SSL_F_SSL_SET_SESSION,SSL_R_UNABLE_TO_FIND_SSL_METHOD); | 774 | return (0); |
798 | return(0); | 775 | } |
799 | } | ||
800 | 776 | ||
801 | if (meth != s->method) | 777 | if (meth != s->method) { |
802 | { | 778 | if (!SSL_set_ssl_method(s, meth)) |
803 | if (!SSL_set_ssl_method(s,meth)) | 779 | return (0); |
804 | return(0); | 780 | } |
805 | } | ||
806 | 781 | ||
807 | #ifndef OPENSSL_NO_KRB5 | 782 | #ifndef OPENSSL_NO_KRB5 |
808 | if (s->kssl_ctx && !s->kssl_ctx->client_princ && | 783 | if (s->kssl_ctx && !s->kssl_ctx->client_princ && |
809 | session->krb5_client_princ_len > 0) | 784 | session->krb5_client_princ_len > 0) { |
810 | { | 785 | s->kssl_ctx->client_princ = (char *)OPENSSL_malloc(session->krb5_client_princ_len + 1); |
811 | s->kssl_ctx->client_princ = (char *)OPENSSL_malloc(session->krb5_client_princ_len + 1); | 786 | memcpy(s->kssl_ctx->client_princ, session->krb5_client_princ, |
812 | memcpy(s->kssl_ctx->client_princ,session->krb5_client_princ, | 787 | session->krb5_client_princ_len); |
813 | session->krb5_client_princ_len); | 788 | s->kssl_ctx->client_princ[session->krb5_client_princ_len] = '\0'; |
814 | s->kssl_ctx->client_princ[session->krb5_client_princ_len] = '\0'; | 789 | } |
815 | } | ||
816 | #endif /* OPENSSL_NO_KRB5 */ | 790 | #endif /* OPENSSL_NO_KRB5 */ |
817 | 791 | ||
818 | /* CRYPTO_w_lock(CRYPTO_LOCK_SSL);*/ | 792 | /* CRYPTO_w_lock(CRYPTO_LOCK_SSL);*/ |
819 | CRYPTO_add(&session->references,1,CRYPTO_LOCK_SSL_SESSION); | 793 | CRYPTO_add(&session->references, 1, CRYPTO_LOCK_SSL_SESSION); |
820 | if (s->session != NULL) | 794 | if (s->session != NULL) |
821 | SSL_SESSION_free(s->session); | 795 | SSL_SESSION_free(s->session); |
822 | s->session=session; | 796 | s->session = session; |
823 | s->verify_result = s->session->verify_result; | 797 | s->verify_result = s->session->verify_result; |
824 | /* CRYPTO_w_unlock(CRYPTO_LOCK_SSL);*/ | 798 | /* CRYPTO_w_unlock(CRYPTO_LOCK_SSL);*/ |
825 | ret=1; | 799 | ret = 1; |
826 | } | 800 | } else { |
827 | else | 801 | if (s->session != NULL) { |
828 | { | ||
829 | if (s->session != NULL) | ||
830 | { | ||
831 | SSL_SESSION_free(s->session); | 802 | SSL_SESSION_free(s->session); |
832 | s->session=NULL; | 803 | s->session = NULL; |
833 | } | 804 | } |
834 | 805 | ||
835 | meth=s->ctx->method; | 806 | meth = s->ctx->method; |
836 | if (meth != s->method) | 807 | if (meth != s->method) { |
837 | { | 808 | if (!SSL_set_ssl_method(s, meth)) |
838 | if (!SSL_set_ssl_method(s,meth)) | 809 | return (0); |
839 | return(0); | ||
840 | } | ||
841 | ret=1; | ||
842 | } | 810 | } |
843 | return(ret); | 811 | ret = 1; |
844 | } | 812 | } |
813 | return (ret); | ||
814 | } | ||
845 | 815 | ||
846 | long SSL_SESSION_set_timeout(SSL_SESSION *s, long t) | 816 | long |
847 | { | 817 | SSL_SESSION_set_timeout(SSL_SESSION *s, long t) |
848 | if (s == NULL) return(0); | 818 | { |
849 | s->timeout=t; | 819 | if (s == NULL) |
850 | return(1); | 820 | return (0); |
851 | } | 821 | s->timeout = t; |
822 | return (1); | ||
823 | } | ||
852 | 824 | ||
853 | long SSL_SESSION_get_timeout(const SSL_SESSION *s) | 825 | long |
854 | { | 826 | SSL_SESSION_get_timeout(const SSL_SESSION *s) |
855 | if (s == NULL) return(0); | 827 | { |
856 | return(s->timeout); | 828 | if (s == NULL) |
857 | } | 829 | return (0); |
830 | return (s->timeout); | ||
831 | } | ||
858 | 832 | ||
859 | long SSL_SESSION_get_time(const SSL_SESSION *s) | 833 | long |
860 | { | 834 | SSL_SESSION_get_time(const SSL_SESSION *s) |
861 | if (s == NULL) return(0); | 835 | { |
862 | return(s->time); | 836 | if (s == NULL) |
863 | } | 837 | return (0); |
838 | return (s->time); | ||
839 | } | ||
864 | 840 | ||
865 | long SSL_SESSION_set_time(SSL_SESSION *s, long t) | 841 | long |
866 | { | 842 | SSL_SESSION_set_time(SSL_SESSION *s, long t) |
867 | if (s == NULL) return(0); | 843 | { |
868 | s->time=t; | 844 | if (s == NULL) |
869 | return(t); | 845 | return (0); |
870 | } | 846 | s->time = t; |
847 | return (t); | ||
848 | } | ||
871 | 849 | ||
872 | X509 *SSL_SESSION_get0_peer(SSL_SESSION *s) | 850 | X509 |
873 | { | 851 | *SSL_SESSION_get0_peer(SSL_SESSION *s) |
852 | { | ||
874 | return s->peer; | 853 | return s->peer; |
875 | } | 854 | } |
876 | 855 | ||
877 | int SSL_SESSION_set1_id_context(SSL_SESSION *s,const unsigned char *sid_ctx, | 856 | int |
878 | unsigned int sid_ctx_len) | 857 | SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, |
879 | { | 858 | unsigned int sid_ctx_len) |
880 | if(sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) | 859 | { |
881 | { | 860 | if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) { |
882 | SSLerr(SSL_F_SSL_SESSION_SET1_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); | 861 | SSLerr(SSL_F_SSL_SESSION_SET1_ID_CONTEXT, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); |
883 | return 0; | 862 | return 0; |
884 | } | 863 | } |
885 | s->sid_ctx_length=sid_ctx_len; | 864 | s->sid_ctx_length = sid_ctx_len; |
886 | memcpy(s->sid_ctx,sid_ctx,sid_ctx_len); | 865 | memcpy(s->sid_ctx, sid_ctx, sid_ctx_len); |
887 | 866 | ||
888 | return 1; | 867 | return 1; |
889 | } | 868 | } |
890 | 869 | ||
891 | long SSL_CTX_set_timeout(SSL_CTX *s, long t) | 870 | long |
892 | { | 871 | SSL_CTX_set_timeout(SSL_CTX *s, long t) |
872 | { | ||
893 | long l; | 873 | long l; |
894 | if (s == NULL) return(0); | 874 | if (s == NULL) |
895 | l=s->session_timeout; | 875 | return (0); |
896 | s->session_timeout=t; | 876 | l = s->session_timeout; |
897 | return(l); | 877 | s->session_timeout = t; |
898 | } | 878 | return (l); |
879 | } | ||
899 | 880 | ||
900 | long SSL_CTX_get_timeout(const SSL_CTX *s) | 881 | long |
901 | { | 882 | SSL_CTX_get_timeout(const SSL_CTX *s) |
902 | if (s == NULL) return(0); | 883 | { |
903 | return(s->session_timeout); | 884 | if (s == NULL) |
904 | } | 885 | return (0); |
886 | return (s->session_timeout); | ||
887 | } | ||
905 | 888 | ||
906 | #ifndef OPENSSL_NO_TLSEXT | 889 | #ifndef OPENSSL_NO_TLSEXT |
907 | int SSL_set_session_secret_cb(SSL *s, int (*tls_session_secret_cb)(SSL *s, void *secret, int *secret_len, | 890 | int |
908 | STACK_OF(SSL_CIPHER) *peer_ciphers, SSL_CIPHER **cipher, void *arg), void *arg) | 891 | SSL_set_session_secret_cb(SSL *s, int (*tls_session_secret_cb)(SSL *s, void *secret, int *secret_len, |
909 | { | 892 | STACK_OF(SSL_CIPHER) *peer_ciphers, SSL_CIPHER **cipher, void *arg), void *arg) |
910 | if (s == NULL) return(0); | 893 | { |
894 | if (s == NULL) | ||
895 | return (0); | ||
911 | s->tls_session_secret_cb = tls_session_secret_cb; | 896 | s->tls_session_secret_cb = tls_session_secret_cb; |
912 | s->tls_session_secret_cb_arg = arg; | 897 | s->tls_session_secret_cb_arg = arg; |
913 | return(1); | 898 | return (1); |
914 | } | 899 | } |
915 | 900 | ||
916 | int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, | 901 | int |
917 | void *arg) | 902 | SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, |
918 | { | 903 | void *arg) |
919 | if (s == NULL) return(0); | 904 | { |
905 | if (s == NULL) | ||
906 | return (0); | ||
920 | s->tls_session_ticket_ext_cb = cb; | 907 | s->tls_session_ticket_ext_cb = cb; |
921 | s->tls_session_ticket_ext_cb_arg = arg; | 908 | s->tls_session_ticket_ext_cb_arg = arg; |
922 | return(1); | 909 | return (1); |
923 | } | 910 | } |
924 | 911 | ||
925 | int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len) | 912 | int |
926 | { | 913 | SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len) |
927 | if (s->version >= TLS1_VERSION) | 914 | { |
928 | { | 915 | if (s->version >= TLS1_VERSION) { |
929 | if (s->tlsext_session_ticket) | 916 | if (s->tlsext_session_ticket) { |
930 | { | ||
931 | OPENSSL_free(s->tlsext_session_ticket); | 917 | OPENSSL_free(s->tlsext_session_ticket); |
932 | s->tlsext_session_ticket = NULL; | 918 | s->tlsext_session_ticket = NULL; |
933 | } | 919 | } |
934 | 920 | ||
935 | s->tlsext_session_ticket = OPENSSL_malloc(sizeof(TLS_SESSION_TICKET_EXT) + ext_len); | 921 | s->tlsext_session_ticket = OPENSSL_malloc(sizeof(TLS_SESSION_TICKET_EXT) + ext_len); |
936 | if (!s->tlsext_session_ticket) | 922 | if (!s->tlsext_session_ticket) { |
937 | { | ||
938 | SSLerr(SSL_F_SSL_SET_SESSION_TICKET_EXT, ERR_R_MALLOC_FAILURE); | 923 | SSLerr(SSL_F_SSL_SET_SESSION_TICKET_EXT, ERR_R_MALLOC_FAILURE); |
939 | return 0; | 924 | return 0; |
940 | } | 925 | } |
941 | 926 | ||
942 | if (ext_data) | 927 | if (ext_data) { |
943 | { | ||
944 | s->tlsext_session_ticket->length = ext_len; | 928 | s->tlsext_session_ticket->length = ext_len; |
945 | s->tlsext_session_ticket->data = s->tlsext_session_ticket + 1; | 929 | s->tlsext_session_ticket->data = s->tlsext_session_ticket + 1; |
946 | memcpy(s->tlsext_session_ticket->data, ext_data, ext_len); | 930 | memcpy(s->tlsext_session_ticket->data, ext_data, ext_len); |
947 | } | 931 | } else { |
948 | else | ||
949 | { | ||
950 | s->tlsext_session_ticket->length = 0; | 932 | s->tlsext_session_ticket->length = 0; |
951 | s->tlsext_session_ticket->data = NULL; | 933 | s->tlsext_session_ticket->data = NULL; |
952 | } | 934 | } |
953 | 935 | ||
954 | return 1; | 936 | return 1; |
955 | } | 937 | } |
956 | 938 | ||
957 | return 0; | 939 | return 0; |
958 | } | 940 | } |
959 | #endif /* OPENSSL_NO_TLSEXT */ | 941 | #endif /* OPENSSL_NO_TLSEXT */ |
960 | 942 | ||
961 | typedef struct timeout_param_st | 943 | typedef struct timeout_param_st { |
962 | { | ||
963 | SSL_CTX *ctx; | 944 | SSL_CTX *ctx; |
964 | long time; | 945 | long time; |
965 | LHASH_OF(SSL_SESSION) *cache; | 946 | LHASH_OF(SSL_SESSION) *cache; |
966 | } TIMEOUT_PARAM; | 947 | } TIMEOUT_PARAM; |
967 | 948 | ||
968 | static void timeout_doall_arg(SSL_SESSION *s, TIMEOUT_PARAM *p) | 949 | static void |
969 | { | 950 | timeout_doall_arg(SSL_SESSION *s, TIMEOUT_PARAM *p) |
951 | { | ||
970 | if ((p->time == 0) || (p->time > (s->time+s->timeout))) /* timeout */ | 952 | if ((p->time == 0) || (p->time > (s->time+s->timeout))) /* timeout */ |
971 | { | 953 | { |
972 | /* The reason we don't call SSL_CTX_remove_session() is to | 954 | /* The reason we don't call SSL_CTX_remove_session() is to |
973 | * save on locking overhead */ | 955 | * save on locking overhead */ |
974 | (void)lh_SSL_SESSION_delete(p->cache,s); | 956 | (void)lh_SSL_SESSION_delete(p->cache, s); |
975 | SSL_SESSION_list_remove(p->ctx,s); | 957 | SSL_SESSION_list_remove(p->ctx, s); |
976 | s->not_resumable=1; | 958 | s->not_resumable = 1; |
977 | if (p->ctx->remove_session_cb != NULL) | 959 | if (p->ctx->remove_session_cb != NULL) |
978 | p->ctx->remove_session_cb(p->ctx,s); | 960 | p->ctx->remove_session_cb(p->ctx, s); |
979 | SSL_SESSION_free(s); | 961 | SSL_SESSION_free(s); |
980 | } | ||
981 | } | 962 | } |
963 | } | ||
982 | 964 | ||
983 | static IMPLEMENT_LHASH_DOALL_ARG_FN(timeout, SSL_SESSION, TIMEOUT_PARAM) | 965 | static |
966 | IMPLEMENT_LHASH_DOALL_ARG_FN(timeout, SSL_SESSION, TIMEOUT_PARAM) | ||
984 | 967 | ||
985 | void SSL_CTX_flush_sessions(SSL_CTX *s, long t) | 968 | void |
986 | { | 969 | SSL_CTX_flush_sessions(SSL_CTX *s, long t) |
970 | { | ||
987 | unsigned long i; | 971 | unsigned long i; |
988 | TIMEOUT_PARAM tp; | 972 | TIMEOUT_PARAM tp; |
989 | 973 | ||
990 | tp.ctx=s; | 974 | tp.ctx = s; |
991 | tp.cache=s->sessions; | 975 | tp.cache = s->sessions; |
992 | if (tp.cache == NULL) return; | 976 | if (tp.cache == NULL) |
993 | tp.time=t; | 977 | return; |
978 | tp.time = t; | ||
994 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 979 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
995 | i=CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load; | 980 | i = CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load; |
996 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load=0; | 981 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load = 0; |
997 | lh_SSL_SESSION_doall_arg(tp.cache, LHASH_DOALL_ARG_FN(timeout), | 982 | lh_SSL_SESSION_doall_arg(tp.cache, LHASH_DOALL_ARG_FN(timeout), |
998 | TIMEOUT_PARAM, &tp); | 983 | TIMEOUT_PARAM, &tp); |
999 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load=i; | 984 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load = i; |
1000 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 985 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
1001 | } | 986 | } |
1002 | 987 | ||
1003 | int ssl_clear_bad_session(SSL *s) | 988 | int |
1004 | { | 989 | ssl_clear_bad_session(SSL *s) |
1005 | if ( (s->session != NULL) && | 990 | { |
991 | if ((s->session != NULL) && | ||
1006 | !(s->shutdown & SSL_SENT_SHUTDOWN) && | 992 | !(s->shutdown & SSL_SENT_SHUTDOWN) && |
1007 | !(SSL_in_init(s) || SSL_in_before(s))) | 993 | !(SSL_in_init(s) || SSL_in_before(s))) { |
1008 | { | 994 | SSL_CTX_remove_session(s->ctx, s->session); |
1009 | SSL_CTX_remove_session(s->ctx,s->session); | 995 | return (1); |
1010 | return(1); | 996 | } else |
1011 | } | 997 | return (0); |
1012 | else | 998 | } |
1013 | return(0); | ||
1014 | } | ||
1015 | 999 | ||
1016 | /* locked by SSL_CTX in the calling function */ | 1000 | /* locked by SSL_CTX in the calling function */ |
1017 | static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s) | 1001 | static void |
1018 | { | 1002 | SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s) |
1019 | if ((s->next == NULL) || (s->prev == NULL)) return; | 1003 | { |
1004 | if ((s->next == NULL) | ||
1005 | || (s->prev == NULL)) return; | ||
1020 | 1006 | ||
1021 | if (s->next == (SSL_SESSION *)&(ctx->session_cache_tail)) | 1007 | if (s->next == (SSL_SESSION *)&(ctx->session_cache_tail)) |
1022 | { /* last element in list */ | 1008 | { /* last element in list */ |
1023 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) | 1009 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) |
1024 | { /* only one element in list */ | 1010 | { /* only one element in list */ |
1025 | ctx->session_cache_head=NULL; | 1011 | ctx->session_cache_head = NULL; |
1026 | ctx->session_cache_tail=NULL; | 1012 | ctx->session_cache_tail = NULL; |
1027 | } | 1013 | } else { |
1028 | else | 1014 | ctx->session_cache_tail = s->prev; |
1029 | { | 1015 | s->prev->next = (SSL_SESSION *)&(ctx->session_cache_tail); |
1030 | ctx->session_cache_tail=s->prev; | ||
1031 | s->prev->next=(SSL_SESSION *)&(ctx->session_cache_tail); | ||
1032 | } | ||
1033 | } | 1016 | } |
1034 | else | 1017 | } else { |
1035 | { | ||
1036 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) | 1018 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) |
1037 | { /* first element in list */ | 1019 | { /* first element in list */ |
1038 | ctx->session_cache_head=s->next; | 1020 | ctx->session_cache_head = s->next; |
1039 | s->next->prev=(SSL_SESSION *)&(ctx->session_cache_head); | 1021 | s->next->prev = (SSL_SESSION *)&(ctx->session_cache_head); |
1040 | } | 1022 | } else |
1041 | else | 1023 | { /* middle of list */ |
1042 | { /* middle of list */ | 1024 | s->next->prev = s->prev; |
1043 | s->next->prev=s->prev; | 1025 | s->prev->next = s->next; |
1044 | s->prev->next=s->next; | ||
1045 | } | ||
1046 | } | 1026 | } |
1047 | s->prev=s->next=NULL; | ||
1048 | } | 1027 | } |
1028 | s->prev = s->next = NULL; | ||
1029 | } | ||
1049 | 1030 | ||
1050 | static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s) | 1031 | static void |
1051 | { | 1032 | SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s) |
1033 | { | ||
1052 | if ((s->next != NULL) && (s->prev != NULL)) | 1034 | if ((s->next != NULL) && (s->prev != NULL)) |
1053 | SSL_SESSION_list_remove(ctx,s); | 1035 | SSL_SESSION_list_remove(ctx, s); |
1054 | 1036 | ||
1055 | if (ctx->session_cache_head == NULL) | 1037 | if (ctx->session_cache_head == NULL) { |
1056 | { | 1038 | ctx->session_cache_head = s; |
1057 | ctx->session_cache_head=s; | 1039 | ctx->session_cache_tail = s; |
1058 | ctx->session_cache_tail=s; | 1040 | s->prev = (SSL_SESSION *)&(ctx->session_cache_head); |
1059 | s->prev=(SSL_SESSION *)&(ctx->session_cache_head); | 1041 | s->next = (SSL_SESSION *)&(ctx->session_cache_tail); |
1060 | s->next=(SSL_SESSION *)&(ctx->session_cache_tail); | 1042 | } else { |
1061 | } | 1043 | s->next = ctx->session_cache_head; |
1062 | else | 1044 | s->next->prev = s; |
1063 | { | 1045 | s->prev = (SSL_SESSION *)&(ctx->session_cache_head); |
1064 | s->next=ctx->session_cache_head; | 1046 | ctx->session_cache_head = s; |
1065 | s->next->prev=s; | ||
1066 | s->prev=(SSL_SESSION *)&(ctx->session_cache_head); | ||
1067 | ctx->session_cache_head=s; | ||
1068 | } | ||
1069 | } | 1047 | } |
1048 | } | ||
1070 | 1049 | ||
1071 | void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, | 1050 | void |
1072 | int (*cb)(struct ssl_st *ssl,SSL_SESSION *sess)) | 1051 | SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, |
1073 | { | 1052 | int (*cb)(struct ssl_st *ssl, SSL_SESSION *sess)) { |
1074 | ctx->new_session_cb=cb; | 1053 | ctx->new_session_cb = cb; |
1075 | } | 1054 | } |
1076 | 1055 | ||
1077 | int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess) | 1056 | int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess) |
1078 | { | 1057 | { |
1079 | return ctx->new_session_cb; | 1058 | return ctx->new_session_cb; |
1080 | } | 1059 | } |
1081 | 1060 | ||
1082 | void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, | 1061 | void |
1083 | void (*cb)(SSL_CTX *ctx,SSL_SESSION *sess)) | 1062 | SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, |
1084 | { | 1063 | void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess)) |
1085 | ctx->remove_session_cb=cb; | 1064 | { |
1086 | } | 1065 | ctx->remove_session_cb = cb; |
1066 | } | ||
1087 | 1067 | ||
1088 | void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx,SSL_SESSION *sess) | 1068 | void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx, SSL_SESSION *sess) |
1089 | { | 1069 | { |
1090 | return ctx->remove_session_cb; | 1070 | return ctx->remove_session_cb; |
1091 | } | 1071 | } |
1092 | 1072 | ||
1093 | void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, | 1073 | void |
1094 | SSL_SESSION *(*cb)(struct ssl_st *ssl, | 1074 | SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, |
1095 | unsigned char *data,int len,int *copy)) | 1075 | SSL_SESSION *(*cb)(struct ssl_st *ssl, |
1096 | { | 1076 | unsigned char *data, int len, int *copy)) |
1097 | ctx->get_session_cb=cb; | 1077 | { |
1098 | } | 1078 | ctx->get_session_cb = cb; |
1079 | } | ||
1099 | 1080 | ||
1100 | SSL_SESSION * (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, | 1081 | SSL_SESSION * (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, |
1101 | unsigned char *data,int len,int *copy) | 1082 | unsigned char *data, int len, int *copy) |
1102 | { | 1083 | { |
1103 | return ctx->get_session_cb; | 1084 | return ctx->get_session_cb; |
1104 | } | 1085 | } |
1105 | 1086 | ||
1106 | void SSL_CTX_set_info_callback(SSL_CTX *ctx, | 1087 | void |
1107 | void (*cb)(const SSL *ssl,int type,int val)) | 1088 | SSL_CTX_set_info_callback(SSL_CTX *ctx, |
1108 | { | 1089 | void (*cb)(const SSL *ssl, int type, int val)) |
1109 | ctx->info_callback=cb; | 1090 | { |
1110 | } | 1091 | ctx->info_callback = cb; |
1092 | } | ||
1111 | 1093 | ||
1112 | void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val) | 1094 | void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl, int type, int val) |
1113 | { | 1095 | { |
1114 | return ctx->info_callback; | 1096 | return ctx->info_callback; |
1115 | } | 1097 | } |
1116 | 1098 | ||
1117 | void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, | 1099 | void |
1118 | int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)) | 1100 | SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, |
1119 | { | 1101 | int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)) |
1120 | ctx->client_cert_cb=cb; | 1102 | { |
1121 | } | 1103 | ctx->client_cert_cb = cb; |
1104 | } | ||
1122 | 1105 | ||
1123 | int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509 , EVP_PKEY **pkey) | 1106 | int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509 , EVP_PKEY **pkey) |
1124 | { | 1107 | { |
1125 | return ctx->client_cert_cb; | 1108 | return ctx->client_cert_cb; |
1126 | } | 1109 | } |
1127 | 1110 | ||
1128 | #ifndef OPENSSL_NO_ENGINE | 1111 | #ifndef OPENSSL_NO_ENGINE |
1129 | int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e) | 1112 | int |
1130 | { | 1113 | SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e) |
1131 | if (!ENGINE_init(e)) | 1114 | { |
1132 | { | 1115 | if (!ENGINE_init(e)) { |
1133 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, ERR_R_ENGINE_LIB); | 1116 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, ERR_R_ENGINE_LIB); |
1134 | return 0; | 1117 | return 0; |
1135 | } | 1118 | } |
1136 | if(!ENGINE_get_ssl_client_cert_function(e)) | 1119 | if (!ENGINE_get_ssl_client_cert_function(e)) { |
1137 | { | ||
1138 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, SSL_R_NO_CLIENT_CERT_METHOD); | 1120 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, SSL_R_NO_CLIENT_CERT_METHOD); |
1139 | ENGINE_finish(e); | 1121 | ENGINE_finish(e); |
1140 | return 0; | 1122 | return 0; |
1141 | } | 1123 | } |
1142 | ctx->client_cert_engine = e; | 1124 | ctx->client_cert_engine = e; |
1143 | return 1; | 1125 | return 1; |
1144 | } | 1126 | } |
1145 | #endif | 1127 | #endif |
1146 | 1128 | ||
1147 | void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, | 1129 | void |
1148 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)) | 1130 | SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, |
1149 | { | 1131 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)) |
1150 | ctx->app_gen_cookie_cb=cb; | 1132 | { |
1151 | } | 1133 | ctx->app_gen_cookie_cb = cb; |
1134 | } | ||
1152 | 1135 | ||
1153 | void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, | 1136 | void |
1154 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)) | 1137 | SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, |
1155 | { | 1138 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)) |
1156 | ctx->app_verify_cookie_cb=cb; | 1139 | { |
1157 | } | 1140 | ctx->app_verify_cookie_cb = cb; |
1141 | } | ||
1158 | 1142 | ||
1159 | IMPLEMENT_PEM_rw(SSL_SESSION, SSL_SESSION, PEM_STRING_SSL_SESSION, SSL_SESSION) | 1143 | IMPLEMENT_PEM_rw(SSL_SESSION, SSL_SESSION, PEM_STRING_SSL_SESSION, SSL_SESSION) |
diff --git a/src/lib/libssl/src/ssl/ssl_stat.c b/src/lib/libssl/src/ssl/ssl_stat.c index 144b81e55f..3d9371cdd7 100644 --- a/src/lib/libssl/src/ssl/ssl_stat.c +++ b/src/lib/libssl/src/ssl/ssl_stat.c | |||
@@ -85,311 +85,533 @@ | |||
85 | #include <stdio.h> | 85 | #include <stdio.h> |
86 | #include "ssl_locl.h" | 86 | #include "ssl_locl.h" |
87 | 87 | ||
88 | const char *SSL_state_string_long(const SSL *s) | 88 | const char |
89 | { | 89 | *SSL_state_string_long(const SSL *s) |
90 | { | ||
90 | const char *str; | 91 | const char *str; |
91 | 92 | ||
92 | switch (s->state) | 93 | switch (s->state) { |
93 | { | 94 | case SSL_ST_BEFORE: |
94 | case SSL_ST_BEFORE: str="before SSL initialization"; break; | 95 | str="before SSL initialization"; break; |
95 | case SSL_ST_ACCEPT: str="before accept initialization"; break; | 96 | case SSL_ST_ACCEPT: |
96 | case SSL_ST_CONNECT: str="before connect initialization"; break; | 97 | str="before accept initialization"; break; |
97 | case SSL_ST_OK: str="SSL negotiation finished successfully"; break; | 98 | case SSL_ST_CONNECT: |
98 | case SSL_ST_RENEGOTIATE: str="SSL renegotiate ciphers"; break; | 99 | str="before connect initialization"; break; |
99 | case SSL_ST_BEFORE|SSL_ST_CONNECT: str="before/connect initialization"; break; | 100 | case SSL_ST_OK: |
100 | case SSL_ST_OK|SSL_ST_CONNECT: str="ok/connect SSL initialization"; break; | 101 | str="SSL negotiation finished successfully"; break; |
101 | case SSL_ST_BEFORE|SSL_ST_ACCEPT: str="before/accept initialization"; break; | 102 | case SSL_ST_RENEGOTIATE: |
102 | case SSL_ST_OK|SSL_ST_ACCEPT: str="ok/accept SSL initialization"; break; | 103 | str="SSL renegotiate ciphers"; break; |
104 | case SSL_ST_BEFORE|SSL_ST_CONNECT: | ||
105 | str="before/connect initialization"; break; | ||
106 | case SSL_ST_OK|SSL_ST_CONNECT: | ||
107 | str="ok/connect SSL initialization"; break; | ||
108 | case SSL_ST_BEFORE|SSL_ST_ACCEPT: | ||
109 | str="before/accept initialization"; break; | ||
110 | case SSL_ST_OK|SSL_ST_ACCEPT: | ||
111 | str="ok/accept SSL initialization"; break; | ||
103 | #ifndef OPENSSL_NO_SSL2 | 112 | #ifndef OPENSSL_NO_SSL2 |
104 | case SSL2_ST_CLIENT_START_ENCRYPTION: str="SSLv2 client start encryption"; break; | 113 | case SSL2_ST_CLIENT_START_ENCRYPTION: |
105 | case SSL2_ST_SERVER_START_ENCRYPTION: str="SSLv2 server start encryption"; break; | 114 | str="SSLv2 client start encryption"; break; |
106 | case SSL2_ST_SEND_CLIENT_HELLO_A: str="SSLv2 write client hello A"; break; | 115 | case SSL2_ST_SERVER_START_ENCRYPTION: |
107 | case SSL2_ST_SEND_CLIENT_HELLO_B: str="SSLv2 write client hello B"; break; | 116 | str="SSLv2 server start encryption"; break; |
108 | case SSL2_ST_GET_SERVER_HELLO_A: str="SSLv2 read server hello A"; break; | 117 | case SSL2_ST_SEND_CLIENT_HELLO_A: |
109 | case SSL2_ST_GET_SERVER_HELLO_B: str="SSLv2 read server hello B"; break; | 118 | str="SSLv2 write client hello A"; break; |
110 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="SSLv2 write client master key A"; break; | 119 | case SSL2_ST_SEND_CLIENT_HELLO_B: |
111 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="SSLv2 write client master key B"; break; | 120 | str="SSLv2 write client hello B"; break; |
112 | case SSL2_ST_SEND_CLIENT_FINISHED_A: str="SSLv2 write client finished A"; break; | 121 | case SSL2_ST_GET_SERVER_HELLO_A: |
113 | case SSL2_ST_SEND_CLIENT_FINISHED_B: str="SSLv2 write client finished B"; break; | 122 | str="SSLv2 read server hello A"; break; |
114 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="SSLv2 write client certificate A"; break; | 123 | case SSL2_ST_GET_SERVER_HELLO_B: |
115 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="SSLv2 write client certificate B"; break; | 124 | str="SSLv2 read server hello B"; break; |
116 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="SSLv2 write client certificate C"; break; | 125 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: |
117 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="SSLv2 write client certificate D"; break; | 126 | str="SSLv2 write client master key A"; break; |
118 | case SSL2_ST_GET_SERVER_VERIFY_A: str="SSLv2 read server verify A"; break; | 127 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: |
119 | case SSL2_ST_GET_SERVER_VERIFY_B: str="SSLv2 read server verify B"; break; | 128 | str="SSLv2 write client master key B"; break; |
120 | case SSL2_ST_GET_SERVER_FINISHED_A: str="SSLv2 read server finished A"; break; | 129 | case SSL2_ST_SEND_CLIENT_FINISHED_A: |
121 | case SSL2_ST_GET_SERVER_FINISHED_B: str="SSLv2 read server finished B"; break; | 130 | str="SSLv2 write client finished A"; break; |
122 | case SSL2_ST_GET_CLIENT_HELLO_A: str="SSLv2 read client hello A"; break; | 131 | case SSL2_ST_SEND_CLIENT_FINISHED_B: |
123 | case SSL2_ST_GET_CLIENT_HELLO_B: str="SSLv2 read client hello B"; break; | 132 | str="SSLv2 write client finished B"; break; |
124 | case SSL2_ST_GET_CLIENT_HELLO_C: str="SSLv2 read client hello C"; break; | 133 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: |
125 | case SSL2_ST_SEND_SERVER_HELLO_A: str="SSLv2 write server hello A"; break; | 134 | str="SSLv2 write client certificate A"; break; |
126 | case SSL2_ST_SEND_SERVER_HELLO_B: str="SSLv2 write server hello B"; break; | 135 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: |
127 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="SSLv2 read client master key A"; break; | 136 | str="SSLv2 write client certificate B"; break; |
128 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="SSLv2 read client master key B"; break; | 137 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: |
129 | case SSL2_ST_SEND_SERVER_VERIFY_A: str="SSLv2 write server verify A"; break; | 138 | str="SSLv2 write client certificate C"; break; |
130 | case SSL2_ST_SEND_SERVER_VERIFY_B: str="SSLv2 write server verify B"; break; | 139 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: |
131 | case SSL2_ST_SEND_SERVER_VERIFY_C: str="SSLv2 write server verify C"; break; | 140 | str="SSLv2 write client certificate D"; break; |
132 | case SSL2_ST_GET_CLIENT_FINISHED_A: str="SSLv2 read client finished A"; break; | 141 | case SSL2_ST_GET_SERVER_VERIFY_A: |
133 | case SSL2_ST_GET_CLIENT_FINISHED_B: str="SSLv2 read client finished B"; break; | 142 | str="SSLv2 read server verify A"; break; |
134 | case SSL2_ST_SEND_SERVER_FINISHED_A: str="SSLv2 write server finished A"; break; | 143 | case SSL2_ST_GET_SERVER_VERIFY_B: |
135 | case SSL2_ST_SEND_SERVER_FINISHED_B: str="SSLv2 write server finished B"; break; | 144 | str="SSLv2 read server verify B"; break; |
136 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="SSLv2 write request certificate A"; break; | 145 | case SSL2_ST_GET_SERVER_FINISHED_A: |
137 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="SSLv2 write request certificate B"; break; | 146 | str="SSLv2 read server finished A"; break; |
138 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="SSLv2 write request certificate C"; break; | 147 | case SSL2_ST_GET_SERVER_FINISHED_B: |
139 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="SSLv2 write request certificate D"; break; | 148 | str="SSLv2 read server finished B"; break; |
140 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="SSLv2 X509 read server certificate"; break; | 149 | case SSL2_ST_GET_CLIENT_HELLO_A: |
141 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="SSLv2 X509 read client certificate"; break; | 150 | str="SSLv2 read client hello A"; break; |
151 | case SSL2_ST_GET_CLIENT_HELLO_B: | ||
152 | str="SSLv2 read client hello B"; break; | ||
153 | case SSL2_ST_GET_CLIENT_HELLO_C: | ||
154 | str="SSLv2 read client hello C"; break; | ||
155 | case SSL2_ST_SEND_SERVER_HELLO_A: | ||
156 | str="SSLv2 write server hello A"; break; | ||
157 | case SSL2_ST_SEND_SERVER_HELLO_B: | ||
158 | str="SSLv2 write server hello B"; break; | ||
159 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: | ||
160 | str="SSLv2 read client master key A"; break; | ||
161 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: | ||
162 | str="SSLv2 read client master key B"; break; | ||
163 | case SSL2_ST_SEND_SERVER_VERIFY_A: | ||
164 | str="SSLv2 write server verify A"; break; | ||
165 | case SSL2_ST_SEND_SERVER_VERIFY_B: | ||
166 | str="SSLv2 write server verify B"; break; | ||
167 | case SSL2_ST_SEND_SERVER_VERIFY_C: | ||
168 | str="SSLv2 write server verify C"; break; | ||
169 | case SSL2_ST_GET_CLIENT_FINISHED_A: | ||
170 | str="SSLv2 read client finished A"; break; | ||
171 | case SSL2_ST_GET_CLIENT_FINISHED_B: | ||
172 | str="SSLv2 read client finished B"; break; | ||
173 | case SSL2_ST_SEND_SERVER_FINISHED_A: | ||
174 | str="SSLv2 write server finished A"; break; | ||
175 | case SSL2_ST_SEND_SERVER_FINISHED_B: | ||
176 | str="SSLv2 write server finished B"; break; | ||
177 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: | ||
178 | str="SSLv2 write request certificate A"; break; | ||
179 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: | ||
180 | str="SSLv2 write request certificate B"; break; | ||
181 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: | ||
182 | str="SSLv2 write request certificate C"; break; | ||
183 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: | ||
184 | str="SSLv2 write request certificate D"; break; | ||
185 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: | ||
186 | str="SSLv2 X509 read server certificate"; break; | ||
187 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: | ||
188 | str="SSLv2 X509 read client certificate"; break; | ||
142 | #endif | 189 | #endif |
143 | 190 | ||
144 | #ifndef OPENSSL_NO_SSL3 | 191 | #ifndef OPENSSL_NO_SSL3 |
145 | /* SSLv3 additions */ | 192 | /* SSLv3 additions */ |
146 | case SSL3_ST_CW_CLNT_HELLO_A: str="SSLv3 write client hello A"; break; | 193 | case SSL3_ST_CW_CLNT_HELLO_A: |
147 | case SSL3_ST_CW_CLNT_HELLO_B: str="SSLv3 write client hello B"; break; | 194 | str="SSLv3 write client hello A"; break; |
148 | case SSL3_ST_CR_SRVR_HELLO_A: str="SSLv3 read server hello A"; break; | 195 | case SSL3_ST_CW_CLNT_HELLO_B: |
149 | case SSL3_ST_CR_SRVR_HELLO_B: str="SSLv3 read server hello B"; break; | 196 | str="SSLv3 write client hello B"; break; |
150 | case SSL3_ST_CR_CERT_A: str="SSLv3 read server certificate A"; break; | 197 | case SSL3_ST_CR_SRVR_HELLO_A: |
151 | case SSL3_ST_CR_CERT_B: str="SSLv3 read server certificate B"; break; | 198 | str="SSLv3 read server hello A"; break; |
152 | case SSL3_ST_CR_KEY_EXCH_A: str="SSLv3 read server key exchange A"; break; | 199 | case SSL3_ST_CR_SRVR_HELLO_B: |
153 | case SSL3_ST_CR_KEY_EXCH_B: str="SSLv3 read server key exchange B"; break; | 200 | str="SSLv3 read server hello B"; break; |
154 | case SSL3_ST_CR_CERT_REQ_A: str="SSLv3 read server certificate request A"; break; | 201 | case SSL3_ST_CR_CERT_A: |
155 | case SSL3_ST_CR_CERT_REQ_B: str="SSLv3 read server certificate request B"; break; | 202 | str="SSLv3 read server certificate A"; break; |
156 | case SSL3_ST_CR_SESSION_TICKET_A: str="SSLv3 read server session ticket A";break; | 203 | case SSL3_ST_CR_CERT_B: |
157 | case SSL3_ST_CR_SESSION_TICKET_B: str="SSLv3 read server session ticket B";break; | 204 | str="SSLv3 read server certificate B"; break; |
158 | case SSL3_ST_CR_SRVR_DONE_A: str="SSLv3 read server done A"; break; | 205 | case SSL3_ST_CR_KEY_EXCH_A: |
159 | case SSL3_ST_CR_SRVR_DONE_B: str="SSLv3 read server done B"; break; | 206 | str="SSLv3 read server key exchange A"; break; |
160 | case SSL3_ST_CW_CERT_A: str="SSLv3 write client certificate A"; break; | 207 | case SSL3_ST_CR_KEY_EXCH_B: |
161 | case SSL3_ST_CW_CERT_B: str="SSLv3 write client certificate B"; break; | 208 | str="SSLv3 read server key exchange B"; break; |
162 | case SSL3_ST_CW_CERT_C: str="SSLv3 write client certificate C"; break; | 209 | case SSL3_ST_CR_CERT_REQ_A: |
163 | case SSL3_ST_CW_CERT_D: str="SSLv3 write client certificate D"; break; | 210 | str="SSLv3 read server certificate request A"; break; |
164 | case SSL3_ST_CW_KEY_EXCH_A: str="SSLv3 write client key exchange A"; break; | 211 | case SSL3_ST_CR_CERT_REQ_B: |
165 | case SSL3_ST_CW_KEY_EXCH_B: str="SSLv3 write client key exchange B"; break; | 212 | str="SSLv3 read server certificate request B"; break; |
166 | case SSL3_ST_CW_CERT_VRFY_A: str="SSLv3 write certificate verify A"; break; | 213 | case SSL3_ST_CR_SESSION_TICKET_A: |
167 | case SSL3_ST_CW_CERT_VRFY_B: str="SSLv3 write certificate verify B"; break; | 214 | str="SSLv3 read server session ticket A";break; |
215 | case SSL3_ST_CR_SESSION_TICKET_B: | ||
216 | str="SSLv3 read server session ticket B";break; | ||
217 | case SSL3_ST_CR_SRVR_DONE_A: | ||
218 | str="SSLv3 read server done A"; break; | ||
219 | case SSL3_ST_CR_SRVR_DONE_B: | ||
220 | str="SSLv3 read server done B"; break; | ||
221 | case SSL3_ST_CW_CERT_A: | ||
222 | str="SSLv3 write client certificate A"; break; | ||
223 | case SSL3_ST_CW_CERT_B: | ||
224 | str="SSLv3 write client certificate B"; break; | ||
225 | case SSL3_ST_CW_CERT_C: | ||
226 | str="SSLv3 write client certificate C"; break; | ||
227 | case SSL3_ST_CW_CERT_D: | ||
228 | str="SSLv3 write client certificate D"; break; | ||
229 | case SSL3_ST_CW_KEY_EXCH_A: | ||
230 | str="SSLv3 write client key exchange A"; break; | ||
231 | case SSL3_ST_CW_KEY_EXCH_B: | ||
232 | str="SSLv3 write client key exchange B"; break; | ||
233 | case SSL3_ST_CW_CERT_VRFY_A: | ||
234 | str="SSLv3 write certificate verify A"; break; | ||
235 | case SSL3_ST_CW_CERT_VRFY_B: | ||
236 | str="SSLv3 write certificate verify B"; break; | ||
168 | 237 | ||
169 | case SSL3_ST_CW_CHANGE_A: | 238 | case SSL3_ST_CW_CHANGE_A: |
170 | case SSL3_ST_SW_CHANGE_A: str="SSLv3 write change cipher spec A"; break; | 239 | case SSL3_ST_SW_CHANGE_A: |
171 | case SSL3_ST_CW_CHANGE_B: | 240 | str="SSLv3 write change cipher spec A"; break; |
172 | case SSL3_ST_SW_CHANGE_B: str="SSLv3 write change cipher spec B"; break; | 241 | case SSL3_ST_CW_CHANGE_B: |
173 | case SSL3_ST_CW_FINISHED_A: | 242 | case SSL3_ST_SW_CHANGE_B: |
174 | case SSL3_ST_SW_FINISHED_A: str="SSLv3 write finished A"; break; | 243 | str="SSLv3 write change cipher spec B"; break; |
175 | case SSL3_ST_CW_FINISHED_B: | 244 | case SSL3_ST_CW_FINISHED_A: |
176 | case SSL3_ST_SW_FINISHED_B: str="SSLv3 write finished B"; break; | 245 | case SSL3_ST_SW_FINISHED_A: |
177 | case SSL3_ST_CR_CHANGE_A: | 246 | str="SSLv3 write finished A"; break; |
178 | case SSL3_ST_SR_CHANGE_A: str="SSLv3 read change cipher spec A"; break; | 247 | case SSL3_ST_CW_FINISHED_B: |
179 | case SSL3_ST_CR_CHANGE_B: | 248 | case SSL3_ST_SW_FINISHED_B: |
180 | case SSL3_ST_SR_CHANGE_B: str="SSLv3 read change cipher spec B"; break; | 249 | str="SSLv3 write finished B"; break; |
181 | case SSL3_ST_CR_FINISHED_A: | 250 | case SSL3_ST_CR_CHANGE_A: |
182 | case SSL3_ST_SR_FINISHED_A: str="SSLv3 read finished A"; break; | 251 | case SSL3_ST_SR_CHANGE_A: |
183 | case SSL3_ST_CR_FINISHED_B: | 252 | str="SSLv3 read change cipher spec A"; break; |
184 | case SSL3_ST_SR_FINISHED_B: str="SSLv3 read finished B"; break; | 253 | case SSL3_ST_CR_CHANGE_B: |
254 | case SSL3_ST_SR_CHANGE_B: | ||
255 | str="SSLv3 read change cipher spec B"; break; | ||
256 | case SSL3_ST_CR_FINISHED_A: | ||
257 | case SSL3_ST_SR_FINISHED_A: | ||
258 | str="SSLv3 read finished A"; break; | ||
259 | case SSL3_ST_CR_FINISHED_B: | ||
260 | case SSL3_ST_SR_FINISHED_B: | ||
261 | str="SSLv3 read finished B"; break; | ||
185 | 262 | ||
186 | case SSL3_ST_CW_FLUSH: | 263 | case SSL3_ST_CW_FLUSH: |
187 | case SSL3_ST_SW_FLUSH: str="SSLv3 flush data"; break; | 264 | case SSL3_ST_SW_FLUSH: |
265 | str="SSLv3 flush data"; break; | ||
188 | 266 | ||
189 | case SSL3_ST_SR_CLNT_HELLO_A: str="SSLv3 read client hello A"; break; | 267 | case SSL3_ST_SR_CLNT_HELLO_A: |
190 | case SSL3_ST_SR_CLNT_HELLO_B: str="SSLv3 read client hello B"; break; | 268 | str="SSLv3 read client hello A"; break; |
191 | case SSL3_ST_SR_CLNT_HELLO_C: str="SSLv3 read client hello C"; break; | 269 | case SSL3_ST_SR_CLNT_HELLO_B: |
192 | case SSL3_ST_SW_HELLO_REQ_A: str="SSLv3 write hello request A"; break; | 270 | str="SSLv3 read client hello B"; break; |
193 | case SSL3_ST_SW_HELLO_REQ_B: str="SSLv3 write hello request B"; break; | 271 | case SSL3_ST_SR_CLNT_HELLO_C: |
194 | case SSL3_ST_SW_HELLO_REQ_C: str="SSLv3 write hello request C"; break; | 272 | str="SSLv3 read client hello C"; break; |
195 | case SSL3_ST_SW_SRVR_HELLO_A: str="SSLv3 write server hello A"; break; | 273 | case SSL3_ST_SW_HELLO_REQ_A: |
196 | case SSL3_ST_SW_SRVR_HELLO_B: str="SSLv3 write server hello B"; break; | 274 | str="SSLv3 write hello request A"; break; |
197 | case SSL3_ST_SW_CERT_A: str="SSLv3 write certificate A"; break; | 275 | case SSL3_ST_SW_HELLO_REQ_B: |
198 | case SSL3_ST_SW_CERT_B: str="SSLv3 write certificate B"; break; | 276 | str="SSLv3 write hello request B"; break; |
199 | case SSL3_ST_SW_KEY_EXCH_A: str="SSLv3 write key exchange A"; break; | 277 | case SSL3_ST_SW_HELLO_REQ_C: |
200 | case SSL3_ST_SW_KEY_EXCH_B: str="SSLv3 write key exchange B"; break; | 278 | str="SSLv3 write hello request C"; break; |
201 | case SSL3_ST_SW_CERT_REQ_A: str="SSLv3 write certificate request A"; break; | 279 | case SSL3_ST_SW_SRVR_HELLO_A: |
202 | case SSL3_ST_SW_CERT_REQ_B: str="SSLv3 write certificate request B"; break; | 280 | str="SSLv3 write server hello A"; break; |
203 | case SSL3_ST_SW_SESSION_TICKET_A: str="SSLv3 write session ticket A"; break; | 281 | case SSL3_ST_SW_SRVR_HELLO_B: |
204 | case SSL3_ST_SW_SESSION_TICKET_B: str="SSLv3 write session ticket B"; break; | 282 | str="SSLv3 write server hello B"; break; |
205 | case SSL3_ST_SW_SRVR_DONE_A: str="SSLv3 write server done A"; break; | 283 | case SSL3_ST_SW_CERT_A: |
206 | case SSL3_ST_SW_SRVR_DONE_B: str="SSLv3 write server done B"; break; | 284 | str="SSLv3 write certificate A"; break; |
207 | case SSL3_ST_SR_CERT_A: str="SSLv3 read client certificate A"; break; | 285 | case SSL3_ST_SW_CERT_B: |
208 | case SSL3_ST_SR_CERT_B: str="SSLv3 read client certificate B"; break; | 286 | str="SSLv3 write certificate B"; break; |
209 | case SSL3_ST_SR_KEY_EXCH_A: str="SSLv3 read client key exchange A"; break; | 287 | case SSL3_ST_SW_KEY_EXCH_A: |
210 | case SSL3_ST_SR_KEY_EXCH_B: str="SSLv3 read client key exchange B"; break; | 288 | str="SSLv3 write key exchange A"; break; |
211 | case SSL3_ST_SR_CERT_VRFY_A: str="SSLv3 read certificate verify A"; break; | 289 | case SSL3_ST_SW_KEY_EXCH_B: |
212 | case SSL3_ST_SR_CERT_VRFY_B: str="SSLv3 read certificate verify B"; break; | 290 | str="SSLv3 write key exchange B"; break; |
291 | case SSL3_ST_SW_CERT_REQ_A: | ||
292 | str="SSLv3 write certificate request A"; break; | ||
293 | case SSL3_ST_SW_CERT_REQ_B: | ||
294 | str="SSLv3 write certificate request B"; break; | ||
295 | case SSL3_ST_SW_SESSION_TICKET_A: | ||
296 | str="SSLv3 write session ticket A"; break; | ||
297 | case SSL3_ST_SW_SESSION_TICKET_B: | ||
298 | str="SSLv3 write session ticket B"; break; | ||
299 | case SSL3_ST_SW_SRVR_DONE_A: | ||
300 | str="SSLv3 write server done A"; break; | ||
301 | case SSL3_ST_SW_SRVR_DONE_B: | ||
302 | str="SSLv3 write server done B"; break; | ||
303 | case SSL3_ST_SR_CERT_A: | ||
304 | str="SSLv3 read client certificate A"; break; | ||
305 | case SSL3_ST_SR_CERT_B: | ||
306 | str="SSLv3 read client certificate B"; break; | ||
307 | case SSL3_ST_SR_KEY_EXCH_A: | ||
308 | str="SSLv3 read client key exchange A"; break; | ||
309 | case SSL3_ST_SR_KEY_EXCH_B: | ||
310 | str="SSLv3 read client key exchange B"; break; | ||
311 | case SSL3_ST_SR_CERT_VRFY_A: | ||
312 | str="SSLv3 read certificate verify A"; break; | ||
313 | case SSL3_ST_SR_CERT_VRFY_B: | ||
314 | str="SSLv3 read certificate verify B"; break; | ||
213 | #endif | 315 | #endif |
214 | 316 | ||
215 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) | 317 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) |
216 | /* SSLv2/v3 compatibility states */ | 318 | /* SSLv2/v3 compatibility states */ |
217 | /* client */ | 319 | /* client */ |
218 | case SSL23_ST_CW_CLNT_HELLO_A: str="SSLv2/v3 write client hello A"; break; | 320 | case SSL23_ST_CW_CLNT_HELLO_A: |
219 | case SSL23_ST_CW_CLNT_HELLO_B: str="SSLv2/v3 write client hello B"; break; | 321 | str="SSLv2/v3 write client hello A"; break; |
220 | case SSL23_ST_CR_SRVR_HELLO_A: str="SSLv2/v3 read server hello A"; break; | 322 | case SSL23_ST_CW_CLNT_HELLO_B: |
221 | case SSL23_ST_CR_SRVR_HELLO_B: str="SSLv2/v3 read server hello B"; break; | 323 | str="SSLv2/v3 write client hello B"; break; |
324 | case SSL23_ST_CR_SRVR_HELLO_A: | ||
325 | str="SSLv2/v3 read server hello A"; break; | ||
326 | case SSL23_ST_CR_SRVR_HELLO_B: | ||
327 | str="SSLv2/v3 read server hello B"; break; | ||
222 | /* server */ | 328 | /* server */ |
223 | case SSL23_ST_SR_CLNT_HELLO_A: str="SSLv2/v3 read client hello A"; break; | 329 | case SSL23_ST_SR_CLNT_HELLO_A: |
224 | case SSL23_ST_SR_CLNT_HELLO_B: str="SSLv2/v3 read client hello B"; break; | 330 | str="SSLv2/v3 read client hello A"; break; |
331 | case SSL23_ST_SR_CLNT_HELLO_B: | ||
332 | str="SSLv2/v3 read client hello B"; break; | ||
225 | #endif | 333 | #endif |
226 | 334 | ||
227 | /* DTLS */ | 335 | /* DTLS */ |
228 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: str="DTLS1 read hello verify request A"; break; | 336 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: |
229 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: str="DTLS1 read hello verify request B"; break; | 337 | str="DTLS1 read hello verify request A"; break; |
230 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: str="DTLS1 write hello verify request A"; break; | 338 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: |
231 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: str="DTLS1 write hello verify request B"; break; | 339 | str="DTLS1 read hello verify request B"; break; |
340 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: | ||
341 | str="DTLS1 write hello verify request A"; break; | ||
342 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: | ||
343 | str="DTLS1 write hello verify request B"; break; | ||
232 | 344 | ||
233 | default: str="unknown state"; break; | 345 | default: |
234 | } | 346 | str="unknown state"; break; |
235 | return(str); | ||
236 | } | 347 | } |
348 | return (str); | ||
349 | } | ||
237 | 350 | ||
238 | const char *SSL_rstate_string_long(const SSL *s) | 351 | const char |
239 | { | 352 | *SSL_rstate_string_long(const SSL *s) |
353 | { | ||
240 | const char *str; | 354 | const char *str; |
241 | 355 | ||
242 | switch (s->rstate) | 356 | switch (s->rstate) { |
243 | { | 357 | case SSL_ST_READ_HEADER: |
244 | case SSL_ST_READ_HEADER: str="read header"; break; | 358 | str="read header"; break; |
245 | case SSL_ST_READ_BODY: str="read body"; break; | 359 | case SSL_ST_READ_BODY: |
246 | case SSL_ST_READ_DONE: str="read done"; break; | 360 | str="read body"; break; |
247 | default: str="unknown"; break; | 361 | case SSL_ST_READ_DONE: |
248 | } | 362 | str="read done"; break; |
249 | return(str); | 363 | default: |
364 | str="unknown"; break; | ||
250 | } | 365 | } |
366 | return (str); | ||
367 | } | ||
251 | 368 | ||
252 | const char *SSL_state_string(const SSL *s) | 369 | const char |
253 | { | 370 | *SSL_state_string(const SSL *s) |
371 | { | ||
254 | const char *str; | 372 | const char *str; |
255 | 373 | ||
256 | switch (s->state) | 374 | switch (s->state) { |
257 | { | 375 | case SSL_ST_BEFORE: |
258 | case SSL_ST_BEFORE: str="PINIT "; break; | 376 | str="PINIT "; break; |
259 | case SSL_ST_ACCEPT: str="AINIT "; break; | 377 | case SSL_ST_ACCEPT: |
260 | case SSL_ST_CONNECT: str="CINIT "; break; | 378 | str="AINIT "; break; |
261 | case SSL_ST_OK: str="SSLOK "; break; | 379 | case SSL_ST_CONNECT: |
380 | str="CINIT "; break; | ||
381 | case SSL_ST_OK: | ||
382 | str="SSLOK "; break; | ||
262 | #ifndef OPENSSL_NO_SSL2 | 383 | #ifndef OPENSSL_NO_SSL2 |
263 | case SSL2_ST_CLIENT_START_ENCRYPTION: str="2CSENC"; break; | 384 | case SSL2_ST_CLIENT_START_ENCRYPTION: |
264 | case SSL2_ST_SERVER_START_ENCRYPTION: str="2SSENC"; break; | 385 | str="2CSENC"; break; |
265 | case SSL2_ST_SEND_CLIENT_HELLO_A: str="2SCH_A"; break; | 386 | case SSL2_ST_SERVER_START_ENCRYPTION: |
266 | case SSL2_ST_SEND_CLIENT_HELLO_B: str="2SCH_B"; break; | 387 | str="2SSENC"; break; |
267 | case SSL2_ST_GET_SERVER_HELLO_A: str="2GSH_A"; break; | 388 | case SSL2_ST_SEND_CLIENT_HELLO_A: |
268 | case SSL2_ST_GET_SERVER_HELLO_B: str="2GSH_B"; break; | 389 | str="2SCH_A"; break; |
269 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="2SCMKA"; break; | 390 | case SSL2_ST_SEND_CLIENT_HELLO_B: |
270 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="2SCMKB"; break; | 391 | str="2SCH_B"; break; |
271 | case SSL2_ST_SEND_CLIENT_FINISHED_A: str="2SCF_A"; break; | 392 | case SSL2_ST_GET_SERVER_HELLO_A: |
272 | case SSL2_ST_SEND_CLIENT_FINISHED_B: str="2SCF_B"; break; | 393 | str="2GSH_A"; break; |
273 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="2SCC_A"; break; | 394 | case SSL2_ST_GET_SERVER_HELLO_B: |
274 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="2SCC_B"; break; | 395 | str="2GSH_B"; break; |
275 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="2SCC_C"; break; | 396 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: |
276 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="2SCC_D"; break; | 397 | str="2SCMKA"; break; |
277 | case SSL2_ST_GET_SERVER_VERIFY_A: str="2GSV_A"; break; | 398 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: |
278 | case SSL2_ST_GET_SERVER_VERIFY_B: str="2GSV_B"; break; | 399 | str="2SCMKB"; break; |
279 | case SSL2_ST_GET_SERVER_FINISHED_A: str="2GSF_A"; break; | 400 | case SSL2_ST_SEND_CLIENT_FINISHED_A: |
280 | case SSL2_ST_GET_SERVER_FINISHED_B: str="2GSF_B"; break; | 401 | str="2SCF_A"; break; |
281 | case SSL2_ST_GET_CLIENT_HELLO_A: str="2GCH_A"; break; | 402 | case SSL2_ST_SEND_CLIENT_FINISHED_B: |
282 | case SSL2_ST_GET_CLIENT_HELLO_B: str="2GCH_B"; break; | 403 | str="2SCF_B"; break; |
283 | case SSL2_ST_GET_CLIENT_HELLO_C: str="2GCH_C"; break; | 404 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: |
284 | case SSL2_ST_SEND_SERVER_HELLO_A: str="2SSH_A"; break; | 405 | str="2SCC_A"; break; |
285 | case SSL2_ST_SEND_SERVER_HELLO_B: str="2SSH_B"; break; | 406 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: |
286 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="2GCMKA"; break; | 407 | str="2SCC_B"; break; |
287 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="2GCMKA"; break; | 408 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: |
288 | case SSL2_ST_SEND_SERVER_VERIFY_A: str="2SSV_A"; break; | 409 | str="2SCC_C"; break; |
289 | case SSL2_ST_SEND_SERVER_VERIFY_B: str="2SSV_B"; break; | 410 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: |
290 | case SSL2_ST_SEND_SERVER_VERIFY_C: str="2SSV_C"; break; | 411 | str="2SCC_D"; break; |
291 | case SSL2_ST_GET_CLIENT_FINISHED_A: str="2GCF_A"; break; | 412 | case SSL2_ST_GET_SERVER_VERIFY_A: |
292 | case SSL2_ST_GET_CLIENT_FINISHED_B: str="2GCF_B"; break; | 413 | str="2GSV_A"; break; |
293 | case SSL2_ST_SEND_SERVER_FINISHED_A: str="2SSF_A"; break; | 414 | case SSL2_ST_GET_SERVER_VERIFY_B: |
294 | case SSL2_ST_SEND_SERVER_FINISHED_B: str="2SSF_B"; break; | 415 | str="2GSV_B"; break; |
295 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="2SRC_A"; break; | 416 | case SSL2_ST_GET_SERVER_FINISHED_A: |
296 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="2SRC_B"; break; | 417 | str="2GSF_A"; break; |
297 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="2SRC_C"; break; | 418 | case SSL2_ST_GET_SERVER_FINISHED_B: |
298 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="2SRC_D"; break; | 419 | str="2GSF_B"; break; |
299 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="2X9GSC"; break; | 420 | case SSL2_ST_GET_CLIENT_HELLO_A: |
300 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="2X9GCC"; break; | 421 | str="2GCH_A"; break; |
422 | case SSL2_ST_GET_CLIENT_HELLO_B: | ||
423 | str="2GCH_B"; break; | ||
424 | case SSL2_ST_GET_CLIENT_HELLO_C: | ||
425 | str="2GCH_C"; break; | ||
426 | case SSL2_ST_SEND_SERVER_HELLO_A: | ||
427 | str="2SSH_A"; break; | ||
428 | case SSL2_ST_SEND_SERVER_HELLO_B: | ||
429 | str="2SSH_B"; break; | ||
430 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: | ||
431 | str="2GCMKA"; break; | ||
432 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: | ||
433 | str="2GCMKA"; break; | ||
434 | case SSL2_ST_SEND_SERVER_VERIFY_A: | ||
435 | str="2SSV_A"; break; | ||
436 | case SSL2_ST_SEND_SERVER_VERIFY_B: | ||
437 | str="2SSV_B"; break; | ||
438 | case SSL2_ST_SEND_SERVER_VERIFY_C: | ||
439 | str="2SSV_C"; break; | ||
440 | case SSL2_ST_GET_CLIENT_FINISHED_A: | ||
441 | str="2GCF_A"; break; | ||
442 | case SSL2_ST_GET_CLIENT_FINISHED_B: | ||
443 | str="2GCF_B"; break; | ||
444 | case SSL2_ST_SEND_SERVER_FINISHED_A: | ||
445 | str="2SSF_A"; break; | ||
446 | case SSL2_ST_SEND_SERVER_FINISHED_B: | ||
447 | str="2SSF_B"; break; | ||
448 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: | ||
449 | str="2SRC_A"; break; | ||
450 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: | ||
451 | str="2SRC_B"; break; | ||
452 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: | ||
453 | str="2SRC_C"; break; | ||
454 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: | ||
455 | str="2SRC_D"; break; | ||
456 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: | ||
457 | str="2X9GSC"; break; | ||
458 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: | ||
459 | str="2X9GCC"; break; | ||
301 | #endif | 460 | #endif |
302 | 461 | ||
303 | #ifndef OPENSSL_NO_SSL3 | 462 | #ifndef OPENSSL_NO_SSL3 |
304 | /* SSLv3 additions */ | 463 | /* SSLv3 additions */ |
305 | case SSL3_ST_SW_FLUSH: | 464 | case SSL3_ST_SW_FLUSH: |
306 | case SSL3_ST_CW_FLUSH: str="3FLUSH"; break; | 465 | case SSL3_ST_CW_FLUSH: |
307 | case SSL3_ST_CW_CLNT_HELLO_A: str="3WCH_A"; break; | 466 | str="3FLUSH"; break; |
308 | case SSL3_ST_CW_CLNT_HELLO_B: str="3WCH_B"; break; | 467 | case SSL3_ST_CW_CLNT_HELLO_A: |
309 | case SSL3_ST_CR_SRVR_HELLO_A: str="3RSH_A"; break; | 468 | str="3WCH_A"; break; |
310 | case SSL3_ST_CR_SRVR_HELLO_B: str="3RSH_B"; break; | 469 | case SSL3_ST_CW_CLNT_HELLO_B: |
311 | case SSL3_ST_CR_CERT_A: str="3RSC_A"; break; | 470 | str="3WCH_B"; break; |
312 | case SSL3_ST_CR_CERT_B: str="3RSC_B"; break; | 471 | case SSL3_ST_CR_SRVR_HELLO_A: |
313 | case SSL3_ST_CR_KEY_EXCH_A: str="3RSKEA"; break; | 472 | str="3RSH_A"; break; |
314 | case SSL3_ST_CR_KEY_EXCH_B: str="3RSKEB"; break; | 473 | case SSL3_ST_CR_SRVR_HELLO_B: |
315 | case SSL3_ST_CR_CERT_REQ_A: str="3RCR_A"; break; | 474 | str="3RSH_B"; break; |
316 | case SSL3_ST_CR_CERT_REQ_B: str="3RCR_B"; break; | 475 | case SSL3_ST_CR_CERT_A: |
317 | case SSL3_ST_CR_SRVR_DONE_A: str="3RSD_A"; break; | 476 | str="3RSC_A"; break; |
318 | case SSL3_ST_CR_SRVR_DONE_B: str="3RSD_B"; break; | 477 | case SSL3_ST_CR_CERT_B: |
319 | case SSL3_ST_CW_CERT_A: str="3WCC_A"; break; | 478 | str="3RSC_B"; break; |
320 | case SSL3_ST_CW_CERT_B: str="3WCC_B"; break; | 479 | case SSL3_ST_CR_KEY_EXCH_A: |
321 | case SSL3_ST_CW_CERT_C: str="3WCC_C"; break; | 480 | str="3RSKEA"; break; |
322 | case SSL3_ST_CW_CERT_D: str="3WCC_D"; break; | 481 | case SSL3_ST_CR_KEY_EXCH_B: |
323 | case SSL3_ST_CW_KEY_EXCH_A: str="3WCKEA"; break; | 482 | str="3RSKEB"; break; |
324 | case SSL3_ST_CW_KEY_EXCH_B: str="3WCKEB"; break; | 483 | case SSL3_ST_CR_CERT_REQ_A: |
325 | case SSL3_ST_CW_CERT_VRFY_A: str="3WCV_A"; break; | 484 | str="3RCR_A"; break; |
326 | case SSL3_ST_CW_CERT_VRFY_B: str="3WCV_B"; break; | 485 | case SSL3_ST_CR_CERT_REQ_B: |
486 | str="3RCR_B"; break; | ||
487 | case SSL3_ST_CR_SRVR_DONE_A: | ||
488 | str="3RSD_A"; break; | ||
489 | case SSL3_ST_CR_SRVR_DONE_B: | ||
490 | str="3RSD_B"; break; | ||
491 | case SSL3_ST_CW_CERT_A: | ||
492 | str="3WCC_A"; break; | ||
493 | case SSL3_ST_CW_CERT_B: | ||
494 | str="3WCC_B"; break; | ||
495 | case SSL3_ST_CW_CERT_C: | ||
496 | str="3WCC_C"; break; | ||
497 | case SSL3_ST_CW_CERT_D: | ||
498 | str="3WCC_D"; break; | ||
499 | case SSL3_ST_CW_KEY_EXCH_A: | ||
500 | str="3WCKEA"; break; | ||
501 | case SSL3_ST_CW_KEY_EXCH_B: | ||
502 | str="3WCKEB"; break; | ||
503 | case SSL3_ST_CW_CERT_VRFY_A: | ||
504 | str="3WCV_A"; break; | ||
505 | case SSL3_ST_CW_CERT_VRFY_B: | ||
506 | str="3WCV_B"; break; | ||
327 | 507 | ||
328 | case SSL3_ST_SW_CHANGE_A: | 508 | case SSL3_ST_SW_CHANGE_A: |
329 | case SSL3_ST_CW_CHANGE_A: str="3WCCSA"; break; | 509 | case SSL3_ST_CW_CHANGE_A: |
330 | case SSL3_ST_SW_CHANGE_B: | 510 | str="3WCCSA"; break; |
331 | case SSL3_ST_CW_CHANGE_B: str="3WCCSB"; break; | 511 | case SSL3_ST_SW_CHANGE_B: |
332 | case SSL3_ST_SW_FINISHED_A: | 512 | case SSL3_ST_CW_CHANGE_B: |
333 | case SSL3_ST_CW_FINISHED_A: str="3WFINA"; break; | 513 | str="3WCCSB"; break; |
334 | case SSL3_ST_SW_FINISHED_B: | 514 | case SSL3_ST_SW_FINISHED_A: |
335 | case SSL3_ST_CW_FINISHED_B: str="3WFINB"; break; | 515 | case SSL3_ST_CW_FINISHED_A: |
336 | case SSL3_ST_SR_CHANGE_A: | 516 | str="3WFINA"; break; |
337 | case SSL3_ST_CR_CHANGE_A: str="3RCCSA"; break; | 517 | case SSL3_ST_SW_FINISHED_B: |
338 | case SSL3_ST_SR_CHANGE_B: | 518 | case SSL3_ST_CW_FINISHED_B: |
339 | case SSL3_ST_CR_CHANGE_B: str="3RCCSB"; break; | 519 | str="3WFINB"; break; |
340 | case SSL3_ST_SR_FINISHED_A: | 520 | case SSL3_ST_SR_CHANGE_A: |
341 | case SSL3_ST_CR_FINISHED_A: str="3RFINA"; break; | 521 | case SSL3_ST_CR_CHANGE_A: |
342 | case SSL3_ST_SR_FINISHED_B: | 522 | str="3RCCSA"; break; |
343 | case SSL3_ST_CR_FINISHED_B: str="3RFINB"; break; | 523 | case SSL3_ST_SR_CHANGE_B: |
524 | case SSL3_ST_CR_CHANGE_B: | ||
525 | str="3RCCSB"; break; | ||
526 | case SSL3_ST_SR_FINISHED_A: | ||
527 | case SSL3_ST_CR_FINISHED_A: | ||
528 | str="3RFINA"; break; | ||
529 | case SSL3_ST_SR_FINISHED_B: | ||
530 | case SSL3_ST_CR_FINISHED_B: | ||
531 | str="3RFINB"; break; | ||
344 | 532 | ||
345 | case SSL3_ST_SW_HELLO_REQ_A: str="3WHR_A"; break; | 533 | case SSL3_ST_SW_HELLO_REQ_A: |
346 | case SSL3_ST_SW_HELLO_REQ_B: str="3WHR_B"; break; | 534 | str="3WHR_A"; break; |
347 | case SSL3_ST_SW_HELLO_REQ_C: str="3WHR_C"; break; | 535 | case SSL3_ST_SW_HELLO_REQ_B: |
348 | case SSL3_ST_SR_CLNT_HELLO_A: str="3RCH_A"; break; | 536 | str="3WHR_B"; break; |
349 | case SSL3_ST_SR_CLNT_HELLO_B: str="3RCH_B"; break; | 537 | case SSL3_ST_SW_HELLO_REQ_C: |
350 | case SSL3_ST_SR_CLNT_HELLO_C: str="3RCH_C"; break; | 538 | str="3WHR_C"; break; |
351 | case SSL3_ST_SW_SRVR_HELLO_A: str="3WSH_A"; break; | 539 | case SSL3_ST_SR_CLNT_HELLO_A: |
352 | case SSL3_ST_SW_SRVR_HELLO_B: str="3WSH_B"; break; | 540 | str="3RCH_A"; break; |
353 | case SSL3_ST_SW_CERT_A: str="3WSC_A"; break; | 541 | case SSL3_ST_SR_CLNT_HELLO_B: |
354 | case SSL3_ST_SW_CERT_B: str="3WSC_B"; break; | 542 | str="3RCH_B"; break; |
355 | case SSL3_ST_SW_KEY_EXCH_A: str="3WSKEA"; break; | 543 | case SSL3_ST_SR_CLNT_HELLO_C: |
356 | case SSL3_ST_SW_KEY_EXCH_B: str="3WSKEB"; break; | 544 | str="3RCH_C"; break; |
357 | case SSL3_ST_SW_CERT_REQ_A: str="3WCR_A"; break; | 545 | case SSL3_ST_SW_SRVR_HELLO_A: |
358 | case SSL3_ST_SW_CERT_REQ_B: str="3WCR_B"; break; | 546 | str="3WSH_A"; break; |
359 | case SSL3_ST_SW_SRVR_DONE_A: str="3WSD_A"; break; | 547 | case SSL3_ST_SW_SRVR_HELLO_B: |
360 | case SSL3_ST_SW_SRVR_DONE_B: str="3WSD_B"; break; | 548 | str="3WSH_B"; break; |
361 | case SSL3_ST_SR_CERT_A: str="3RCC_A"; break; | 549 | case SSL3_ST_SW_CERT_A: |
362 | case SSL3_ST_SR_CERT_B: str="3RCC_B"; break; | 550 | str="3WSC_A"; break; |
363 | case SSL3_ST_SR_KEY_EXCH_A: str="3RCKEA"; break; | 551 | case SSL3_ST_SW_CERT_B: |
364 | case SSL3_ST_SR_KEY_EXCH_B: str="3RCKEB"; break; | 552 | str="3WSC_B"; break; |
365 | case SSL3_ST_SR_CERT_VRFY_A: str="3RCV_A"; break; | 553 | case SSL3_ST_SW_KEY_EXCH_A: |
366 | case SSL3_ST_SR_CERT_VRFY_B: str="3RCV_B"; break; | 554 | str="3WSKEA"; break; |
555 | case SSL3_ST_SW_KEY_EXCH_B: | ||
556 | str="3WSKEB"; break; | ||
557 | case SSL3_ST_SW_CERT_REQ_A: | ||
558 | str="3WCR_A"; break; | ||
559 | case SSL3_ST_SW_CERT_REQ_B: | ||
560 | str="3WCR_B"; break; | ||
561 | case SSL3_ST_SW_SRVR_DONE_A: | ||
562 | str="3WSD_A"; break; | ||
563 | case SSL3_ST_SW_SRVR_DONE_B: | ||
564 | str="3WSD_B"; break; | ||
565 | case SSL3_ST_SR_CERT_A: | ||
566 | str="3RCC_A"; break; | ||
567 | case SSL3_ST_SR_CERT_B: | ||
568 | str="3RCC_B"; break; | ||
569 | case SSL3_ST_SR_KEY_EXCH_A: | ||
570 | str="3RCKEA"; break; | ||
571 | case SSL3_ST_SR_KEY_EXCH_B: | ||
572 | str="3RCKEB"; break; | ||
573 | case SSL3_ST_SR_CERT_VRFY_A: | ||
574 | str="3RCV_A"; break; | ||
575 | case SSL3_ST_SR_CERT_VRFY_B: | ||
576 | str="3RCV_B"; break; | ||
367 | #endif | 577 | #endif |
368 | 578 | ||
369 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) | 579 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) |
370 | /* SSLv2/v3 compatibility states */ | 580 | /* SSLv2/v3 compatibility states */ |
371 | /* client */ | 581 | /* client */ |
372 | case SSL23_ST_CW_CLNT_HELLO_A: str="23WCHA"; break; | 582 | case SSL23_ST_CW_CLNT_HELLO_A: |
373 | case SSL23_ST_CW_CLNT_HELLO_B: str="23WCHB"; break; | 583 | str="23WCHA"; break; |
374 | case SSL23_ST_CR_SRVR_HELLO_A: str="23RSHA"; break; | 584 | case SSL23_ST_CW_CLNT_HELLO_B: |
375 | case SSL23_ST_CR_SRVR_HELLO_B: str="23RSHA"; break; | 585 | str="23WCHB"; break; |
586 | case SSL23_ST_CR_SRVR_HELLO_A: | ||
587 | str="23RSHA"; break; | ||
588 | case SSL23_ST_CR_SRVR_HELLO_B: | ||
589 | str="23RSHA"; break; | ||
376 | /* server */ | 590 | /* server */ |
377 | case SSL23_ST_SR_CLNT_HELLO_A: str="23RCHA"; break; | 591 | case SSL23_ST_SR_CLNT_HELLO_A: |
378 | case SSL23_ST_SR_CLNT_HELLO_B: str="23RCHB"; break; | 592 | str="23RCHA"; break; |
593 | case SSL23_ST_SR_CLNT_HELLO_B: | ||
594 | str="23RCHB"; break; | ||
379 | #endif | 595 | #endif |
380 | /* DTLS */ | 596 | /* DTLS */ |
381 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: str="DRCHVA"; break; | 597 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: |
382 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: str="DRCHVB"; break; | 598 | str="DRCHVA"; break; |
383 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: str="DWCHVA"; break; | 599 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: |
384 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: str="DWCHVB"; break; | 600 | str="DRCHVB"; break; |
601 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: | ||
602 | str="DWCHVA"; break; | ||
603 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: | ||
604 | str="DWCHVB"; break; | ||
385 | 605 | ||
386 | default: str="UNKWN "; break; | 606 | default: |
387 | } | 607 | str="UNKWN "; break; |
388 | return(str); | ||
389 | } | 608 | } |
609 | return (str); | ||
610 | } | ||
390 | 611 | ||
391 | const char *SSL_alert_type_string_long(int value) | 612 | const char |
392 | { | 613 | *SSL_alert_type_string_long(int value) |
614 | { | ||
393 | value>>=8; | 615 | value>>=8; |
394 | if (value == SSL3_AL_WARNING) | 616 | if (value == SSL3_AL_WARNING) |
395 | return("warning"); | 617 | return("warning"); |
@@ -397,10 +619,11 @@ const char *SSL_alert_type_string_long(int value) | |||
397 | return("fatal"); | 619 | return("fatal"); |
398 | else | 620 | else |
399 | return("unknown"); | 621 | return("unknown"); |
400 | } | 622 | } |
401 | 623 | ||
402 | const char *SSL_alert_type_string(int value) | 624 | const char |
403 | { | 625 | *SSL_alert_type_string(int value) |
626 | { | ||
404 | value>>=8; | 627 | value>>=8; |
405 | if (value == SSL3_AL_WARNING) | 628 | if (value == SSL3_AL_WARNING) |
406 | return("W"); | 629 | return("W"); |
@@ -408,55 +631,86 @@ const char *SSL_alert_type_string(int value) | |||
408 | return("F"); | 631 | return("F"); |
409 | else | 632 | else |
410 | return("U"); | 633 | return("U"); |
411 | } | 634 | } |
412 | 635 | ||
413 | const char *SSL_alert_desc_string(int value) | 636 | const char |
414 | { | 637 | *SSL_alert_desc_string(int value) |
638 | { | ||
415 | const char *str; | 639 | const char *str; |
416 | 640 | ||
417 | switch (value & 0xff) | 641 | switch (value & 0xff) { |
418 | { | 642 | case SSL3_AD_CLOSE_NOTIFY: |
419 | case SSL3_AD_CLOSE_NOTIFY: str="CN"; break; | 643 | str="CN"; break; |
420 | case SSL3_AD_UNEXPECTED_MESSAGE: str="UM"; break; | 644 | case SSL3_AD_UNEXPECTED_MESSAGE: |
421 | case SSL3_AD_BAD_RECORD_MAC: str="BM"; break; | 645 | str="UM"; break; |
422 | case SSL3_AD_DECOMPRESSION_FAILURE: str="DF"; break; | 646 | case SSL3_AD_BAD_RECORD_MAC: |
423 | case SSL3_AD_HANDSHAKE_FAILURE: str="HF"; break; | 647 | str="BM"; break; |
424 | case SSL3_AD_NO_CERTIFICATE: str="NC"; break; | 648 | case SSL3_AD_DECOMPRESSION_FAILURE: |
425 | case SSL3_AD_BAD_CERTIFICATE: str="BC"; break; | 649 | str="DF"; break; |
426 | case SSL3_AD_UNSUPPORTED_CERTIFICATE: str="UC"; break; | 650 | case SSL3_AD_HANDSHAKE_FAILURE: |
427 | case SSL3_AD_CERTIFICATE_REVOKED: str="CR"; break; | 651 | str="HF"; break; |
428 | case SSL3_AD_CERTIFICATE_EXPIRED: str="CE"; break; | 652 | case SSL3_AD_NO_CERTIFICATE: |
429 | case SSL3_AD_CERTIFICATE_UNKNOWN: str="CU"; break; | 653 | str="NC"; break; |
430 | case SSL3_AD_ILLEGAL_PARAMETER: str="IP"; break; | 654 | case SSL3_AD_BAD_CERTIFICATE: |
431 | case TLS1_AD_DECRYPTION_FAILED: str="DC"; break; | 655 | str="BC"; break; |
432 | case TLS1_AD_RECORD_OVERFLOW: str="RO"; break; | 656 | case SSL3_AD_UNSUPPORTED_CERTIFICATE: |
433 | case TLS1_AD_UNKNOWN_CA: str="CA"; break; | 657 | str="UC"; break; |
434 | case TLS1_AD_ACCESS_DENIED: str="AD"; break; | 658 | case SSL3_AD_CERTIFICATE_REVOKED: |
435 | case TLS1_AD_DECODE_ERROR: str="DE"; break; | 659 | str="CR"; break; |
436 | case TLS1_AD_DECRYPT_ERROR: str="CY"; break; | 660 | case SSL3_AD_CERTIFICATE_EXPIRED: |
437 | case TLS1_AD_EXPORT_RESTRICTION: str="ER"; break; | 661 | str="CE"; break; |
438 | case TLS1_AD_PROTOCOL_VERSION: str="PV"; break; | 662 | case SSL3_AD_CERTIFICATE_UNKNOWN: |
439 | case TLS1_AD_INSUFFICIENT_SECURITY: str="IS"; break; | 663 | str="CU"; break; |
440 | case TLS1_AD_INTERNAL_ERROR: str="IE"; break; | 664 | case SSL3_AD_ILLEGAL_PARAMETER: |
441 | case TLS1_AD_USER_CANCELLED: str="US"; break; | 665 | str="IP"; break; |
442 | case TLS1_AD_NO_RENEGOTIATION: str="NR"; break; | 666 | case TLS1_AD_DECRYPTION_FAILED: |
443 | case TLS1_AD_UNSUPPORTED_EXTENSION: str="UE"; break; | 667 | str="DC"; break; |
444 | case TLS1_AD_CERTIFICATE_UNOBTAINABLE: str="CO"; break; | 668 | case TLS1_AD_RECORD_OVERFLOW: |
445 | case TLS1_AD_UNRECOGNIZED_NAME: str="UN"; break; | 669 | str="RO"; break; |
446 | case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: str="BR"; break; | 670 | case TLS1_AD_UNKNOWN_CA: |
447 | case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: str="BH"; break; | 671 | str="CA"; break; |
448 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: str="UP"; break; | 672 | case TLS1_AD_ACCESS_DENIED: |
449 | default: str="UK"; break; | 673 | str="AD"; break; |
450 | } | 674 | case TLS1_AD_DECODE_ERROR: |
451 | return(str); | 675 | str="DE"; break; |
676 | case TLS1_AD_DECRYPT_ERROR: | ||
677 | str="CY"; break; | ||
678 | case TLS1_AD_EXPORT_RESTRICTION: | ||
679 | str="ER"; break; | ||
680 | case TLS1_AD_PROTOCOL_VERSION: | ||
681 | str="PV"; break; | ||
682 | case TLS1_AD_INSUFFICIENT_SECURITY: | ||
683 | str="IS"; break; | ||
684 | case TLS1_AD_INTERNAL_ERROR: | ||
685 | str="IE"; break; | ||
686 | case TLS1_AD_USER_CANCELLED: | ||
687 | str="US"; break; | ||
688 | case TLS1_AD_NO_RENEGOTIATION: | ||
689 | str="NR"; break; | ||
690 | case TLS1_AD_UNSUPPORTED_EXTENSION: | ||
691 | str="UE"; break; | ||
692 | case TLS1_AD_CERTIFICATE_UNOBTAINABLE: | ||
693 | str="CO"; break; | ||
694 | case TLS1_AD_UNRECOGNIZED_NAME: | ||
695 | str="UN"; break; | ||
696 | case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: | ||
697 | str="BR"; break; | ||
698 | case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: | ||
699 | str="BH"; break; | ||
700 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: | ||
701 | str="UP"; break; | ||
702 | default: | ||
703 | str="UK"; break; | ||
452 | } | 704 | } |
705 | return (str); | ||
706 | } | ||
453 | 707 | ||
454 | const char *SSL_alert_desc_string_long(int value) | 708 | const char |
455 | { | 709 | *SSL_alert_desc_string_long(int value) |
710 | { | ||
456 | const char *str; | 711 | const char *str; |
457 | 712 | ||
458 | switch (value & 0xff) | 713 | switch (value & 0xff) { |
459 | { | ||
460 | case SSL3_AD_CLOSE_NOTIFY: | 714 | case SSL3_AD_CLOSE_NOTIFY: |
461 | str="close notify"; | 715 | str="close notify"; |
462 | break; | 716 | break; |
@@ -547,21 +801,26 @@ const char *SSL_alert_desc_string_long(int value) | |||
547 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: | 801 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: |
548 | str="unknown PSK identity"; | 802 | str="unknown PSK identity"; |
549 | break; | 803 | break; |
550 | default: str="unknown"; break; | 804 | default: |
551 | } | 805 | str="unknown"; break; |
552 | return(str); | ||
553 | } | 806 | } |
807 | return (str); | ||
808 | } | ||
554 | 809 | ||
555 | const char *SSL_rstate_string(const SSL *s) | 810 | const char |
556 | { | 811 | *SSL_rstate_string(const SSL *s) |
812 | { | ||
557 | const char *str; | 813 | const char *str; |
558 | 814 | ||
559 | switch (s->rstate) | 815 | switch (s->rstate) { |
560 | { | 816 | case SSL_ST_READ_HEADER: |
561 | case SSL_ST_READ_HEADER:str="RH"; break; | 817 | str="RH"; break; |
562 | case SSL_ST_READ_BODY: str="RB"; break; | 818 | case SSL_ST_READ_BODY: |
563 | case SSL_ST_READ_DONE: str="RD"; break; | 819 | str="RB"; break; |
564 | default: str="unknown"; break; | 820 | case SSL_ST_READ_DONE: |
565 | } | 821 | str="RD"; break; |
566 | return(str); | 822 | default: |
823 | str="unknown"; break; | ||
567 | } | 824 | } |
825 | return (str); | ||
826 | } | ||
diff --git a/src/lib/libssl/src/ssl/ssl_task.c b/src/lib/libssl/src/ssl/ssl_task.c index 366204f097..25d20b06a0 100644 --- a/src/lib/libssl/src/ssl/ssl_task.c +++ b/src/lib/libssl/src/ssl/ssl_task.c | |||
@@ -134,24 +134,28 @@ int LIB$INIT_TIMER(), LIB$SHOW_TIMER(); | |||
134 | #include <openssl/ssl.h> | 134 | #include <openssl/ssl.h> |
135 | #include <openssl/err.h> | 135 | #include <openssl/err.h> |
136 | 136 | ||
137 | int verify_callback(int ok, X509 *xs, X509 *xi, int depth, | 137 | int |
138 | int error); | 138 | verify_callback(int ok, X509 *xs, X509 *xi, int depth, |
139 | BIO *bio_err=NULL; | 139 | int error); |
140 | BIO *bio_stdout=NULL; | 140 | BIO *bio_err = NULL; |
141 | BIO *bio_stdout = NULL; | ||
141 | BIO_METHOD *BIO_s_rtcp(); | 142 | BIO_METHOD *BIO_s_rtcp(); |
142 | 143 | ||
143 | static char *cipher=NULL; | 144 | static char *cipher = NULL; |
144 | int verbose=1; | 145 | int verbose = 1; |
145 | #ifdef FIONBIO | 146 | #ifdef FIONBIO |
146 | static int s_nbio=0; | 147 | static int s_nbio = 0; |
147 | #endif | 148 | #endif |
148 | #define TEST_SERVER_CERT "SSL_SERVER_CERTIFICATE" | 149 | #define TEST_SERVER_CERT "SSL_SERVER_CERTIFICATE" |
149 | /*************************************************************************/ | 150 | /*************************************************************************/ |
150 | struct rpc_msg { /* Should have member alignment inhibited */ | 151 | struct rpc_msg { /* Should have member alignment inhibited */ |
151 | char channel; /* 'A'-app data. 'R'-remote client 'G'-global */ | 152 | char channel; |
152 | char function; /* 'G'-get, 'P'-put, 'C'-confirm, 'X'-close */ | 153 | /* 'A'-app data. 'R'-remote client 'G'-global */ |
153 | unsigned short int length; /* Amount of data returned or max to return */ | 154 | char function; |
154 | char data[4092]; /* variable data */ | 155 | /* 'G'-get, 'P'-put, 'C'-confirm, 'X'-close */ |
156 | unsigned short int length; /* Amount of data returned or max to return */ | ||
157 | char data[4092]; | ||
158 | /* variable data */ | ||
155 | }; | 159 | }; |
156 | #define RPC_HDR_SIZE (sizeof(struct rpc_msg) - 4092) | 160 | #define RPC_HDR_SIZE (sizeof(struct rpc_msg) - 4092) |
157 | 161 | ||
@@ -159,9 +163,9 @@ static $DESCRIPTOR(sysnet, "SYS$NET"); | |||
159 | typedef unsigned short io_channel; | 163 | typedef unsigned short io_channel; |
160 | 164 | ||
161 | struct io_status { | 165 | struct io_status { |
162 | unsigned short status; | 166 | unsigned short status; |
163 | unsigned short count; | 167 | unsigned short count; |
164 | unsigned long stsval; | 168 | unsigned long stsval; |
165 | }; | 169 | }; |
166 | int doit(io_channel chan, SSL_CTX *s_ctx ); | 170 | int doit(io_channel chan, SSL_CTX *s_ctx ); |
167 | /*****************************************************************************/ | 171 | /*****************************************************************************/ |
@@ -169,63 +173,66 @@ int doit(io_channel chan, SSL_CTX *s_ctx ); | |||
169 | */ | 173 | */ |
170 | static int get ( io_channel chan, char *buffer, int maxlen, int *length ) | 174 | static int get ( io_channel chan, char *buffer, int maxlen, int *length ) |
171 | { | 175 | { |
172 | int status; | 176 | int status; |
173 | struct io_status iosb; | 177 | struct io_status iosb; |
174 | status = SYS$QIOW ( 0, chan, IO$_READVBLK, &iosb, 0, 0, | 178 | status = SYS$QIOW ( 0, chan, IO$_READVBLK, &iosb, 0, 0, |
175 | buffer, maxlen, 0, 0, 0, 0 ); | 179 | buffer, maxlen, 0, 0, 0, 0 ); |
176 | if ( (status&1) == 1 ) status = iosb.status; | 180 | if ((status&1) |
177 | if ( (status&1) == 1 ) *length = iosb.count; | 181 | == 1 ) status = iosb.status; |
178 | return status; | 182 | if ((status&1) |
183 | == 1 ) *length = iosb.count; | ||
184 | return status; | ||
179 | } | 185 | } |
180 | 186 | ||
181 | static int put ( io_channel chan, char *buffer, int length ) | 187 | static int put ( io_channel chan, char *buffer, int length ) |
182 | { | 188 | { |
183 | int status; | 189 | int status; |
184 | struct io_status iosb; | 190 | struct io_status iosb; |
185 | status = SYS$QIOW ( 0, chan, IO$_WRITEVBLK, &iosb, 0, 0, | 191 | status = SYS$QIOW ( 0, chan, IO$_WRITEVBLK, &iosb, 0, 0, |
186 | buffer, length, 0, 0, 0, 0 ); | 192 | buffer, length, 0, 0, 0, 0 ); |
187 | if ( (status&1) == 1 ) status = iosb.status; | 193 | if ((status&1) |
188 | return status; | 194 | == 1 ) status = iosb.status; |
195 | return status; | ||
189 | } | 196 | } |
190 | /***************************************************************************/ | 197 | /***************************************************************************/ |
191 | /* Handle operations on the 'G' channel. | 198 | /* Handle operations on the 'G' channel. |
192 | */ | 199 | */ |
193 | static int general_request ( io_channel chan, struct rpc_msg *msg, int length ) | 200 | static int general_request ( io_channel chan, struct rpc_msg *msg, int length ) { |
194 | { | 201 | return 48; |
195 | return 48; | ||
196 | } | 202 | } |
197 | /***************************************************************************/ | 203 | /***************************************************************************/ |
198 | int main ( int argc, char **argv ) | 204 | int main ( int argc, char **argv ) |
199 | { | 205 | { |
200 | int status, length; | 206 | int status, length; |
201 | io_channel chan; | 207 | io_channel chan; |
202 | struct rpc_msg msg; | 208 | struct rpc_msg msg; |
203 | 209 | ||
204 | char *CApath=NULL,*CAfile=NULL; | 210 | char *CApath = NULL, *CAfile = NULL; |
205 | int badop=0; | 211 | int badop = 0; |
206 | int ret=1; | 212 | int ret = 1; |
207 | int client_auth=0; | 213 | int client_auth = 0; |
208 | int server_auth=0; | 214 | int server_auth = 0; |
209 | SSL_CTX *s_ctx=NULL; | 215 | SSL_CTX *s_ctx = NULL; |
210 | /* | 216 | /* |
211 | * Confirm logical link with initiating client. | 217 | * Confirm logical link with initiating client. |
212 | */ | 218 | */ |
213 | LIB$INIT_TIMER(); | 219 | LIB$INIT_TIMER(); |
214 | status = SYS$ASSIGN ( &sysnet, &chan, 0, 0, 0 ); | 220 | status = SYS$ASSIGN ( &sysnet, &chan, 0, 0, 0 ); |
215 | printf("status of assign to SYS$NET: %d\n", status ); | 221 | printf("status of assign to SYS$NET: %d\n", status ); |
216 | /* | 222 | /* |
217 | * Initialize standard out and error files. | 223 | * Initialize standard out and error files. |
218 | */ | 224 | */ |
219 | if (bio_err == NULL) | 225 | if (bio_err == NULL) |
220 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 226 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
221 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE); | 227 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE); |
222 | if (bio_stdout == NULL) | 228 | if (bio_stdout == NULL) |
223 | if ((bio_stdout=BIO_new(BIO_s_file())) != NULL) | 229 | if ((bio_stdout = BIO_new(BIO_s_file())) != NULL) |
224 | BIO_set_fp(bio_stdout,stdout,BIO_NOCLOSE); | 230 | BIO_set_fp(bio_stdout, stdout, BIO_NOCLOSE); |
225 | /* | 231 | /* |
226 | * get the preferred cipher list and other initialization | 232 | * get the preferred cipher list and other initialization |
227 | */ | 233 | */ |
228 | if (cipher == NULL) cipher=getenv("SSL_CIPHER"); | 234 | if (cipher == NULL) |
235 | cipher = getenv("SSL_CIPHER"); | ||
229 | printf("cipher list: %s\n", cipher ? cipher : "{undefined}" ); | 236 | printf("cipher list: %s\n", cipher ? cipher : "{undefined}" ); |
230 | 237 | ||
231 | SSL_load_error_strings(); | 238 | SSL_load_error_strings(); |
@@ -234,48 +241,53 @@ int main ( int argc, char **argv ) | |||
234 | /* DRM, this was the original, but there is no such thing as SSLv2() | 241 | /* DRM, this was the original, but there is no such thing as SSLv2() |
235 | s_ctx=SSL_CTX_new(SSLv2()); | 242 | s_ctx=SSL_CTX_new(SSLv2()); |
236 | */ | 243 | */ |
237 | s_ctx=SSL_CTX_new(SSLv2_server_method()); | 244 | s_ctx = SSL_CTX_new(SSLv2_server_method()); |
238 | 245 | ||
239 | if (s_ctx == NULL) goto end; | 246 | if (s_ctx == NULL) |
247 | goto end; | ||
240 | 248 | ||
241 | SSL_CTX_use_certificate_file(s_ctx,TEST_SERVER_CERT,SSL_FILETYPE_PEM); | 249 | SSL_CTX_use_certificate_file(s_ctx, TEST_SERVER_CERT, SSL_FILETYPE_PEM); |
242 | SSL_CTX_use_RSAPrivateKey_file(s_ctx,TEST_SERVER_CERT,SSL_FILETYPE_PEM); | 250 | SSL_CTX_use_RSAPrivateKey_file(s_ctx, TEST_SERVER_CERT, SSL_FILETYPE_PEM); |
243 | printf("Loaded server certificate: '%s'\n", TEST_SERVER_CERT ); | 251 | printf("Loaded server certificate: '%s'\n", TEST_SERVER_CERT ); |
244 | 252 | ||
245 | /* | 253 | /* |
246 | * Take commands from client until bad status. | 254 | * Take commands from client until bad status. |
247 | */ | 255 | */ |
248 | LIB$SHOW_TIMER(); | 256 | LIB$SHOW_TIMER(); |
249 | status = doit ( chan, s_ctx ); | 257 | status = doit ( chan, s_ctx ); |
250 | LIB$SHOW_TIMER(); | 258 | LIB$SHOW_TIMER(); |
251 | /* | 259 | /* |
252 | * do final cleanup and exit. | 260 | * do final cleanup and exit. |
253 | */ | 261 | */ |
254 | end: | 262 | end: |
255 | if (s_ctx != NULL) SSL_CTX_free(s_ctx); | 263 | if (s_ctx != NULL) |
256 | LIB$SHOW_TIMER(); | 264 | SSL_CTX_free(s_ctx); |
257 | return 1; | 265 | LIB$SHOW_TIMER(); |
266 | return 1; | ||
258 | } | 267 | } |
259 | 268 | ||
260 | int doit(io_channel chan, SSL_CTX *s_ctx ) | 269 | int |
270 | doit(io_channel chan, SSL_CTX *s_ctx ) | ||
261 | { | 271 | { |
262 | int status, length, link_state; | 272 | int status, length, link_state; |
263 | struct rpc_msg msg; | 273 | struct rpc_msg msg; |
264 | 274 | ||
265 | SSL *s_ssl=NULL; | 275 | SSL *s_ssl = NULL; |
266 | BIO *c_to_s=NULL; | 276 | BIO *c_to_s = NULL; |
267 | BIO *s_to_c=NULL; | 277 | BIO *s_to_c = NULL; |
268 | BIO *c_bio=NULL; | 278 | BIO *c_bio = NULL; |
269 | BIO *s_bio=NULL; | 279 | BIO *s_bio = NULL; |
270 | int i; | 280 | int i; |
271 | int done=0; | 281 | int done = 0; |
272 | 282 | ||
273 | s_ssl=SSL_new(s_ctx); | 283 | s_ssl = SSL_new(s_ctx); |
274 | if (s_ssl == NULL) goto err; | 284 | if (s_ssl == NULL) |
285 | goto err; | ||
275 | 286 | ||
276 | c_to_s=BIO_new(BIO_s_rtcp()); | 287 | c_to_s = BIO_new(BIO_s_rtcp()); |
277 | s_to_c=BIO_new(BIO_s_rtcp()); | 288 | s_to_c = BIO_new(BIO_s_rtcp()); |
278 | if ((s_to_c == NULL) || (c_to_s == NULL)) goto err; | 289 | if ((s_to_c == NULL) |
290 | || (c_to_s == NULL)) goto err; | ||
279 | /* original, DRM 24-SEP-1997 | 291 | /* original, DRM 24-SEP-1997 |
280 | BIO_set_fd ( c_to_s, "", chan ); | 292 | BIO_set_fd ( c_to_s, "", chan ); |
281 | BIO_set_fd ( s_to_c, "", chan ); | 293 | BIO_set_fd ( s_to_c, "", chan ); |
@@ -283,13 +295,14 @@ int doit(io_channel chan, SSL_CTX *s_ctx ) | |||
283 | BIO_set_fd ( c_to_s, 0, chan ); | 295 | BIO_set_fd ( c_to_s, 0, chan ); |
284 | BIO_set_fd ( s_to_c, 0, chan ); | 296 | BIO_set_fd ( s_to_c, 0, chan ); |
285 | 297 | ||
286 | c_bio=BIO_new(BIO_f_ssl()); | 298 | c_bio = BIO_new(BIO_f_ssl()); |
287 | s_bio=BIO_new(BIO_f_ssl()); | 299 | s_bio = BIO_new(BIO_f_ssl()); |
288 | if ((c_bio == NULL) || (s_bio == NULL)) goto err; | 300 | if ((c_bio == NULL) |
301 | || (s_bio == NULL)) goto err; | ||
289 | 302 | ||
290 | SSL_set_accept_state(s_ssl); | 303 | SSL_set_accept_state(s_ssl); |
291 | SSL_set_bio(s_ssl,c_to_s,s_to_c); | 304 | SSL_set_bio(s_ssl, c_to_s, s_to_c); |
292 | BIO_set_ssl(s_bio,s_ssl,BIO_CLOSE); | 305 | BIO_set_ssl(s_bio, s_ssl, BIO_CLOSE); |
293 | 306 | ||
294 | /* We can always do writes */ | 307 | /* We can always do writes */ |
295 | printf("Begin doit main loop\n"); | 308 | printf("Begin doit main loop\n"); |
@@ -300,59 +313,65 @@ int doit(io_channel chan, SSL_CTX *s_ctx ) | |||
300 | /* | 313 | /* |
301 | * Wait for remote end to request data action on A channel. | 314 | * Wait for remote end to request data action on A channel. |
302 | */ | 315 | */ |
303 | while ( link_state == 0 ) { | 316 | while (link_state == 0 ) { |
304 | status = get ( chan, (char *) &msg, sizeof(msg), &length ); | 317 | status = get ( chan, (char *) &msg, sizeof(msg), &length ); |
305 | if ( (status&1) == 0 ) { | 318 | if ((status&1) == 0 ) { |
306 | printf("Error in main loop get: %d\n", status ); | 319 | printf("Error in main loop get: %d\n", status ); |
307 | link_state = 3; | 320 | link_state = 3; |
308 | break; | 321 | break; |
309 | } | 322 | } |
310 | if ( length < RPC_HDR_SIZE ) { | 323 | if (length < RPC_HDR_SIZE ) { |
311 | printf("Error in main loop get size: %d\n", length ); | 324 | printf("Error in main loop get size: %d\n", length ); |
312 | break; | 325 | break; |
313 | link_state = 3; | 326 | link_state = 3; |
314 | } | 327 | } |
315 | if ( msg.channel != 'A' ) { | 328 | if (msg.channel != 'A' ) { |
316 | printf("Error in main loop, unexpected channel: %c\n", | 329 | printf("Error in main loop, unexpected channel: %c\n", |
317 | msg.channel ); | 330 | msg.channel ); |
318 | break; | 331 | break; |
319 | link_state = 3; | 332 | link_state = 3; |
320 | } | 333 | } |
321 | if ( msg.function == 'G' ) { | 334 | if (msg.function == 'G' ) { |
322 | link_state = 1; | 335 | link_state = 1; |
323 | } else if ( msg.function == 'P' ) { | 336 | } else if (msg.function == 'P' ) { |
324 | link_state = 2; /* write pending */ | 337 | link_state = 2; /* write pending */ |
325 | } else if ( msg.function == 'X' ) { | 338 | } else if (msg.function == 'X' ) { |
326 | link_state = 3; | 339 | link_state = 3; |
327 | } else { | 340 | } else { |
328 | link_state = 3; | 341 | link_state = 3; |
329 | } | 342 | } |
330 | } | ||
331 | if ( link_state == 1 ) { | ||
332 | i = BIO_read ( s_bio, msg.data, msg.length ); | ||
333 | if ( i < 0 ) link_state = 3; | ||
334 | else { | ||
335 | msg.channel = 'A'; | ||
336 | msg.function = 'C'; /* confirm */ | ||
337 | msg.length = i; | ||
338 | status = put ( chan, (char *) &msg, i+RPC_HDR_SIZE ); | ||
339 | if ( (status&1) == 0 ) break; | ||
340 | link_state = 0; | ||
341 | } | 343 | } |
342 | } else if ( link_state == 2 ) { | 344 | if (link_state == 1 ) { |
343 | i = BIO_write ( s_bio, msg.data, msg.length ); | 345 | i = BIO_read ( s_bio, msg.data, msg.length ); |
344 | if ( i < 0 ) link_state = 3; | 346 | if (i < 0 ) |
345 | else { | 347 | link_state = 3; |
346 | msg.channel = 'A'; | 348 | else { |
347 | msg.function = 'C'; /* confirm */ | 349 | msg.channel = 'A'; |
348 | msg.length = 0; | 350 | msg.function = 'C'; |
349 | status = put ( chan, (char *) &msg, RPC_HDR_SIZE ); | 351 | /* confirm */ |
350 | if ( (status&1) == 0 ) break; | 352 | msg.length = i; |
351 | link_state = 0; | 353 | status = put ( chan, (char *) &msg, i + RPC_HDR_SIZE ); |
354 | if ((status&1) | ||
355 | == 0 ) break; | ||
356 | link_state = 0; | ||
357 | } | ||
358 | } else if (link_state == 2 ) { | ||
359 | i = BIO_write ( s_bio, msg.data, msg.length ); | ||
360 | if (i < 0 ) | ||
361 | link_state = 3; | ||
362 | else { | ||
363 | msg.channel = 'A'; | ||
364 | msg.function = 'C'; | ||
365 | /* confirm */ | ||
366 | msg.length = 0; | ||
367 | status = put ( chan, (char *) &msg, RPC_HDR_SIZE ); | ||
368 | if ((status&1) | ||
369 | == 0 ) break; | ||
370 | link_state = 0; | ||
371 | } | ||
352 | } | 372 | } |
353 | } | ||
354 | } | 373 | } |
355 | fprintf(stdout,"DONE\n"); | 374 | fprintf(stdout, "DONE\n"); |
356 | err: | 375 | err: |
357 | /* We have to set the BIO's to NULL otherwise they will be | 376 | /* We have to set the BIO's to NULL otherwise they will be |
358 | * free()ed twice. Once when th s_ssl is SSL_free()ed and | 377 | * free()ed twice. Once when th s_ssl is SSL_free()ed and |
@@ -361,12 +380,16 @@ err: | |||
361 | * BIO structure and SSL_set_bio() and SSL_free() automatically | 380 | * BIO structure and SSL_set_bio() and SSL_free() automatically |
362 | * BIO_free non NULL entries. | 381 | * BIO_free non NULL entries. |
363 | * You should not normally do this or be required to do this */ | 382 | * You should not normally do this or be required to do this */ |
364 | s_ssl->rbio=NULL; | 383 | s_ssl->rbio = NULL; |
365 | s_ssl->wbio=NULL; | 384 | s_ssl->wbio = NULL; |
366 | 385 | ||
367 | if (c_to_s != NULL) BIO_free(c_to_s); | 386 | if (c_to_s != NULL) |
368 | if (s_to_c != NULL) BIO_free(s_to_c); | 387 | BIO_free(c_to_s); |
369 | if (c_bio != NULL) BIO_free(c_bio); | 388 | if (s_to_c != NULL) |
370 | if (s_bio != NULL) BIO_free(s_bio); | 389 | BIO_free(s_to_c); |
371 | return(0); | 390 | if (c_bio != NULL) |
391 | BIO_free(c_bio); | ||
392 | if (s_bio != NULL) | ||
393 | BIO_free(s_bio); | ||
394 | return (0); | ||
372 | } | 395 | } |
diff --git a/src/lib/libssl/src/ssl/ssl_txt.c b/src/lib/libssl/src/ssl/ssl_txt.c index 6479d52c0c..5186e396ec 100644 --- a/src/lib/libssl/src/ssl/ssl_txt.c +++ b/src/lib/libssl/src/ssl/ssl_txt.c | |||
@@ -87,30 +87,33 @@ | |||
87 | #include "ssl_locl.h" | 87 | #include "ssl_locl.h" |
88 | 88 | ||
89 | #ifndef OPENSSL_NO_FP_API | 89 | #ifndef OPENSSL_NO_FP_API |
90 | int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *x) | 90 | int |
91 | { | 91 | SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *x) |
92 | { | ||
92 | BIO *b; | 93 | BIO *b; |
93 | int ret; | 94 | int ret; |
94 | 95 | ||
95 | if ((b=BIO_new(BIO_s_file_internal())) == NULL) | 96 | if ((b = BIO_new(BIO_s_file_internal())) == NULL) { |
96 | { | 97 | SSLerr(SSL_F_SSL_SESSION_PRINT_FP, ERR_R_BUF_LIB); |
97 | SSLerr(SSL_F_SSL_SESSION_PRINT_FP,ERR_R_BUF_LIB); | 98 | return (0); |
98 | return(0); | ||
99 | } | ||
100 | BIO_set_fp(b,fp,BIO_NOCLOSE); | ||
101 | ret=SSL_SESSION_print(b,x); | ||
102 | BIO_free(b); | ||
103 | return(ret); | ||
104 | } | 99 | } |
100 | BIO_set_fp(b, fp, BIO_NOCLOSE); | ||
101 | ret = SSL_SESSION_print(b, x); | ||
102 | BIO_free(b); | ||
103 | return (ret); | ||
104 | } | ||
105 | #endif | 105 | #endif |
106 | 106 | ||
107 | int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) | 107 | int |
108 | { | 108 | SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) |
109 | { | ||
109 | unsigned int i; | 110 | unsigned int i; |
110 | const char *s; | 111 | const char *s; |
111 | 112 | ||
112 | if (x == NULL) goto err; | 113 | if (x == NULL) |
113 | if (BIO_puts(bp,"SSL-Session:\n") <= 0) goto err; | 114 | goto err; |
115 | if (BIO_puts(bp, "SSL-Session:\n") | ||
116 | <= 0) goto err; | ||
114 | if (x->ssl_version == SSL2_VERSION) | 117 | if (x->ssl_version == SSL2_VERSION) |
115 | s="SSLv2"; | 118 | s="SSLv2"; |
116 | else if (x->ssl_version == SSL3_VERSION) | 119 | else if (x->ssl_version == SSL3_VERSION) |
@@ -127,122 +130,122 @@ int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) | |||
127 | s="DTLSv1-bad"; | 130 | s="DTLSv1-bad"; |
128 | else | 131 | else |
129 | s="unknown"; | 132 | s="unknown"; |
130 | if (BIO_printf(bp," Protocol : %s\n",s) <= 0) goto err; | 133 | if (BIO_printf(bp, " Protocol : %s\n", s) |
134 | <= 0) goto err; | ||
131 | 135 | ||
132 | if (x->cipher == NULL) | 136 | if (x->cipher == NULL) { |
133 | { | 137 | if (((x->cipher_id) & 0xff000000) == 0x02000000) { |
134 | if (((x->cipher_id) & 0xff000000) == 0x02000000) | 138 | if (BIO_printf(bp, " Cipher : %06lX\n", x->cipher_id&0xffffff) <= 0) |
135 | { | ||
136 | if (BIO_printf(bp," Cipher : %06lX\n",x->cipher_id&0xffffff) <= 0) | ||
137 | goto err; | 139 | goto err; |
138 | } | 140 | } else { |
139 | else | 141 | if (BIO_printf(bp, " Cipher : %04lX\n", x->cipher_id&0xffff) <= 0) |
140 | { | ||
141 | if (BIO_printf(bp," Cipher : %04lX\n",x->cipher_id&0xffff) <= 0) | ||
142 | goto err; | 142 | goto err; |
143 | } | ||
144 | } | 143 | } |
145 | else | 144 | } else { |
146 | { | 145 | if (BIO_printf(bp, " Cipher : %s\n",((x->cipher == NULL)?"unknown":x->cipher->name)) <= 0) |
147 | if (BIO_printf(bp," Cipher : %s\n",((x->cipher == NULL)?"unknown":x->cipher->name)) <= 0) | ||
148 | goto err; | 146 | goto err; |
149 | } | 147 | } |
150 | if (BIO_puts(bp," Session-ID: ") <= 0) goto err; | 148 | if (BIO_puts(bp, " Session-ID: ") |
151 | for (i=0; i<x->session_id_length; i++) | 149 | <= 0) goto err; |
152 | { | 150 | for (i = 0; i < x->session_id_length; i++) { |
153 | if (BIO_printf(bp,"%02X",x->session_id[i]) <= 0) goto err; | 151 | if (BIO_printf(bp, "%02X", x->session_id[i]) |
154 | } | 152 | <= 0) goto err; |
155 | if (BIO_puts(bp,"\n Session-ID-ctx: ") <= 0) goto err; | 153 | } |
156 | for (i=0; i<x->sid_ctx_length; i++) | 154 | if (BIO_puts(bp, "\n Session-ID-ctx: ") |
157 | { | 155 | <= 0) goto err; |
158 | if (BIO_printf(bp,"%02X",x->sid_ctx[i]) <= 0) | 156 | for (i = 0; i < x->sid_ctx_length; i++) { |
157 | if (BIO_printf(bp, "%02X", x->sid_ctx[i]) <= 0) | ||
159 | goto err; | 158 | goto err; |
160 | } | 159 | } |
161 | if (BIO_puts(bp,"\n Master-Key: ") <= 0) goto err; | 160 | if (BIO_puts(bp, "\n Master-Key: ") |
162 | for (i=0; i<(unsigned int)x->master_key_length; i++) | 161 | <= 0) goto err; |
163 | { | 162 | for (i = 0; i < (unsigned int)x->master_key_length; i++) { |
164 | if (BIO_printf(bp,"%02X",x->master_key[i]) <= 0) goto err; | 163 | if (BIO_printf(bp, "%02X", x->master_key[i]) |
165 | } | 164 | <= 0) goto err; |
166 | if (BIO_puts(bp,"\n Key-Arg : ") <= 0) goto err; | 165 | } |
167 | if (x->key_arg_length == 0) | 166 | if (BIO_puts(bp, "\n Key-Arg : ") |
168 | { | 167 | <= 0) goto err; |
169 | if (BIO_puts(bp,"None") <= 0) goto err; | 168 | if (x->key_arg_length == 0) { |
170 | } | 169 | if (BIO_puts(bp, "None") |
171 | else | 170 | <= 0) goto err; |
172 | for (i=0; i<x->key_arg_length; i++) | 171 | } else |
173 | { | 172 | for (i = 0; i < x->key_arg_length; i++) { |
174 | if (BIO_printf(bp,"%02X",x->key_arg[i]) <= 0) goto err; | 173 | if (BIO_printf(bp, "%02X", x->key_arg[i]) |
175 | } | 174 | <= 0) goto err; |
175 | } | ||
176 | #ifndef OPENSSL_NO_KRB5 | 176 | #ifndef OPENSSL_NO_KRB5 |
177 | if (BIO_puts(bp,"\n Krb5 Principal: ") <= 0) goto err; | 177 | if (BIO_puts(bp, "\n Krb5 Principal: ") |
178 | if (x->krb5_client_princ_len == 0) | 178 | <= 0) goto err; |
179 | { | 179 | if (x->krb5_client_princ_len == 0) { |
180 | if (BIO_puts(bp,"None") <= 0) goto err; | 180 | if (BIO_puts(bp, "None") |
181 | } | 181 | <= 0) goto err; |
182 | else | 182 | } else |
183 | for (i=0; i<x->krb5_client_princ_len; i++) | 183 | for (i = 0; i < x->krb5_client_princ_len; i++) { |
184 | { | 184 | if (BIO_printf(bp, "%02X", x->krb5_client_princ[i]) |
185 | if (BIO_printf(bp,"%02X",x->krb5_client_princ[i]) <= 0) goto err; | 185 | <= 0) goto err; |
186 | } | 186 | } |
187 | #endif /* OPENSSL_NO_KRB5 */ | 187 | #endif /* OPENSSL_NO_KRB5 */ |
188 | #ifndef OPENSSL_NO_PSK | 188 | #ifndef OPENSSL_NO_PSK |
189 | if (BIO_puts(bp,"\n PSK identity: ") <= 0) goto err; | 189 | if (BIO_puts(bp, "\n PSK identity: ") |
190 | if (BIO_printf(bp, "%s", x->psk_identity ? x->psk_identity : "None") <= 0) goto err; | 190 | <= 0) goto err; |
191 | if (BIO_puts(bp,"\n PSK identity hint: ") <= 0) goto err; | 191 | if (BIO_printf(bp, "%s", x->psk_identity ? x->psk_identity : "None") |
192 | if (BIO_printf(bp, "%s", x->psk_identity_hint ? x->psk_identity_hint : "None") <= 0) goto err; | 192 | <= 0) goto err; |
193 | if (BIO_puts(bp, "\n PSK identity hint: ") | ||
194 | <= 0) goto err; | ||
195 | if (BIO_printf(bp, "%s", x->psk_identity_hint ? x->psk_identity_hint : "None") | ||
196 | <= 0) goto err; | ||
193 | #endif | 197 | #endif |
194 | #ifndef OPENSSL_NO_SRP | 198 | #ifndef OPENSSL_NO_SRP |
195 | if (BIO_puts(bp,"\n SRP username: ") <= 0) goto err; | 199 | if (BIO_puts(bp, "\n SRP username: ") |
196 | if (BIO_printf(bp, "%s", x->srp_username ? x->srp_username : "None") <= 0) goto err; | 200 | <= 0) goto err; |
201 | if (BIO_printf(bp, "%s", x->srp_username ? x->srp_username : "None") | ||
202 | <= 0) goto err; | ||
197 | #endif | 203 | #endif |
198 | #ifndef OPENSSL_NO_TLSEXT | 204 | #ifndef OPENSSL_NO_TLSEXT |
199 | if (x->tlsext_tick_lifetime_hint) | 205 | if (x->tlsext_tick_lifetime_hint) { |
200 | { | ||
201 | if (BIO_printf(bp, | 206 | if (BIO_printf(bp, |
202 | "\n TLS session ticket lifetime hint: %ld (seconds)", | 207 | "\n TLS session ticket lifetime hint: %ld (seconds)", |
203 | x->tlsext_tick_lifetime_hint) <=0) | 208 | x->tlsext_tick_lifetime_hint) <=0) |
204 | goto err; | 209 | goto err; |
205 | } | 210 | } |
206 | if (x->tlsext_tick) | 211 | if (x->tlsext_tick) { |
207 | { | 212 | if (BIO_puts(bp, "\n TLS session ticket:\n") |
208 | if (BIO_puts(bp, "\n TLS session ticket:\n") <= 0) goto err; | 213 | <= 0) goto err; |
209 | if (BIO_dump_indent(bp, (char *)x->tlsext_tick, x->tlsext_ticklen, 4) <= 0) | 214 | if (BIO_dump_indent(bp, (char *)x->tlsext_tick, x->tlsext_ticklen, 4) <= 0) |
210 | goto err; | 215 | goto err; |
211 | } | 216 | } |
212 | #endif | 217 | #endif |
213 | 218 | ||
214 | #ifndef OPENSSL_NO_COMP | 219 | #ifndef OPENSSL_NO_COMP |
215 | if (x->compress_meth != 0) | 220 | if (x->compress_meth != 0) { |
216 | { | ||
217 | SSL_COMP *comp = NULL; | 221 | SSL_COMP *comp = NULL; |
218 | 222 | ||
219 | ssl_cipher_get_evp(x,NULL,NULL,NULL,NULL,&comp); | 223 | ssl_cipher_get_evp(x, NULL, NULL, NULL, NULL, &comp); |
220 | if (comp == NULL) | 224 | if (comp == NULL) { |
221 | { | 225 | if (BIO_printf(bp, "\n Compression: %d", x->compress_meth) |
222 | if (BIO_printf(bp,"\n Compression: %d",x->compress_meth) <= 0) goto err; | 226 | <= 0) goto err; |
227 | } else { | ||
228 | if (BIO_printf(bp, "\n Compression: %d (%s)", comp->id, comp->method->name) <= 0) goto err; | ||
223 | } | 229 | } |
224 | else | 230 | } |
225 | { | ||
226 | if (BIO_printf(bp,"\n Compression: %d (%s)", comp->id,comp->method->name) <= 0) goto err; | ||
227 | } | ||
228 | } | ||
229 | #endif | 231 | #endif |
230 | if (x->time != 0L) | 232 | if (x->time != 0L) { |
231 | { | 233 | if (BIO_printf(bp, "\n Start Time: %ld", x->time) |
232 | if (BIO_printf(bp, "\n Start Time: %ld",x->time) <= 0) goto err; | 234 | <= 0) goto err; |
233 | } | 235 | } |
234 | if (x->timeout != 0L) | 236 | if (x->timeout != 0L) { |
235 | { | 237 | if (BIO_printf(bp, "\n Timeout : %ld (sec)", x->timeout) <= 0) goto err; |
236 | if (BIO_printf(bp, "\n Timeout : %ld (sec)",x->timeout) <= 0) goto err; | ||
237 | } | 238 | } |
238 | if (BIO_puts(bp,"\n") <= 0) goto err; | 239 | if (BIO_puts(bp, "\n") |
240 | <= 0) goto err; | ||
239 | 241 | ||
240 | if (BIO_puts(bp, " Verify return code: ") <= 0) goto err; | 242 | if (BIO_puts(bp, " Verify return code: ") |
243 | <= 0) goto err; | ||
241 | if (BIO_printf(bp, "%ld (%s)\n", x->verify_result, | 244 | if (BIO_printf(bp, "%ld (%s)\n", x->verify_result, |
242 | X509_verify_cert_error_string(x->verify_result)) <= 0) goto err; | 245 | X509_verify_cert_error_string(x->verify_result)) <= 0) goto err; |
243 | 246 | ||
244 | return(1); | 247 | return (1); |
245 | err: | 248 | err: |
246 | return(0); | 249 | return (0); |
247 | } | 250 | } |
248 | 251 | ||
diff --git a/src/lib/libssl/ssl_algs.c b/src/lib/libssl/ssl_algs.c index 9c34d19725..76644bda91 100644 --- a/src/lib/libssl/ssl_algs.c +++ b/src/lib/libssl/ssl_algs.c | |||
@@ -61,8 +61,9 @@ | |||
61 | #include <openssl/lhash.h> | 61 | #include <openssl/lhash.h> |
62 | #include "ssl_locl.h" | 62 | #include "ssl_locl.h" |
63 | 63 | ||
64 | int SSL_library_init(void) | 64 | int |
65 | { | 65 | SSL_library_init(void) |
66 | { | ||
66 | 67 | ||
67 | #ifndef OPENSSL_NO_DES | 68 | #ifndef OPENSSL_NO_DES |
68 | EVP_add_cipher(EVP_des_cbc()); | 69 | EVP_add_cipher(EVP_des_cbc()); |
@@ -104,16 +105,16 @@ int SSL_library_init(void) | |||
104 | #ifndef OPENSSL_NO_SEED | 105 | #ifndef OPENSSL_NO_SEED |
105 | EVP_add_cipher(EVP_seed_cbc()); | 106 | EVP_add_cipher(EVP_seed_cbc()); |
106 | #endif | 107 | #endif |
107 | 108 | ||
108 | #ifndef OPENSSL_NO_MD5 | 109 | #ifndef OPENSSL_NO_MD5 |
109 | EVP_add_digest(EVP_md5()); | 110 | EVP_add_digest(EVP_md5()); |
110 | EVP_add_digest_alias(SN_md5,"ssl2-md5"); | 111 | EVP_add_digest_alias(SN_md5, "ssl2-md5"); |
111 | EVP_add_digest_alias(SN_md5,"ssl3-md5"); | 112 | EVP_add_digest_alias(SN_md5, "ssl3-md5"); |
112 | #endif | 113 | #endif |
113 | #ifndef OPENSSL_NO_SHA | 114 | #ifndef OPENSSL_NO_SHA |
114 | EVP_add_digest(EVP_sha1()); /* RSA with sha1 */ | 115 | EVP_add_digest(EVP_sha1()); /* RSA with sha1 */ |
115 | EVP_add_digest_alias(SN_sha1,"ssl3-sha1"); | 116 | EVP_add_digest_alias(SN_sha1, "ssl3-sha1"); |
116 | EVP_add_digest_alias(SN_sha1WithRSAEncryption,SN_sha1WithRSA); | 117 | EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA); |
117 | #endif | 118 | #endif |
118 | #ifndef OPENSSL_NO_SHA256 | 119 | #ifndef OPENSSL_NO_SHA256 |
119 | EVP_add_digest(EVP_sha224()); | 120 | EVP_add_digest(EVP_sha224()); |
@@ -125,9 +126,9 @@ int SSL_library_init(void) | |||
125 | #endif | 126 | #endif |
126 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_DSA) | 127 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_DSA) |
127 | EVP_add_digest(EVP_dss1()); /* DSA with sha1 */ | 128 | EVP_add_digest(EVP_dss1()); /* DSA with sha1 */ |
128 | EVP_add_digest_alias(SN_dsaWithSHA1,SN_dsaWithSHA1_2); | 129 | EVP_add_digest_alias(SN_dsaWithSHA1, SN_dsaWithSHA1_2); |
129 | EVP_add_digest_alias(SN_dsaWithSHA1,"DSS1"); | 130 | EVP_add_digest_alias(SN_dsaWithSHA1, "DSS1"); |
130 | EVP_add_digest_alias(SN_dsaWithSHA1,"dss1"); | 131 | EVP_add_digest_alias(SN_dsaWithSHA1, "dss1"); |
131 | #endif | 132 | #endif |
132 | #ifndef OPENSSL_NO_ECDSA | 133 | #ifndef OPENSSL_NO_ECDSA |
133 | EVP_add_digest(EVP_ecdsa()); | 134 | EVP_add_digest(EVP_ecdsa()); |
@@ -145,6 +146,6 @@ int SSL_library_init(void) | |||
145 | #endif | 146 | #endif |
146 | /* initialize cipher/digest methods table */ | 147 | /* initialize cipher/digest methods table */ |
147 | ssl_load_ciphers(); | 148 | ssl_load_ciphers(); |
148 | return(1); | 149 | return (1); |
149 | } | 150 | } |
150 | 151 | ||
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c index 38540be1e5..51668db785 100644 --- a/src/lib/libssl/ssl_asn1.c +++ b/src/lib/libssl/ssl_asn1.c | |||
@@ -89,8 +89,7 @@ | |||
89 | #include <openssl/objects.h> | 89 | #include <openssl/objects.h> |
90 | #include <openssl/x509.h> | 90 | #include <openssl/x509.h> |
91 | 91 | ||
92 | typedef struct ssl_session_asn1_st | 92 | typedef struct ssl_session_asn1_st { |
93 | { | ||
94 | ASN1_INTEGER version; | 93 | ASN1_INTEGER version; |
95 | ASN1_INTEGER ssl_version; | 94 | ASN1_INTEGER ssl_version; |
96 | ASN1_OCTET_STRING cipher; | 95 | ASN1_OCTET_STRING cipher; |
@@ -100,7 +99,7 @@ typedef struct ssl_session_asn1_st | |||
100 | ASN1_OCTET_STRING session_id_context; | 99 | ASN1_OCTET_STRING session_id_context; |
101 | ASN1_OCTET_STRING key_arg; | 100 | ASN1_OCTET_STRING key_arg; |
102 | #ifndef OPENSSL_NO_KRB5 | 101 | #ifndef OPENSSL_NO_KRB5 |
103 | ASN1_OCTET_STRING krb5_princ; | 102 | ASN1_OCTET_STRING krb5_princ; |
104 | #endif /* OPENSSL_NO_KRB5 */ | 103 | #endif /* OPENSSL_NO_KRB5 */ |
105 | ASN1_INTEGER time; | 104 | ASN1_INTEGER time; |
106 | ASN1_INTEGER timeout; | 105 | ASN1_INTEGER timeout; |
@@ -117,169 +116,156 @@ typedef struct ssl_session_asn1_st | |||
117 | #ifndef OPENSSL_NO_SRP | 116 | #ifndef OPENSSL_NO_SRP |
118 | ASN1_OCTET_STRING srp_username; | 117 | ASN1_OCTET_STRING srp_username; |
119 | #endif /* OPENSSL_NO_SRP */ | 118 | #endif /* OPENSSL_NO_SRP */ |
120 | } SSL_SESSION_ASN1; | 119 | } SSL_SESSION_ASN1; |
121 | 120 | ||
122 | int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | 121 | int |
123 | { | 122 | i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) |
123 | { | ||
124 | #define LSIZE2 (sizeof(long)*2) | 124 | #define LSIZE2 (sizeof(long)*2) |
125 | int v1=0,v2=0,v3=0,v4=0,v5=0,v7=0,v8=0; | 125 | int v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0, v7 = 0, v8 = 0; |
126 | unsigned char buf[4],ibuf1[LSIZE2],ibuf2[LSIZE2]; | 126 | unsigned char buf[4], ibuf1[LSIZE2], ibuf2[LSIZE2]; |
127 | unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2],ibuf5[LSIZE2]; | 127 | unsigned char ibuf3[LSIZE2], ibuf4[LSIZE2], ibuf5[LSIZE2]; |
128 | #ifndef OPENSSL_NO_TLSEXT | 128 | #ifndef OPENSSL_NO_TLSEXT |
129 | int v6=0,v9=0,v10=0; | 129 | int v6 = 0, v9 = 0, v10 = 0; |
130 | unsigned char ibuf6[LSIZE2]; | 130 | unsigned char ibuf6[LSIZE2]; |
131 | #endif | 131 | #endif |
132 | #ifndef OPENSSL_NO_COMP | 132 | #ifndef OPENSSL_NO_COMP |
133 | unsigned char cbuf; | 133 | unsigned char cbuf; |
134 | int v11=0; | 134 | int v11 = 0; |
135 | #endif | 135 | #endif |
136 | #ifndef OPENSSL_NO_SRP | 136 | #ifndef OPENSSL_NO_SRP |
137 | int v12=0; | 137 | int v12 = 0; |
138 | #endif | 138 | #endif |
139 | long l; | 139 | long l; |
140 | SSL_SESSION_ASN1 a; | 140 | SSL_SESSION_ASN1 a; |
141 | M_ASN1_I2D_vars(in); | 141 | M_ASN1_I2D_vars(in); |
142 | 142 | ||
143 | if ((in == NULL) || ((in->cipher == NULL) && (in->cipher_id == 0))) | 143 | if ((in == NULL) || ((in->cipher == NULL) && (in->cipher_id == 0))) |
144 | return(0); | 144 | return (0); |
145 | 145 | ||
146 | /* Note that I cheat in the following 2 assignments. I know | 146 | /* Note that I cheat in the following 2 assignments. I know |
147 | * that if the ASN1_INTEGER passed to ASN1_INTEGER_set | 147 | * that if the ASN1_INTEGER passed to ASN1_INTEGER_set |
148 | * is > sizeof(long)+1, the buffer will not be re-OPENSSL_malloc()ed. | 148 | * is > sizeof(long)+1, the buffer will not be re-OPENSSL_malloc()ed. |
149 | * This is a bit evil but makes things simple, no dynamic allocation | 149 | * This is a bit evil but makes things simple, no dynamic allocation |
150 | * to clean up :-) */ | 150 | * to clean up :-) */ |
151 | a.version.length=LSIZE2; | 151 | a.version.length = LSIZE2; |
152 | a.version.type=V_ASN1_INTEGER; | 152 | a.version.type = V_ASN1_INTEGER; |
153 | a.version.data=ibuf1; | 153 | a.version.data = ibuf1; |
154 | ASN1_INTEGER_set(&(a.version),SSL_SESSION_ASN1_VERSION); | 154 | ASN1_INTEGER_set(&(a.version), SSL_SESSION_ASN1_VERSION); |
155 | 155 | ||
156 | a.ssl_version.length=LSIZE2; | 156 | a.ssl_version.length = LSIZE2; |
157 | a.ssl_version.type=V_ASN1_INTEGER; | 157 | a.ssl_version.type = V_ASN1_INTEGER; |
158 | a.ssl_version.data=ibuf2; | 158 | a.ssl_version.data = ibuf2; |
159 | ASN1_INTEGER_set(&(a.ssl_version),in->ssl_version); | 159 | ASN1_INTEGER_set(&(a.ssl_version), in->ssl_version); |
160 | 160 | ||
161 | a.cipher.type=V_ASN1_OCTET_STRING; | 161 | a.cipher.type = V_ASN1_OCTET_STRING; |
162 | a.cipher.data=buf; | 162 | a.cipher.data = buf; |
163 | 163 | ||
164 | if (in->cipher == NULL) | 164 | if (in->cipher == NULL) |
165 | l=in->cipher_id; | 165 | l = in->cipher_id; |
166 | else | 166 | else |
167 | l=in->cipher->id; | 167 | l = in->cipher->id; |
168 | if (in->ssl_version == SSL2_VERSION) | 168 | if (in->ssl_version == SSL2_VERSION) { |
169 | { | 169 | a.cipher.length = 3; |
170 | a.cipher.length=3; | 170 | buf[0] = ((unsigned char)(l >> 16L))&0xff; |
171 | buf[0]=((unsigned char)(l>>16L))&0xff; | 171 | buf[1] = ((unsigned char)(l >> 8L))&0xff; |
172 | buf[1]=((unsigned char)(l>> 8L))&0xff; | 172 | buf[2] = ((unsigned char)(l ))&0xff; |
173 | buf[2]=((unsigned char)(l ))&0xff; | 173 | } else { |
174 | } | 174 | a.cipher.length = 2; |
175 | else | 175 | buf[0] = ((unsigned char)(l >> 8L))&0xff; |
176 | { | 176 | buf[1] = ((unsigned char)(l ))&0xff; |
177 | a.cipher.length=2; | 177 | } |
178 | buf[0]=((unsigned char)(l>>8L))&0xff; | ||
179 | buf[1]=((unsigned char)(l ))&0xff; | ||
180 | } | ||
181 | 178 | ||
182 | #ifndef OPENSSL_NO_COMP | 179 | #ifndef OPENSSL_NO_COMP |
183 | if (in->compress_meth) | 180 | if (in->compress_meth) { |
184 | { | ||
185 | cbuf = (unsigned char)in->compress_meth; | 181 | cbuf = (unsigned char)in->compress_meth; |
186 | a.comp_id.length = 1; | 182 | a.comp_id.length = 1; |
187 | a.comp_id.type = V_ASN1_OCTET_STRING; | 183 | a.comp_id.type = V_ASN1_OCTET_STRING; |
188 | a.comp_id.data = &cbuf; | 184 | a.comp_id.data = &cbuf; |
189 | } | 185 | } |
190 | #endif | 186 | #endif |
191 | 187 | ||
192 | a.master_key.length=in->master_key_length; | 188 | a.master_key.length = in->master_key_length; |
193 | a.master_key.type=V_ASN1_OCTET_STRING; | 189 | a.master_key.type = V_ASN1_OCTET_STRING; |
194 | a.master_key.data=in->master_key; | 190 | a.master_key.data = in->master_key; |
195 | 191 | ||
196 | a.session_id.length=in->session_id_length; | 192 | a.session_id.length = in->session_id_length; |
197 | a.session_id.type=V_ASN1_OCTET_STRING; | 193 | a.session_id.type = V_ASN1_OCTET_STRING; |
198 | a.session_id.data=in->session_id; | 194 | a.session_id.data = in->session_id; |
199 | 195 | ||
200 | a.session_id_context.length=in->sid_ctx_length; | 196 | a.session_id_context.length = in->sid_ctx_length; |
201 | a.session_id_context.type=V_ASN1_OCTET_STRING; | 197 | a.session_id_context.type = V_ASN1_OCTET_STRING; |
202 | a.session_id_context.data=in->sid_ctx; | 198 | a.session_id_context.data = in->sid_ctx; |
203 | 199 | ||
204 | a.key_arg.length=in->key_arg_length; | 200 | a.key_arg.length = in->key_arg_length; |
205 | a.key_arg.type=V_ASN1_OCTET_STRING; | 201 | a.key_arg.type = V_ASN1_OCTET_STRING; |
206 | a.key_arg.data=in->key_arg; | 202 | a.key_arg.data = in->key_arg; |
207 | 203 | ||
208 | #ifndef OPENSSL_NO_KRB5 | 204 | #ifndef OPENSSL_NO_KRB5 |
209 | if (in->krb5_client_princ_len) | 205 | if (in->krb5_client_princ_len) { |
210 | { | 206 | a.krb5_princ.length = in->krb5_client_princ_len; |
211 | a.krb5_princ.length=in->krb5_client_princ_len; | 207 | a.krb5_princ.type = V_ASN1_OCTET_STRING; |
212 | a.krb5_princ.type=V_ASN1_OCTET_STRING; | 208 | a.krb5_princ.data = in->krb5_client_princ; |
213 | a.krb5_princ.data=in->krb5_client_princ; | 209 | } |
214 | } | ||
215 | #endif /* OPENSSL_NO_KRB5 */ | 210 | #endif /* OPENSSL_NO_KRB5 */ |
216 | 211 | ||
217 | if (in->time != 0L) | 212 | if (in->time != 0L) { |
218 | { | 213 | a.time.length = LSIZE2; |
219 | a.time.length=LSIZE2; | 214 | a.time.type = V_ASN1_INTEGER; |
220 | a.time.type=V_ASN1_INTEGER; | 215 | a.time.data = ibuf3; |
221 | a.time.data=ibuf3; | 216 | ASN1_INTEGER_set(&(a.time), in->time); |
222 | ASN1_INTEGER_set(&(a.time),in->time); | 217 | } |
223 | } | ||
224 | 218 | ||
225 | if (in->timeout != 0L) | 219 | if (in->timeout != 0L) { |
226 | { | 220 | a.timeout.length = LSIZE2; |
227 | a.timeout.length=LSIZE2; | 221 | a.timeout.type = V_ASN1_INTEGER; |
228 | a.timeout.type=V_ASN1_INTEGER; | 222 | a.timeout.data = ibuf4; |
229 | a.timeout.data=ibuf4; | 223 | ASN1_INTEGER_set(&(a.timeout), in->timeout); |
230 | ASN1_INTEGER_set(&(a.timeout),in->timeout); | 224 | } |
231 | } | ||
232 | 225 | ||
233 | if (in->verify_result != X509_V_OK) | 226 | if (in->verify_result != X509_V_OK) { |
234 | { | 227 | a.verify_result.length = LSIZE2; |
235 | a.verify_result.length=LSIZE2; | 228 | a.verify_result.type = V_ASN1_INTEGER; |
236 | a.verify_result.type=V_ASN1_INTEGER; | 229 | a.verify_result.data = ibuf5; |
237 | a.verify_result.data=ibuf5; | 230 | ASN1_INTEGER_set(&a.verify_result, in->verify_result); |
238 | ASN1_INTEGER_set(&a.verify_result,in->verify_result); | 231 | } |
239 | } | ||
240 | 232 | ||
241 | #ifndef OPENSSL_NO_TLSEXT | 233 | #ifndef OPENSSL_NO_TLSEXT |
242 | if (in->tlsext_hostname) | 234 | if (in->tlsext_hostname) { |
243 | { | 235 | a.tlsext_hostname.length = strlen(in->tlsext_hostname); |
244 | a.tlsext_hostname.length=strlen(in->tlsext_hostname); | 236 | a.tlsext_hostname.type = V_ASN1_OCTET_STRING; |
245 | a.tlsext_hostname.type=V_ASN1_OCTET_STRING; | 237 | a.tlsext_hostname.data = (unsigned char *)in->tlsext_hostname; |
246 | a.tlsext_hostname.data=(unsigned char *)in->tlsext_hostname; | 238 | } |
247 | } | 239 | if (in->tlsext_tick) { |
248 | if (in->tlsext_tick) | 240 | a.tlsext_tick.length = in->tlsext_ticklen; |
249 | { | 241 | a.tlsext_tick.type = V_ASN1_OCTET_STRING; |
250 | a.tlsext_tick.length= in->tlsext_ticklen; | 242 | a.tlsext_tick.data = (unsigned char *)in->tlsext_tick; |
251 | a.tlsext_tick.type=V_ASN1_OCTET_STRING; | 243 | } |
252 | a.tlsext_tick.data=(unsigned char *)in->tlsext_tick; | 244 | if (in->tlsext_tick_lifetime_hint > 0) { |
253 | } | 245 | a.tlsext_tick_lifetime.length = LSIZE2; |
254 | if (in->tlsext_tick_lifetime_hint > 0) | 246 | a.tlsext_tick_lifetime.type = V_ASN1_INTEGER; |
255 | { | 247 | a.tlsext_tick_lifetime.data = ibuf6; |
256 | a.tlsext_tick_lifetime.length=LSIZE2; | 248 | ASN1_INTEGER_set(&a.tlsext_tick_lifetime, in->tlsext_tick_lifetime_hint); |
257 | a.tlsext_tick_lifetime.type=V_ASN1_INTEGER; | 249 | } |
258 | a.tlsext_tick_lifetime.data=ibuf6; | ||
259 | ASN1_INTEGER_set(&a.tlsext_tick_lifetime,in->tlsext_tick_lifetime_hint); | ||
260 | } | ||
261 | #endif /* OPENSSL_NO_TLSEXT */ | 250 | #endif /* OPENSSL_NO_TLSEXT */ |
262 | #ifndef OPENSSL_NO_PSK | 251 | #ifndef OPENSSL_NO_PSK |
263 | if (in->psk_identity_hint) | 252 | if (in->psk_identity_hint) { |
264 | { | 253 | a.psk_identity_hint.length = strlen(in->psk_identity_hint); |
265 | a.psk_identity_hint.length=strlen(in->psk_identity_hint); | 254 | a.psk_identity_hint.type = V_ASN1_OCTET_STRING; |
266 | a.psk_identity_hint.type=V_ASN1_OCTET_STRING; | 255 | a.psk_identity_hint.data = (unsigned char *)(in->psk_identity_hint); |
267 | a.psk_identity_hint.data=(unsigned char *)(in->psk_identity_hint); | 256 | } |
268 | } | 257 | if (in->psk_identity) { |
269 | if (in->psk_identity) | 258 | a.psk_identity.length = strlen(in->psk_identity); |
270 | { | 259 | a.psk_identity.type = V_ASN1_OCTET_STRING; |
271 | a.psk_identity.length=strlen(in->psk_identity); | 260 | a.psk_identity.data = (unsigned char *)(in->psk_identity); |
272 | a.psk_identity.type=V_ASN1_OCTET_STRING; | 261 | } |
273 | a.psk_identity.data=(unsigned char *)(in->psk_identity); | ||
274 | } | ||
275 | #endif /* OPENSSL_NO_PSK */ | 262 | #endif /* OPENSSL_NO_PSK */ |
276 | #ifndef OPENSSL_NO_SRP | 263 | #ifndef OPENSSL_NO_SRP |
277 | if (in->srp_username) | 264 | if (in->srp_username) { |
278 | { | 265 | a.srp_username.length = strlen(in->srp_username); |
279 | a.srp_username.length=strlen(in->srp_username); | 266 | a.srp_username.type = V_ASN1_OCTET_STRING; |
280 | a.srp_username.type=V_ASN1_OCTET_STRING; | 267 | a.srp_username.data = (unsigned char *)(in->srp_username); |
281 | a.srp_username.data=(unsigned char *)(in->srp_username); | 268 | } |
282 | } | ||
283 | #endif /* OPENSSL_NO_SRP */ | 269 | #endif /* OPENSSL_NO_SRP */ |
284 | 270 | ||
285 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); | 271 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); |
@@ -289,41 +275,41 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
289 | M_ASN1_I2D_len(&(a.master_key), i2d_ASN1_OCTET_STRING); | 275 | M_ASN1_I2D_len(&(a.master_key), i2d_ASN1_OCTET_STRING); |
290 | #ifndef OPENSSL_NO_KRB5 | 276 | #ifndef OPENSSL_NO_KRB5 |
291 | if (in->krb5_client_princ_len) | 277 | if (in->krb5_client_princ_len) |
292 | M_ASN1_I2D_len(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); | 278 | M_ASN1_I2D_len(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); |
293 | #endif /* OPENSSL_NO_KRB5 */ | 279 | #endif /* OPENSSL_NO_KRB5 */ |
294 | if (in->key_arg_length > 0) | 280 | if (in->key_arg_length > 0) |
295 | M_ASN1_I2D_len_IMP_opt(&(a.key_arg),i2d_ASN1_OCTET_STRING); | 281 | M_ASN1_I2D_len_IMP_opt(&(a.key_arg), i2d_ASN1_OCTET_STRING); |
296 | if (in->time != 0L) | 282 | if (in->time != 0L) |
297 | M_ASN1_I2D_len_EXP_opt(&(a.time),i2d_ASN1_INTEGER,1,v1); | 283 | M_ASN1_I2D_len_EXP_opt(&(a.time), i2d_ASN1_INTEGER, 1, v1); |
298 | if (in->timeout != 0L) | 284 | if (in->timeout != 0L) |
299 | M_ASN1_I2D_len_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); | 285 | M_ASN1_I2D_len_EXP_opt(&(a.timeout), i2d_ASN1_INTEGER, 2, v2); |
300 | if (in->peer != NULL) | 286 | if (in->peer != NULL) |
301 | M_ASN1_I2D_len_EXP_opt(in->peer,i2d_X509,3,v3); | 287 | M_ASN1_I2D_len_EXP_opt(in->peer, i2d_X509, 3, v3); |
302 | M_ASN1_I2D_len_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4,v4); | 288 | M_ASN1_I2D_len_EXP_opt(&a.session_id_context, i2d_ASN1_OCTET_STRING, 4, v4); |
303 | if (in->verify_result != X509_V_OK) | 289 | if (in->verify_result != X509_V_OK) |
304 | M_ASN1_I2D_len_EXP_opt(&(a.verify_result),i2d_ASN1_INTEGER,5,v5); | 290 | M_ASN1_I2D_len_EXP_opt(&(a.verify_result), i2d_ASN1_INTEGER, 5, v5); |
305 | 291 | ||
306 | #ifndef OPENSSL_NO_TLSEXT | 292 | #ifndef OPENSSL_NO_TLSEXT |
307 | if (in->tlsext_tick_lifetime_hint > 0) | 293 | if (in->tlsext_tick_lifetime_hint > 0) |
308 | M_ASN1_I2D_len_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER,9,v9); | 294 | M_ASN1_I2D_len_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER, 9, v9); |
309 | if (in->tlsext_tick) | 295 | if (in->tlsext_tick) |
310 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING,10,v10); | 296 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING, 10, v10); |
311 | if (in->tlsext_hostname) | 297 | if (in->tlsext_hostname) |
312 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING,6,v6); | 298 | M_ASN1_I2D_len_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING, 6, v6); |
313 | #ifndef OPENSSL_NO_COMP | 299 | #ifndef OPENSSL_NO_COMP |
314 | if (in->compress_meth) | 300 | if (in->compress_meth) |
315 | M_ASN1_I2D_len_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING,11,v11); | 301 | M_ASN1_I2D_len_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING, 11, v11); |
316 | #endif | 302 | #endif |
317 | #endif /* OPENSSL_NO_TLSEXT */ | 303 | #endif /* OPENSSL_NO_TLSEXT */ |
318 | #ifndef OPENSSL_NO_PSK | 304 | #ifndef OPENSSL_NO_PSK |
319 | if (in->psk_identity_hint) | 305 | if (in->psk_identity_hint) |
320 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING,7,v7); | 306 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING, 7, v7); |
321 | if (in->psk_identity) | 307 | if (in->psk_identity) |
322 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING,8,v8); | 308 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING, 8, v8); |
323 | #endif /* OPENSSL_NO_PSK */ | 309 | #endif /* OPENSSL_NO_PSK */ |
324 | #ifndef OPENSSL_NO_SRP | 310 | #ifndef OPENSSL_NO_SRP |
325 | if (in->srp_username) | 311 | if (in->srp_username) |
326 | M_ASN1_I2D_len_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING,12,v12); | 312 | M_ASN1_I2D_len_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING, 12, v12); |
327 | #endif /* OPENSSL_NO_SRP */ | 313 | #endif /* OPENSSL_NO_SRP */ |
328 | 314 | ||
329 | M_ASN1_I2D_seq_total(); | 315 | M_ASN1_I2D_seq_total(); |
@@ -335,308 +321,296 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
335 | M_ASN1_I2D_put(&(a.master_key), i2d_ASN1_OCTET_STRING); | 321 | M_ASN1_I2D_put(&(a.master_key), i2d_ASN1_OCTET_STRING); |
336 | #ifndef OPENSSL_NO_KRB5 | 322 | #ifndef OPENSSL_NO_KRB5 |
337 | if (in->krb5_client_princ_len) | 323 | if (in->krb5_client_princ_len) |
338 | M_ASN1_I2D_put(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); | 324 | M_ASN1_I2D_put(&(a.krb5_princ), i2d_ASN1_OCTET_STRING); |
339 | #endif /* OPENSSL_NO_KRB5 */ | 325 | #endif /* OPENSSL_NO_KRB5 */ |
340 | if (in->key_arg_length > 0) | 326 | if (in->key_arg_length > 0) |
341 | M_ASN1_I2D_put_IMP_opt(&(a.key_arg),i2d_ASN1_OCTET_STRING,0); | 327 | M_ASN1_I2D_put_IMP_opt(&(a.key_arg), i2d_ASN1_OCTET_STRING, 0); |
342 | if (in->time != 0L) | 328 | if (in->time != 0L) |
343 | M_ASN1_I2D_put_EXP_opt(&(a.time),i2d_ASN1_INTEGER,1,v1); | 329 | M_ASN1_I2D_put_EXP_opt(&(a.time), i2d_ASN1_INTEGER, 1, v1); |
344 | if (in->timeout != 0L) | 330 | if (in->timeout != 0L) |
345 | M_ASN1_I2D_put_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); | 331 | M_ASN1_I2D_put_EXP_opt(&(a.timeout), i2d_ASN1_INTEGER, 2, v2); |
346 | if (in->peer != NULL) | 332 | if (in->peer != NULL) |
347 | M_ASN1_I2D_put_EXP_opt(in->peer,i2d_X509,3,v3); | 333 | M_ASN1_I2D_put_EXP_opt(in->peer, i2d_X509, 3, v3); |
348 | M_ASN1_I2D_put_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4, | 334 | M_ASN1_I2D_put_EXP_opt(&a.session_id_context, i2d_ASN1_OCTET_STRING, 4, |
349 | v4); | 335 | v4); |
350 | if (in->verify_result != X509_V_OK) | 336 | if (in->verify_result != X509_V_OK) |
351 | M_ASN1_I2D_put_EXP_opt(&a.verify_result,i2d_ASN1_INTEGER,5,v5); | 337 | M_ASN1_I2D_put_EXP_opt(&a.verify_result, i2d_ASN1_INTEGER, 5, v5); |
352 | #ifndef OPENSSL_NO_TLSEXT | 338 | #ifndef OPENSSL_NO_TLSEXT |
353 | if (in->tlsext_hostname) | 339 | if (in->tlsext_hostname) |
354 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING,6,v6); | 340 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_hostname), i2d_ASN1_OCTET_STRING, 6, v6); |
355 | #endif /* OPENSSL_NO_TLSEXT */ | 341 | #endif /* OPENSSL_NO_TLSEXT */ |
356 | #ifndef OPENSSL_NO_PSK | 342 | #ifndef OPENSSL_NO_PSK |
357 | if (in->psk_identity_hint) | 343 | if (in->psk_identity_hint) |
358 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING,7,v7); | 344 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity_hint), i2d_ASN1_OCTET_STRING, 7, v7); |
359 | if (in->psk_identity) | 345 | if (in->psk_identity) |
360 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING,8,v8); | 346 | M_ASN1_I2D_put_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING, 8, v8); |
361 | #endif /* OPENSSL_NO_PSK */ | 347 | #endif /* OPENSSL_NO_PSK */ |
362 | #ifndef OPENSSL_NO_TLSEXT | 348 | #ifndef OPENSSL_NO_TLSEXT |
363 | if (in->tlsext_tick_lifetime_hint > 0) | 349 | if (in->tlsext_tick_lifetime_hint > 0) |
364 | M_ASN1_I2D_put_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER,9,v9); | 350 | M_ASN1_I2D_put_EXP_opt(&a.tlsext_tick_lifetime, i2d_ASN1_INTEGER, 9, v9); |
365 | if (in->tlsext_tick) | 351 | if (in->tlsext_tick) |
366 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING,10,v10); | 352 | M_ASN1_I2D_put_EXP_opt(&(a.tlsext_tick), i2d_ASN1_OCTET_STRING, 10, v10); |
367 | #endif /* OPENSSL_NO_TLSEXT */ | 353 | #endif /* OPENSSL_NO_TLSEXT */ |
368 | #ifndef OPENSSL_NO_COMP | 354 | #ifndef OPENSSL_NO_COMP |
369 | if (in->compress_meth) | 355 | if (in->compress_meth) |
370 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING,11,v11); | 356 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING, 11, v11); |
371 | #endif | 357 | #endif |
372 | #ifndef OPENSSL_NO_SRP | 358 | #ifndef OPENSSL_NO_SRP |
373 | if (in->srp_username) | 359 | if (in->srp_username) |
374 | M_ASN1_I2D_put_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING,12,v12); | 360 | M_ASN1_I2D_put_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING, 12, v12); |
375 | #endif /* OPENSSL_NO_SRP */ | 361 | #endif /* OPENSSL_NO_SRP */ |
376 | M_ASN1_I2D_finish(); | 362 | M_ASN1_I2D_finish(); |
377 | } | 363 | } |
378 | 364 | ||
379 | SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, | 365 | SSL_SESSION |
380 | long length) | 366 | *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, |
381 | { | 367 | long length) |
382 | int ssl_version=0,i; | 368 | { |
369 | int ssl_version = 0, i; | ||
383 | long id; | 370 | long id; |
384 | ASN1_INTEGER ai,*aip; | 371 | ASN1_INTEGER ai, *aip; |
385 | ASN1_OCTET_STRING os,*osp; | 372 | ASN1_OCTET_STRING os, *osp; |
386 | M_ASN1_D2I_vars(a,SSL_SESSION *,SSL_SESSION_new); | 373 | M_ASN1_D2I_vars(a, SSL_SESSION *, SSL_SESSION_new); |
387 | 374 | ||
388 | aip= &ai; | 375 | aip = &ai; |
389 | osp= &os; | 376 | osp = &os; |
390 | 377 | ||
391 | M_ASN1_D2I_Init(); | 378 | M_ASN1_D2I_Init(); |
392 | M_ASN1_D2I_start_sequence(); | 379 | M_ASN1_D2I_start_sequence(); |
393 | 380 | ||
394 | ai.data=NULL; ai.length=0; | 381 | ai.data = NULL; |
395 | M_ASN1_D2I_get_x(ASN1_INTEGER,aip,d2i_ASN1_INTEGER); | 382 | ai.length = 0; |
396 | if (ai.data != NULL) { OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; } | 383 | M_ASN1_D2I_get_x(ASN1_INTEGER, aip, d2i_ASN1_INTEGER); |
384 | if (ai.data != NULL) { | ||
385 | OPENSSL_free(ai.data); | ||
386 | ai.data = NULL; | ||
387 | ai.length = 0; | ||
388 | } | ||
397 | 389 | ||
398 | /* we don't care about the version right now :-) */ | 390 | /* we don't care about the version right now :-) */ |
399 | M_ASN1_D2I_get_x(ASN1_INTEGER,aip,d2i_ASN1_INTEGER); | 391 | M_ASN1_D2I_get_x(ASN1_INTEGER, aip, d2i_ASN1_INTEGER); |
400 | ssl_version=(int)ASN1_INTEGER_get(aip); | 392 | ssl_version = (int)ASN1_INTEGER_get(aip); |
401 | ret->ssl_version=ssl_version; | 393 | ret->ssl_version = ssl_version; |
402 | if (ai.data != NULL) { OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; } | 394 | if (ai.data != NULL) { |
403 | 395 | OPENSSL_free(ai.data); | |
404 | os.data=NULL; os.length=0; | 396 | ai.data = NULL; |
405 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,osp,d2i_ASN1_OCTET_STRING); | 397 | ai.length = 0; |
406 | if (ssl_version == SSL2_VERSION) | 398 | } |
407 | { | 399 | |
408 | if (os.length != 3) | 400 | os.data = NULL; |
409 | { | 401 | os.length = 0; |
410 | c.error=SSL_R_CIPHER_CODE_WRONG_LENGTH; | 402 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, osp, d2i_ASN1_OCTET_STRING); |
403 | if (ssl_version == SSL2_VERSION) { | ||
404 | if (os.length != 3) { | ||
405 | c.error = SSL_R_CIPHER_CODE_WRONG_LENGTH; | ||
411 | goto err; | 406 | goto err; |
412 | } | ||
413 | id=0x02000000L| | ||
414 | ((unsigned long)os.data[0]<<16L)| | ||
415 | ((unsigned long)os.data[1]<< 8L)| | ||
416 | (unsigned long)os.data[2]; | ||
417 | } | 407 | } |
418 | else if ((ssl_version>>8) >= SSL3_VERSION_MAJOR) | 408 | id = 0x02000000L| |
419 | { | 409 | ((unsigned long)os.data[0]<<16L)| |
420 | if (os.length != 2) | 410 | ((unsigned long)os.data[1]<< 8L)| |
421 | { | 411 | (unsigned long)os.data[2]; |
422 | c.error=SSL_R_CIPHER_CODE_WRONG_LENGTH; | 412 | } else if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) { |
413 | if (os.length != 2) { | ||
414 | c.error = SSL_R_CIPHER_CODE_WRONG_LENGTH; | ||
423 | goto err; | 415 | goto err; |
424 | } | ||
425 | id=0x03000000L| | ||
426 | ((unsigned long)os.data[0]<<8L)| | ||
427 | (unsigned long)os.data[1]; | ||
428 | } | 416 | } |
429 | else | 417 | id = 0x03000000L| |
430 | { | 418 | ((unsigned long)os.data[0]<<8L)| |
431 | c.error=SSL_R_UNKNOWN_SSL_VERSION; | 419 | (unsigned long)os.data[1]; |
420 | } else { | ||
421 | c.error = SSL_R_UNKNOWN_SSL_VERSION; | ||
432 | goto err; | 422 | goto err; |
433 | } | 423 | } |
434 | 424 | ||
435 | ret->cipher=NULL; | 425 | ret->cipher = NULL; |
436 | ret->cipher_id=id; | 426 | ret->cipher_id = id; |
437 | 427 | ||
438 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,osp,d2i_ASN1_OCTET_STRING); | 428 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, osp, d2i_ASN1_OCTET_STRING); |
439 | if ((ssl_version>>8) >= SSL3_VERSION_MAJOR) | 429 | if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) |
440 | i=SSL3_MAX_SSL_SESSION_ID_LENGTH; | 430 | i = SSL3_MAX_SSL_SESSION_ID_LENGTH; |
441 | else /* if (ssl_version>>8 == SSL2_VERSION_MAJOR) */ | 431 | else /* if (ssl_version>>8 == SSL2_VERSION_MAJOR) */ |
442 | i=SSL2_MAX_SSL_SESSION_ID_LENGTH; | 432 | i = SSL2_MAX_SSL_SESSION_ID_LENGTH; |
443 | 433 | ||
444 | if (os.length > i) | 434 | if (os.length > i) |
445 | os.length = i; | 435 | os.length = i; |
446 | if (os.length > (int)sizeof(ret->session_id)) /* can't happen */ | 436 | if (os.length > (int)sizeof(ret->session_id)) /* can't happen */ |
447 | os.length = sizeof(ret->session_id); | 437 | os.length = sizeof(ret->session_id); |
448 | 438 | ||
449 | ret->session_id_length=os.length; | 439 | ret->session_id_length = os.length; |
450 | OPENSSL_assert(os.length <= (int)sizeof(ret->session_id)); | 440 | OPENSSL_assert(os.length <= (int)sizeof(ret->session_id)); |
451 | memcpy(ret->session_id,os.data,os.length); | 441 | memcpy(ret->session_id, os.data, os.length); |
452 | 442 | ||
453 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,osp,d2i_ASN1_OCTET_STRING); | 443 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, osp, d2i_ASN1_OCTET_STRING); |
454 | if (os.length > SSL_MAX_MASTER_KEY_LENGTH) | 444 | if (os.length > SSL_MAX_MASTER_KEY_LENGTH) |
455 | ret->master_key_length=SSL_MAX_MASTER_KEY_LENGTH; | 445 | ret->master_key_length = SSL_MAX_MASTER_KEY_LENGTH; |
456 | else | 446 | else |
457 | ret->master_key_length=os.length; | 447 | ret->master_key_length = os.length; |
458 | memcpy(ret->master_key,os.data,ret->master_key_length); | 448 | memcpy(ret->master_key, os.data, ret->master_key_length); |
459 | 449 | ||
460 | os.length=0; | 450 | os.length = 0; |
461 | 451 | ||
462 | #ifndef OPENSSL_NO_KRB5 | 452 | #ifndef OPENSSL_NO_KRB5 |
463 | os.length=0; | 453 | os.length = 0; |
464 | M_ASN1_D2I_get_opt(osp,d2i_ASN1_OCTET_STRING,V_ASN1_OCTET_STRING); | 454 | M_ASN1_D2I_get_opt(osp, d2i_ASN1_OCTET_STRING, V_ASN1_OCTET_STRING); |
465 | if (os.data) | 455 | if (os.data) { |
466 | { | 456 | if (os.length > SSL_MAX_KRB5_PRINCIPAL_LENGTH) |
467 | if (os.length > SSL_MAX_KRB5_PRINCIPAL_LENGTH) | 457 | ret->krb5_client_princ_len = 0; |
468 | ret->krb5_client_princ_len=0; | ||
469 | else | 458 | else |
470 | ret->krb5_client_princ_len=os.length; | 459 | ret->krb5_client_princ_len = os.length; |
471 | memcpy(ret->krb5_client_princ,os.data,ret->krb5_client_princ_len); | 460 | memcpy(ret->krb5_client_princ, os.data, ret->krb5_client_princ_len); |
472 | OPENSSL_free(os.data); | 461 | OPENSSL_free(os.data); |
473 | os.data = NULL; | 462 | os.data = NULL; |
474 | os.length = 0; | 463 | os.length = 0; |
475 | } | 464 | } else |
476 | else | 465 | ret->krb5_client_princ_len = 0; |
477 | ret->krb5_client_princ_len=0; | ||
478 | #endif /* OPENSSL_NO_KRB5 */ | 466 | #endif /* OPENSSL_NO_KRB5 */ |
479 | 467 | ||
480 | M_ASN1_D2I_get_IMP_opt(osp,d2i_ASN1_OCTET_STRING,0,V_ASN1_OCTET_STRING); | 468 | M_ASN1_D2I_get_IMP_opt(osp, d2i_ASN1_OCTET_STRING, 0, V_ASN1_OCTET_STRING); |
481 | if (os.length > SSL_MAX_KEY_ARG_LENGTH) | 469 | if (os.length > SSL_MAX_KEY_ARG_LENGTH) |
482 | ret->key_arg_length=SSL_MAX_KEY_ARG_LENGTH; | 470 | ret->key_arg_length = SSL_MAX_KEY_ARG_LENGTH; |
483 | else | 471 | else |
484 | ret->key_arg_length=os.length; | 472 | ret->key_arg_length = os.length; |
485 | memcpy(ret->key_arg,os.data,ret->key_arg_length); | 473 | memcpy(ret->key_arg, os.data, ret->key_arg_length); |
486 | if (os.data != NULL) OPENSSL_free(os.data); | 474 | if (os.data != NULL) |
487 | 475 | OPENSSL_free(os.data); | |
488 | ai.length=0; | ||
489 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,1); | ||
490 | if (ai.data != NULL) | ||
491 | { | ||
492 | ret->time=ASN1_INTEGER_get(aip); | ||
493 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | ||
494 | } | ||
495 | else | ||
496 | ret->time=(unsigned long)time(NULL); | ||
497 | |||
498 | ai.length=0; | ||
499 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,2); | ||
500 | if (ai.data != NULL) | ||
501 | { | ||
502 | ret->timeout=ASN1_INTEGER_get(aip); | ||
503 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | ||
504 | } | ||
505 | else | ||
506 | ret->timeout=3; | ||
507 | 476 | ||
508 | if (ret->peer != NULL) | 477 | ai.length = 0; |
509 | { | 478 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 1); |
479 | if (ai.data != NULL) { | ||
480 | ret->time = ASN1_INTEGER_get(aip); | ||
481 | OPENSSL_free(ai.data); | ||
482 | ai.data = NULL; | ||
483 | ai.length = 0; | ||
484 | } else | ||
485 | ret->time = (unsigned long)time(NULL); | ||
486 | |||
487 | ai.length = 0; | ||
488 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 2); | ||
489 | if (ai.data != NULL) { | ||
490 | ret->timeout = ASN1_INTEGER_get(aip); | ||
491 | OPENSSL_free(ai.data); | ||
492 | ai.data = NULL; | ||
493 | ai.length = 0; | ||
494 | } else | ||
495 | ret->timeout = 3; | ||
496 | |||
497 | if (ret->peer != NULL) { | ||
510 | X509_free(ret->peer); | 498 | X509_free(ret->peer); |
511 | ret->peer=NULL; | 499 | ret->peer = NULL; |
512 | } | 500 | } |
513 | M_ASN1_D2I_get_EXP_opt(ret->peer,d2i_X509,3); | 501 | M_ASN1_D2I_get_EXP_opt(ret->peer, d2i_X509, 3); |
514 | 502 | ||
515 | os.length=0; | 503 | os.length = 0; |
516 | os.data=NULL; | 504 | os.data = NULL; |
517 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,4); | 505 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 4); |
518 | 506 | ||
519 | if(os.data != NULL) | 507 | if (os.data != NULL) { |
520 | { | 508 | if (os.length > SSL_MAX_SID_CTX_LENGTH) { |
521 | if (os.length > SSL_MAX_SID_CTX_LENGTH) | 509 | c.error = SSL_R_BAD_LENGTH; |
522 | { | 510 | goto err; |
523 | c.error=SSL_R_BAD_LENGTH; | 511 | } else { |
524 | goto err; | 512 | ret->sid_ctx_length = os.length; |
525 | } | 513 | memcpy(ret->sid_ctx, os.data, os.length); |
526 | else | ||
527 | { | ||
528 | ret->sid_ctx_length=os.length; | ||
529 | memcpy(ret->sid_ctx,os.data,os.length); | ||
530 | } | ||
531 | OPENSSL_free(os.data); os.data=NULL; os.length=0; | ||
532 | } | ||
533 | else | ||
534 | ret->sid_ctx_length=0; | ||
535 | |||
536 | ai.length=0; | ||
537 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,5); | ||
538 | if (ai.data != NULL) | ||
539 | { | ||
540 | ret->verify_result=ASN1_INTEGER_get(aip); | ||
541 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | ||
542 | } | 514 | } |
543 | else | 515 | OPENSSL_free(os.data); |
544 | ret->verify_result=X509_V_OK; | 516 | os.data = NULL; |
517 | os.length = 0; | ||
518 | } else | ||
519 | ret->sid_ctx_length = 0; | ||
520 | |||
521 | ai.length = 0; | ||
522 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 5); | ||
523 | if (ai.data != NULL) { | ||
524 | ret->verify_result = ASN1_INTEGER_get(aip); | ||
525 | OPENSSL_free(ai.data); | ||
526 | ai.data = NULL; | ||
527 | ai.length = 0; | ||
528 | } else | ||
529 | ret->verify_result = X509_V_OK; | ||
545 | 530 | ||
546 | #ifndef OPENSSL_NO_TLSEXT | 531 | #ifndef OPENSSL_NO_TLSEXT |
547 | os.length=0; | 532 | os.length = 0; |
548 | os.data=NULL; | 533 | os.data = NULL; |
549 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,6); | 534 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 6); |
550 | if (os.data) | 535 | if (os.data) { |
551 | { | ||
552 | ret->tlsext_hostname = BUF_strndup((char *)os.data, os.length); | 536 | ret->tlsext_hostname = BUF_strndup((char *)os.data, os.length); |
553 | OPENSSL_free(os.data); | 537 | OPENSSL_free(os.data); |
554 | os.data = NULL; | 538 | os.data = NULL; |
555 | os.length = 0; | 539 | os.length = 0; |
556 | } | 540 | } else |
557 | else | 541 | ret->tlsext_hostname = NULL; |
558 | ret->tlsext_hostname=NULL; | ||
559 | #endif /* OPENSSL_NO_TLSEXT */ | 542 | #endif /* OPENSSL_NO_TLSEXT */ |
560 | 543 | ||
561 | #ifndef OPENSSL_NO_PSK | 544 | #ifndef OPENSSL_NO_PSK |
562 | os.length=0; | 545 | os.length = 0; |
563 | os.data=NULL; | 546 | os.data = NULL; |
564 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,7); | 547 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 7); |
565 | if (os.data) | 548 | if (os.data) { |
566 | { | ||
567 | ret->psk_identity_hint = BUF_strndup((char *)os.data, os.length); | 549 | ret->psk_identity_hint = BUF_strndup((char *)os.data, os.length); |
568 | OPENSSL_free(os.data); | 550 | OPENSSL_free(os.data); |
569 | os.data = NULL; | 551 | os.data = NULL; |
570 | os.length = 0; | 552 | os.length = 0; |
571 | } | 553 | } else |
572 | else | 554 | ret->psk_identity_hint = NULL; |
573 | ret->psk_identity_hint=NULL; | ||
574 | 555 | ||
575 | os.length=0; | 556 | os.length = 0; |
576 | os.data=NULL; | 557 | os.data = NULL; |
577 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,8); | 558 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 8); |
578 | if (os.data) | 559 | if (os.data) { |
579 | { | ||
580 | ret->psk_identity = BUF_strndup((char *)os.data, os.length); | 560 | ret->psk_identity = BUF_strndup((char *)os.data, os.length); |
581 | OPENSSL_free(os.data); | 561 | OPENSSL_free(os.data); |
582 | os.data = NULL; | 562 | os.data = NULL; |
583 | os.length = 0; | 563 | os.length = 0; |
584 | } | 564 | } else |
585 | else | 565 | ret->psk_identity = NULL; |
586 | ret->psk_identity=NULL; | ||
587 | #endif /* OPENSSL_NO_PSK */ | 566 | #endif /* OPENSSL_NO_PSK */ |
588 | 567 | ||
589 | #ifndef OPENSSL_NO_TLSEXT | 568 | #ifndef OPENSSL_NO_TLSEXT |
590 | ai.length=0; | 569 | ai.length = 0; |
591 | M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,9); | 570 | M_ASN1_D2I_get_EXP_opt(aip, d2i_ASN1_INTEGER, 9); |
592 | if (ai.data != NULL) | 571 | if (ai.data != NULL) { |
593 | { | 572 | ret->tlsext_tick_lifetime_hint = ASN1_INTEGER_get(aip); |
594 | ret->tlsext_tick_lifetime_hint=ASN1_INTEGER_get(aip); | 573 | OPENSSL_free(ai.data); |
595 | OPENSSL_free(ai.data); ai.data=NULL; ai.length=0; | 574 | ai.data = NULL; |
596 | } | 575 | ai.length = 0; |
597 | else if (ret->tlsext_ticklen && ret->session_id_length) | 576 | } else if (ret->tlsext_ticklen && ret->session_id_length) |
598 | ret->tlsext_tick_lifetime_hint = -1; | 577 | ret->tlsext_tick_lifetime_hint = -1; |
599 | else | 578 | else |
600 | ret->tlsext_tick_lifetime_hint=0; | 579 | ret->tlsext_tick_lifetime_hint = 0; |
601 | os.length=0; | 580 | os.length = 0; |
602 | os.data=NULL; | 581 | os.data = NULL; |
603 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,10); | 582 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 10); |
604 | if (os.data) | 583 | if (os.data) { |
605 | { | ||
606 | ret->tlsext_tick = os.data; | 584 | ret->tlsext_tick = os.data; |
607 | ret->tlsext_ticklen = os.length; | 585 | ret->tlsext_ticklen = os.length; |
608 | os.data = NULL; | 586 | os.data = NULL; |
609 | os.length = 0; | 587 | os.length = 0; |
610 | } | 588 | } else |
611 | else | 589 | ret->tlsext_tick = NULL; |
612 | ret->tlsext_tick=NULL; | ||
613 | #endif /* OPENSSL_NO_TLSEXT */ | 590 | #endif /* OPENSSL_NO_TLSEXT */ |
614 | #ifndef OPENSSL_NO_COMP | 591 | #ifndef OPENSSL_NO_COMP |
615 | os.length=0; | 592 | os.length = 0; |
616 | os.data=NULL; | 593 | os.data = NULL; |
617 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,11); | 594 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 11); |
618 | if (os.data) | 595 | if (os.data) { |
619 | { | ||
620 | ret->compress_meth = os.data[0]; | 596 | ret->compress_meth = os.data[0]; |
621 | OPENSSL_free(os.data); | 597 | OPENSSL_free(os.data); |
622 | os.data = NULL; | 598 | os.data = NULL; |
623 | } | 599 | } |
624 | #endif | 600 | #endif |
625 | 601 | ||
626 | #ifndef OPENSSL_NO_SRP | 602 | #ifndef OPENSSL_NO_SRP |
627 | os.length=0; | 603 | os.length = 0; |
628 | os.data=NULL; | 604 | os.data = NULL; |
629 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,12); | 605 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 12); |
630 | if (os.data) | 606 | if (os.data) { |
631 | { | ||
632 | ret->srp_username = BUF_strndup((char *)os.data, os.length); | 607 | ret->srp_username = BUF_strndup((char *)os.data, os.length); |
633 | OPENSSL_free(os.data); | 608 | OPENSSL_free(os.data); |
634 | os.data = NULL; | 609 | os.data = NULL; |
635 | os.length = 0; | 610 | os.length = 0; |
636 | } | 611 | } else |
637 | else | 612 | ret->srp_username = NULL; |
638 | ret->srp_username=NULL; | ||
639 | #endif /* OPENSSL_NO_SRP */ | 613 | #endif /* OPENSSL_NO_SRP */ |
640 | 614 | ||
641 | M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION); | 615 | M_ASN1_D2I_Finish(a, SSL_SESSION_free, SSL_F_D2I_SSL_SESSION); |
642 | } | 616 | } |
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 1aaddc351f..79eb4ee031 100644 --- a/src/lib/libssl/ssl_cert.c +++ b/src/lib/libssl/ssl_cert.c | |||
@@ -132,36 +132,36 @@ | |||
132 | #include <openssl/bn.h> | 132 | #include <openssl/bn.h> |
133 | #include "ssl_locl.h" | 133 | #include "ssl_locl.h" |
134 | 134 | ||
135 | int SSL_get_ex_data_X509_STORE_CTX_idx(void) | 135 | int |
136 | { | 136 | SSL_get_ex_data_X509_STORE_CTX_idx(void) |
137 | static volatile int ssl_x509_store_ctx_idx= -1; | 137 | { |
138 | static volatile int ssl_x509_store_ctx_idx = -1; | ||
138 | int got_write_lock = 0; | 139 | int got_write_lock = 0; |
139 | 140 | ||
140 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 141 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
141 | 142 | ||
142 | if (ssl_x509_store_ctx_idx < 0) | 143 | if (ssl_x509_store_ctx_idx < 0) { |
143 | { | ||
144 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 144 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
145 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 145 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
146 | got_write_lock = 1; | 146 | got_write_lock = 1; |
147 | 147 | ||
148 | if (ssl_x509_store_ctx_idx < 0) | 148 | if (ssl_x509_store_ctx_idx < 0) { |
149 | { | 149 | ssl_x509_store_ctx_idx = X509_STORE_CTX_get_ex_new_index( |
150 | ssl_x509_store_ctx_idx=X509_STORE_CTX_get_ex_new_index( | 150 | 0, "SSL for verify callback", NULL, NULL, NULL); |
151 | 0,"SSL for verify callback",NULL,NULL,NULL); | ||
152 | } | ||
153 | } | 151 | } |
152 | } | ||
154 | 153 | ||
155 | if (got_write_lock) | 154 | if (got_write_lock) |
156 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 155 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
157 | else | 156 | else |
158 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 157 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
159 | 158 | ||
160 | return ssl_x509_store_ctx_idx; | 159 | return ssl_x509_store_ctx_idx; |
161 | } | 160 | } |
162 | 161 | ||
163 | static void ssl_cert_set_default_md(CERT *cert) | 162 | static void |
164 | { | 163 | ssl_cert_set_default_md(CERT *cert) |
164 | { | ||
165 | /* Set digest values to defaults */ | 165 | /* Set digest values to defaults */ |
166 | #ifndef OPENSSL_NO_DSA | 166 | #ifndef OPENSSL_NO_DSA |
167 | cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1(); | 167 | cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1(); |
@@ -173,37 +173,37 @@ static void ssl_cert_set_default_md(CERT *cert) | |||
173 | #ifndef OPENSSL_NO_ECDSA | 173 | #ifndef OPENSSL_NO_ECDSA |
174 | cert->pkeys[SSL_PKEY_ECC].digest = EVP_sha1(); | 174 | cert->pkeys[SSL_PKEY_ECC].digest = EVP_sha1(); |
175 | #endif | 175 | #endif |
176 | } | 176 | } |
177 | 177 | ||
178 | CERT *ssl_cert_new(void) | 178 | CERT |
179 | { | 179 | *ssl_cert_new(void) |
180 | { | ||
180 | CERT *ret; | 181 | CERT *ret; |
181 | 182 | ||
182 | ret=(CERT *)OPENSSL_malloc(sizeof(CERT)); | 183 | ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); |
183 | if (ret == NULL) | 184 | if (ret == NULL) { |
184 | { | 185 | SSLerr(SSL_F_SSL_CERT_NEW, ERR_R_MALLOC_FAILURE); |
185 | SSLerr(SSL_F_SSL_CERT_NEW,ERR_R_MALLOC_FAILURE); | 186 | return (NULL); |
186 | return(NULL); | 187 | } |
187 | } | 188 | memset(ret, 0, sizeof(CERT)); |
188 | memset(ret,0,sizeof(CERT)); | ||
189 | 189 | ||
190 | ret->key= &(ret->pkeys[SSL_PKEY_RSA_ENC]); | 190 | ret->key = &(ret->pkeys[SSL_PKEY_RSA_ENC]); |
191 | ret->references=1; | 191 | ret->references = 1; |
192 | ssl_cert_set_default_md(ret); | 192 | ssl_cert_set_default_md(ret); |
193 | return(ret); | 193 | return (ret); |
194 | } | 194 | } |
195 | 195 | ||
196 | CERT *ssl_cert_dup(CERT *cert) | 196 | CERT |
197 | { | 197 | *ssl_cert_dup(CERT *cert) |
198 | { | ||
198 | CERT *ret; | 199 | CERT *ret; |
199 | int i; | 200 | int i; |
200 | 201 | ||
201 | ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); | 202 | ret = (CERT *)OPENSSL_malloc(sizeof(CERT)); |
202 | if (ret == NULL) | 203 | if (ret == NULL) { |
203 | { | ||
204 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE); | 204 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE); |
205 | return(NULL); | 205 | return (NULL); |
206 | } | 206 | } |
207 | 207 | ||
208 | memset(ret, 0, sizeof(CERT)); | 208 | memset(ret, 0, sizeof(CERT)); |
209 | 209 | ||
@@ -218,77 +218,64 @@ CERT *ssl_cert_dup(CERT *cert) | |||
218 | ret->export_mask_a = cert->export_mask_a; | 218 | ret->export_mask_a = cert->export_mask_a; |
219 | 219 | ||
220 | #ifndef OPENSSL_NO_RSA | 220 | #ifndef OPENSSL_NO_RSA |
221 | if (cert->rsa_tmp != NULL) | 221 | if (cert->rsa_tmp != NULL) { |
222 | { | ||
223 | RSA_up_ref(cert->rsa_tmp); | 222 | RSA_up_ref(cert->rsa_tmp); |
224 | ret->rsa_tmp = cert->rsa_tmp; | 223 | ret->rsa_tmp = cert->rsa_tmp; |
225 | } | 224 | } |
226 | ret->rsa_tmp_cb = cert->rsa_tmp_cb; | 225 | ret->rsa_tmp_cb = cert->rsa_tmp_cb; |
227 | #endif | 226 | #endif |
228 | 227 | ||
229 | #ifndef OPENSSL_NO_DH | 228 | #ifndef OPENSSL_NO_DH |
230 | if (cert->dh_tmp != NULL) | 229 | if (cert->dh_tmp != NULL) { |
231 | { | ||
232 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); | 230 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); |
233 | if (ret->dh_tmp == NULL) | 231 | if (ret->dh_tmp == NULL) { |
234 | { | ||
235 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_DH_LIB); | 232 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_DH_LIB); |
236 | goto err; | 233 | goto err; |
237 | } | 234 | } |
238 | if (cert->dh_tmp->priv_key) | 235 | if (cert->dh_tmp->priv_key) { |
239 | { | ||
240 | BIGNUM *b = BN_dup(cert->dh_tmp->priv_key); | 236 | BIGNUM *b = BN_dup(cert->dh_tmp->priv_key); |
241 | if (!b) | 237 | if (!b) { |
242 | { | ||
243 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); | 238 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); |
244 | goto err; | 239 | goto err; |
245 | } | ||
246 | ret->dh_tmp->priv_key = b; | ||
247 | } | 240 | } |
248 | if (cert->dh_tmp->pub_key) | 241 | ret->dh_tmp->priv_key = b; |
249 | { | 242 | } |
243 | if (cert->dh_tmp->pub_key) { | ||
250 | BIGNUM *b = BN_dup(cert->dh_tmp->pub_key); | 244 | BIGNUM *b = BN_dup(cert->dh_tmp->pub_key); |
251 | if (!b) | 245 | if (!b) { |
252 | { | ||
253 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); | 246 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_BN_LIB); |
254 | goto err; | 247 | goto err; |
255 | } | ||
256 | ret->dh_tmp->pub_key = b; | ||
257 | } | 248 | } |
249 | ret->dh_tmp->pub_key = b; | ||
258 | } | 250 | } |
251 | } | ||
259 | ret->dh_tmp_cb = cert->dh_tmp_cb; | 252 | ret->dh_tmp_cb = cert->dh_tmp_cb; |
260 | #endif | 253 | #endif |
261 | 254 | ||
262 | #ifndef OPENSSL_NO_ECDH | 255 | #ifndef OPENSSL_NO_ECDH |
263 | if (cert->ecdh_tmp) | 256 | if (cert->ecdh_tmp) { |
264 | { | ||
265 | ret->ecdh_tmp = EC_KEY_dup(cert->ecdh_tmp); | 257 | ret->ecdh_tmp = EC_KEY_dup(cert->ecdh_tmp); |
266 | if (ret->ecdh_tmp == NULL) | 258 | if (ret->ecdh_tmp == NULL) { |
267 | { | ||
268 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_EC_LIB); | 259 | SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_EC_LIB); |
269 | goto err; | 260 | goto err; |
270 | } | ||
271 | } | 261 | } |
262 | } | ||
272 | ret->ecdh_tmp_cb = cert->ecdh_tmp_cb; | 263 | ret->ecdh_tmp_cb = cert->ecdh_tmp_cb; |
273 | #endif | 264 | #endif |
274 | 265 | ||
275 | for (i = 0; i < SSL_PKEY_NUM; i++) | 266 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
276 | { | 267 | if (cert->pkeys[i].x509 != NULL) { |
277 | if (cert->pkeys[i].x509 != NULL) | ||
278 | { | ||
279 | ret->pkeys[i].x509 = cert->pkeys[i].x509; | 268 | ret->pkeys[i].x509 = cert->pkeys[i].x509; |
280 | CRYPTO_add(&ret->pkeys[i].x509->references, 1, | 269 | CRYPTO_add(&ret->pkeys[i].x509->references, 1, |
281 | CRYPTO_LOCK_X509); | 270 | CRYPTO_LOCK_X509); |
282 | } | 271 | } |
283 | 272 | ||
284 | if (cert->pkeys[i].privatekey != NULL) | 273 | if (cert->pkeys[i].privatekey != NULL) { |
285 | { | ||
286 | ret->pkeys[i].privatekey = cert->pkeys[i].privatekey; | 274 | ret->pkeys[i].privatekey = cert->pkeys[i].privatekey; |
287 | CRYPTO_add(&ret->pkeys[i].privatekey->references, 1, | 275 | CRYPTO_add(&ret->pkeys[i].privatekey->references, 1, |
288 | CRYPTO_LOCK_EVP_PKEY); | 276 | CRYPTO_LOCK_EVP_PKEY); |
289 | 277 | ||
290 | switch(i) | 278 | switch (i) { |
291 | { | ||
292 | /* If there was anything special to do for | 279 | /* If there was anything special to do for |
293 | * certain types of keys, we'd do it here. | 280 | * certain types of keys, we'd do it here. |
294 | * (Nothing at the moment, I think.) */ | 281 | * (Nothing at the moment, I think.) */ |
@@ -297,11 +284,11 @@ CERT *ssl_cert_dup(CERT *cert) | |||
297 | case SSL_PKEY_RSA_SIGN: | 284 | case SSL_PKEY_RSA_SIGN: |
298 | /* We have an RSA key. */ | 285 | /* We have an RSA key. */ |
299 | break; | 286 | break; |
300 | 287 | ||
301 | case SSL_PKEY_DSA_SIGN: | 288 | case SSL_PKEY_DSA_SIGN: |
302 | /* We have a DSA key. */ | 289 | /* We have a DSA key. */ |
303 | break; | 290 | break; |
304 | 291 | ||
305 | case SSL_PKEY_DH_RSA: | 292 | case SSL_PKEY_DH_RSA: |
306 | case SSL_PKEY_DH_DSA: | 293 | case SSL_PKEY_DH_DSA: |
307 | /* We have a DH key. */ | 294 | /* We have a DH key. */ |
@@ -314,21 +301,21 @@ CERT *ssl_cert_dup(CERT *cert) | |||
314 | default: | 301 | default: |
315 | /* Can't happen. */ | 302 | /* Can't happen. */ |
316 | SSLerr(SSL_F_SSL_CERT_DUP, SSL_R_LIBRARY_BUG); | 303 | SSLerr(SSL_F_SSL_CERT_DUP, SSL_R_LIBRARY_BUG); |
317 | } | ||
318 | } | 304 | } |
319 | } | 305 | } |
320 | 306 | } | |
307 | |||
321 | /* ret->extra_certs *should* exist, but currently the own certificate | 308 | /* ret->extra_certs *should* exist, but currently the own certificate |
322 | * chain is held inside SSL_CTX */ | 309 | * chain is held inside SSL_CTX */ |
323 | 310 | ||
324 | ret->references=1; | 311 | ret->references = 1; |
325 | /* Set digests to defaults. NB: we don't copy existing values as they | 312 | /* Set digests to defaults. NB: we don't copy existing values as they |
326 | * will be set during handshake. | 313 | * will be set during handshake. |
327 | */ | 314 | */ |
328 | ssl_cert_set_default_md(ret); | 315 | ssl_cert_set_default_md(ret); |
329 | 316 | ||
330 | return(ret); | 317 | return (ret); |
331 | 318 | ||
332 | #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_ECDH) | 319 | #if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_ECDH) |
333 | err: | 320 | err: |
334 | #endif | 321 | #endif |
@@ -345,50 +332,52 @@ err: | |||
345 | EC_KEY_free(ret->ecdh_tmp); | 332 | EC_KEY_free(ret->ecdh_tmp); |
346 | #endif | 333 | #endif |
347 | 334 | ||
348 | for (i = 0; i < SSL_PKEY_NUM; i++) | 335 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
349 | { | ||
350 | if (ret->pkeys[i].x509 != NULL) | 336 | if (ret->pkeys[i].x509 != NULL) |
351 | X509_free(ret->pkeys[i].x509); | 337 | X509_free(ret->pkeys[i].x509); |
352 | if (ret->pkeys[i].privatekey != NULL) | 338 | if (ret->pkeys[i].privatekey != NULL) |
353 | EVP_PKEY_free(ret->pkeys[i].privatekey); | 339 | EVP_PKEY_free(ret->pkeys[i].privatekey); |
354 | } | 340 | } |
355 | 341 | ||
356 | return NULL; | 342 | return NULL; |
357 | } | 343 | } |
358 | 344 | ||
359 | 345 | ||
360 | void ssl_cert_free(CERT *c) | 346 | void |
361 | { | 347 | ssl_cert_free(CERT *c) |
348 | { | ||
362 | int i; | 349 | int i; |
363 | 350 | ||
364 | if(c == NULL) | 351 | if (c == NULL) |
365 | return; | 352 | return; |
366 | 353 | ||
367 | i=CRYPTO_add(&c->references,-1,CRYPTO_LOCK_SSL_CERT); | 354 | i = CRYPTO_add(&c->references, -1, CRYPTO_LOCK_SSL_CERT); |
368 | #ifdef REF_PRINT | 355 | #ifdef REF_PRINT |
369 | REF_PRINT("CERT",c); | 356 | REF_PRINT("CERT", c); |
370 | #endif | 357 | #endif |
371 | if (i > 0) return; | 358 | if (i > 0) |
359 | return; | ||
372 | #ifdef REF_CHECK | 360 | #ifdef REF_CHECK |
373 | if (i < 0) | 361 | if (i < 0) { |
374 | { | 362 | fprintf(stderr, "ssl_cert_free, bad reference count\n"); |
375 | fprintf(stderr,"ssl_cert_free, bad reference count\n"); | ||
376 | abort(); /* ok */ | 363 | abort(); /* ok */ |
377 | } | 364 | } |
378 | #endif | 365 | #endif |
379 | 366 | ||
380 | #ifndef OPENSSL_NO_RSA | 367 | #ifndef OPENSSL_NO_RSA |
381 | if (c->rsa_tmp) RSA_free(c->rsa_tmp); | 368 | if (c->rsa_tmp) |
369 | RSA_free(c->rsa_tmp); | ||
382 | #endif | 370 | #endif |
383 | #ifndef OPENSSL_NO_DH | 371 | #ifndef OPENSSL_NO_DH |
384 | if (c->dh_tmp) DH_free(c->dh_tmp); | 372 | if (c->dh_tmp) |
373 | DH_free(c->dh_tmp); | ||
385 | #endif | 374 | #endif |
386 | #ifndef OPENSSL_NO_ECDH | 375 | #ifndef OPENSSL_NO_ECDH |
387 | if (c->ecdh_tmp) EC_KEY_free(c->ecdh_tmp); | 376 | if (c->ecdh_tmp) |
377 | EC_KEY_free(c->ecdh_tmp); | ||
388 | #endif | 378 | #endif |
389 | 379 | ||
390 | for (i=0; i<SSL_PKEY_NUM; i++) | 380 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
391 | { | ||
392 | if (c->pkeys[i].x509 != NULL) | 381 | if (c->pkeys[i].x509 != NULL) |
393 | X509_free(c->pkeys[i].x509); | 382 | X509_free(c->pkeys[i].x509); |
394 | if (c->pkeys[i].privatekey != NULL) | 383 | if (c->pkeys[i].privatekey != NULL) |
@@ -397,12 +386,13 @@ void ssl_cert_free(CERT *c) | |||
397 | if (c->pkeys[i].publickey != NULL) | 386 | if (c->pkeys[i].publickey != NULL) |
398 | EVP_PKEY_free(c->pkeys[i].publickey); | 387 | EVP_PKEY_free(c->pkeys[i].publickey); |
399 | #endif | 388 | #endif |
400 | } | ||
401 | OPENSSL_free(c); | ||
402 | } | 389 | } |
390 | OPENSSL_free(c); | ||
391 | } | ||
403 | 392 | ||
404 | int ssl_cert_inst(CERT **o) | 393 | int |
405 | { | 394 | ssl_cert_inst(CERT **o) |
395 | { | ||
406 | /* Create a CERT if there isn't already one | 396 | /* Create a CERT if there isn't already one |
407 | * (which cannot really happen, as it is initially created in | 397 | * (which cannot really happen, as it is initially created in |
408 | * SSL_CTX_new; but the earlier code usually allows for that one | 398 | * SSL_CTX_new; but the earlier code usually allows for that one |
@@ -412,44 +402,42 @@ int ssl_cert_inst(CERT **o) | |||
412 | * s->cert being NULL, otherwise we could do without the | 402 | * s->cert being NULL, otherwise we could do without the |
413 | * initialization in SSL_CTX_new). | 403 | * initialization in SSL_CTX_new). |
414 | */ | 404 | */ |
415 | 405 | ||
416 | if (o == NULL) | 406 | if (o == NULL) { |
417 | { | ||
418 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_PASSED_NULL_PARAMETER); | 407 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_PASSED_NULL_PARAMETER); |
419 | return(0); | 408 | return (0); |
420 | } | 409 | } |
421 | if (*o == NULL) | 410 | if (*o == NULL) { |
422 | { | 411 | if ((*o = ssl_cert_new()) == NULL) { |
423 | if ((*o = ssl_cert_new()) == NULL) | ||
424 | { | ||
425 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_MALLOC_FAILURE); | 412 | SSLerr(SSL_F_SSL_CERT_INST, ERR_R_MALLOC_FAILURE); |
426 | return(0); | 413 | return (0); |
427 | } | ||
428 | } | 414 | } |
429 | return(1); | ||
430 | } | 415 | } |
416 | return (1); | ||
417 | } | ||
431 | 418 | ||
432 | 419 | ||
433 | SESS_CERT *ssl_sess_cert_new(void) | 420 | SESS_CERT |
434 | { | 421 | *ssl_sess_cert_new(void) |
422 | { | ||
435 | SESS_CERT *ret; | 423 | SESS_CERT *ret; |
436 | 424 | ||
437 | ret = OPENSSL_malloc(sizeof *ret); | 425 | ret = OPENSSL_malloc(sizeof *ret); |
438 | if (ret == NULL) | 426 | if (ret == NULL) { |
439 | { | ||
440 | SSLerr(SSL_F_SSL_SESS_CERT_NEW, ERR_R_MALLOC_FAILURE); | 427 | SSLerr(SSL_F_SSL_SESS_CERT_NEW, ERR_R_MALLOC_FAILURE); |
441 | return NULL; | 428 | return NULL; |
442 | } | 429 | } |
443 | 430 | ||
444 | memset(ret, 0 ,sizeof *ret); | 431 | memset(ret, 0 , sizeof *ret); |
445 | ret->peer_key = &(ret->peer_pkeys[SSL_PKEY_RSA_ENC]); | 432 | ret->peer_key = &(ret->peer_pkeys[SSL_PKEY_RSA_ENC]); |
446 | ret->references = 1; | 433 | ret->references = 1; |
447 | 434 | ||
448 | return ret; | 435 | return ret; |
449 | } | 436 | } |
450 | 437 | ||
451 | void ssl_sess_cert_free(SESS_CERT *sc) | 438 | void |
452 | { | 439 | ssl_sess_cert_free(SESS_CERT *sc) |
440 | { | ||
453 | int i; | 441 | int i; |
454 | 442 | ||
455 | if (sc == NULL) | 443 | if (sc == NULL) |
@@ -462,27 +450,25 @@ void ssl_sess_cert_free(SESS_CERT *sc) | |||
462 | if (i > 0) | 450 | if (i > 0) |
463 | return; | 451 | return; |
464 | #ifdef REF_CHECK | 452 | #ifdef REF_CHECK |
465 | if (i < 0) | 453 | if (i < 0) { |
466 | { | 454 | fprintf(stderr, "ssl_sess_cert_free, bad reference count\n"); |
467 | fprintf(stderr,"ssl_sess_cert_free, bad reference count\n"); | ||
468 | abort(); /* ok */ | 455 | abort(); /* ok */ |
469 | } | 456 | } |
470 | #endif | 457 | #endif |
471 | 458 | ||
472 | /* i == 0 */ | 459 | /* i == 0 */ |
473 | if (sc->cert_chain != NULL) | 460 | if (sc->cert_chain != NULL) |
474 | sk_X509_pop_free(sc->cert_chain, X509_free); | 461 | sk_X509_pop_free(sc->cert_chain, X509_free); |
475 | for (i = 0; i < SSL_PKEY_NUM; i++) | 462 | for (i = 0; i < SSL_PKEY_NUM; i++) { |
476 | { | ||
477 | if (sc->peer_pkeys[i].x509 != NULL) | 463 | if (sc->peer_pkeys[i].x509 != NULL) |
478 | X509_free(sc->peer_pkeys[i].x509); | 464 | X509_free(sc->peer_pkeys[i].x509); |
479 | #if 0 /* We don't have the peer's private key. These lines are just | 465 | #if 0 /* We don't have the peer's private key. These lines are just |
480 | * here as a reminder that we're still using a not-quite-appropriate | 466 | * here as a reminder that we're still using a not-quite-appropriate |
481 | * data structure. */ | 467 | * data structure. */ |
482 | if (sc->peer_pkeys[i].privatekey != NULL) | 468 | if (sc->peer_pkeys[i].privatekey != NULL) |
483 | EVP_PKEY_free(sc->peer_pkeys[i].privatekey); | 469 | EVP_PKEY_free(sc->peer_pkeys[i].privatekey); |
484 | #endif | 470 | #endif |
485 | } | 471 | } |
486 | 472 | ||
487 | #ifndef OPENSSL_NO_RSA | 473 | #ifndef OPENSSL_NO_RSA |
488 | if (sc->peer_rsa_tmp != NULL) | 474 | if (sc->peer_rsa_tmp != NULL) |
@@ -498,34 +484,35 @@ void ssl_sess_cert_free(SESS_CERT *sc) | |||
498 | #endif | 484 | #endif |
499 | 485 | ||
500 | OPENSSL_free(sc); | 486 | OPENSSL_free(sc); |
501 | } | 487 | } |
502 | 488 | ||
503 | int ssl_set_peer_cert_type(SESS_CERT *sc,int type) | 489 | int |
504 | { | 490 | ssl_set_peer_cert_type(SESS_CERT *sc, int type) |
491 | { | ||
505 | sc->peer_cert_type = type; | 492 | sc->peer_cert_type = type; |
506 | return(1); | 493 | return (1); |
507 | } | 494 | } |
508 | 495 | ||
509 | int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk) | 496 | int |
510 | { | 497 | ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk) |
498 | { | ||
511 | X509 *x; | 499 | X509 *x; |
512 | int i; | 500 | int i; |
513 | X509_STORE_CTX ctx; | 501 | X509_STORE_CTX ctx; |
514 | 502 | ||
515 | if ((sk == NULL) || (sk_X509_num(sk) == 0)) | 503 | if ((sk == NULL) || (sk_X509_num(sk) == 0)) |
516 | return(0); | 504 | return (0); |
517 | 505 | ||
518 | x=sk_X509_value(sk,0); | 506 | x = sk_X509_value(sk, 0); |
519 | if(!X509_STORE_CTX_init(&ctx,s->ctx->cert_store,x,sk)) | 507 | if (!X509_STORE_CTX_init(&ctx, s->ctx->cert_store, x, sk)) { |
520 | { | 508 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN, ERR_R_X509_LIB); |
521 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN,ERR_R_X509_LIB); | 509 | return (0); |
522 | return(0); | 510 | } |
523 | } | ||
524 | #if 0 | 511 | #if 0 |
525 | if (SSL_get_verify_depth(s) >= 0) | 512 | if (SSL_get_verify_depth(s) >= 0) |
526 | X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s)); | 513 | X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s)); |
527 | #endif | 514 | #endif |
528 | X509_STORE_CTX_set_ex_data(&ctx,SSL_get_ex_data_X509_STORE_CTX_idx(),s); | 515 | X509_STORE_CTX_set_ex_data(&ctx, SSL_get_ex_data_X509_STORE_CTX_idx(), s); |
529 | 516 | ||
530 | /* We need to inherit the verify parameters. These can be determined by | 517 | /* We need to inherit the verify parameters. These can be determined by |
531 | * the context: if its a server it will verify SSL client certificates | 518 | * the context: if its a server it will verify SSL client certificates |
@@ -533,7 +520,7 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk) | |||
533 | */ | 520 | */ |
534 | 521 | ||
535 | X509_STORE_CTX_set_default(&ctx, | 522 | X509_STORE_CTX_set_default(&ctx, |
536 | s->server ? "ssl_client" : "ssl_server"); | 523 | s->server ? "ssl_client" : "ssl_server"); |
537 | /* Anything non-default in "param" should overwrite anything in the | 524 | /* Anything non-default in "param" should overwrite anything in the |
538 | * ctx. | 525 | * ctx. |
539 | */ | 526 | */ |
@@ -544,121 +531,127 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk) | |||
544 | 531 | ||
545 | if (s->ctx->app_verify_callback != NULL) | 532 | if (s->ctx->app_verify_callback != NULL) |
546 | #if 1 /* new with OpenSSL 0.9.7 */ | 533 | #if 1 /* new with OpenSSL 0.9.7 */ |
547 | i=s->ctx->app_verify_callback(&ctx, s->ctx->app_verify_arg); | 534 | i = s->ctx->app_verify_callback(&ctx, s->ctx->app_verify_arg); |
535 | |||
548 | #else | 536 | #else |
549 | i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */ | 537 | i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */ |
550 | #endif | 538 | #endif |
551 | else | 539 | else { |
552 | { | ||
553 | #ifndef OPENSSL_NO_X509_VERIFY | 540 | #ifndef OPENSSL_NO_X509_VERIFY |
554 | i=X509_verify_cert(&ctx); | 541 | i = X509_verify_cert(&ctx); |
555 | #else | 542 | #else |
556 | i=0; | 543 | i = 0; |
557 | ctx.error=X509_V_ERR_APPLICATION_VERIFICATION; | 544 | ctx.error = X509_V_ERR_APPLICATION_VERIFICATION; |
558 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN,SSL_R_NO_VERIFY_CALLBACK); | 545 | SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN, SSL_R_NO_VERIFY_CALLBACK); |
559 | #endif | 546 | #endif |
560 | } | 547 | } |
561 | 548 | ||
562 | s->verify_result=ctx.error; | 549 | s->verify_result = ctx.error; |
563 | X509_STORE_CTX_cleanup(&ctx); | 550 | X509_STORE_CTX_cleanup(&ctx); |
564 | 551 | ||
565 | return(i); | 552 | return (i); |
566 | } | 553 | } |
567 | 554 | ||
568 | static void set_client_CA_list(STACK_OF(X509_NAME) **ca_list,STACK_OF(X509_NAME) *name_list) | 555 | static void |
569 | { | 556 | set_client_CA_list(STACK_OF(X509_NAME) **ca_list, STACK_OF(X509_NAME) *name_list) |
557 | { | ||
570 | if (*ca_list != NULL) | 558 | if (*ca_list != NULL) |
571 | sk_X509_NAME_pop_free(*ca_list,X509_NAME_free); | 559 | sk_X509_NAME_pop_free(*ca_list, X509_NAME_free); |
572 | 560 | ||
573 | *ca_list=name_list; | 561 | *ca_list = name_list; |
574 | } | 562 | } |
575 | 563 | ||
576 | STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk) | 564 | STACK_OF(X509_NAME) |
577 | { | 565 | *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk) |
566 | { | ||
578 | int i; | 567 | int i; |
579 | STACK_OF(X509_NAME) *ret; | 568 | STACK_OF(X509_NAME) *ret; |
580 | X509_NAME *name; | 569 | X509_NAME *name; |
581 | 570 | ||
582 | ret=sk_X509_NAME_new_null(); | 571 | ret = sk_X509_NAME_new_null(); |
583 | for (i=0; i<sk_X509_NAME_num(sk); i++) | 572 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { |
584 | { | 573 | name = X509_NAME_dup(sk_X509_NAME_value(sk, i)); |
585 | name=X509_NAME_dup(sk_X509_NAME_value(sk,i)); | 574 | if ((name == NULL) || !sk_X509_NAME_push(ret, name)) { |
586 | if ((name == NULL) || !sk_X509_NAME_push(ret,name)) | 575 | sk_X509_NAME_pop_free(ret, X509_NAME_free); |
587 | { | 576 | return (NULL); |
588 | sk_X509_NAME_pop_free(ret,X509_NAME_free); | ||
589 | return(NULL); | ||
590 | } | ||
591 | } | 577 | } |
592 | return(ret); | ||
593 | } | 578 | } |
594 | 579 | return (ret); | |
595 | void SSL_set_client_CA_list(SSL *s,STACK_OF(X509_NAME) *name_list) | 580 | } |
596 | { | 581 | |
597 | set_client_CA_list(&(s->client_CA),name_list); | 582 | void |
598 | } | 583 | SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list) |
599 | 584 | { | |
600 | void SSL_CTX_set_client_CA_list(SSL_CTX *ctx,STACK_OF(X509_NAME) *name_list) | 585 | set_client_CA_list(&(s->client_CA), name_list); |
601 | { | 586 | } |
602 | set_client_CA_list(&(ctx->client_CA),name_list); | 587 | |
603 | } | 588 | void |
604 | 589 | SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list) | |
605 | STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx) | 590 | { |
606 | { | 591 | set_client_CA_list(&(ctx->client_CA), name_list); |
607 | return(ctx->client_CA); | 592 | } |
608 | } | 593 | |
609 | 594 | STACK_OF(X509_NAME) | |
610 | STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s) | 595 | *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx) |
611 | { | 596 | { |
597 | return (ctx->client_CA); | ||
598 | } | ||
599 | |||
600 | STACK_OF(X509_NAME) | ||
601 | *SSL_get_client_CA_list(const SSL *s) | ||
602 | { | ||
612 | if (s->type == SSL_ST_CONNECT) | 603 | if (s->type == SSL_ST_CONNECT) |
613 | { /* we are in the client */ | 604 | { /* we are in the client */ |
614 | if (((s->version>>8) == SSL3_VERSION_MAJOR) && | 605 | if (((s->version >> 8) == SSL3_VERSION_MAJOR) && |
615 | (s->s3 != NULL)) | 606 | (s->s3 != NULL)) |
616 | return(s->s3->tmp.ca_names); | 607 | return (s->s3->tmp.ca_names); |
617 | else | 608 | else |
618 | return(NULL); | 609 | return (NULL); |
619 | } | 610 | } else { |
620 | else | ||
621 | { | ||
622 | if (s->client_CA != NULL) | 611 | if (s->client_CA != NULL) |
623 | return(s->client_CA); | 612 | return (s->client_CA); |
624 | else | 613 | else |
625 | return(s->ctx->client_CA); | 614 | return (s->ctx->client_CA); |
626 | } | ||
627 | } | 615 | } |
616 | } | ||
628 | 617 | ||
629 | static int add_client_CA(STACK_OF(X509_NAME) **sk,X509 *x) | 618 | static int |
630 | { | 619 | add_client_CA(STACK_OF(X509_NAME) **sk, X509 *x) |
620 | { | ||
631 | X509_NAME *name; | 621 | X509_NAME *name; |
632 | 622 | ||
633 | if (x == NULL) return(0); | 623 | if (x == NULL) |
634 | if ((*sk == NULL) && ((*sk=sk_X509_NAME_new_null()) == NULL)) | 624 | return (0); |
635 | return(0); | 625 | if ((*sk == NULL) && ((*sk = sk_X509_NAME_new_null()) == NULL)) |
636 | 626 | return (0); | |
637 | if ((name=X509_NAME_dup(X509_get_subject_name(x))) == NULL) | ||
638 | return(0); | ||
639 | |||
640 | if (!sk_X509_NAME_push(*sk,name)) | ||
641 | { | ||
642 | X509_NAME_free(name); | ||
643 | return(0); | ||
644 | } | ||
645 | return(1); | ||
646 | } | ||
647 | 627 | ||
648 | int SSL_add_client_CA(SSL *ssl,X509 *x) | 628 | if ((name = X509_NAME_dup(X509_get_subject_name(x))) == NULL) |
649 | { | 629 | return (0); |
650 | return(add_client_CA(&(ssl->client_CA),x)); | ||
651 | } | ||
652 | 630 | ||
653 | int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x) | 631 | if (!sk_X509_NAME_push(*sk, name)) { |
654 | { | 632 | X509_NAME_free(name); |
655 | return(add_client_CA(&(ctx->client_CA),x)); | 633 | return (0); |
656 | } | ||
657 | |||
658 | static int xname_cmp(const X509_NAME * const *a, const X509_NAME * const *b) | ||
659 | { | ||
660 | return(X509_NAME_cmp(*a,*b)); | ||
661 | } | 634 | } |
635 | return (1); | ||
636 | } | ||
637 | |||
638 | int | ||
639 | SSL_add_client_CA(SSL *ssl, X509 *x) | ||
640 | { | ||
641 | return (add_client_CA(&(ssl->client_CA), x)); | ||
642 | } | ||
643 | |||
644 | int | ||
645 | SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x) | ||
646 | { | ||
647 | return (add_client_CA(&(ctx->client_CA), x)); | ||
648 | } | ||
649 | |||
650 | static int | ||
651 | xname_cmp(const X509_NAME * const *a, const X509_NAME * const *b) | ||
652 | { | ||
653 | return (X509_NAME_cmp(*a, *b)); | ||
654 | } | ||
662 | 655 | ||
663 | #ifndef OPENSSL_NO_STDIO | 656 | #ifndef OPENSSL_NO_STDIO |
664 | /*! | 657 | /*! |
@@ -669,65 +662,65 @@ static int xname_cmp(const X509_NAME * const *a, const X509_NAME * const *b) | |||
669 | * \param file the file containing one or more certs. | 662 | * \param file the file containing one or more certs. |
670 | * \return a ::STACK containing the certs. | 663 | * \return a ::STACK containing the certs. |
671 | */ | 664 | */ |
672 | STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file) | 665 | STACK_OF(X509_NAME) |
673 | { | 666 | *SSL_load_client_CA_file(const char *file) |
667 | { | ||
674 | BIO *in; | 668 | BIO *in; |
675 | X509 *x=NULL; | 669 | X509 *x = NULL; |
676 | X509_NAME *xn=NULL; | 670 | X509_NAME *xn = NULL; |
677 | STACK_OF(X509_NAME) *ret = NULL,*sk; | 671 | STACK_OF(X509_NAME) *ret = NULL, *sk; |
678 | 672 | ||
679 | sk=sk_X509_NAME_new(xname_cmp); | 673 | sk = sk_X509_NAME_new(xname_cmp); |
680 | 674 | ||
681 | in=BIO_new(BIO_s_file_internal()); | 675 | in = BIO_new(BIO_s_file_internal()); |
682 | 676 | ||
683 | if ((sk == NULL) || (in == NULL)) | 677 | if ((sk == NULL) || (in == NULL)) { |
684 | { | 678 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE, ERR_R_MALLOC_FAILURE); |
685 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE); | ||
686 | goto err; | 679 | goto err; |
687 | } | 680 | } |
688 | 681 | ||
689 | if (!BIO_read_filename(in,file)) | 682 | if (!BIO_read_filename(in, file)) |
690 | goto err; | 683 | goto err; |
691 | 684 | ||
692 | for (;;) | 685 | for (;;) { |
693 | { | 686 | if (PEM_read_bio_X509(in, &x, NULL, NULL) == NULL) |
694 | if (PEM_read_bio_X509(in,&x,NULL,NULL) == NULL) | ||
695 | break; | 687 | break; |
696 | if (ret == NULL) | 688 | if (ret == NULL) { |
697 | { | ||
698 | ret = sk_X509_NAME_new_null(); | 689 | ret = sk_X509_NAME_new_null(); |
699 | if (ret == NULL) | 690 | if (ret == NULL) { |
700 | { | 691 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE, ERR_R_MALLOC_FAILURE); |
701 | SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE); | ||
702 | goto err; | 692 | goto err; |
703 | } | ||
704 | } | 693 | } |
705 | if ((xn=X509_get_subject_name(x)) == NULL) goto err; | 694 | } |
706 | /* check for duplicates */ | 695 | if ((xn = X509_get_subject_name(x)) == NULL) goto err; |
707 | xn=X509_NAME_dup(xn); | 696 | /* check for duplicates */ |
708 | if (xn == NULL) goto err; | 697 | xn = X509_NAME_dup(xn); |
709 | if (sk_X509_NAME_find(sk,xn) >= 0) | 698 | if (xn == NULL) |
699 | goto err; | ||
700 | if (sk_X509_NAME_find(sk, xn) >= 0) | ||
710 | X509_NAME_free(xn); | 701 | X509_NAME_free(xn); |
711 | else | 702 | else { |
712 | { | 703 | sk_X509_NAME_push(sk, xn); |
713 | sk_X509_NAME_push(sk,xn); | 704 | sk_X509_NAME_push(ret, xn); |
714 | sk_X509_NAME_push(ret,xn); | ||
715 | } | ||
716 | } | 705 | } |
706 | } | ||
717 | 707 | ||
718 | if (0) | 708 | if (0) { |
719 | { | ||
720 | err: | 709 | err: |
721 | if (ret != NULL) sk_X509_NAME_pop_free(ret,X509_NAME_free); | 710 | if (ret != NULL) |
722 | ret=NULL; | 711 | sk_X509_NAME_pop_free(ret, X509_NAME_free); |
723 | } | 712 | ret = NULL; |
724 | if (sk != NULL) sk_X509_NAME_free(sk); | 713 | } |
725 | if (in != NULL) BIO_free(in); | 714 | if (sk != NULL) |
726 | if (x != NULL) X509_free(x); | 715 | sk_X509_NAME_free(sk); |
716 | if (in != NULL) | ||
717 | BIO_free(in); | ||
718 | if (x != NULL) | ||
719 | X509_free(x); | ||
727 | if (ret != NULL) | 720 | if (ret != NULL) |
728 | ERR_clear_error(); | 721 | ERR_clear_error(); |
729 | return(ret); | 722 | return (ret); |
730 | } | 723 | } |
731 | #endif | 724 | #endif |
732 | 725 | ||
733 | /*! | 726 | /*! |
@@ -739,57 +732,56 @@ err: | |||
739 | * certs may have been added to \c stack. | 732 | * certs may have been added to \c stack. |
740 | */ | 733 | */ |
741 | 734 | ||
742 | int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | 735 | int |
743 | const char *file) | 736 | SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, |
744 | { | 737 | const char *file) |
738 | { | ||
745 | BIO *in; | 739 | BIO *in; |
746 | X509 *x=NULL; | 740 | X509 *x = NULL; |
747 | X509_NAME *xn=NULL; | 741 | X509_NAME *xn = NULL; |
748 | int ret=1; | 742 | int ret = 1; |
749 | int (*oldcmp)(const X509_NAME * const *a, const X509_NAME * const *b); | 743 | int (*oldcmp)(const X509_NAME * const *a, const X509_NAME * const *b); |
750 | 744 | ||
751 | oldcmp=sk_X509_NAME_set_cmp_func(stack,xname_cmp); | 745 | oldcmp = sk_X509_NAME_set_cmp_func(stack, xname_cmp); |
752 | 746 | ||
753 | in=BIO_new(BIO_s_file_internal()); | 747 | in = BIO_new(BIO_s_file_internal()); |
754 | 748 | ||
755 | if (in == NULL) | 749 | if (in == NULL) { |
756 | { | 750 | SSLerr(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK, ERR_R_MALLOC_FAILURE); |
757 | SSLerr(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK,ERR_R_MALLOC_FAILURE); | ||
758 | goto err; | 751 | goto err; |
759 | } | 752 | } |
760 | 753 | ||
761 | if (!BIO_read_filename(in,file)) | 754 | if (!BIO_read_filename(in, file)) |
762 | goto err; | 755 | goto err; |
763 | 756 | ||
764 | for (;;) | 757 | for (;;) { |
765 | { | 758 | if (PEM_read_bio_X509(in, &x, NULL, NULL) == NULL) |
766 | if (PEM_read_bio_X509(in,&x,NULL,NULL) == NULL) | ||
767 | break; | 759 | break; |
768 | if ((xn=X509_get_subject_name(x)) == NULL) goto err; | 760 | if ((xn = X509_get_subject_name(x)) == NULL) goto err; |
769 | xn=X509_NAME_dup(xn); | 761 | xn = X509_NAME_dup(xn); |
770 | if (xn == NULL) goto err; | 762 | if (xn == NULL) |
771 | if (sk_X509_NAME_find(stack,xn) >= 0) | 763 | goto err; |
764 | if (sk_X509_NAME_find(stack, xn) >= 0) | ||
772 | X509_NAME_free(xn); | 765 | X509_NAME_free(xn); |
773 | else | 766 | else |
774 | sk_X509_NAME_push(stack,xn); | 767 | sk_X509_NAME_push(stack, xn); |
775 | } | 768 | } |
776 | 769 | ||
777 | ERR_clear_error(); | 770 | ERR_clear_error(); |
778 | 771 | ||
779 | if (0) | 772 | if (0) { |
780 | { | ||
781 | err: | 773 | err: |
782 | ret=0; | 774 | ret = 0; |
783 | } | 775 | } |
784 | if(in != NULL) | 776 | if (in != NULL) |
785 | BIO_free(in); | 777 | BIO_free(in); |
786 | if(x != NULL) | 778 | if (x != NULL) |
787 | X509_free(x); | 779 | X509_free(x); |
788 | 780 | ||
789 | (void)sk_X509_NAME_set_cmp_func(stack,oldcmp); | 781 | (void)sk_X509_NAME_set_cmp_func(stack, oldcmp); |
790 | 782 | ||
791 | return ret; | 783 | return ret; |
792 | } | 784 | } |
793 | 785 | ||
794 | /*! | 786 | /*! |
795 | * Add a directory of certs to a stack. | 787 | * Add a directory of certs to a stack. |
@@ -802,9 +794,10 @@ err: | |||
802 | * certs may have been added to \c stack. | 794 | * certs may have been added to \c stack. |
803 | */ | 795 | */ |
804 | 796 | ||
805 | int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | 797 | int |
806 | const char *dir) | 798 | SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, |
807 | { | 799 | const char *dir) |
800 | { | ||
808 | OPENSSL_DIR_CTX *d = NULL; | 801 | OPENSSL_DIR_CTX *d = NULL; |
809 | const char *filename; | 802 | const char *filename; |
810 | int ret = 0; | 803 | int ret = 0; |
@@ -813,36 +806,34 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | |||
813 | 806 | ||
814 | /* Note that a side effect is that the CAs will be sorted by name */ | 807 | /* Note that a side effect is that the CAs will be sorted by name */ |
815 | 808 | ||
816 | while((filename = OPENSSL_DIR_read(&d, dir))) | 809 | while ((filename = OPENSSL_DIR_read(&d, dir))) { |
817 | { | ||
818 | char buf[1024]; | 810 | char buf[1024]; |
819 | int r; | 811 | int r; |
820 | 812 | ||
821 | if(strlen(dir)+strlen(filename)+2 > sizeof buf) | 813 | if (strlen(dir) + strlen(filename) + 2 > sizeof buf) { |
822 | { | 814 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, SSL_R_PATH_TOO_LONG); |
823 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK,SSL_R_PATH_TOO_LONG); | ||
824 | goto err; | 815 | goto err; |
825 | } | 816 | } |
826 | r = BIO_snprintf(buf,sizeof buf,"%s/%s",dir,filename); | 817 | r = BIO_snprintf(buf, sizeof buf, "%s/%s", dir, filename); |
827 | if (r <= 0 || r >= (int)sizeof(buf)) | 818 | if (r <= 0 || r >= (int)sizeof(buf)) |
828 | goto err; | 819 | goto err; |
829 | if(!SSL_add_file_cert_subjects_to_stack(stack,buf)) | 820 | if (!SSL_add_file_cert_subjects_to_stack(stack, buf)) |
830 | goto err; | 821 | goto err; |
831 | } | 822 | } |
832 | 823 | ||
833 | if (errno) | 824 | if (errno) { |
834 | { | ||
835 | SYSerr(SYS_F_OPENDIR, errno); | 825 | SYSerr(SYS_F_OPENDIR, errno); |
836 | ERR_add_error_data(3, "OPENSSL_DIR_read(&ctx, '", dir, "')"); | 826 | ERR_add_error_data(3, "OPENSSL_DIR_read(&ctx, '", dir, "')"); |
837 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB); | 827 | SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB); |
838 | goto err; | 828 | goto err; |
839 | } | 829 | } |
840 | 830 | ||
841 | ret = 1; | 831 | ret = 1; |
842 | 832 | ||
843 | err: | 833 | err: |
844 | if (d) OPENSSL_DIR_end(&d); | 834 | if (d) |
835 | OPENSSL_DIR_end(&d); | ||
845 | CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); | 836 | CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); |
846 | return ret; | 837 | return ret; |
847 | } | 838 | } |
848 | 839 | ||
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c index 0aba8e048c..f37c70cf91 100644 --- a/src/lib/libssl/ssl_ciph.c +++ b/src/lib/libssl/ssl_ciph.c | |||
@@ -167,15 +167,15 @@ | |||
167 | #define SSL_ENC_NUM_IDX 14 | 167 | #define SSL_ENC_NUM_IDX 14 |
168 | 168 | ||
169 | 169 | ||
170 | static const EVP_CIPHER *ssl_cipher_methods[SSL_ENC_NUM_IDX]={ | 170 | static const EVP_CIPHER *ssl_cipher_methods[SSL_ENC_NUM_IDX] = { |
171 | NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL | 171 | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL |
172 | }; | 172 | }; |
173 | 173 | ||
174 | #define SSL_COMP_NULL_IDX 0 | 174 | #define SSL_COMP_NULL_IDX 0 |
175 | #define SSL_COMP_ZLIB_IDX 1 | 175 | #define SSL_COMP_ZLIB_IDX 1 |
176 | #define SSL_COMP_NUM_IDX 2 | 176 | #define SSL_COMP_NUM_IDX 2 |
177 | 177 | ||
178 | static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL; | 178 | static STACK_OF(SSL_COMP) *ssl_comp_methods = NULL; |
179 | 179 | ||
180 | #define SSL_MD_MD5_IDX 0 | 180 | #define SSL_MD_MD5_IDX 0 |
181 | #define SSL_MD_SHA1_IDX 1 | 181 | #define SSL_MD_SHA1_IDX 1 |
@@ -187,27 +187,27 @@ static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL; | |||
187 | * defined in the | 187 | * defined in the |
188 | * ssl_locl.h */ | 188 | * ssl_locl.h */ |
189 | #define SSL_MD_NUM_IDX SSL_MAX_DIGEST | 189 | #define SSL_MD_NUM_IDX SSL_MAX_DIGEST |
190 | static const EVP_MD *ssl_digest_methods[SSL_MD_NUM_IDX]={ | 190 | static const EVP_MD *ssl_digest_methods[SSL_MD_NUM_IDX] = { |
191 | NULL,NULL,NULL,NULL,NULL,NULL | 191 | NULL, NULL, NULL, NULL, NULL, NULL |
192 | }; | 192 | }; |
193 | /* PKEY_TYPE for GOST89MAC is known in advance, but, because | 193 | /* PKEY_TYPE for GOST89MAC is known in advance, but, because |
194 | * implementation is engine-provided, we'll fill it only if | 194 | * implementation is engine-provided, we'll fill it only if |
195 | * corresponding EVP_PKEY_METHOD is found | 195 | * corresponding EVP_PKEY_METHOD is found |
196 | */ | 196 | */ |
197 | static int ssl_mac_pkey_id[SSL_MD_NUM_IDX]={ | 197 | static int ssl_mac_pkey_id[SSL_MD_NUM_IDX] = { |
198 | EVP_PKEY_HMAC,EVP_PKEY_HMAC,EVP_PKEY_HMAC,NID_undef, | 198 | EVP_PKEY_HMAC, EVP_PKEY_HMAC, EVP_PKEY_HMAC, NID_undef, |
199 | EVP_PKEY_HMAC,EVP_PKEY_HMAC | 199 | EVP_PKEY_HMAC, EVP_PKEY_HMAC |
200 | }; | 200 | }; |
201 | 201 | ||
202 | static int ssl_mac_secret_size[SSL_MD_NUM_IDX]={ | 202 | static int ssl_mac_secret_size[SSL_MD_NUM_IDX] = { |
203 | 0,0,0,0,0,0 | 203 | 0, 0, 0, 0, 0, 0 |
204 | }; | 204 | }; |
205 | 205 | ||
206 | static int ssl_handshake_digest_flag[SSL_MD_NUM_IDX]={ | 206 | static int ssl_handshake_digest_flag[SSL_MD_NUM_IDX] = { |
207 | SSL_HANDSHAKE_MAC_MD5,SSL_HANDSHAKE_MAC_SHA, | 207 | SSL_HANDSHAKE_MAC_MD5, SSL_HANDSHAKE_MAC_SHA, |
208 | SSL_HANDSHAKE_MAC_GOST94, 0, SSL_HANDSHAKE_MAC_SHA256, | 208 | SSL_HANDSHAKE_MAC_GOST94, 0, SSL_HANDSHAKE_MAC_SHA256, |
209 | SSL_HANDSHAKE_MAC_SHA384 | 209 | SSL_HANDSHAKE_MAC_SHA384 |
210 | }; | 210 | }; |
211 | 211 | ||
212 | #define CIPHER_ADD 1 | 212 | #define CIPHER_ADD 1 |
213 | #define CIPHER_KILL 2 | 213 | #define CIPHER_KILL 2 |
@@ -215,376 +215,371 @@ static int ssl_handshake_digest_flag[SSL_MD_NUM_IDX]={ | |||
215 | #define CIPHER_ORD 4 | 215 | #define CIPHER_ORD 4 |
216 | #define CIPHER_SPECIAL 5 | 216 | #define CIPHER_SPECIAL 5 |
217 | 217 | ||
218 | typedef struct cipher_order_st | 218 | typedef struct cipher_order_st { |
219 | { | ||
220 | const SSL_CIPHER *cipher; | 219 | const SSL_CIPHER *cipher; |
221 | int active; | 220 | int active; |
222 | int dead; | 221 | int dead; |
223 | struct cipher_order_st *next,*prev; | 222 | struct cipher_order_st *next, *prev; |
224 | } CIPHER_ORDER; | 223 | } CIPHER_ORDER; |
225 | 224 | ||
226 | static const SSL_CIPHER cipher_aliases[]={ | 225 | static const SSL_CIPHER cipher_aliases[] = { |
227 | /* "ALL" doesn't include eNULL (must be specifically enabled) */ | 226 | /* "ALL" doesn't include eNULL (must be specifically enabled) */ |
228 | {0,SSL_TXT_ALL,0, 0,0,~SSL_eNULL,0,0,0,0,0,0}, | 227 | {0, SSL_TXT_ALL, 0, 0, 0,~SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
229 | /* "COMPLEMENTOFALL" */ | 228 | /* "COMPLEMENTOFALL" */ |
230 | {0,SSL_TXT_CMPALL,0, 0,0,SSL_eNULL,0,0,0,0,0,0}, | 229 | {0, SSL_TXT_CMPALL, 0, 0, 0, SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
231 | 230 | ||
232 | /* "COMPLEMENTOFDEFAULT" (does *not* include ciphersuites not found in ALL!) */ | 231 | /* "COMPLEMENTOFDEFAULT" (does *not* include ciphersuites not found in ALL!) */ |
233 | {0,SSL_TXT_CMPDEF,0, SSL_kEDH|SSL_kEECDH,SSL_aNULL,~SSL_eNULL,0,0,0,0,0,0}, | 232 | {0, SSL_TXT_CMPDEF, 0, SSL_kEDH|SSL_kEECDH, SSL_aNULL,~SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
234 | 233 | ||
235 | /* key exchange aliases | 234 | /* key exchange aliases |
236 | * (some of those using only a single bit here combine | 235 | * (some of those using only a single bit here combine |
237 | * multiple key exchange algs according to the RFCs, | 236 | * multiple key exchange algs according to the RFCs, |
238 | * e.g. kEDH combines DHE_DSS and DHE_RSA) */ | 237 | * e.g. kEDH combines DHE_DSS and DHE_RSA) */ |
239 | {0,SSL_TXT_kRSA,0, SSL_kRSA, 0,0,0,0,0,0,0,0}, | 238 | {0, SSL_TXT_kRSA, 0, SSL_kRSA, 0, 0, 0, 0, 0, 0, 0, 0}, |
240 | 239 | ||
241 | {0,SSL_TXT_kDHr,0, SSL_kDHr, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 240 | {0,SSL_TXT_kDHr,0, SSL_kDHr, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
242 | {0,SSL_TXT_kDHd,0, SSL_kDHd, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 241 | {0,SSL_TXT_kDHd,0, SSL_kDHd, 0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
243 | {0,SSL_TXT_kDH,0, SSL_kDHr|SSL_kDHd,0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 242 | {0,SSL_TXT_kDH,0, SSL_kDHr|SSL_kDHd,0,0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
244 | {0,SSL_TXT_kEDH,0, SSL_kEDH, 0,0,0,0,0,0,0,0}, | 243 | {0, SSL_TXT_kEDH, 0, SSL_kEDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
245 | {0,SSL_TXT_DH,0, SSL_kDHr|SSL_kDHd|SSL_kEDH,0,0,0,0,0,0,0,0}, | 244 | {0, SSL_TXT_DH, 0, SSL_kDHr|SSL_kDHd|SSL_kEDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
246 | 245 | ||
247 | {0,SSL_TXT_kKRB5,0, SSL_kKRB5, 0,0,0,0,0,0,0,0}, | 246 | {0, SSL_TXT_kKRB5, 0, SSL_kKRB5, 0, 0, 0, 0, 0, 0, 0, 0}, |
248 | 247 | ||
249 | {0,SSL_TXT_kECDHr,0, SSL_kECDHr,0,0,0,0,0,0,0,0}, | 248 | {0, SSL_TXT_kECDHr, 0, SSL_kECDHr, 0, 0, 0, 0, 0, 0, 0, 0}, |
250 | {0,SSL_TXT_kECDHe,0, SSL_kECDHe,0,0,0,0,0,0,0,0}, | 249 | {0, SSL_TXT_kECDHe, 0, SSL_kECDHe, 0, 0, 0, 0, 0, 0, 0, 0}, |
251 | {0,SSL_TXT_kECDH,0, SSL_kECDHr|SSL_kECDHe,0,0,0,0,0,0,0,0}, | 250 | {0, SSL_TXT_kECDH, 0, SSL_kECDHr|SSL_kECDHe, 0, 0, 0, 0, 0, 0, 0, 0}, |
252 | {0,SSL_TXT_kEECDH,0, SSL_kEECDH,0,0,0,0,0,0,0,0}, | 251 | {0, SSL_TXT_kEECDH, 0, SSL_kEECDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
253 | {0,SSL_TXT_ECDH,0, SSL_kECDHr|SSL_kECDHe|SSL_kEECDH,0,0,0,0,0,0,0,0}, | 252 | {0, SSL_TXT_ECDH, 0, SSL_kECDHr|SSL_kECDHe|SSL_kEECDH, 0, 0, 0, 0, 0, 0, 0, 0}, |
254 | 253 | ||
255 | {0,SSL_TXT_kPSK,0, SSL_kPSK, 0,0,0,0,0,0,0,0}, | 254 | {0, SSL_TXT_kPSK, 0, SSL_kPSK, 0, 0, 0, 0, 0, 0, 0, 0}, |
256 | {0,SSL_TXT_kSRP,0, SSL_kSRP, 0,0,0,0,0,0,0,0}, | 255 | {0, SSL_TXT_kSRP, 0, SSL_kSRP, 0, 0, 0, 0, 0, 0, 0, 0}, |
257 | {0,SSL_TXT_kGOST,0, SSL_kGOST,0,0,0,0,0,0,0,0}, | 256 | {0, SSL_TXT_kGOST, 0, SSL_kGOST, 0, 0, 0, 0, 0, 0, 0, 0}, |
258 | 257 | ||
259 | /* server authentication aliases */ | 258 | /* server authentication aliases */ |
260 | {0,SSL_TXT_aRSA,0, 0,SSL_aRSA, 0,0,0,0,0,0,0}, | 259 | {0, SSL_TXT_aRSA, 0, 0, SSL_aRSA, 0, 0, 0, 0, 0, 0, 0}, |
261 | {0,SSL_TXT_aDSS,0, 0,SSL_aDSS, 0,0,0,0,0,0,0}, | 260 | {0, SSL_TXT_aDSS, 0, 0, SSL_aDSS, 0, 0, 0, 0, 0, 0, 0}, |
262 | {0,SSL_TXT_DSS,0, 0,SSL_aDSS, 0,0,0,0,0,0,0}, | 261 | {0, SSL_TXT_DSS, 0, 0, SSL_aDSS, 0, 0, 0, 0, 0, 0, 0}, |
263 | {0,SSL_TXT_aKRB5,0, 0,SSL_aKRB5, 0,0,0,0,0,0,0}, | 262 | {0, SSL_TXT_aKRB5, 0, 0, SSL_aKRB5, 0, 0, 0, 0, 0, 0, 0}, |
264 | {0,SSL_TXT_aNULL,0, 0,SSL_aNULL, 0,0,0,0,0,0,0}, | 263 | {0, SSL_TXT_aNULL, 0, 0, SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
265 | {0,SSL_TXT_aDH,0, 0,SSL_aDH, 0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ | 264 | {0,SSL_TXT_aDH,0, 0,SSL_aDH, 0,0,0,0,0,0,0}, /* no such ciphersuites supported! */ |
266 | {0,SSL_TXT_aECDH,0, 0,SSL_aECDH, 0,0,0,0,0,0,0}, | 265 | {0, SSL_TXT_aECDH, 0, 0, SSL_aECDH, 0, 0, 0, 0, 0, 0, 0}, |
267 | {0,SSL_TXT_aECDSA,0, 0,SSL_aECDSA,0,0,0,0,0,0,0}, | 266 | {0, SSL_TXT_aECDSA, 0, 0, SSL_aECDSA, 0, 0, 0, 0, 0, 0, 0}, |
268 | {0,SSL_TXT_ECDSA,0, 0,SSL_aECDSA, 0,0,0,0,0,0,0}, | 267 | {0, SSL_TXT_ECDSA, 0, 0, SSL_aECDSA, 0, 0, 0, 0, 0, 0, 0}, |
269 | {0,SSL_TXT_aPSK,0, 0,SSL_aPSK, 0,0,0,0,0,0,0}, | 268 | {0, SSL_TXT_aPSK, 0, 0, SSL_aPSK, 0, 0, 0, 0, 0, 0, 0}, |
270 | {0,SSL_TXT_aGOST94,0,0,SSL_aGOST94,0,0,0,0,0,0,0}, | 269 | {0, SSL_TXT_aGOST94, 0, 0, SSL_aGOST94, 0, 0, 0, 0, 0, 0, 0}, |
271 | {0,SSL_TXT_aGOST01,0,0,SSL_aGOST01,0,0,0,0,0,0,0}, | 270 | {0, SSL_TXT_aGOST01, 0, 0, SSL_aGOST01, 0, 0, 0, 0, 0, 0, 0}, |
272 | {0,SSL_TXT_aGOST,0,0,SSL_aGOST94|SSL_aGOST01,0,0,0,0,0,0,0}, | 271 | {0, SSL_TXT_aGOST, 0, 0, SSL_aGOST94|SSL_aGOST01, 0, 0, 0, 0, 0, 0, 0}, |
273 | 272 | ||
274 | /* aliases combining key exchange and server authentication */ | 273 | /* aliases combining key exchange and server authentication */ |
275 | {0,SSL_TXT_EDH,0, SSL_kEDH,~SSL_aNULL,0,0,0,0,0,0,0}, | 274 | {0, SSL_TXT_EDH, 0, SSL_kEDH,~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
276 | {0,SSL_TXT_EECDH,0, SSL_kEECDH,~SSL_aNULL,0,0,0,0,0,0,0}, | 275 | {0, SSL_TXT_EECDH, 0, SSL_kEECDH,~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
277 | {0,SSL_TXT_NULL,0, 0,0,SSL_eNULL, 0,0,0,0,0,0}, | 276 | {0, SSL_TXT_NULL, 0, 0, 0, SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
278 | {0,SSL_TXT_KRB5,0, SSL_kKRB5,SSL_aKRB5,0,0,0,0,0,0,0}, | 277 | {0, SSL_TXT_KRB5, 0, SSL_kKRB5, SSL_aKRB5, 0, 0, 0, 0, 0, 0, 0}, |
279 | {0,SSL_TXT_RSA,0, SSL_kRSA,SSL_aRSA,0,0,0,0,0,0,0}, | 278 | {0, SSL_TXT_RSA, 0, SSL_kRSA, SSL_aRSA, 0, 0, 0, 0, 0, 0, 0}, |
280 | {0,SSL_TXT_ADH,0, SSL_kEDH,SSL_aNULL,0,0,0,0,0,0,0}, | 279 | {0, SSL_TXT_ADH, 0, SSL_kEDH, SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
281 | {0,SSL_TXT_AECDH,0, SSL_kEECDH,SSL_aNULL,0,0,0,0,0,0,0}, | 280 | {0, SSL_TXT_AECDH, 0, SSL_kEECDH, SSL_aNULL, 0, 0, 0, 0, 0, 0, 0}, |
282 | {0,SSL_TXT_PSK,0, SSL_kPSK,SSL_aPSK,0,0,0,0,0,0,0}, | 281 | {0, SSL_TXT_PSK, 0, SSL_kPSK, SSL_aPSK, 0, 0, 0, 0, 0, 0, 0}, |
283 | {0,SSL_TXT_SRP,0, SSL_kSRP,0,0,0,0,0,0,0,0}, | 282 | {0, SSL_TXT_SRP, 0, SSL_kSRP, 0, 0, 0, 0, 0, 0, 0, 0}, |
284 | 283 | ||
285 | 284 | ||
286 | /* symmetric encryption aliases */ | 285 | /* symmetric encryption aliases */ |
287 | {0,SSL_TXT_DES,0, 0,0,SSL_DES, 0,0,0,0,0,0}, | 286 | {0, SSL_TXT_DES, 0, 0, 0, SSL_DES, 0, 0, 0, 0, 0, 0}, |
288 | {0,SSL_TXT_3DES,0, 0,0,SSL_3DES, 0,0,0,0,0,0}, | 287 | {0, SSL_TXT_3DES, 0, 0, 0, SSL_3DES, 0, 0, 0, 0, 0, 0}, |
289 | {0,SSL_TXT_RC4,0, 0,0,SSL_RC4, 0,0,0,0,0,0}, | 288 | {0, SSL_TXT_RC4, 0, 0, 0, SSL_RC4, 0, 0, 0, 0, 0, 0}, |
290 | {0,SSL_TXT_RC2,0, 0,0,SSL_RC2, 0,0,0,0,0,0}, | 289 | {0, SSL_TXT_RC2, 0, 0, 0, SSL_RC2, 0, 0, 0, 0, 0, 0}, |
291 | {0,SSL_TXT_IDEA,0, 0,0,SSL_IDEA, 0,0,0,0,0,0}, | 290 | {0, SSL_TXT_IDEA, 0, 0, 0, SSL_IDEA, 0, 0, 0, 0, 0, 0}, |
292 | {0,SSL_TXT_SEED,0, 0,0,SSL_SEED, 0,0,0,0,0,0}, | 291 | {0, SSL_TXT_SEED, 0, 0, 0, SSL_SEED, 0, 0, 0, 0, 0, 0}, |
293 | {0,SSL_TXT_eNULL,0, 0,0,SSL_eNULL, 0,0,0,0,0,0}, | 292 | {0, SSL_TXT_eNULL, 0, 0, 0, SSL_eNULL, 0, 0, 0, 0, 0, 0}, |
294 | {0,SSL_TXT_AES128,0, 0,0,SSL_AES128|SSL_AES128GCM,0,0,0,0,0,0}, | 293 | {0, SSL_TXT_AES128, 0, 0, 0, SSL_AES128|SSL_AES128GCM, 0, 0, 0, 0, 0, 0}, |
295 | {0,SSL_TXT_AES256,0, 0,0,SSL_AES256|SSL_AES256GCM,0,0,0,0,0,0}, | 294 | {0, SSL_TXT_AES256, 0, 0, 0, SSL_AES256|SSL_AES256GCM, 0, 0, 0, 0, 0, 0}, |
296 | {0,SSL_TXT_AES,0, 0,0,SSL_AES,0,0,0,0,0,0}, | 295 | {0, SSL_TXT_AES, 0, 0, 0, SSL_AES, 0, 0, 0, 0, 0, 0}, |
297 | {0,SSL_TXT_AES_GCM,0, 0,0,SSL_AES128GCM|SSL_AES256GCM,0,0,0,0,0,0}, | 296 | {0, SSL_TXT_AES_GCM, 0, 0, 0, SSL_AES128GCM|SSL_AES256GCM, 0, 0, 0, 0, 0, 0}, |
298 | {0,SSL_TXT_CAMELLIA128,0,0,0,SSL_CAMELLIA128,0,0,0,0,0,0}, | 297 | {0, SSL_TXT_CAMELLIA128, 0, 0, 0, SSL_CAMELLIA128, 0, 0, 0, 0, 0, 0}, |
299 | {0,SSL_TXT_CAMELLIA256,0,0,0,SSL_CAMELLIA256,0,0,0,0,0,0}, | 298 | {0, SSL_TXT_CAMELLIA256, 0, 0, 0, SSL_CAMELLIA256, 0, 0, 0, 0, 0, 0}, |
300 | {0,SSL_TXT_CAMELLIA ,0,0,0,SSL_CAMELLIA128|SSL_CAMELLIA256,0,0,0,0,0,0}, | 299 | {0, SSL_TXT_CAMELLIA , 0, 0, 0, SSL_CAMELLIA128|SSL_CAMELLIA256, 0, 0, 0, 0, 0, 0}, |
301 | 300 | ||
302 | /* MAC aliases */ | 301 | /* MAC aliases */ |
303 | {0,SSL_TXT_MD5,0, 0,0,0,SSL_MD5, 0,0,0,0,0}, | 302 | {0, SSL_TXT_MD5, 0, 0, 0, 0, SSL_MD5, 0, 0, 0, 0, 0}, |
304 | {0,SSL_TXT_SHA1,0, 0,0,0,SSL_SHA1, 0,0,0,0,0}, | 303 | {0, SSL_TXT_SHA1, 0, 0, 0, 0, SSL_SHA1, 0, 0, 0, 0, 0}, |
305 | {0,SSL_TXT_SHA,0, 0,0,0,SSL_SHA1, 0,0,0,0,0}, | 304 | {0, SSL_TXT_SHA, 0, 0, 0, 0, SSL_SHA1, 0, 0, 0, 0, 0}, |
306 | {0,SSL_TXT_GOST94,0, 0,0,0,SSL_GOST94, 0,0,0,0,0}, | 305 | {0, SSL_TXT_GOST94, 0, 0, 0, 0, SSL_GOST94, 0, 0, 0, 0, 0}, |
307 | {0,SSL_TXT_GOST89MAC,0, 0,0,0,SSL_GOST89MAC, 0,0,0,0,0}, | 306 | {0, SSL_TXT_GOST89MAC, 0, 0, 0, 0, SSL_GOST89MAC, 0, 0, 0, 0, 0}, |
308 | {0,SSL_TXT_SHA256,0, 0,0,0,SSL_SHA256, 0,0,0,0,0}, | 307 | {0, SSL_TXT_SHA256, 0, 0, 0, 0, SSL_SHA256, 0, 0, 0, 0, 0}, |
309 | {0,SSL_TXT_SHA384,0, 0,0,0,SSL_SHA384, 0,0,0,0,0}, | 308 | {0, SSL_TXT_SHA384, 0, 0, 0, 0, SSL_SHA384, 0, 0, 0, 0, 0}, |
310 | 309 | ||
311 | /* protocol version aliases */ | 310 | /* protocol version aliases */ |
312 | {0,SSL_TXT_SSLV2,0, 0,0,0,0,SSL_SSLV2, 0,0,0,0}, | 311 | {0, SSL_TXT_SSLV2, 0, 0, 0, 0, 0, SSL_SSLV2, 0, 0, 0, 0}, |
313 | {0,SSL_TXT_SSLV3,0, 0,0,0,0,SSL_SSLV3, 0,0,0,0}, | 312 | {0, SSL_TXT_SSLV3, 0, 0, 0, 0, 0, SSL_SSLV3, 0, 0, 0, 0}, |
314 | {0,SSL_TXT_TLSV1,0, 0,0,0,0,SSL_TLSV1, 0,0,0,0}, | 313 | {0, SSL_TXT_TLSV1, 0, 0, 0, 0, 0, SSL_TLSV1, 0, 0, 0, 0}, |
315 | {0,SSL_TXT_TLSV1_2,0, 0,0,0,0,SSL_TLSV1_2, 0,0,0,0}, | 314 | {0, SSL_TXT_TLSV1_2, 0, 0, 0, 0, 0, SSL_TLSV1_2, 0, 0, 0, 0}, |
316 | 315 | ||
317 | /* export flag */ | 316 | /* export flag */ |
318 | {0,SSL_TXT_EXP,0, 0,0,0,0,0,SSL_EXPORT,0,0,0}, | 317 | {0, SSL_TXT_EXP, 0, 0, 0, 0, 0, 0, SSL_EXPORT, 0, 0, 0}, |
319 | {0,SSL_TXT_EXPORT,0, 0,0,0,0,0,SSL_EXPORT,0,0,0}, | 318 | {0, SSL_TXT_EXPORT, 0, 0, 0, 0, 0, 0, SSL_EXPORT, 0, 0, 0}, |
320 | 319 | ||
321 | /* strength classes */ | 320 | /* strength classes */ |
322 | {0,SSL_TXT_EXP40,0, 0,0,0,0,0,SSL_EXP40, 0,0,0}, | 321 | {0, SSL_TXT_EXP40, 0, 0, 0, 0, 0, 0, SSL_EXP40, 0, 0, 0}, |
323 | {0,SSL_TXT_EXP56,0, 0,0,0,0,0,SSL_EXP56, 0,0,0}, | 322 | {0, SSL_TXT_EXP56, 0, 0, 0, 0, 0, 0, SSL_EXP56, 0, 0, 0}, |
324 | {0,SSL_TXT_LOW,0, 0,0,0,0,0,SSL_LOW, 0,0,0}, | 323 | {0, SSL_TXT_LOW, 0, 0, 0, 0, 0, 0, SSL_LOW, 0, 0, 0}, |
325 | {0,SSL_TXT_MEDIUM,0, 0,0,0,0,0,SSL_MEDIUM,0,0,0}, | 324 | {0, SSL_TXT_MEDIUM, 0, 0, 0, 0, 0, 0, SSL_MEDIUM, 0, 0, 0}, |
326 | {0,SSL_TXT_HIGH,0, 0,0,0,0,0,SSL_HIGH, 0,0,0}, | 325 | {0, SSL_TXT_HIGH, 0, 0, 0, 0, 0, 0, SSL_HIGH, 0, 0, 0}, |
327 | /* FIPS 140-2 approved ciphersuite */ | 326 | /* FIPS 140-2 approved ciphersuite */ |
328 | {0,SSL_TXT_FIPS,0, 0,0,~SSL_eNULL,0,0,SSL_FIPS, 0,0,0}, | 327 | {0, SSL_TXT_FIPS, 0, 0, 0,~SSL_eNULL, 0, 0, SSL_FIPS, 0, 0, 0}, |
329 | }; | 328 | }; |
330 | /* Search for public key algorithm with given name and | 329 | /* Search for public key algorithm with given name and |
331 | * return its pkey_id if it is available. Otherwise return 0 | 330 | * return its pkey_id if it is available. Otherwise return 0 |
332 | */ | 331 | */ |
333 | #ifdef OPENSSL_NO_ENGINE | 332 | #ifdef OPENSSL_NO_ENGINE |
334 | 333 | ||
335 | static int get_optional_pkey_id(const char *pkey_name) | 334 | static int |
336 | { | 335 | get_optional_pkey_id(const char *pkey_name) |
336 | { | ||
337 | const EVP_PKEY_ASN1_METHOD *ameth; | 337 | const EVP_PKEY_ASN1_METHOD *ameth; |
338 | int pkey_id=0; | 338 | int pkey_id = 0; |
339 | ameth = EVP_PKEY_asn1_find_str(NULL,pkey_name,-1); | 339 | ameth = EVP_PKEY_asn1_find_str(NULL, pkey_name, -1); |
340 | if (ameth) | 340 | if (ameth) { |
341 | { | 341 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); |
342 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL,NULL,NULL,NULL,ameth); | ||
343 | } | ||
344 | return pkey_id; | ||
345 | } | 342 | } |
343 | return pkey_id; | ||
344 | } | ||
346 | 345 | ||
347 | #else | 346 | #else |
348 | 347 | ||
349 | static int get_optional_pkey_id(const char *pkey_name) | 348 | static int |
350 | { | 349 | get_optional_pkey_id(const char *pkey_name) |
350 | { | ||
351 | const EVP_PKEY_ASN1_METHOD *ameth; | 351 | const EVP_PKEY_ASN1_METHOD *ameth; |
352 | ENGINE *tmpeng = NULL; | 352 | ENGINE *tmpeng = NULL; |
353 | int pkey_id=0; | 353 | int pkey_id = 0; |
354 | ameth = EVP_PKEY_asn1_find_str(&tmpeng,pkey_name,-1); | 354 | ameth = EVP_PKEY_asn1_find_str(&tmpeng, pkey_name, -1); |
355 | if (ameth) | 355 | if (ameth) { |
356 | { | 356 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); |
357 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL,NULL,NULL,NULL,ameth); | ||
358 | } | ||
359 | if (tmpeng) ENGINE_finish(tmpeng); | ||
360 | return pkey_id; | ||
361 | } | 357 | } |
358 | if (tmpeng) | ||
359 | ENGINE_finish(tmpeng); | ||
360 | return pkey_id; | ||
361 | } | ||
362 | 362 | ||
363 | #endif | 363 | #endif |
364 | 364 | ||
365 | void ssl_load_ciphers(void) | 365 | void |
366 | { | 366 | ssl_load_ciphers(void) |
367 | ssl_cipher_methods[SSL_ENC_DES_IDX]= | 367 | { |
368 | EVP_get_cipherbyname(SN_des_cbc); | 368 | ssl_cipher_methods[SSL_ENC_DES_IDX]= |
369 | EVP_get_cipherbyname(SN_des_cbc); | ||
369 | ssl_cipher_methods[SSL_ENC_3DES_IDX]= | 370 | ssl_cipher_methods[SSL_ENC_3DES_IDX]= |
370 | EVP_get_cipherbyname(SN_des_ede3_cbc); | 371 | EVP_get_cipherbyname(SN_des_ede3_cbc); |
371 | ssl_cipher_methods[SSL_ENC_RC4_IDX]= | 372 | ssl_cipher_methods[SSL_ENC_RC4_IDX]= |
372 | EVP_get_cipherbyname(SN_rc4); | 373 | EVP_get_cipherbyname(SN_rc4); |
373 | ssl_cipher_methods[SSL_ENC_RC2_IDX]= | 374 | ssl_cipher_methods[SSL_ENC_RC2_IDX]= |
374 | EVP_get_cipherbyname(SN_rc2_cbc); | 375 | EVP_get_cipherbyname(SN_rc2_cbc); |
375 | #ifndef OPENSSL_NO_IDEA | 376 | #ifndef OPENSSL_NO_IDEA |
376 | ssl_cipher_methods[SSL_ENC_IDEA_IDX]= | 377 | ssl_cipher_methods[SSL_ENC_IDEA_IDX]= |
377 | EVP_get_cipherbyname(SN_idea_cbc); | 378 | EVP_get_cipherbyname(SN_idea_cbc); |
378 | #else | 379 | #else |
379 | ssl_cipher_methods[SSL_ENC_IDEA_IDX]= NULL; | 380 | ssl_cipher_methods[SSL_ENC_IDEA_IDX] = NULL; |
380 | #endif | 381 | #endif |
381 | ssl_cipher_methods[SSL_ENC_AES128_IDX]= | 382 | ssl_cipher_methods[SSL_ENC_AES128_IDX]= |
382 | EVP_get_cipherbyname(SN_aes_128_cbc); | 383 | EVP_get_cipherbyname(SN_aes_128_cbc); |
383 | ssl_cipher_methods[SSL_ENC_AES256_IDX]= | 384 | ssl_cipher_methods[SSL_ENC_AES256_IDX]= |
384 | EVP_get_cipherbyname(SN_aes_256_cbc); | 385 | EVP_get_cipherbyname(SN_aes_256_cbc); |
385 | ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX]= | 386 | ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX]= |
386 | EVP_get_cipherbyname(SN_camellia_128_cbc); | 387 | EVP_get_cipherbyname(SN_camellia_128_cbc); |
387 | ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX]= | 388 | ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX]= |
388 | EVP_get_cipherbyname(SN_camellia_256_cbc); | 389 | EVP_get_cipherbyname(SN_camellia_256_cbc); |
389 | ssl_cipher_methods[SSL_ENC_GOST89_IDX]= | 390 | ssl_cipher_methods[SSL_ENC_GOST89_IDX]= |
390 | EVP_get_cipherbyname(SN_gost89_cnt); | 391 | EVP_get_cipherbyname(SN_gost89_cnt); |
391 | ssl_cipher_methods[SSL_ENC_SEED_IDX]= | 392 | ssl_cipher_methods[SSL_ENC_SEED_IDX]= |
392 | EVP_get_cipherbyname(SN_seed_cbc); | 393 | EVP_get_cipherbyname(SN_seed_cbc); |
393 | 394 | ||
394 | ssl_cipher_methods[SSL_ENC_AES128GCM_IDX]= | 395 | ssl_cipher_methods[SSL_ENC_AES128GCM_IDX]= |
395 | EVP_get_cipherbyname(SN_aes_128_gcm); | 396 | EVP_get_cipherbyname(SN_aes_128_gcm); |
396 | ssl_cipher_methods[SSL_ENC_AES256GCM_IDX]= | 397 | ssl_cipher_methods[SSL_ENC_AES256GCM_IDX]= |
397 | EVP_get_cipherbyname(SN_aes_256_gcm); | 398 | EVP_get_cipherbyname(SN_aes_256_gcm); |
398 | 399 | ||
399 | ssl_digest_methods[SSL_MD_MD5_IDX]= | 400 | ssl_digest_methods[SSL_MD_MD5_IDX]= |
400 | EVP_get_digestbyname(SN_md5); | 401 | EVP_get_digestbyname(SN_md5); |
401 | ssl_mac_secret_size[SSL_MD_MD5_IDX]= | 402 | ssl_mac_secret_size[SSL_MD_MD5_IDX]= |
402 | EVP_MD_size(ssl_digest_methods[SSL_MD_MD5_IDX]); | 403 | EVP_MD_size(ssl_digest_methods[SSL_MD_MD5_IDX]); |
403 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_MD5_IDX] >= 0); | 404 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_MD5_IDX] >= 0); |
404 | ssl_digest_methods[SSL_MD_SHA1_IDX]= | 405 | ssl_digest_methods[SSL_MD_SHA1_IDX]= |
405 | EVP_get_digestbyname(SN_sha1); | 406 | EVP_get_digestbyname(SN_sha1); |
406 | ssl_mac_secret_size[SSL_MD_SHA1_IDX]= | 407 | ssl_mac_secret_size[SSL_MD_SHA1_IDX]= |
407 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA1_IDX]); | 408 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA1_IDX]); |
408 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_SHA1_IDX] >= 0); | 409 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_SHA1_IDX] >= 0); |
409 | ssl_digest_methods[SSL_MD_GOST94_IDX]= | 410 | ssl_digest_methods[SSL_MD_GOST94_IDX]= |
410 | EVP_get_digestbyname(SN_id_GostR3411_94); | 411 | EVP_get_digestbyname(SN_id_GostR3411_94); |
411 | if (ssl_digest_methods[SSL_MD_GOST94_IDX]) | 412 | if (ssl_digest_methods[SSL_MD_GOST94_IDX]) { |
412 | { | ||
413 | ssl_mac_secret_size[SSL_MD_GOST94_IDX]= | 413 | ssl_mac_secret_size[SSL_MD_GOST94_IDX]= |
414 | EVP_MD_size(ssl_digest_methods[SSL_MD_GOST94_IDX]); | 414 | EVP_MD_size(ssl_digest_methods[SSL_MD_GOST94_IDX]); |
415 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_GOST94_IDX] >= 0); | 415 | OPENSSL_assert(ssl_mac_secret_size[SSL_MD_GOST94_IDX] >= 0); |
416 | } | 416 | } |
417 | ssl_digest_methods[SSL_MD_GOST89MAC_IDX]= | 417 | ssl_digest_methods[SSL_MD_GOST89MAC_IDX]= |
418 | EVP_get_digestbyname(SN_id_Gost28147_89_MAC); | 418 | EVP_get_digestbyname(SN_id_Gost28147_89_MAC); |
419 | ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX] = get_optional_pkey_id("gost-mac"); | 419 | ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX] = get_optional_pkey_id("gost-mac"); |
420 | if (ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]) { | 420 | if (ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]) { |
421 | ssl_mac_secret_size[SSL_MD_GOST89MAC_IDX]=32; | 421 | ssl_mac_secret_size[SSL_MD_GOST89MAC_IDX] = 32; |
422 | } | 422 | } |
423 | 423 | ||
424 | ssl_digest_methods[SSL_MD_SHA256_IDX]= | 424 | ssl_digest_methods[SSL_MD_SHA256_IDX]= |
425 | EVP_get_digestbyname(SN_sha256); | 425 | EVP_get_digestbyname(SN_sha256); |
426 | ssl_mac_secret_size[SSL_MD_SHA256_IDX]= | 426 | ssl_mac_secret_size[SSL_MD_SHA256_IDX]= |
427 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA256_IDX]); | 427 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA256_IDX]); |
428 | ssl_digest_methods[SSL_MD_SHA384_IDX]= | 428 | ssl_digest_methods[SSL_MD_SHA384_IDX]= |
429 | EVP_get_digestbyname(SN_sha384); | 429 | EVP_get_digestbyname(SN_sha384); |
430 | ssl_mac_secret_size[SSL_MD_SHA384_IDX]= | 430 | ssl_mac_secret_size[SSL_MD_SHA384_IDX]= |
431 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA384_IDX]); | 431 | EVP_MD_size(ssl_digest_methods[SSL_MD_SHA384_IDX]); |
432 | } | 432 | } |
433 | #ifndef OPENSSL_NO_COMP | 433 | #ifndef OPENSSL_NO_COMP |
434 | 434 | ||
435 | static int sk_comp_cmp(const SSL_COMP * const *a, | 435 | static int |
436 | const SSL_COMP * const *b) | 436 | sk_comp_cmp(const SSL_COMP * const *a, |
437 | { | 437 | const SSL_COMP * const *b) |
438 | return((*a)->id-(*b)->id); | 438 | { |
439 | } | 439 | return ((*a)->id - (*b)->id); |
440 | } | ||
440 | 441 | ||
441 | static void load_builtin_compressions(void) | 442 | static void |
442 | { | 443 | load_builtin_compressions(void) |
444 | { | ||
443 | int got_write_lock = 0; | 445 | int got_write_lock = 0; |
444 | 446 | ||
445 | CRYPTO_r_lock(CRYPTO_LOCK_SSL); | 447 | CRYPTO_r_lock(CRYPTO_LOCK_SSL); |
446 | if (ssl_comp_methods == NULL) | 448 | if (ssl_comp_methods == NULL) { |
447 | { | ||
448 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); | 449 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); |
449 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); | 450 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); |
450 | got_write_lock = 1; | 451 | got_write_lock = 1; |
451 | 452 | ||
452 | if (ssl_comp_methods == NULL) | 453 | if (ssl_comp_methods == NULL) { |
453 | { | ||
454 | SSL_COMP *comp = NULL; | 454 | SSL_COMP *comp = NULL; |
455 | 455 | ||
456 | MemCheck_off(); | 456 | MemCheck_off(); |
457 | ssl_comp_methods=sk_SSL_COMP_new(sk_comp_cmp); | 457 | ssl_comp_methods = sk_SSL_COMP_new(sk_comp_cmp); |
458 | if (ssl_comp_methods != NULL) | 458 | if (ssl_comp_methods != NULL) { |
459 | { | 459 | comp = (SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); |
460 | comp=(SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); | 460 | if (comp != NULL) { |
461 | if (comp != NULL) | 461 | comp->method = COMP_zlib(); |
462 | { | ||
463 | comp->method=COMP_zlib(); | ||
464 | if (comp->method | 462 | if (comp->method |
465 | && comp->method->type == NID_undef) | 463 | && comp->method->type == NID_undef) |
466 | OPENSSL_free(comp); | 464 | OPENSSL_free(comp); |
467 | else | 465 | else { |
468 | { | 466 | comp->id = SSL_COMP_ZLIB_IDX; |
469 | comp->id=SSL_COMP_ZLIB_IDX; | 467 | comp->name = comp->method->name; |
470 | comp->name=comp->method->name; | 468 | sk_SSL_COMP_push(ssl_comp_methods, comp); |
471 | sk_SSL_COMP_push(ssl_comp_methods,comp); | ||
472 | } | ||
473 | } | 469 | } |
474 | sk_SSL_COMP_sort(ssl_comp_methods); | ||
475 | } | 470 | } |
476 | MemCheck_on(); | 471 | sk_SSL_COMP_sort(ssl_comp_methods); |
477 | } | 472 | } |
473 | MemCheck_on(); | ||
478 | } | 474 | } |
479 | 475 | } | |
476 | |||
480 | if (got_write_lock) | 477 | if (got_write_lock) |
481 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); | 478 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); |
482 | else | 479 | else |
483 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); | 480 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL); |
484 | } | 481 | } |
485 | #endif | 482 | #endif |
486 | 483 | ||
487 | int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | 484 | int |
488 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size,SSL_COMP **comp) | 485 | ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, |
489 | { | 486 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size, SSL_COMP **comp) |
487 | { | ||
490 | int i; | 488 | int i; |
491 | const SSL_CIPHER *c; | 489 | const SSL_CIPHER *c; |
492 | 490 | ||
493 | c=s->cipher; | 491 | c = s->cipher; |
494 | if (c == NULL) return(0); | 492 | if (c == NULL) |
495 | if (comp != NULL) | 493 | return (0); |
496 | { | 494 | if (comp != NULL) { |
497 | SSL_COMP ctmp; | 495 | SSL_COMP ctmp; |
498 | #ifndef OPENSSL_NO_COMP | 496 | #ifndef OPENSSL_NO_COMP |
499 | load_builtin_compressions(); | 497 | load_builtin_compressions(); |
500 | #endif | 498 | #endif |
501 | 499 | ||
502 | *comp=NULL; | 500 | *comp = NULL; |
503 | ctmp.id=s->compress_meth; | 501 | ctmp.id = s->compress_meth; |
504 | if (ssl_comp_methods != NULL) | 502 | if (ssl_comp_methods != NULL) { |
505 | { | 503 | i = sk_SSL_COMP_find(ssl_comp_methods, &ctmp); |
506 | i=sk_SSL_COMP_find(ssl_comp_methods,&ctmp); | ||
507 | if (i >= 0) | 504 | if (i >= 0) |
508 | *comp=sk_SSL_COMP_value(ssl_comp_methods,i); | 505 | *comp = sk_SSL_COMP_value(ssl_comp_methods, i); |
509 | else | 506 | else |
510 | *comp=NULL; | 507 | *comp = NULL; |
511 | } | ||
512 | } | 508 | } |
509 | } | ||
513 | 510 | ||
514 | if ((enc == NULL) || (md == NULL)) return(0); | 511 | if ((enc == NULL) |
512 | || (md == NULL)) return (0); | ||
515 | 513 | ||
516 | switch (c->algorithm_enc) | 514 | switch (c->algorithm_enc) { |
517 | { | ||
518 | case SSL_DES: | 515 | case SSL_DES: |
519 | i=SSL_ENC_DES_IDX; | 516 | i = SSL_ENC_DES_IDX; |
520 | break; | 517 | break; |
521 | case SSL_3DES: | 518 | case SSL_3DES: |
522 | i=SSL_ENC_3DES_IDX; | 519 | i = SSL_ENC_3DES_IDX; |
523 | break; | 520 | break; |
524 | case SSL_RC4: | 521 | case SSL_RC4: |
525 | i=SSL_ENC_RC4_IDX; | 522 | i = SSL_ENC_RC4_IDX; |
526 | break; | 523 | break; |
527 | case SSL_RC2: | 524 | case SSL_RC2: |
528 | i=SSL_ENC_RC2_IDX; | 525 | i = SSL_ENC_RC2_IDX; |
529 | break; | 526 | break; |
530 | case SSL_IDEA: | 527 | case SSL_IDEA: |
531 | i=SSL_ENC_IDEA_IDX; | 528 | i = SSL_ENC_IDEA_IDX; |
532 | break; | 529 | break; |
533 | case SSL_eNULL: | 530 | case SSL_eNULL: |
534 | i=SSL_ENC_NULL_IDX; | 531 | i = SSL_ENC_NULL_IDX; |
535 | break; | 532 | break; |
536 | case SSL_AES128: | 533 | case SSL_AES128: |
537 | i=SSL_ENC_AES128_IDX; | 534 | i = SSL_ENC_AES128_IDX; |
538 | break; | 535 | break; |
539 | case SSL_AES256: | 536 | case SSL_AES256: |
540 | i=SSL_ENC_AES256_IDX; | 537 | i = SSL_ENC_AES256_IDX; |
541 | break; | 538 | break; |
542 | case SSL_CAMELLIA128: | 539 | case SSL_CAMELLIA128: |
543 | i=SSL_ENC_CAMELLIA128_IDX; | 540 | i = SSL_ENC_CAMELLIA128_IDX; |
544 | break; | 541 | break; |
545 | case SSL_CAMELLIA256: | 542 | case SSL_CAMELLIA256: |
546 | i=SSL_ENC_CAMELLIA256_IDX; | 543 | i = SSL_ENC_CAMELLIA256_IDX; |
547 | break; | 544 | break; |
548 | case SSL_eGOST2814789CNT: | 545 | case SSL_eGOST2814789CNT: |
549 | i=SSL_ENC_GOST89_IDX; | 546 | i = SSL_ENC_GOST89_IDX; |
550 | break; | 547 | break; |
551 | case SSL_SEED: | 548 | case SSL_SEED: |
552 | i=SSL_ENC_SEED_IDX; | 549 | i = SSL_ENC_SEED_IDX; |
553 | break; | 550 | break; |
554 | case SSL_AES128GCM: | 551 | case SSL_AES128GCM: |
555 | i=SSL_ENC_AES128GCM_IDX; | 552 | i = SSL_ENC_AES128GCM_IDX; |
556 | break; | 553 | break; |
557 | case SSL_AES256GCM: | 554 | case SSL_AES256GCM: |
558 | i=SSL_ENC_AES256GCM_IDX; | 555 | i = SSL_ENC_AES256GCM_IDX; |
559 | break; | 556 | break; |
560 | default: | 557 | default: |
561 | i= -1; | 558 | i = -1; |
562 | break; | 559 | break; |
563 | } | 560 | } |
564 | 561 | ||
565 | if ((i < 0) || (i > SSL_ENC_NUM_IDX)) | 562 | if ((i < 0) || (i > SSL_ENC_NUM_IDX)) |
566 | *enc=NULL; | 563 | *enc = NULL; |
567 | else | 564 | else { |
568 | { | ||
569 | if (i == SSL_ENC_NULL_IDX) | 565 | if (i == SSL_ENC_NULL_IDX) |
570 | *enc=EVP_enc_null(); | 566 | *enc = EVP_enc_null(); |
571 | else | 567 | else |
572 | *enc=ssl_cipher_methods[i]; | 568 | *enc = ssl_cipher_methods[i]; |
573 | } | 569 | } |
574 | 570 | ||
575 | switch (c->algorithm_mac) | 571 | switch (c->algorithm_mac) { |
576 | { | ||
577 | case SSL_MD5: | 572 | case SSL_MD5: |
578 | i=SSL_MD_MD5_IDX; | 573 | i = SSL_MD_MD5_IDX; |
579 | break; | 574 | break; |
580 | case SSL_SHA1: | 575 | case SSL_SHA1: |
581 | i=SSL_MD_SHA1_IDX; | 576 | i = SSL_MD_SHA1_IDX; |
582 | break; | 577 | break; |
583 | case SSL_SHA256: | 578 | case SSL_SHA256: |
584 | i=SSL_MD_SHA256_IDX; | 579 | i = SSL_MD_SHA256_IDX; |
585 | break; | 580 | break; |
586 | case SSL_SHA384: | 581 | case SSL_SHA384: |
587 | i=SSL_MD_SHA384_IDX; | 582 | i = SSL_MD_SHA384_IDX; |
588 | break; | 583 | break; |
589 | case SSL_GOST94: | 584 | case SSL_GOST94: |
590 | i = SSL_MD_GOST94_IDX; | 585 | i = SSL_MD_GOST94_IDX; |
@@ -593,63 +588,63 @@ int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | |||
593 | i = SSL_MD_GOST89MAC_IDX; | 588 | i = SSL_MD_GOST89MAC_IDX; |
594 | break; | 589 | break; |
595 | default: | 590 | default: |
596 | i= -1; | 591 | i = -1; |
597 | break; | 592 | break; |
598 | } | 593 | } |
599 | if ((i < 0) || (i > SSL_MD_NUM_IDX)) | 594 | if ((i < 0) || (i > SSL_MD_NUM_IDX)) { |
600 | { | 595 | *md = NULL; |
601 | *md=NULL; | 596 | |
602 | if (mac_pkey_type!=NULL) *mac_pkey_type = NID_undef; | 597 | if (mac_pkey_type != NULL) |
603 | if (mac_secret_size!=NULL) *mac_secret_size = 0; | 598 | *mac_pkey_type = NID_undef; |
599 | if (mac_secret_size != NULL) | ||
600 | *mac_secret_size = 0; | ||
604 | if (c->algorithm_mac == SSL_AEAD) | 601 | if (c->algorithm_mac == SSL_AEAD) |
605 | mac_pkey_type = NULL; | 602 | mac_pkey_type = NULL; |
606 | } | 603 | } else { |
607 | else | 604 | *md = ssl_digest_methods[i]; |
608 | { | 605 | if (mac_pkey_type != NULL) |
609 | *md=ssl_digest_methods[i]; | 606 | *mac_pkey_type = ssl_mac_pkey_id[i]; |
610 | if (mac_pkey_type!=NULL) *mac_pkey_type = ssl_mac_pkey_id[i]; | 607 | if (mac_secret_size != NULL) |
611 | if (mac_secret_size!=NULL) *mac_secret_size = ssl_mac_secret_size[i]; | 608 | *mac_secret_size = ssl_mac_secret_size[i]; |
612 | } | 609 | } |
613 | 610 | ||
614 | if ((*enc != NULL) && | 611 | if ((*enc != NULL) && |
615 | (*md != NULL || (EVP_CIPHER_flags(*enc)&EVP_CIPH_FLAG_AEAD_CIPHER)) && | 612 | (*md != NULL || (EVP_CIPHER_flags(*enc)&EVP_CIPH_FLAG_AEAD_CIPHER)) && |
616 | (!mac_pkey_type||*mac_pkey_type != NID_undef)) | 613 | (!mac_pkey_type || *mac_pkey_type != NID_undef)) { |
617 | { | ||
618 | const EVP_CIPHER *evp; | 614 | const EVP_CIPHER *evp; |
619 | 615 | ||
620 | if (s->ssl_version>>8 != TLS1_VERSION_MAJOR || | 616 | if (s->ssl_version >> 8 != TLS1_VERSION_MAJOR || |
621 | s->ssl_version < TLS1_VERSION) | 617 | s->ssl_version < TLS1_VERSION) |
622 | return 1; | 618 | return 1; |
623 | 619 | ||
624 | #ifdef OPENSSL_FIPS | 620 | #ifdef OPENSSL_FIPS |
625 | if (FIPS_mode()) | 621 | if (FIPS_mode()) |
626 | return 1; | 622 | return 1; |
627 | #endif | 623 | #endif |
628 | 624 | ||
629 | if (c->algorithm_enc == SSL_RC4 && | 625 | if (c->algorithm_enc == SSL_RC4 && |
630 | c->algorithm_mac == SSL_MD5 && | 626 | c->algorithm_mac == SSL_MD5 && |
631 | (evp=EVP_get_cipherbyname("RC4-HMAC-MD5"))) | 627 | (evp = EVP_get_cipherbyname("RC4-HMAC-MD5"))) |
632 | *enc = evp, *md = NULL; | 628 | *enc = evp, *md = NULL; |
633 | else if (c->algorithm_enc == SSL_AES128 && | 629 | else if (c->algorithm_enc == SSL_AES128 && |
634 | c->algorithm_mac == SSL_SHA1 && | 630 | c->algorithm_mac == SSL_SHA1 && |
635 | (evp=EVP_get_cipherbyname("AES-128-CBC-HMAC-SHA1"))) | 631 | (evp = EVP_get_cipherbyname("AES-128-CBC-HMAC-SHA1"))) |
636 | *enc = evp, *md = NULL; | 632 | *enc = evp, *md = NULL; |
637 | else if (c->algorithm_enc == SSL_AES256 && | 633 | else if (c->algorithm_enc == SSL_AES256 && |
638 | c->algorithm_mac == SSL_SHA1 && | 634 | c->algorithm_mac == SSL_SHA1 && |
639 | (evp=EVP_get_cipherbyname("AES-256-CBC-HMAC-SHA1"))) | 635 | (evp = EVP_get_cipherbyname("AES-256-CBC-HMAC-SHA1"))) |
640 | *enc = evp, *md = NULL; | 636 | *enc = evp, *md = NULL; |
641 | return(1); | 637 | return (1); |
642 | } | 638 | } else |
643 | else | 639 | return (0); |
644 | return(0); | 640 | } |
645 | } | ||
646 | 641 | ||
647 | int ssl_get_handshake_digest(int idx, long *mask, const EVP_MD **md) | 642 | int |
643 | ssl_get_handshake_digest(int idx, long *mask, const EVP_MD **md) | ||
648 | { | 644 | { |
649 | if (idx <0||idx>=SSL_MD_NUM_IDX) | 645 | if (idx < 0 || idx >= SSL_MD_NUM_IDX) { |
650 | { | ||
651 | return 0; | 646 | return 0; |
652 | } | 647 | } |
653 | *mask = ssl_handshake_digest_flag[idx]; | 648 | *mask = ssl_handshake_digest_flag[idx]; |
654 | if (*mask) | 649 | if (*mask) |
655 | *md = ssl_digest_methods[idx]; | 650 | *md = ssl_digest_methods[idx]; |
@@ -661,40 +656,45 @@ int ssl_get_handshake_digest(int idx, long *mask, const EVP_MD **md) | |||
661 | #define ITEM_SEP(a) \ | 656 | #define ITEM_SEP(a) \ |
662 | (((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ',')) | 657 | (((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ',')) |
663 | 658 | ||
664 | static void ll_append_tail(CIPHER_ORDER **head, CIPHER_ORDER *curr, | 659 | static void |
665 | CIPHER_ORDER **tail) | 660 | ll_append_tail(CIPHER_ORDER **head, CIPHER_ORDER *curr, |
666 | { | 661 | CIPHER_ORDER **tail) |
667 | if (curr == *tail) return; | 662 | { |
663 | if (curr == *tail) | ||
664 | return; | ||
668 | if (curr == *head) | 665 | if (curr == *head) |
669 | *head=curr->next; | 666 | *head = curr->next; |
670 | if (curr->prev != NULL) | 667 | if (curr->prev != NULL) |
671 | curr->prev->next=curr->next; | 668 | curr->prev->next = curr->next; |
672 | if (curr->next != NULL) | 669 | if (curr->next != NULL) |
673 | curr->next->prev=curr->prev; | 670 | curr->next->prev = curr->prev; |
674 | (*tail)->next=curr; | 671 | (*tail)->next = curr; |
675 | curr->prev= *tail; | 672 | curr->prev= *tail; |
676 | curr->next=NULL; | 673 | curr->next = NULL; |
677 | *tail=curr; | 674 | *tail = curr; |
678 | } | 675 | } |
679 | 676 | ||
680 | static void ll_append_head(CIPHER_ORDER **head, CIPHER_ORDER *curr, | 677 | static void |
681 | CIPHER_ORDER **tail) | 678 | ll_append_head(CIPHER_ORDER **head, CIPHER_ORDER *curr, |
682 | { | 679 | CIPHER_ORDER **tail) |
683 | if (curr == *head) return; | 680 | { |
681 | if (curr == *head) | ||
682 | return; | ||
684 | if (curr == *tail) | 683 | if (curr == *tail) |
685 | *tail=curr->prev; | 684 | *tail = curr->prev; |
686 | if (curr->next != NULL) | 685 | if (curr->next != NULL) |
687 | curr->next->prev=curr->prev; | 686 | curr->next->prev = curr->prev; |
688 | if (curr->prev != NULL) | 687 | if (curr->prev != NULL) |
689 | curr->prev->next=curr->next; | 688 | curr->prev->next = curr->next; |
690 | (*head)->prev=curr; | 689 | (*head)->prev = curr; |
691 | curr->next= *head; | 690 | curr->next= *head; |
692 | curr->prev=NULL; | 691 | curr->prev = NULL; |
693 | *head=curr; | 692 | *head = curr; |
694 | } | 693 | } |
695 | 694 | ||
696 | static void ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, unsigned long *enc, unsigned long *mac, unsigned long *ssl) | 695 | static void |
697 | { | 696 | ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, unsigned long *enc, unsigned long *mac, unsigned long *ssl) |
697 | { | ||
698 | *mkey = 0; | 698 | *mkey = 0; |
699 | *auth = 0; | 699 | *auth = 0; |
700 | *enc = 0; | 700 | *enc = 0; |
@@ -743,44 +743,45 @@ static void ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, un | |||
743 | /* Disable GOST key exchange if no GOST signature algs are available * */ | 743 | /* Disable GOST key exchange if no GOST signature algs are available * */ |
744 | if ((*auth & (SSL_aGOST94|SSL_aGOST01)) == (SSL_aGOST94|SSL_aGOST01)) { | 744 | if ((*auth & (SSL_aGOST94|SSL_aGOST01)) == (SSL_aGOST94|SSL_aGOST01)) { |
745 | *mkey |= SSL_kGOST; | 745 | *mkey |= SSL_kGOST; |
746 | } | 746 | } |
747 | #ifdef SSL_FORBID_ENULL | 747 | #ifdef SSL_FORBID_ENULL |
748 | *enc |= SSL_eNULL; | 748 | *enc |= SSL_eNULL; |
749 | #endif | 749 | #endif |
750 | |||
751 | |||
752 | |||
753 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES :0; | ||
754 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES:0; | ||
755 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 :0; | ||
756 | *enc |= (ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL) ? SSL_RC2 :0; | ||
757 | *enc |= (ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL) ? SSL_IDEA:0; | ||
758 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128_IDX] == NULL) ? SSL_AES128:0; | ||
759 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256_IDX] == NULL) ? SSL_AES256:0; | ||
760 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128GCM_IDX] == NULL) ? SSL_AES128GCM:0; | ||
761 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256GCM_IDX] == NULL) ? SSL_AES256GCM:0; | ||
762 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX] == NULL) ? SSL_CAMELLIA128:0; | ||
763 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX] == NULL) ? SSL_CAMELLIA256:0; | ||
764 | *enc |= (ssl_cipher_methods[SSL_ENC_GOST89_IDX] == NULL) ? SSL_eGOST2814789CNT:0; | ||
765 | *enc |= (ssl_cipher_methods[SSL_ENC_SEED_IDX] == NULL) ? SSL_SEED:0; | ||
766 | |||
767 | *mac |= (ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL) ? SSL_MD5 :0; | ||
768 | *mac |= (ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL) ? SSL_SHA1:0; | ||
769 | *mac |= (ssl_digest_methods[SSL_MD_SHA256_IDX] == NULL) ? SSL_SHA256:0; | ||
770 | *mac |= (ssl_digest_methods[SSL_MD_SHA384_IDX] == NULL) ? SSL_SHA384:0; | ||
771 | *mac |= (ssl_digest_methods[SSL_MD_GOST94_IDX] == NULL) ? SSL_GOST94:0; | ||
772 | *mac |= (ssl_digest_methods[SSL_MD_GOST89MAC_IDX] == NULL || ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]==NID_undef)? SSL_GOST89MAC:0; | ||
773 | 750 | ||
774 | } | ||
775 | 751 | ||
776 | static void ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method, | 752 | |
777 | int num_of_ciphers, | 753 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES : 0; |
778 | unsigned long disabled_mkey, unsigned long disabled_auth, | 754 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES : 0; |
779 | unsigned long disabled_enc, unsigned long disabled_mac, | 755 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 : 0; |
780 | unsigned long disabled_ssl, | 756 | *enc |= (ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL) ? SSL_RC2 : 0; |
781 | CIPHER_ORDER *co_list, | 757 | *enc |= (ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL) ? SSL_IDEA : 0; |
782 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) | 758 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128_IDX] == NULL) ? SSL_AES128 : 0; |
783 | { | 759 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256_IDX] == NULL) ? SSL_AES256 : 0; |
760 | *enc |= (ssl_cipher_methods[SSL_ENC_AES128GCM_IDX] == NULL) ? SSL_AES128GCM : 0; | ||
761 | *enc |= (ssl_cipher_methods[SSL_ENC_AES256GCM_IDX] == NULL) ? SSL_AES256GCM : 0; | ||
762 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA128_IDX] == NULL) ? SSL_CAMELLIA128 : 0; | ||
763 | *enc |= (ssl_cipher_methods[SSL_ENC_CAMELLIA256_IDX] == NULL) ? SSL_CAMELLIA256 : 0; | ||
764 | *enc |= (ssl_cipher_methods[SSL_ENC_GOST89_IDX] == NULL) ? SSL_eGOST2814789CNT : 0; | ||
765 | *enc |= (ssl_cipher_methods[SSL_ENC_SEED_IDX] == NULL) ? SSL_SEED : 0; | ||
766 | |||
767 | *mac |= (ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL) ? SSL_MD5 : 0; | ||
768 | *mac |= (ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL) ? SSL_SHA1 : 0; | ||
769 | *mac |= (ssl_digest_methods[SSL_MD_SHA256_IDX] == NULL) ? SSL_SHA256 : 0; | ||
770 | *mac |= (ssl_digest_methods[SSL_MD_SHA384_IDX] == NULL) ? SSL_SHA384 : 0; | ||
771 | *mac |= (ssl_digest_methods[SSL_MD_GOST94_IDX] == NULL) ? SSL_GOST94 : 0; | ||
772 | *mac |= (ssl_digest_methods[SSL_MD_GOST89MAC_IDX] == NULL || ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX]==NID_undef) ? SSL_GOST89MAC : 0; | ||
773 | |||
774 | } | ||
775 | |||
776 | static void | ||
777 | ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method, | ||
778 | int num_of_ciphers, | ||
779 | unsigned long disabled_mkey, unsigned long disabled_auth, | ||
780 | unsigned long disabled_enc, unsigned long disabled_mac, | ||
781 | unsigned long disabled_ssl, | ||
782 | CIPHER_ORDER *co_list, | ||
783 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) | ||
784 | { | ||
784 | int i, co_list_num; | 785 | int i, co_list_num; |
785 | const SSL_CIPHER *c; | 786 | const SSL_CIPHER *c; |
786 | 787 | ||
@@ -793,68 +794,64 @@ static void ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method, | |||
793 | 794 | ||
794 | /* Get the initial list of ciphers */ | 795 | /* Get the initial list of ciphers */ |
795 | co_list_num = 0; /* actual count of ciphers */ | 796 | co_list_num = 0; /* actual count of ciphers */ |
796 | for (i = 0; i < num_of_ciphers; i++) | 797 | for (i = 0; i < num_of_ciphers; i++) { |
797 | { | ||
798 | c = ssl_method->get_cipher(i); | 798 | c = ssl_method->get_cipher(i); |
799 | /* drop those that use any of that is not available */ | 799 | /* drop those that use any of that is not available */ |
800 | if ((c != NULL) && c->valid && | 800 | if ((c != NULL) && c->valid && |
801 | #ifdef OPENSSL_FIPS | 801 | #ifdef OPENSSL_FIPS |
802 | (!FIPS_mode() || (c->algo_strength & SSL_FIPS)) && | 802 | (!FIPS_mode() || (c->algo_strength & SSL_FIPS)) && |
803 | #endif | 803 | #endif |
804 | !(c->algorithm_mkey & disabled_mkey) && | 804 | !(c->algorithm_mkey & disabled_mkey) && |
805 | !(c->algorithm_auth & disabled_auth) && | 805 | !(c->algorithm_auth & disabled_auth) && |
806 | !(c->algorithm_enc & disabled_enc) && | 806 | !(c->algorithm_enc & disabled_enc) && |
807 | !(c->algorithm_mac & disabled_mac) && | 807 | !(c->algorithm_mac & disabled_mac) && |
808 | !(c->algorithm_ssl & disabled_ssl)) | 808 | !(c->algorithm_ssl & disabled_ssl)) { |
809 | { | ||
810 | co_list[co_list_num].cipher = c; | 809 | co_list[co_list_num].cipher = c; |
811 | co_list[co_list_num].next = NULL; | 810 | co_list[co_list_num].next = NULL; |
812 | co_list[co_list_num].prev = NULL; | 811 | co_list[co_list_num].prev = NULL; |
813 | co_list[co_list_num].active = 0; | 812 | co_list[co_list_num].active = 0; |
814 | co_list_num++; | 813 | co_list_num++; |
815 | #ifdef KSSL_DEBUG | 814 | #ifdef KSSL_DEBUG |
816 | printf("\t%d: %s %lx %lx %lx\n",i,c->name,c->id,c->algorithm_mkey,c->algorithm_auth); | 815 | printf("\t%d: %s %lx %lx %lx\n", i, c->name, c->id, c->algorithm_mkey, c->algorithm_auth); |
817 | #endif /* KSSL_DEBUG */ | 816 | #endif /* KSSL_DEBUG */ |
818 | /* | 817 | /* |
819 | if (!sk_push(ca_list,(char *)c)) goto err; | 818 | if (!sk_push(ca_list,(char *)c)) goto err; |
820 | */ | 819 | */ |
821 | } | ||
822 | } | 820 | } |
821 | } | ||
823 | 822 | ||
824 | /* | 823 | /* |
825 | * Prepare linked list from list entries | 824 | * Prepare linked list from list entries |
826 | */ | 825 | */ |
827 | if (co_list_num > 0) | 826 | if (co_list_num > 0) { |
828 | { | ||
829 | co_list[0].prev = NULL; | 827 | co_list[0].prev = NULL; |
830 | 828 | ||
831 | if (co_list_num > 1) | 829 | if (co_list_num > 1) { |
832 | { | ||
833 | co_list[0].next = &co_list[1]; | 830 | co_list[0].next = &co_list[1]; |
834 | 831 | ||
835 | for (i = 1; i < co_list_num - 1; i++) | 832 | for (i = 1; i < co_list_num - 1; i++) { |
836 | { | ||
837 | co_list[i].prev = &co_list[i - 1]; | 833 | co_list[i].prev = &co_list[i - 1]; |
838 | co_list[i].next = &co_list[i + 1]; | 834 | co_list[i].next = &co_list[i + 1]; |
839 | } | 835 | } |
840 | 836 | ||
841 | co_list[co_list_num - 1].prev = &co_list[co_list_num - 2]; | 837 | co_list[co_list_num - 1].prev = &co_list[co_list_num - 2]; |
842 | } | 838 | } |
843 | 839 | ||
844 | co_list[co_list_num - 1].next = NULL; | 840 | co_list[co_list_num - 1].next = NULL; |
845 | 841 | ||
846 | *head_p = &co_list[0]; | 842 | *head_p = &co_list[0]; |
847 | *tail_p = &co_list[co_list_num - 1]; | 843 | *tail_p = &co_list[co_list_num - 1]; |
848 | } | ||
849 | } | 844 | } |
845 | } | ||
850 | 846 | ||
851 | static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | 847 | static void |
852 | int num_of_group_aliases, | 848 | ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, |
853 | unsigned long disabled_mkey, unsigned long disabled_auth, | 849 | int num_of_group_aliases, |
854 | unsigned long disabled_enc, unsigned long disabled_mac, | 850 | unsigned long disabled_mkey, unsigned long disabled_auth, |
855 | unsigned long disabled_ssl, | 851 | unsigned long disabled_enc, unsigned long disabled_mac, |
856 | CIPHER_ORDER *head) | 852 | unsigned long disabled_ssl, |
857 | { | 853 | CIPHER_ORDER *head) |
854 | { | ||
858 | CIPHER_ORDER *ciph_curr; | 855 | CIPHER_ORDER *ciph_curr; |
859 | const SSL_CIPHER **ca_curr; | 856 | const SSL_CIPHER **ca_curr; |
860 | int i; | 857 | int i; |
@@ -869,12 +866,11 @@ static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | |||
869 | */ | 866 | */ |
870 | ciph_curr = head; | 867 | ciph_curr = head; |
871 | ca_curr = ca_list; | 868 | ca_curr = ca_list; |
872 | while (ciph_curr != NULL) | 869 | while (ciph_curr != NULL) { |
873 | { | ||
874 | *ca_curr = ciph_curr->cipher; | 870 | *ca_curr = ciph_curr->cipher; |
875 | ca_curr++; | 871 | ca_curr++; |
876 | ciph_curr = ciph_curr->next; | 872 | ciph_curr = ciph_curr->next; |
877 | } | 873 | } |
878 | 874 | ||
879 | /* | 875 | /* |
880 | * Now we add the available ones from the cipher_aliases[] table. | 876 | * Now we add the available ones from the cipher_aliases[] table. |
@@ -882,8 +878,7 @@ static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | |||
882 | * in any affected category must be supported (set in enabled_mask), | 878 | * in any affected category must be supported (set in enabled_mask), |
883 | * or represent a cipher strength value (will be added in any case because algorithms=0). | 879 | * or represent a cipher strength value (will be added in any case because algorithms=0). |
884 | */ | 880 | */ |
885 | for (i = 0; i < num_of_group_aliases; i++) | 881 | for (i = 0; i < num_of_group_aliases; i++) { |
886 | { | ||
887 | unsigned long algorithm_mkey = cipher_aliases[i].algorithm_mkey; | 882 | unsigned long algorithm_mkey = cipher_aliases[i].algorithm_mkey; |
888 | unsigned long algorithm_auth = cipher_aliases[i].algorithm_auth; | 883 | unsigned long algorithm_auth = cipher_aliases[i].algorithm_auth; |
889 | unsigned long algorithm_enc = cipher_aliases[i].algorithm_enc; | 884 | unsigned long algorithm_enc = cipher_aliases[i].algorithm_enc; |
@@ -893,45 +888,46 @@ static void ssl_cipher_collect_aliases(const SSL_CIPHER **ca_list, | |||
893 | if (algorithm_mkey) | 888 | if (algorithm_mkey) |
894 | if ((algorithm_mkey & mask_mkey) == 0) | 889 | if ((algorithm_mkey & mask_mkey) == 0) |
895 | continue; | 890 | continue; |
896 | 891 | ||
897 | if (algorithm_auth) | 892 | if (algorithm_auth) |
898 | if ((algorithm_auth & mask_auth) == 0) | 893 | if ((algorithm_auth & mask_auth) == 0) |
899 | continue; | 894 | continue; |
900 | 895 | ||
901 | if (algorithm_enc) | 896 | if (algorithm_enc) |
902 | if ((algorithm_enc & mask_enc) == 0) | 897 | if ((algorithm_enc & mask_enc) == 0) |
903 | continue; | 898 | continue; |
904 | 899 | ||
905 | if (algorithm_mac) | 900 | if (algorithm_mac) |
906 | if ((algorithm_mac & mask_mac) == 0) | 901 | if ((algorithm_mac & mask_mac) == 0) |
907 | continue; | 902 | continue; |
908 | 903 | ||
909 | if (algorithm_ssl) | 904 | if (algorithm_ssl) |
910 | if ((algorithm_ssl & mask_ssl) == 0) | 905 | if ((algorithm_ssl & mask_ssl) == 0) |
911 | continue; | 906 | continue; |
912 | 907 | ||
913 | *ca_curr = (SSL_CIPHER *)(cipher_aliases + i); | 908 | *ca_curr = (SSL_CIPHER *)(cipher_aliases + i); |
914 | ca_curr++; | 909 | ca_curr++; |
915 | } | 910 | } |
916 | 911 | ||
917 | *ca_curr = NULL; /* end of list */ | 912 | *ca_curr = NULL; /* end of list */ |
918 | } | 913 | } |
919 | 914 | ||
920 | static void ssl_cipher_apply_rule(unsigned long cipher_id, | 915 | static void |
921 | unsigned long alg_mkey, unsigned long alg_auth, | 916 | ssl_cipher_apply_rule(unsigned long cipher_id, |
922 | unsigned long alg_enc, unsigned long alg_mac, | 917 | unsigned long alg_mkey, unsigned long alg_auth, |
923 | unsigned long alg_ssl, | 918 | unsigned long alg_enc, unsigned long alg_mac, |
924 | unsigned long algo_strength, | 919 | unsigned long alg_ssl, |
925 | int rule, int strength_bits, | 920 | unsigned long algo_strength, |
926 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) | 921 | int rule, int strength_bits, |
927 | { | 922 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p) |
923 | { | ||
928 | CIPHER_ORDER *head, *tail, *curr, *curr2, *last; | 924 | CIPHER_ORDER *head, *tail, *curr, *curr2, *last; |
929 | const SSL_CIPHER *cp; | 925 | const SSL_CIPHER *cp; |
930 | int reverse = 0; | 926 | int reverse = 0; |
931 | 927 | ||
932 | #ifdef CIPHER_DEBUG | 928 | #ifdef CIPHER_DEBUG |
933 | printf("Applying rule %d with %08lx/%08lx/%08lx/%08lx/%08lx %08lx (%d)\n", | 929 | printf("Applying rule %d with %08lx/%08lx/%08lx/%08lx/%08lx %08lx (%d)\n", |
934 | rule, alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, strength_bits); | 930 | rule, alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, strength_bits); |
935 | #endif | 931 | #endif |
936 | 932 | ||
937 | if (rule == CIPHER_DEL) | 933 | if (rule == CIPHER_DEL) |
@@ -940,21 +936,18 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
940 | head = *head_p; | 936 | head = *head_p; |
941 | tail = *tail_p; | 937 | tail = *tail_p; |
942 | 938 | ||
943 | if (reverse) | 939 | if (reverse) { |
944 | { | ||
945 | curr = tail; | 940 | curr = tail; |
946 | last = head; | 941 | last = head; |
947 | } | 942 | } else { |
948 | else | ||
949 | { | ||
950 | curr = head; | 943 | curr = head; |
951 | last = tail; | 944 | last = tail; |
952 | } | 945 | } |
953 | 946 | ||
954 | curr2 = curr; | 947 | curr2 = curr; |
955 | for (;;) | 948 | for (;;) { |
956 | { | 949 | if ((curr == NULL) |
957 | if ((curr == NULL) || (curr == last)) break; | 950 | || (curr == last)) break; |
958 | curr = curr2; | 951 | curr = curr2; |
959 | curr2 = reverse ? curr->prev : curr->next; | 952 | curr2 = reverse ? curr->prev : curr->next; |
960 | 953 | ||
@@ -964,13 +957,10 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
964 | * Selection criteria is either the value of strength_bits | 957 | * Selection criteria is either the value of strength_bits |
965 | * or the algorithms used. | 958 | * or the algorithms used. |
966 | */ | 959 | */ |
967 | if (strength_bits >= 0) | 960 | if (strength_bits >= 0) { |
968 | { | ||
969 | if (strength_bits != cp->strength_bits) | 961 | if (strength_bits != cp->strength_bits) |
970 | continue; | 962 | continue; |
971 | } | 963 | } else { |
972 | else | ||
973 | { | ||
974 | #ifdef CIPHER_DEBUG | 964 | #ifdef CIPHER_DEBUG |
975 | printf("\nName: %s:\nAlgo = %08lx/%08lx/%08lx/%08lx/%08lx Algo_strength = %08lx\n", cp->name, cp->algorithm_mkey, cp->algorithm_auth, cp->algorithm_enc, cp->algorithm_mac, cp->algorithm_ssl, cp->algo_strength); | 965 | printf("\nName: %s:\nAlgo = %08lx/%08lx/%08lx/%08lx/%08lx Algo_strength = %08lx\n", cp->name, cp->algorithm_mkey, cp->algorithm_auth, cp->algorithm_enc, cp->algorithm_mac, cp->algorithm_ssl, cp->algo_strength); |
976 | #endif | 966 | #endif |
@@ -989,45 +979,36 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
989 | continue; | 979 | continue; |
990 | if ((algo_strength & SSL_STRONG_MASK) && !(algo_strength & SSL_STRONG_MASK & cp->algo_strength)) | 980 | if ((algo_strength & SSL_STRONG_MASK) && !(algo_strength & SSL_STRONG_MASK & cp->algo_strength)) |
991 | continue; | 981 | continue; |
992 | } | 982 | } |
993 | 983 | ||
994 | #ifdef CIPHER_DEBUG | 984 | #ifdef CIPHER_DEBUG |
995 | printf("Action = %d\n", rule); | 985 | printf("Action = %d\n", rule); |
996 | #endif | 986 | #endif |
997 | 987 | ||
998 | /* add the cipher if it has not been added yet. */ | 988 | /* add the cipher if it has not been added yet. */ |
999 | if (rule == CIPHER_ADD) | 989 | if (rule == CIPHER_ADD) { |
1000 | { | ||
1001 | /* reverse == 0 */ | 990 | /* reverse == 0 */ |
1002 | if (!curr->active) | 991 | if (!curr->active) { |
1003 | { | ||
1004 | ll_append_tail(&head, curr, &tail); | 992 | ll_append_tail(&head, curr, &tail); |
1005 | curr->active = 1; | 993 | curr->active = 1; |
1006 | } | ||
1007 | } | 994 | } |
995 | } | ||
1008 | /* Move the added cipher to this location */ | 996 | /* Move the added cipher to this location */ |
1009 | else if (rule == CIPHER_ORD) | 997 | else if (rule == CIPHER_ORD) { |
1010 | { | ||
1011 | /* reverse == 0 */ | 998 | /* reverse == 0 */ |
1012 | if (curr->active) | 999 | if (curr->active) { |
1013 | { | ||
1014 | ll_append_tail(&head, curr, &tail); | 1000 | ll_append_tail(&head, curr, &tail); |
1015 | } | ||
1016 | } | 1001 | } |
1017 | else if (rule == CIPHER_DEL) | 1002 | } else if (rule == CIPHER_DEL) { |
1018 | { | ||
1019 | /* reverse == 1 */ | 1003 | /* reverse == 1 */ |
1020 | if (curr->active) | 1004 | if (curr->active) { |
1021 | { | ||
1022 | /* most recently deleted ciphersuites get best positions | 1005 | /* most recently deleted ciphersuites get best positions |
1023 | * for any future CIPHER_ADD (note that the CIPHER_DEL loop | 1006 | * for any future CIPHER_ADD (note that the CIPHER_DEL loop |
1024 | * works in reverse to maintain the order) */ | 1007 | * works in reverse to maintain the order) */ |
1025 | ll_append_head(&head, curr, &tail); | 1008 | ll_append_head(&head, curr, &tail); |
1026 | curr->active = 0; | 1009 | curr->active = 0; |
1027 | } | ||
1028 | } | 1010 | } |
1029 | else if (rule == CIPHER_KILL) | 1011 | } else if (rule == CIPHER_KILL) { |
1030 | { | ||
1031 | /* reverse == 0 */ | 1012 | /* reverse == 0 */ |
1032 | if (head == curr) | 1013 | if (head == curr) |
1033 | head = curr->next; | 1014 | head = curr->next; |
@@ -1042,16 +1023,17 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id, | |||
1042 | curr->prev->next = curr->next; | 1023 | curr->prev->next = curr->next; |
1043 | curr->next = NULL; | 1024 | curr->next = NULL; |
1044 | curr->prev = NULL; | 1025 | curr->prev = NULL; |
1045 | } | ||
1046 | } | 1026 | } |
1027 | } | ||
1047 | 1028 | ||
1048 | *head_p = head; | 1029 | *head_p = head; |
1049 | *tail_p = tail; | 1030 | *tail_p = tail; |
1050 | } | 1031 | } |
1051 | 1032 | ||
1052 | static int ssl_cipher_strength_sort(CIPHER_ORDER **head_p, | 1033 | static int |
1053 | CIPHER_ORDER **tail_p) | 1034 | ssl_cipher_strength_sort(CIPHER_ORDER **head_p, |
1054 | { | 1035 | CIPHER_ORDER **tail_p) |
1036 | { | ||
1055 | int max_strength_bits, i, *number_uses; | 1037 | int max_strength_bits, i, *number_uses; |
1056 | CIPHER_ORDER *curr; | 1038 | CIPHER_ORDER *curr; |
1057 | 1039 | ||
@@ -1062,32 +1044,29 @@ static int ssl_cipher_strength_sort(CIPHER_ORDER **head_p, | |||
1062 | */ | 1044 | */ |
1063 | max_strength_bits = 0; | 1045 | max_strength_bits = 0; |
1064 | curr = *head_p; | 1046 | curr = *head_p; |
1065 | while (curr != NULL) | 1047 | while (curr != NULL) { |
1066 | { | ||
1067 | if (curr->active && | 1048 | if (curr->active && |
1068 | (curr->cipher->strength_bits > max_strength_bits)) | 1049 | (curr->cipher->strength_bits > max_strength_bits)) |
1069 | max_strength_bits = curr->cipher->strength_bits; | 1050 | max_strength_bits = curr->cipher->strength_bits; |
1070 | curr = curr->next; | 1051 | curr = curr->next; |
1071 | } | 1052 | } |
1072 | 1053 | ||
1073 | number_uses = OPENSSL_malloc((max_strength_bits + 1) * sizeof(int)); | 1054 | number_uses = OPENSSL_malloc((max_strength_bits + 1) * sizeof(int)); |
1074 | if (!number_uses) | 1055 | if (!number_uses) { |
1075 | { | 1056 | SSLerr(SSL_F_SSL_CIPHER_STRENGTH_SORT, ERR_R_MALLOC_FAILURE); |
1076 | SSLerr(SSL_F_SSL_CIPHER_STRENGTH_SORT,ERR_R_MALLOC_FAILURE); | 1057 | return (0); |
1077 | return(0); | 1058 | } |
1078 | } | ||
1079 | memset(number_uses, 0, (max_strength_bits + 1) * sizeof(int)); | 1059 | memset(number_uses, 0, (max_strength_bits + 1) * sizeof(int)); |
1080 | 1060 | ||
1081 | /* | 1061 | /* |
1082 | * Now find the strength_bits values actually used | 1062 | * Now find the strength_bits values actually used |
1083 | */ | 1063 | */ |
1084 | curr = *head_p; | 1064 | curr = *head_p; |
1085 | while (curr != NULL) | 1065 | while (curr != NULL) { |
1086 | { | ||
1087 | if (curr->active) | 1066 | if (curr->active) |
1088 | number_uses[curr->cipher->strength_bits]++; | 1067 | number_uses[curr->cipher->strength_bits]++; |
1089 | curr = curr->next; | 1068 | curr = curr->next; |
1090 | } | 1069 | } |
1091 | /* | 1070 | /* |
1092 | * Go through the list of used strength_bits values in descending | 1071 | * Go through the list of used strength_bits values in descending |
1093 | * order. | 1072 | * order. |
@@ -1097,13 +1076,14 @@ static int ssl_cipher_strength_sort(CIPHER_ORDER **head_p, | |||
1097 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_ORD, i, head_p, tail_p); | 1076 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_ORD, i, head_p, tail_p); |
1098 | 1077 | ||
1099 | OPENSSL_free(number_uses); | 1078 | OPENSSL_free(number_uses); |
1100 | return(1); | 1079 | return (1); |
1101 | } | 1080 | } |
1102 | 1081 | ||
1103 | static int ssl_cipher_process_rulestr(const char *rule_str, | 1082 | static int |
1104 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p, | 1083 | ssl_cipher_process_rulestr(const char *rule_str, |
1105 | const SSL_CIPHER **ca_list) | 1084 | CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p, |
1106 | { | 1085 | const SSL_CIPHER **ca_list) |
1086 | { | ||
1107 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength; | 1087 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength; |
1108 | const char *l, *buf; | 1088 | const char *l, *buf; |
1109 | int j, multi, found, rule, retval, ok, buflen; | 1089 | int j, multi, found, rule, retval, ok, buflen; |
@@ -1112,28 +1092,32 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1112 | 1092 | ||
1113 | retval = 1; | 1093 | retval = 1; |
1114 | l = rule_str; | 1094 | l = rule_str; |
1115 | for (;;) | 1095 | for (;;) { |
1116 | { | ||
1117 | ch = *l; | 1096 | ch = *l; |
1118 | 1097 | ||
1119 | if (ch == '\0') | 1098 | if (ch == '\0') |
1120 | break; /* done */ | 1099 | break; |
1100 | /* done */ | ||
1121 | if (ch == '-') | 1101 | if (ch == '-') |
1122 | { rule = CIPHER_DEL; l++; } | 1102 | { rule = CIPHER_DEL; |
1123 | else if (ch == '+') | 1103 | l++; |
1124 | { rule = CIPHER_ORD; l++; } | 1104 | } else if (ch == '+') |
1125 | else if (ch == '!') | 1105 | { rule = CIPHER_ORD; |
1126 | { rule = CIPHER_KILL; l++; } | 1106 | l++; |
1127 | else if (ch == '@') | 1107 | } else if (ch == '!') |
1128 | { rule = CIPHER_SPECIAL; l++; } | 1108 | { rule = CIPHER_KILL; |
1129 | else | 1109 | l++; |
1130 | { rule = CIPHER_ADD; } | 1110 | } else if (ch == '@') |
1111 | { rule = CIPHER_SPECIAL; | ||
1112 | l++; | ||
1113 | } else | ||
1114 | { rule = CIPHER_ADD; | ||
1115 | } | ||
1131 | 1116 | ||
1132 | if (ITEM_SEP(ch)) | 1117 | if (ITEM_SEP(ch)) { |
1133 | { | ||
1134 | l++; | 1118 | l++; |
1135 | continue; | 1119 | continue; |
1136 | } | 1120 | } |
1137 | 1121 | ||
1138 | alg_mkey = 0; | 1122 | alg_mkey = 0; |
1139 | alg_auth = 0; | 1123 | alg_auth = 0; |
@@ -1142,52 +1126,47 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1142 | alg_ssl = 0; | 1126 | alg_ssl = 0; |
1143 | algo_strength = 0; | 1127 | algo_strength = 0; |
1144 | 1128 | ||
1145 | for (;;) | 1129 | for (;;) { |
1146 | { | ||
1147 | ch = *l; | 1130 | ch = *l; |
1148 | buf = l; | 1131 | buf = l; |
1149 | buflen = 0; | 1132 | buflen = 0; |
1150 | #ifndef CHARSET_EBCDIC | 1133 | #ifndef CHARSET_EBCDIC |
1151 | while ( ((ch >= 'A') && (ch <= 'Z')) || | 1134 | while (((ch >= 'A') && (ch <= 'Z')) || |
1152 | ((ch >= '0') && (ch <= '9')) || | 1135 | ((ch >= '0') && (ch <= '9')) || |
1153 | ((ch >= 'a') && (ch <= 'z')) || | 1136 | ((ch >= 'a') && (ch <= 'z')) || |
1154 | (ch == '-') || (ch == '.')) | 1137 | (ch == '-') || (ch == '.')) |
1155 | #else | 1138 | #else |
1156 | while ( isalnum(ch) || (ch == '-') || (ch == '.')) | 1139 | while (isalnum(ch) || (ch == '-') || (ch == '.')) |
1157 | #endif | 1140 | #endif |
1158 | { | 1141 | { |
1159 | ch = *(++l); | 1142 | ch = *(++l); |
1160 | buflen++; | 1143 | buflen++; |
1161 | } | 1144 | } |
1162 | 1145 | ||
1163 | if (buflen == 0) | 1146 | if (buflen == 0) { |
1164 | { | ||
1165 | /* | 1147 | /* |
1166 | * We hit something we cannot deal with, | 1148 | * We hit something we cannot deal with, |
1167 | * it is no command or separator nor | 1149 | * it is no command or separator nor |
1168 | * alphanumeric, so we call this an error. | 1150 | * alphanumeric, so we call this an error. |
1169 | */ | 1151 | */ |
1170 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, | 1152 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, |
1171 | SSL_R_INVALID_COMMAND); | 1153 | SSL_R_INVALID_COMMAND); |
1172 | retval = found = 0; | 1154 | retval = found = 0; |
1173 | l++; | 1155 | l++; |
1174 | break; | 1156 | break; |
1175 | } | 1157 | } |
1176 | 1158 | ||
1177 | if (rule == CIPHER_SPECIAL) | 1159 | if (rule == CIPHER_SPECIAL) { |
1178 | { | ||
1179 | found = 0; /* unused -- avoid compiler warning */ | 1160 | found = 0; /* unused -- avoid compiler warning */ |
1180 | break; /* special treatment */ | 1161 | break; /* special treatment */ |
1181 | } | 1162 | } |
1182 | 1163 | ||
1183 | /* check for multi-part specification */ | 1164 | /* check for multi-part specification */ |
1184 | if (ch == '+') | 1165 | if (ch == '+') { |
1185 | { | 1166 | multi = 1; |
1186 | multi=1; | ||
1187 | l++; | 1167 | l++; |
1188 | } | 1168 | } else |
1189 | else | 1169 | multi = 0; |
1190 | multi=0; | ||
1191 | 1170 | ||
1192 | /* | 1171 | /* |
1193 | * Now search for the cipher alias in the ca_list. Be careful | 1172 | * Now search for the cipher alias in the ca_list. Be careful |
@@ -1202,126 +1181,121 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1202 | */ | 1181 | */ |
1203 | j = found = 0; | 1182 | j = found = 0; |
1204 | cipher_id = 0; | 1183 | cipher_id = 0; |
1205 | while (ca_list[j]) | 1184 | while (ca_list[j]) { |
1206 | { | ||
1207 | if (!strncmp(buf, ca_list[j]->name, buflen) && | 1185 | if (!strncmp(buf, ca_list[j]->name, buflen) && |
1208 | (ca_list[j]->name[buflen] == '\0')) | 1186 | (ca_list[j]->name[buflen] == '\0')) { |
1209 | { | ||
1210 | found = 1; | 1187 | found = 1; |
1211 | break; | 1188 | break; |
1212 | } | 1189 | } else |
1213 | else | ||
1214 | j++; | 1190 | j++; |
1215 | } | 1191 | } |
1216 | 1192 | ||
1217 | if (!found) | 1193 | if (!found) |
1218 | break; /* ignore this entry */ | 1194 | break; /* ignore this entry */ |
1219 | 1195 | ||
1220 | if (ca_list[j]->algorithm_mkey) | 1196 | if (ca_list[j]->algorithm_mkey) { |
1221 | { | 1197 | if (alg_mkey) { |
1222 | if (alg_mkey) | ||
1223 | { | ||
1224 | alg_mkey &= ca_list[j]->algorithm_mkey; | 1198 | alg_mkey &= ca_list[j]->algorithm_mkey; |
1225 | if (!alg_mkey) { found = 0; break; } | 1199 | if (!alg_mkey) { |
1200 | found = 0; | ||
1201 | break; | ||
1226 | } | 1202 | } |
1227 | else | 1203 | } else |
1228 | alg_mkey = ca_list[j]->algorithm_mkey; | 1204 | alg_mkey = ca_list[j]->algorithm_mkey; |
1229 | } | 1205 | } |
1230 | 1206 | ||
1231 | if (ca_list[j]->algorithm_auth) | 1207 | if (ca_list[j]->algorithm_auth) { |
1232 | { | 1208 | if (alg_auth) { |
1233 | if (alg_auth) | ||
1234 | { | ||
1235 | alg_auth &= ca_list[j]->algorithm_auth; | 1209 | alg_auth &= ca_list[j]->algorithm_auth; |
1236 | if (!alg_auth) { found = 0; break; } | 1210 | if (!alg_auth) { |
1211 | found = 0; | ||
1212 | break; | ||
1237 | } | 1213 | } |
1238 | else | 1214 | } else |
1239 | alg_auth = ca_list[j]->algorithm_auth; | 1215 | alg_auth = ca_list[j]->algorithm_auth; |
1240 | } | 1216 | } |
1241 | 1217 | ||
1242 | if (ca_list[j]->algorithm_enc) | 1218 | if (ca_list[j]->algorithm_enc) { |
1243 | { | 1219 | if (alg_enc) { |
1244 | if (alg_enc) | ||
1245 | { | ||
1246 | alg_enc &= ca_list[j]->algorithm_enc; | 1220 | alg_enc &= ca_list[j]->algorithm_enc; |
1247 | if (!alg_enc) { found = 0; break; } | 1221 | if (!alg_enc) { |
1222 | found = 0; | ||
1223 | break; | ||
1248 | } | 1224 | } |
1249 | else | 1225 | } else |
1250 | alg_enc = ca_list[j]->algorithm_enc; | 1226 | alg_enc = ca_list[j]->algorithm_enc; |
1251 | } | 1227 | } |
1252 | 1228 | ||
1253 | if (ca_list[j]->algorithm_mac) | 1229 | if (ca_list[j]->algorithm_mac) { |
1254 | { | 1230 | if (alg_mac) { |
1255 | if (alg_mac) | ||
1256 | { | ||
1257 | alg_mac &= ca_list[j]->algorithm_mac; | 1231 | alg_mac &= ca_list[j]->algorithm_mac; |
1258 | if (!alg_mac) { found = 0; break; } | 1232 | if (!alg_mac) { |
1233 | found = 0; | ||
1234 | break; | ||
1259 | } | 1235 | } |
1260 | else | 1236 | } else |
1261 | alg_mac = ca_list[j]->algorithm_mac; | 1237 | alg_mac = ca_list[j]->algorithm_mac; |
1262 | } | 1238 | } |
1263 | 1239 | ||
1264 | if (ca_list[j]->algo_strength & SSL_EXP_MASK) | 1240 | if (ca_list[j]->algo_strength & SSL_EXP_MASK) { |
1265 | { | 1241 | if (algo_strength & SSL_EXP_MASK) { |
1266 | if (algo_strength & SSL_EXP_MASK) | ||
1267 | { | ||
1268 | algo_strength &= (ca_list[j]->algo_strength & SSL_EXP_MASK) | ~SSL_EXP_MASK; | 1242 | algo_strength &= (ca_list[j]->algo_strength & SSL_EXP_MASK) | ~SSL_EXP_MASK; |
1269 | if (!(algo_strength & SSL_EXP_MASK)) { found = 0; break; } | 1243 | if (!(algo_strength & SSL_EXP_MASK)) { |
1244 | found = 0; | ||
1245 | break; | ||
1270 | } | 1246 | } |
1271 | else | 1247 | } else |
1272 | algo_strength |= ca_list[j]->algo_strength & SSL_EXP_MASK; | 1248 | algo_strength |= ca_list[j]->algo_strength & SSL_EXP_MASK; |
1273 | } | 1249 | } |
1274 | 1250 | ||
1275 | if (ca_list[j]->algo_strength & SSL_STRONG_MASK) | 1251 | if (ca_list[j]->algo_strength & SSL_STRONG_MASK) { |
1276 | { | 1252 | if (algo_strength & SSL_STRONG_MASK) { |
1277 | if (algo_strength & SSL_STRONG_MASK) | ||
1278 | { | ||
1279 | algo_strength &= (ca_list[j]->algo_strength & SSL_STRONG_MASK) | ~SSL_STRONG_MASK; | 1253 | algo_strength &= (ca_list[j]->algo_strength & SSL_STRONG_MASK) | ~SSL_STRONG_MASK; |
1280 | if (!(algo_strength & SSL_STRONG_MASK)) { found = 0; break; } | 1254 | if (!(algo_strength & SSL_STRONG_MASK)) { |
1255 | found = 0; | ||
1256 | break; | ||
1281 | } | 1257 | } |
1282 | else | 1258 | } else |
1283 | algo_strength |= ca_list[j]->algo_strength & SSL_STRONG_MASK; | 1259 | algo_strength |= ca_list[j]->algo_strength & SSL_STRONG_MASK; |
1284 | } | 1260 | } |
1285 | 1261 | ||
1286 | if (ca_list[j]->valid) | 1262 | if (ca_list[j]->valid) { |
1287 | { | ||
1288 | /* explicit ciphersuite found; its protocol version | 1263 | /* explicit ciphersuite found; its protocol version |
1289 | * does not become part of the search pattern!*/ | 1264 | * does not become part of the search pattern!*/ |
1290 | 1265 | ||
1291 | cipher_id = ca_list[j]->id; | 1266 | cipher_id = ca_list[j]->id; |
1292 | } | 1267 | } else { |
1293 | else | ||
1294 | { | ||
1295 | /* not an explicit ciphersuite; only in this case, the | 1268 | /* not an explicit ciphersuite; only in this case, the |
1296 | * protocol version is considered part of the search pattern */ | 1269 | * protocol version is considered part of the search pattern */ |
1297 | 1270 | ||
1298 | if (ca_list[j]->algorithm_ssl) | 1271 | if (ca_list[j]->algorithm_ssl) { |
1299 | { | 1272 | if (alg_ssl) { |
1300 | if (alg_ssl) | ||
1301 | { | ||
1302 | alg_ssl &= ca_list[j]->algorithm_ssl; | 1273 | alg_ssl &= ca_list[j]->algorithm_ssl; |
1303 | if (!alg_ssl) { found = 0; break; } | 1274 | if (!alg_ssl) { |
1275 | found = 0; | ||
1276 | break; | ||
1304 | } | 1277 | } |
1305 | else | 1278 | } else |
1306 | alg_ssl = ca_list[j]->algorithm_ssl; | 1279 | alg_ssl = ca_list[j]->algorithm_ssl; |
1307 | } | ||
1308 | } | 1280 | } |
1309 | |||
1310 | if (!multi) break; | ||
1311 | } | 1281 | } |
1312 | 1282 | ||
1283 | if (!multi) | ||
1284 | break; | ||
1285 | } | ||
1286 | |||
1313 | /* | 1287 | /* |
1314 | * Ok, we have the rule, now apply it | 1288 | * Ok, we have the rule, now apply it |
1315 | */ | 1289 | */ |
1316 | if (rule == CIPHER_SPECIAL) | 1290 | if (rule == CIPHER_SPECIAL) |
1317 | { /* special command */ | 1291 | { /* special command */ |
1318 | ok = 0; | 1292 | ok = 0; |
1319 | if ((buflen == 8) && | 1293 | if ((buflen == 8) && |
1320 | !strncmp(buf, "STRENGTH", 8)) | 1294 | !strncmp(buf, "STRENGTH", 8)) |
1321 | ok = ssl_cipher_strength_sort(head_p, tail_p); | 1295 | ok = ssl_cipher_strength_sort(head_p, tail_p); |
1322 | else | 1296 | else |
1323 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, | 1297 | SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, |
1324 | SSL_R_INVALID_COMMAND); | 1298 | SSL_R_INVALID_COMMAND); |
1325 | if (ok == 0) | 1299 | if (ok == 0) |
1326 | retval = 0; | 1300 | retval = 0; |
1327 | /* | 1301 | /* |
@@ -1331,30 +1305,27 @@ static int ssl_cipher_process_rulestr(const char *rule_str, | |||
1331 | * end or ':' is found. | 1305 | * end or ':' is found. |
1332 | */ | 1306 | */ |
1333 | while ((*l != '\0') && !ITEM_SEP(*l)) | 1307 | while ((*l != '\0') && !ITEM_SEP(*l)) |
1334 | l++; | 1308 | l++; |
1335 | } | 1309 | } else if (found) { |
1336 | else if (found) | ||
1337 | { | ||
1338 | ssl_cipher_apply_rule(cipher_id, | 1310 | ssl_cipher_apply_rule(cipher_id, |
1339 | alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, | 1311 | alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, algo_strength, |
1340 | rule, -1, head_p, tail_p); | 1312 | rule, -1, head_p, tail_p); |
1341 | } | 1313 | } else { |
1342 | else | ||
1343 | { | ||
1344 | while ((*l != '\0') && !ITEM_SEP(*l)) | 1314 | while ((*l != '\0') && !ITEM_SEP(*l)) |
1345 | l++; | 1315 | l++; |
1346 | } | 1316 | } |
1347 | if (*l == '\0') break; /* done */ | 1317 | if (*l == '\0') break; /* done */ |
1348 | } | 1318 | } |
1349 | 1319 | ||
1350 | return(retval); | 1320 | return (retval); |
1351 | } | 1321 | } |
1352 | 1322 | ||
1353 | STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | 1323 | STACK_OF(SSL_CIPHER) |
1354 | STACK_OF(SSL_CIPHER) **cipher_list, | 1324 | *ssl_create_cipher_list(const SSL_METHOD *ssl_method, |
1355 | STACK_OF(SSL_CIPHER) **cipher_list_by_id, | 1325 | STACK_OF(SSL_CIPHER) **cipher_list, |
1356 | const char *rule_str) | 1326 | STACK_OF(SSL_CIPHER) **cipher_list_by_id, |
1357 | { | 1327 | const char *rule_str) |
1328 | { | ||
1358 | int ok, num_of_ciphers, num_of_alias_max, num_of_group_aliases; | 1329 | int ok, num_of_ciphers, num_of_alias_max, num_of_group_aliases; |
1359 | unsigned long disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl; | 1330 | unsigned long disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl; |
1360 | STACK_OF(SSL_CIPHER) *cipherstack, *tmp_cipher_list; | 1331 | STACK_OF(SSL_CIPHER) *cipherstack, *tmp_cipher_list; |
@@ -1384,15 +1355,14 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1384 | printf("ssl_create_cipher_list() for %d ciphers\n", num_of_ciphers); | 1355 | printf("ssl_create_cipher_list() for %d ciphers\n", num_of_ciphers); |
1385 | #endif /* KSSL_DEBUG */ | 1356 | #endif /* KSSL_DEBUG */ |
1386 | co_list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * num_of_ciphers); | 1357 | co_list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * num_of_ciphers); |
1387 | if (co_list == NULL) | 1358 | if (co_list == NULL) { |
1388 | { | 1359 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST, ERR_R_MALLOC_FAILURE); |
1389 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST,ERR_R_MALLOC_FAILURE); | ||
1390 | return(NULL); /* Failure */ | 1360 | return(NULL); /* Failure */ |
1391 | } | 1361 | } |
1392 | 1362 | ||
1393 | ssl_cipher_collect_ciphers(ssl_method, num_of_ciphers, | 1363 | ssl_cipher_collect_ciphers(ssl_method, num_of_ciphers, |
1394 | disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl, | 1364 | disabled_mkey, disabled_auth, disabled_enc, disabled_mac, disabled_ssl, |
1395 | co_list, &head, &tail); | 1365 | co_list, &head, &tail); |
1396 | 1366 | ||
1397 | 1367 | ||
1398 | /* Now arrange all ciphers by preference: */ | 1368 | /* Now arrange all ciphers by preference: */ |
@@ -1419,19 +1389,18 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1419 | ssl_cipher_apply_rule(0, 0, SSL_aECDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1389 | ssl_cipher_apply_rule(0, 0, SSL_aECDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1420 | /* ssl_cipher_apply_rule(0, 0, SSL_aDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); */ | 1390 | /* ssl_cipher_apply_rule(0, 0, SSL_aDH, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); */ |
1421 | ssl_cipher_apply_rule(0, SSL_kRSA, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1391 | ssl_cipher_apply_rule(0, SSL_kRSA, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1422 | ssl_cipher_apply_rule(0, SSL_kPSK, 0,0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1392 | ssl_cipher_apply_rule(0, SSL_kPSK, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1423 | ssl_cipher_apply_rule(0, SSL_kKRB5, 0,0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1393 | ssl_cipher_apply_rule(0, SSL_kKRB5, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1424 | 1394 | ||
1425 | /* RC4 is sort-of broken -- move the the end */ | 1395 | /* RC4 is sort-of broken -- move the the end */ |
1426 | ssl_cipher_apply_rule(0, 0, 0, SSL_RC4, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); | 1396 | ssl_cipher_apply_rule(0, 0, 0, SSL_RC4, 0, 0, 0, CIPHER_ORD, -1, &head, &tail); |
1427 | 1397 | ||
1428 | /* Now sort by symmetric encryption strength. The above ordering remains | 1398 | /* Now sort by symmetric encryption strength. The above ordering remains |
1429 | * in force within each class */ | 1399 | * in force within each class */ |
1430 | if (!ssl_cipher_strength_sort(&head, &tail)) | 1400 | if (!ssl_cipher_strength_sort(&head, &tail)) { |
1431 | { | ||
1432 | OPENSSL_free(co_list); | 1401 | OPENSSL_free(co_list); |
1433 | return NULL; | 1402 | return NULL; |
1434 | } | 1403 | } |
1435 | 1404 | ||
1436 | /* Now disable everything (maintaining the ordering!) */ | 1405 | /* Now disable everything (maintaining the ordering!) */ |
1437 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); | 1406 | ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); |
@@ -1448,15 +1417,14 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1448 | num_of_group_aliases = sizeof(cipher_aliases) / sizeof(SSL_CIPHER); | 1417 | num_of_group_aliases = sizeof(cipher_aliases) / sizeof(SSL_CIPHER); |
1449 | num_of_alias_max = num_of_ciphers + num_of_group_aliases + 1; | 1418 | num_of_alias_max = num_of_ciphers + num_of_group_aliases + 1; |
1450 | ca_list = OPENSSL_malloc(sizeof(SSL_CIPHER *) * num_of_alias_max); | 1419 | ca_list = OPENSSL_malloc(sizeof(SSL_CIPHER *) * num_of_alias_max); |
1451 | if (ca_list == NULL) | 1420 | if (ca_list == NULL) { |
1452 | { | ||
1453 | OPENSSL_free(co_list); | 1421 | OPENSSL_free(co_list); |
1454 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST,ERR_R_MALLOC_FAILURE); | 1422 | SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST, ERR_R_MALLOC_FAILURE); |
1455 | return(NULL); /* Failure */ | 1423 | return(NULL); /* Failure */ |
1456 | } | 1424 | } |
1457 | ssl_cipher_collect_aliases(ca_list, num_of_group_aliases, | 1425 | ssl_cipher_collect_aliases(ca_list, num_of_group_aliases, |
1458 | disabled_mkey, disabled_auth, disabled_enc, | 1426 | disabled_mkey, disabled_auth, disabled_enc, |
1459 | disabled_mac, disabled_ssl, head); | 1427 | disabled_mac, disabled_ssl, head); |
1460 | 1428 | ||
1461 | /* | 1429 | /* |
1462 | * If the rule_string begins with DEFAULT, apply the default rule | 1430 | * If the rule_string begins with DEFAULT, apply the default rule |
@@ -1464,14 +1432,13 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1464 | */ | 1432 | */ |
1465 | ok = 1; | 1433 | ok = 1; |
1466 | rule_p = rule_str; | 1434 | rule_p = rule_str; |
1467 | if (strncmp(rule_str,"DEFAULT",7) == 0) | 1435 | if (strncmp(rule_str, "DEFAULT", 7) == 0) { |
1468 | { | ||
1469 | ok = ssl_cipher_process_rulestr(SSL_DEFAULT_CIPHER_LIST, | 1436 | ok = ssl_cipher_process_rulestr(SSL_DEFAULT_CIPHER_LIST, |
1470 | &head, &tail, ca_list); | 1437 | &head, &tail, ca_list); |
1471 | rule_p += 7; | 1438 | rule_p += 7; |
1472 | if (*rule_p == ':') | 1439 | if (*rule_p == ':') |
1473 | rule_p++; | 1440 | rule_p++; |
1474 | } | 1441 | } |
1475 | 1442 | ||
1476 | if (ok && (strlen(rule_p) > 0)) | 1443 | if (ok && (strlen(rule_p) > 0)) |
1477 | ok = ssl_cipher_process_rulestr(rule_p, &head, &tail, ca_list); | 1444 | ok = ssl_cipher_process_rulestr(rule_p, &head, &tail, ca_list); |
@@ -1479,65 +1446,63 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1479 | OPENSSL_free((void *)ca_list); /* Not needed anymore */ | 1446 | OPENSSL_free((void *)ca_list); /* Not needed anymore */ |
1480 | 1447 | ||
1481 | if (!ok) | 1448 | if (!ok) |
1482 | { /* Rule processing failure */ | 1449 | { /* Rule processing failure */ |
1483 | OPENSSL_free(co_list); | 1450 | OPENSSL_free(co_list); |
1484 | return(NULL); | 1451 | return (NULL); |
1485 | } | 1452 | } |
1486 | 1453 | ||
1487 | /* | 1454 | /* |
1488 | * Allocate new "cipherstack" for the result, return with error | 1455 | * Allocate new "cipherstack" for the result, return with error |
1489 | * if we cannot get one. | 1456 | * if we cannot get one. |
1490 | */ | 1457 | */ |
1491 | if ((cipherstack = sk_SSL_CIPHER_new_null()) == NULL) | 1458 | if ((cipherstack = sk_SSL_CIPHER_new_null()) == NULL) { |
1492 | { | ||
1493 | OPENSSL_free(co_list); | 1459 | OPENSSL_free(co_list); |
1494 | return(NULL); | 1460 | return (NULL); |
1495 | } | 1461 | } |
1496 | 1462 | ||
1497 | /* | 1463 | /* |
1498 | * The cipher selection for the list is done. The ciphers are added | 1464 | * The cipher selection for the list is done. The ciphers are added |
1499 | * to the resulting precedence to the STACK_OF(SSL_CIPHER). | 1465 | * to the resulting precedence to the STACK_OF(SSL_CIPHER). |
1500 | */ | 1466 | */ |
1501 | for (curr = head; curr != NULL; curr = curr->next) | 1467 | for (curr = head; curr != NULL; curr = curr->next) { |
1502 | { | ||
1503 | #ifdef OPENSSL_FIPS | 1468 | #ifdef OPENSSL_FIPS |
1504 | if (curr->active && (!FIPS_mode() || curr->cipher->algo_strength & SSL_FIPS)) | 1469 | if (curr->active && (!FIPS_mode() || curr->cipher->algo_strength & SSL_FIPS)) |
1505 | #else | 1470 | #else |
1506 | if (curr->active) | 1471 | if (curr->active) |
1507 | #endif | 1472 | #endif |
1508 | { | 1473 | { |
1509 | sk_SSL_CIPHER_push(cipherstack, curr->cipher); | 1474 | sk_SSL_CIPHER_push(cipherstack, curr->cipher); |
1510 | #ifdef CIPHER_DEBUG | 1475 | #ifdef CIPHER_DEBUG |
1511 | printf("<%s>\n",curr->cipher->name); | 1476 | printf("<%s>\n", curr->cipher->name); |
1512 | #endif | 1477 | #endif |
1513 | } | ||
1514 | } | 1478 | } |
1479 | } | ||
1515 | OPENSSL_free(co_list); /* Not needed any longer */ | 1480 | OPENSSL_free(co_list); /* Not needed any longer */ |
1516 | 1481 | ||
1517 | tmp_cipher_list = sk_SSL_CIPHER_dup(cipherstack); | 1482 | tmp_cipher_list = sk_SSL_CIPHER_dup(cipherstack); |
1518 | if (tmp_cipher_list == NULL) | 1483 | if (tmp_cipher_list == NULL) { |
1519 | { | ||
1520 | sk_SSL_CIPHER_free(cipherstack); | 1484 | sk_SSL_CIPHER_free(cipherstack); |
1521 | return NULL; | 1485 | return NULL; |
1522 | } | 1486 | } |
1523 | if (*cipher_list != NULL) | 1487 | if (*cipher_list != NULL) |
1524 | sk_SSL_CIPHER_free(*cipher_list); | 1488 | sk_SSL_CIPHER_free(*cipher_list); |
1525 | *cipher_list = cipherstack; | 1489 | *cipher_list = cipherstack; |
1526 | if (*cipher_list_by_id != NULL) | 1490 | if (*cipher_list_by_id != NULL) |
1527 | sk_SSL_CIPHER_free(*cipher_list_by_id); | 1491 | sk_SSL_CIPHER_free(*cipher_list_by_id); |
1528 | *cipher_list_by_id = tmp_cipher_list; | 1492 | *cipher_list_by_id = tmp_cipher_list; |
1529 | (void)sk_SSL_CIPHER_set_cmp_func(*cipher_list_by_id,ssl_cipher_ptr_id_cmp); | 1493 | (void)sk_SSL_CIPHER_set_cmp_func(*cipher_list_by_id, ssl_cipher_ptr_id_cmp); |
1530 | 1494 | ||
1531 | sk_SSL_CIPHER_sort(*cipher_list_by_id); | 1495 | sk_SSL_CIPHER_sort(*cipher_list_by_id); |
1532 | return(cipherstack); | 1496 | return (cipherstack); |
1533 | } | 1497 | } |
1534 | 1498 | ||
1535 | char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | 1499 | char |
1536 | { | 1500 | *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) |
1537 | int is_export,pkl,kl; | 1501 | { |
1538 | const char *ver,*exp_str; | 1502 | int is_export, pkl, kl; |
1539 | const char *kx,*au,*enc,*mac; | 1503 | const char *ver, *exp_str; |
1540 | unsigned long alg_mkey,alg_auth,alg_enc,alg_mac,alg_ssl,alg2; | 1504 | const char *kx, *au, *enc, *mac; |
1505 | unsigned long alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl, alg2; | ||
1541 | #ifdef KSSL_DEBUG | 1506 | #ifdef KSSL_DEBUG |
1542 | static const char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s AL=%lx/%lx/%lx/%lx/%lx\n"; | 1507 | static const char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s AL=%lx/%lx/%lx/%lx/%lx\n"; |
1543 | #else | 1508 | #else |
@@ -1550,13 +1515,13 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1550 | alg_mac = cipher->algorithm_mac; | 1515 | alg_mac = cipher->algorithm_mac; |
1551 | alg_ssl = cipher->algorithm_ssl; | 1516 | alg_ssl = cipher->algorithm_ssl; |
1552 | 1517 | ||
1553 | alg2=cipher->algorithm2; | 1518 | alg2 = cipher->algorithm2; |
1519 | |||
1520 | is_export = SSL_C_IS_EXPORT(cipher); | ||
1521 | pkl = SSL_C_EXPORT_PKEYLENGTH(cipher); | ||
1522 | kl = SSL_C_EXPORT_KEYLENGTH(cipher); | ||
1523 | exp_str = is_export?" export":""; | ||
1554 | 1524 | ||
1555 | is_export=SSL_C_IS_EXPORT(cipher); | ||
1556 | pkl=SSL_C_EXPORT_PKEYLENGTH(cipher); | ||
1557 | kl=SSL_C_EXPORT_KEYLENGTH(cipher); | ||
1558 | exp_str=is_export?" export":""; | ||
1559 | |||
1560 | if (alg_ssl & SSL_SSLV2) | 1525 | if (alg_ssl & SSL_SSLV2) |
1561 | ver="SSLv2"; | 1526 | ver="SSLv2"; |
1562 | else if (alg_ssl & SSL_SSLV3) | 1527 | else if (alg_ssl & SSL_SSLV3) |
@@ -1566,10 +1531,9 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1566 | else | 1531 | else |
1567 | ver="unknown"; | 1532 | ver="unknown"; |
1568 | 1533 | ||
1569 | switch (alg_mkey) | 1534 | switch (alg_mkey) { |
1570 | { | ||
1571 | case SSL_kRSA: | 1535 | case SSL_kRSA: |
1572 | kx=is_export?(pkl == 512 ? "RSA(512)" : "RSA(1024)"):"RSA"; | 1536 | kx = is_export?(pkl == 512 ? "RSA(512)" : "RSA(1024)"):"RSA"; |
1573 | break; | 1537 | break; |
1574 | case SSL_kDHr: | 1538 | case SSL_kDHr: |
1575 | kx="DH/RSA"; | 1539 | kx="DH/RSA"; |
@@ -1577,11 +1541,11 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1577 | case SSL_kDHd: | 1541 | case SSL_kDHd: |
1578 | kx="DH/DSS"; | 1542 | kx="DH/DSS"; |
1579 | break; | 1543 | break; |
1580 | case SSL_kKRB5: | 1544 | case SSL_kKRB5: |
1581 | kx="KRB5"; | 1545 | kx="KRB5"; |
1582 | break; | 1546 | break; |
1583 | case SSL_kEDH: | 1547 | case SSL_kEDH: |
1584 | kx=is_export?(pkl == 512 ? "DH(512)" : "DH(1024)"):"DH"; | 1548 | kx = is_export?(pkl == 512 ? "DH(512)" : "DH(1024)"):"DH"; |
1585 | break; | 1549 | break; |
1586 | case SSL_kECDHr: | 1550 | case SSL_kECDHr: |
1587 | kx="ECDH/RSA"; | 1551 | kx="ECDH/RSA"; |
@@ -1600,10 +1564,9 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1600 | break; | 1564 | break; |
1601 | default: | 1565 | default: |
1602 | kx="unknown"; | 1566 | kx="unknown"; |
1603 | } | 1567 | } |
1604 | 1568 | ||
1605 | switch (alg_auth) | 1569 | switch (alg_auth) { |
1606 | { | ||
1607 | case SSL_aRSA: | 1570 | case SSL_aRSA: |
1608 | au="RSA"; | 1571 | au="RSA"; |
1609 | break; | 1572 | break; |
@@ -1613,10 +1576,10 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1613 | case SSL_aDH: | 1576 | case SSL_aDH: |
1614 | au="DH"; | 1577 | au="DH"; |
1615 | break; | 1578 | break; |
1616 | case SSL_aKRB5: | 1579 | case SSL_aKRB5: |
1617 | au="KRB5"; | 1580 | au="KRB5"; |
1618 | break; | 1581 | break; |
1619 | case SSL_aECDH: | 1582 | case SSL_aECDH: |
1620 | au="ECDH"; | 1583 | au="ECDH"; |
1621 | break; | 1584 | break; |
1622 | case SSL_aNULL: | 1585 | case SSL_aNULL: |
@@ -1631,22 +1594,21 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1631 | default: | 1594 | default: |
1632 | au="unknown"; | 1595 | au="unknown"; |
1633 | break; | 1596 | break; |
1634 | } | 1597 | } |
1635 | 1598 | ||
1636 | switch (alg_enc) | 1599 | switch (alg_enc) { |
1637 | { | ||
1638 | case SSL_DES: | 1600 | case SSL_DES: |
1639 | enc=(is_export && kl == 5)?"DES(40)":"DES(56)"; | 1601 | enc = (is_export && kl == 5)?"DES(40)":"DES(56)"; |
1640 | break; | 1602 | break; |
1641 | case SSL_3DES: | 1603 | case SSL_3DES: |
1642 | enc="3DES(168)"; | 1604 | enc="3DES(168)"; |
1643 | break; | 1605 | break; |
1644 | case SSL_RC4: | 1606 | case SSL_RC4: |
1645 | enc=is_export?(kl == 5 ? "RC4(40)" : "RC4(56)") | 1607 | enc = is_export?(kl == 5 ? "RC4(40)" : "RC4(56)") |
1646 | :((alg2&SSL2_CF_8_BYTE_ENC)?"RC4(64)":"RC4(128)"); | 1608 | :((alg2&SSL2_CF_8_BYTE_ENC)?"RC4(64)":"RC4(128)"); |
1647 | break; | 1609 | break; |
1648 | case SSL_RC2: | 1610 | case SSL_RC2: |
1649 | enc=is_export?(kl == 5 ? "RC2(40)" : "RC2(56)"):"RC2(128)"; | 1611 | enc = is_export?(kl == 5 ? "RC2(40)" : "RC2(56)"):"RC2(128)"; |
1650 | break; | 1612 | break; |
1651 | case SSL_IDEA: | 1613 | case SSL_IDEA: |
1652 | enc="IDEA(128)"; | 1614 | enc="IDEA(128)"; |
@@ -1678,10 +1640,9 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1678 | default: | 1640 | default: |
1679 | enc="unknown"; | 1641 | enc="unknown"; |
1680 | break; | 1642 | break; |
1681 | } | 1643 | } |
1682 | 1644 | ||
1683 | switch (alg_mac) | 1645 | switch (alg_mac) { |
1684 | { | ||
1685 | case SSL_MD5: | 1646 | case SSL_MD5: |
1686 | mac="MD5"; | 1647 | mac="MD5"; |
1687 | break; | 1648 | break; |
@@ -1700,108 +1661,119 @@ char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1700 | default: | 1661 | default: |
1701 | mac="unknown"; | 1662 | mac="unknown"; |
1702 | break; | 1663 | break; |
1703 | } | 1664 | } |
1704 | 1665 | ||
1705 | if (buf == NULL) | 1666 | if (buf == NULL) { |
1706 | { | 1667 | len = 128; |
1707 | len=128; | 1668 | buf = OPENSSL_malloc(len); |
1708 | buf=OPENSSL_malloc(len); | 1669 | if (buf == NULL) |
1709 | if (buf == NULL) return("OPENSSL_malloc Error"); | 1670 | return("OPENSSL_malloc Error"); |
1710 | } | 1671 | } else if (len < 128) |
1711 | else if (len < 128) | 1672 | return("Buffer too small"); |
1712 | return("Buffer too small"); | ||
1713 | 1673 | ||
1714 | #ifdef KSSL_DEBUG | 1674 | #ifdef KSSL_DEBUG |
1715 | BIO_snprintf(buf,len,format,cipher->name,ver,kx,au,enc,mac,exp_str,alg_mkey,alg_auth,alg_enc,alg_mac,alg_ssl); | 1675 | BIO_snprintf(buf, len, format, cipher->name, ver, kx, au, enc, mac, exp_str, alg_mkey, alg_auth, alg_enc, alg_mac, alg_ssl); |
1716 | #else | 1676 | #else |
1717 | BIO_snprintf(buf,len,format,cipher->name,ver,kx,au,enc,mac,exp_str); | 1677 | BIO_snprintf(buf, len, format, cipher->name, ver, kx, au, enc, mac, exp_str); |
1718 | #endif /* KSSL_DEBUG */ | 1678 | #endif /* KSSL_DEBUG */ |
1719 | return(buf); | 1679 | return (buf); |
1720 | } | 1680 | } |
1721 | 1681 | ||
1722 | char *SSL_CIPHER_get_version(const SSL_CIPHER *c) | 1682 | char |
1723 | { | 1683 | *SSL_CIPHER_get_version(const SSL_CIPHER *c) |
1684 | { | ||
1724 | int i; | 1685 | int i; |
1725 | 1686 | ||
1726 | if (c == NULL) return("(NONE)"); | 1687 | if (c == NULL) |
1727 | i=(int)(c->id>>24L); | 1688 | return("(NONE)"); |
1689 | i = (int)(c->id >> 24L); | ||
1728 | if (i == 3) | 1690 | if (i == 3) |
1729 | return("TLSv1/SSLv3"); | 1691 | return("TLSv1/SSLv3"); |
1730 | else if (i == 2) | 1692 | else if (i == 2) |
1731 | return("SSLv2"); | 1693 | return("SSLv2"); |
1732 | else | 1694 | else |
1733 | return("unknown"); | 1695 | return("unknown"); |
1734 | } | 1696 | } |
1735 | 1697 | ||
1736 | /* return the actual cipher being used */ | 1698 | /* return the actual cipher being used */ |
1737 | const char *SSL_CIPHER_get_name(const SSL_CIPHER *c) | 1699 | const char |
1738 | { | 1700 | *SSL_CIPHER_get_name(const SSL_CIPHER *c) |
1701 | { | ||
1739 | if (c != NULL) | 1702 | if (c != NULL) |
1740 | return(c->name); | 1703 | return (c->name); |
1741 | return("(NONE)"); | 1704 | return("(NONE)"); |
1742 | } | 1705 | } |
1743 | 1706 | ||
1744 | /* number of bits for symmetric cipher */ | 1707 | /* number of bits for symmetric cipher */ |
1745 | int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits) | 1708 | int |
1746 | { | 1709 | SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits) |
1747 | int ret=0; | 1710 | { |
1711 | int ret = 0; | ||
1748 | 1712 | ||
1749 | if (c != NULL) | 1713 | if (c != NULL) { |
1750 | { | 1714 | if (alg_bits != NULL) |
1751 | if (alg_bits != NULL) *alg_bits = c->alg_bits; | 1715 | *alg_bits = c->alg_bits; |
1752 | ret = c->strength_bits; | 1716 | ret = c->strength_bits; |
1753 | } | ||
1754 | return(ret); | ||
1755 | } | 1717 | } |
1718 | return (ret); | ||
1719 | } | ||
1756 | 1720 | ||
1757 | unsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c) | 1721 | unsigned long |
1758 | { | 1722 | SSL_CIPHER_get_id(const SSL_CIPHER *c) |
1723 | { | ||
1759 | return c->id; | 1724 | return c->id; |
1760 | } | 1725 | } |
1761 | 1726 | ||
1762 | SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n) | 1727 | SSL_COMP |
1763 | { | 1728 | *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n) |
1729 | { | ||
1764 | SSL_COMP *ctmp; | 1730 | SSL_COMP *ctmp; |
1765 | int i,nn; | 1731 | int i, nn; |
1766 | 1732 | ||
1767 | if ((n == 0) || (sk == NULL)) return(NULL); | 1733 | if ((n == 0) |
1768 | nn=sk_SSL_COMP_num(sk); | 1734 | || (sk == NULL)) return (NULL); |
1769 | for (i=0; i<nn; i++) | 1735 | nn = sk_SSL_COMP_num(sk); |
1770 | { | 1736 | for (i = 0; i < nn; i++) { |
1771 | ctmp=sk_SSL_COMP_value(sk,i); | 1737 | ctmp = sk_SSL_COMP_value(sk, i); |
1772 | if (ctmp->id == n) | 1738 | if (ctmp->id == n) |
1773 | return(ctmp); | 1739 | return (ctmp); |
1774 | } | ||
1775 | return(NULL); | ||
1776 | } | 1740 | } |
1741 | return (NULL); | ||
1742 | } | ||
1777 | 1743 | ||
1778 | #ifdef OPENSSL_NO_COMP | 1744 | #ifdef OPENSSL_NO_COMP |
1779 | void *SSL_COMP_get_compression_methods(void) | 1745 | void |
1780 | { | 1746 | *SSL_COMP_get_compression_methods(void) |
1747 | { | ||
1781 | return NULL; | 1748 | return NULL; |
1782 | } | 1749 | } |
1783 | int SSL_COMP_add_compression_method(int id, void *cm) | 1750 | |
1784 | { | 1751 | int |
1752 | SSL_COMP_add_compression_method(int id, void *cm) | ||
1753 | { | ||
1785 | return 1; | 1754 | return 1; |
1786 | } | 1755 | } |
1787 | 1756 | ||
1788 | const char *SSL_COMP_get_name(const void *comp) | 1757 | const char |
1789 | { | 1758 | *SSL_COMP_get_name(const void *comp) |
1759 | { | ||
1790 | return NULL; | 1760 | return NULL; |
1791 | } | 1761 | } |
1792 | #else | 1762 | #else |
1793 | STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void) | 1763 | STACK_OF(SSL_COMP) |
1794 | { | 1764 | *SSL_COMP_get_compression_methods(void) |
1765 | { | ||
1795 | load_builtin_compressions(); | 1766 | load_builtin_compressions(); |
1796 | return(ssl_comp_methods); | 1767 | return (ssl_comp_methods); |
1797 | } | 1768 | } |
1798 | 1769 | ||
1799 | int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm) | 1770 | int |
1800 | { | 1771 | SSL_COMP_add_compression_method(int id, COMP_METHOD *cm) |
1772 | { | ||
1801 | SSL_COMP *comp; | 1773 | SSL_COMP *comp; |
1802 | 1774 | ||
1803 | if (cm == NULL || cm->type == NID_undef) | 1775 | if (cm == NULL || cm->type == NID_undef) |
1804 | return 1; | 1776 | return 1; |
1805 | 1777 | ||
1806 | /* According to draft-ietf-tls-compression-04.txt, the | 1778 | /* According to draft-ietf-tls-compression-04.txt, the |
1807 | compression number ranges should be the following: | 1779 | compression number ranges should be the following: |
@@ -1809,45 +1781,40 @@ int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm) | |||
1809 | 0 to 63: methods defined by the IETF | 1781 | 0 to 63: methods defined by the IETF |
1810 | 64 to 192: external party methods assigned by IANA | 1782 | 64 to 192: external party methods assigned by IANA |
1811 | 193 to 255: reserved for private use */ | 1783 | 193 to 255: reserved for private use */ |
1812 | if (id < 193 || id > 255) | 1784 | if (id < 193 || id > 255) { |
1813 | { | 1785 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE); |
1814 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE); | ||
1815 | return 0; | 1786 | return 0; |
1816 | } | 1787 | } |
1817 | 1788 | ||
1818 | MemCheck_off(); | 1789 | MemCheck_off(); |
1819 | comp=(SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); | 1790 | comp = (SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); |
1820 | comp->id=id; | 1791 | comp->id = id; |
1821 | comp->method=cm; | 1792 | comp->method = cm; |
1822 | load_builtin_compressions(); | 1793 | load_builtin_compressions(); |
1823 | if (ssl_comp_methods | 1794 | if (ssl_comp_methods |
1824 | && sk_SSL_COMP_find(ssl_comp_methods,comp) >= 0) | 1795 | && sk_SSL_COMP_find(ssl_comp_methods, comp) >= 0) { |
1825 | { | ||
1826 | OPENSSL_free(comp); | 1796 | OPENSSL_free(comp); |
1827 | MemCheck_on(); | 1797 | MemCheck_on(); |
1828 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,SSL_R_DUPLICATE_COMPRESSION_ID); | 1798 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD, SSL_R_DUPLICATE_COMPRESSION_ID); |
1829 | return(1); | 1799 | return (1); |
1830 | } | 1800 | } else if ((ssl_comp_methods == NULL) |
1831 | else if ((ssl_comp_methods == NULL) | 1801 | || !sk_SSL_COMP_push(ssl_comp_methods, comp)) { |
1832 | || !sk_SSL_COMP_push(ssl_comp_methods,comp)) | ||
1833 | { | ||
1834 | OPENSSL_free(comp); | 1802 | OPENSSL_free(comp); |
1835 | MemCheck_on(); | 1803 | MemCheck_on(); |
1836 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,ERR_R_MALLOC_FAILURE); | 1804 | SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD, ERR_R_MALLOC_FAILURE); |
1837 | return(1); | 1805 | return (1); |
1838 | } | 1806 | } else { |
1839 | else | ||
1840 | { | ||
1841 | MemCheck_on(); | 1807 | MemCheck_on(); |
1842 | return(0); | 1808 | return (0); |
1843 | } | ||
1844 | } | 1809 | } |
1810 | } | ||
1845 | 1811 | ||
1846 | const char *SSL_COMP_get_name(const COMP_METHOD *comp) | 1812 | const char |
1847 | { | 1813 | *SSL_COMP_get_name(const COMP_METHOD *comp) |
1814 | { | ||
1848 | if (comp) | 1815 | if (comp) |
1849 | return comp->name; | 1816 | return comp->name; |
1850 | return NULL; | 1817 | return NULL; |
1851 | } | 1818 | } |
1852 | 1819 | ||
1853 | #endif | 1820 | #endif |
diff --git a/src/lib/libssl/ssl_err.c b/src/lib/libssl/ssl_err.c index 370fb57e3b..67ba3c7699 100644 --- a/src/lib/libssl/ssl_err.c +++ b/src/lib/libssl/ssl_err.c | |||
@@ -68,543 +68,541 @@ | |||
68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_SSL,func,0) | 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_SSL,func,0) |
69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_SSL,0,reason) | 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_SSL,0,reason) |
70 | 70 | ||
71 | static ERR_STRING_DATA SSL_str_functs[]= | 71 | static ERR_STRING_DATA SSL_str_functs[]= { |
72 | { | 72 | {ERR_FUNC(SSL_F_CLIENT_CERTIFICATE), "CLIENT_CERTIFICATE"}, |
73 | {ERR_FUNC(SSL_F_CLIENT_CERTIFICATE), "CLIENT_CERTIFICATE"}, | 73 | {ERR_FUNC(SSL_F_CLIENT_FINISHED), "CLIENT_FINISHED"}, |
74 | {ERR_FUNC(SSL_F_CLIENT_FINISHED), "CLIENT_FINISHED"}, | 74 | {ERR_FUNC(SSL_F_CLIENT_HELLO), "CLIENT_HELLO"}, |
75 | {ERR_FUNC(SSL_F_CLIENT_HELLO), "CLIENT_HELLO"}, | 75 | {ERR_FUNC(SSL_F_CLIENT_MASTER_KEY), "CLIENT_MASTER_KEY"}, |
76 | {ERR_FUNC(SSL_F_CLIENT_MASTER_KEY), "CLIENT_MASTER_KEY"}, | 76 | {ERR_FUNC(SSL_F_D2I_SSL_SESSION), "d2i_SSL_SESSION"}, |
77 | {ERR_FUNC(SSL_F_D2I_SSL_SESSION), "d2i_SSL_SESSION"}, | 77 | {ERR_FUNC(SSL_F_DO_DTLS1_WRITE), "DO_DTLS1_WRITE"}, |
78 | {ERR_FUNC(SSL_F_DO_DTLS1_WRITE), "DO_DTLS1_WRITE"}, | 78 | {ERR_FUNC(SSL_F_DO_SSL3_WRITE), "DO_SSL3_WRITE"}, |
79 | {ERR_FUNC(SSL_F_DO_SSL3_WRITE), "DO_SSL3_WRITE"}, | 79 | {ERR_FUNC(SSL_F_DTLS1_ACCEPT), "DTLS1_ACCEPT"}, |
80 | {ERR_FUNC(SSL_F_DTLS1_ACCEPT), "DTLS1_ACCEPT"}, | 80 | {ERR_FUNC(SSL_F_DTLS1_ADD_CERT_TO_BUF), "DTLS1_ADD_CERT_TO_BUF"}, |
81 | {ERR_FUNC(SSL_F_DTLS1_ADD_CERT_TO_BUF), "DTLS1_ADD_CERT_TO_BUF"}, | 81 | {ERR_FUNC(SSL_F_DTLS1_BUFFER_RECORD), "DTLS1_BUFFER_RECORD"}, |
82 | {ERR_FUNC(SSL_F_DTLS1_BUFFER_RECORD), "DTLS1_BUFFER_RECORD"}, | 82 | {ERR_FUNC(SSL_F_DTLS1_CHECK_TIMEOUT_NUM), "DTLS1_CHECK_TIMEOUT_NUM"}, |
83 | {ERR_FUNC(SSL_F_DTLS1_CHECK_TIMEOUT_NUM), "DTLS1_CHECK_TIMEOUT_NUM"}, | 83 | {ERR_FUNC(SSL_F_DTLS1_CLIENT_HELLO), "DTLS1_CLIENT_HELLO"}, |
84 | {ERR_FUNC(SSL_F_DTLS1_CLIENT_HELLO), "DTLS1_CLIENT_HELLO"}, | 84 | {ERR_FUNC(SSL_F_DTLS1_CONNECT), "DTLS1_CONNECT"}, |
85 | {ERR_FUNC(SSL_F_DTLS1_CONNECT), "DTLS1_CONNECT"}, | 85 | {ERR_FUNC(SSL_F_DTLS1_ENC), "DTLS1_ENC"}, |
86 | {ERR_FUNC(SSL_F_DTLS1_ENC), "DTLS1_ENC"}, | 86 | {ERR_FUNC(SSL_F_DTLS1_GET_HELLO_VERIFY), "DTLS1_GET_HELLO_VERIFY"}, |
87 | {ERR_FUNC(SSL_F_DTLS1_GET_HELLO_VERIFY), "DTLS1_GET_HELLO_VERIFY"}, | 87 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE), "DTLS1_GET_MESSAGE"}, |
88 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE), "DTLS1_GET_MESSAGE"}, | 88 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT), "DTLS1_GET_MESSAGE_FRAGMENT"}, |
89 | {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT), "DTLS1_GET_MESSAGE_FRAGMENT"}, | 89 | {ERR_FUNC(SSL_F_DTLS1_GET_RECORD), "DTLS1_GET_RECORD"}, |
90 | {ERR_FUNC(SSL_F_DTLS1_GET_RECORD), "DTLS1_GET_RECORD"}, | 90 | {ERR_FUNC(SSL_F_DTLS1_HANDLE_TIMEOUT), "DTLS1_HANDLE_TIMEOUT"}, |
91 | {ERR_FUNC(SSL_F_DTLS1_HANDLE_TIMEOUT), "DTLS1_HANDLE_TIMEOUT"}, | 91 | {ERR_FUNC(SSL_F_DTLS1_HEARTBEAT), "DTLS1_HEARTBEAT"}, |
92 | {ERR_FUNC(SSL_F_DTLS1_HEARTBEAT), "DTLS1_HEARTBEAT"}, | 92 | {ERR_FUNC(SSL_F_DTLS1_OUTPUT_CERT_CHAIN), "DTLS1_OUTPUT_CERT_CHAIN"}, |
93 | {ERR_FUNC(SSL_F_DTLS1_OUTPUT_CERT_CHAIN), "DTLS1_OUTPUT_CERT_CHAIN"}, | 93 | {ERR_FUNC(SSL_F_DTLS1_PREPROCESS_FRAGMENT), "DTLS1_PREPROCESS_FRAGMENT"}, |
94 | {ERR_FUNC(SSL_F_DTLS1_PREPROCESS_FRAGMENT), "DTLS1_PREPROCESS_FRAGMENT"}, | 94 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE), "DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE"}, |
95 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE), "DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE"}, | 95 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_RECORD), "DTLS1_PROCESS_RECORD"}, |
96 | {ERR_FUNC(SSL_F_DTLS1_PROCESS_RECORD), "DTLS1_PROCESS_RECORD"}, | 96 | {ERR_FUNC(SSL_F_DTLS1_READ_BYTES), "DTLS1_READ_BYTES"}, |
97 | {ERR_FUNC(SSL_F_DTLS1_READ_BYTES), "DTLS1_READ_BYTES"}, | 97 | {ERR_FUNC(SSL_F_DTLS1_READ_FAILED), "DTLS1_READ_FAILED"}, |
98 | {ERR_FUNC(SSL_F_DTLS1_READ_FAILED), "DTLS1_READ_FAILED"}, | 98 | {ERR_FUNC(SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST), "DTLS1_SEND_CERTIFICATE_REQUEST"}, |
99 | {ERR_FUNC(SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST), "DTLS1_SEND_CERTIFICATE_REQUEST"}, | 99 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE), "DTLS1_SEND_CLIENT_CERTIFICATE"}, |
100 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE), "DTLS1_SEND_CLIENT_CERTIFICATE"}, | 100 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE), "DTLS1_SEND_CLIENT_KEY_EXCHANGE"}, |
101 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE), "DTLS1_SEND_CLIENT_KEY_EXCHANGE"}, | 101 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_VERIFY), "DTLS1_SEND_CLIENT_VERIFY"}, |
102 | {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_VERIFY), "DTLS1_SEND_CLIENT_VERIFY"}, | 102 | {ERR_FUNC(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST), "DTLS1_SEND_HELLO_VERIFY_REQUEST"}, |
103 | {ERR_FUNC(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST), "DTLS1_SEND_HELLO_VERIFY_REQUEST"}, | 103 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE), "DTLS1_SEND_SERVER_CERTIFICATE"}, |
104 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE), "DTLS1_SEND_SERVER_CERTIFICATE"}, | 104 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_HELLO), "DTLS1_SEND_SERVER_HELLO"}, |
105 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_HELLO), "DTLS1_SEND_SERVER_HELLO"}, | 105 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE), "DTLS1_SEND_SERVER_KEY_EXCHANGE"}, |
106 | {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE), "DTLS1_SEND_SERVER_KEY_EXCHANGE"}, | 106 | {ERR_FUNC(SSL_F_DTLS1_WRITE_APP_DATA_BYTES), "DTLS1_WRITE_APP_DATA_BYTES"}, |
107 | {ERR_FUNC(SSL_F_DTLS1_WRITE_APP_DATA_BYTES), "DTLS1_WRITE_APP_DATA_BYTES"}, | 107 | {ERR_FUNC(SSL_F_GET_CLIENT_FINISHED), "GET_CLIENT_FINISHED"}, |
108 | {ERR_FUNC(SSL_F_GET_CLIENT_FINISHED), "GET_CLIENT_FINISHED"}, | 108 | {ERR_FUNC(SSL_F_GET_CLIENT_HELLO), "GET_CLIENT_HELLO"}, |
109 | {ERR_FUNC(SSL_F_GET_CLIENT_HELLO), "GET_CLIENT_HELLO"}, | 109 | {ERR_FUNC(SSL_F_GET_CLIENT_MASTER_KEY), "GET_CLIENT_MASTER_KEY"}, |
110 | {ERR_FUNC(SSL_F_GET_CLIENT_MASTER_KEY), "GET_CLIENT_MASTER_KEY"}, | 110 | {ERR_FUNC(SSL_F_GET_SERVER_FINISHED), "GET_SERVER_FINISHED"}, |
111 | {ERR_FUNC(SSL_F_GET_SERVER_FINISHED), "GET_SERVER_FINISHED"}, | 111 | {ERR_FUNC(SSL_F_GET_SERVER_HELLO), "GET_SERVER_HELLO"}, |
112 | {ERR_FUNC(SSL_F_GET_SERVER_HELLO), "GET_SERVER_HELLO"}, | 112 | {ERR_FUNC(SSL_F_GET_SERVER_VERIFY), "GET_SERVER_VERIFY"}, |
113 | {ERR_FUNC(SSL_F_GET_SERVER_VERIFY), "GET_SERVER_VERIFY"}, | 113 | {ERR_FUNC(SSL_F_I2D_SSL_SESSION), "i2d_SSL_SESSION"}, |
114 | {ERR_FUNC(SSL_F_I2D_SSL_SESSION), "i2d_SSL_SESSION"}, | 114 | {ERR_FUNC(SSL_F_READ_N), "READ_N"}, |
115 | {ERR_FUNC(SSL_F_READ_N), "READ_N"}, | 115 | {ERR_FUNC(SSL_F_REQUEST_CERTIFICATE), "REQUEST_CERTIFICATE"}, |
116 | {ERR_FUNC(SSL_F_REQUEST_CERTIFICATE), "REQUEST_CERTIFICATE"}, | 116 | {ERR_FUNC(SSL_F_SERVER_FINISH), "SERVER_FINISH"}, |
117 | {ERR_FUNC(SSL_F_SERVER_FINISH), "SERVER_FINISH"}, | 117 | {ERR_FUNC(SSL_F_SERVER_HELLO), "SERVER_HELLO"}, |
118 | {ERR_FUNC(SSL_F_SERVER_HELLO), "SERVER_HELLO"}, | 118 | {ERR_FUNC(SSL_F_SERVER_VERIFY), "SERVER_VERIFY"}, |
119 | {ERR_FUNC(SSL_F_SERVER_VERIFY), "SERVER_VERIFY"}, | 119 | {ERR_FUNC(SSL_F_SSL23_ACCEPT), "SSL23_ACCEPT"}, |
120 | {ERR_FUNC(SSL_F_SSL23_ACCEPT), "SSL23_ACCEPT"}, | 120 | {ERR_FUNC(SSL_F_SSL23_CLIENT_HELLO), "SSL23_CLIENT_HELLO"}, |
121 | {ERR_FUNC(SSL_F_SSL23_CLIENT_HELLO), "SSL23_CLIENT_HELLO"}, | 121 | {ERR_FUNC(SSL_F_SSL23_CONNECT), "SSL23_CONNECT"}, |
122 | {ERR_FUNC(SSL_F_SSL23_CONNECT), "SSL23_CONNECT"}, | 122 | {ERR_FUNC(SSL_F_SSL23_GET_CLIENT_HELLO), "SSL23_GET_CLIENT_HELLO"}, |
123 | {ERR_FUNC(SSL_F_SSL23_GET_CLIENT_HELLO), "SSL23_GET_CLIENT_HELLO"}, | 123 | {ERR_FUNC(SSL_F_SSL23_GET_SERVER_HELLO), "SSL23_GET_SERVER_HELLO"}, |
124 | {ERR_FUNC(SSL_F_SSL23_GET_SERVER_HELLO), "SSL23_GET_SERVER_HELLO"}, | 124 | {ERR_FUNC(SSL_F_SSL23_PEEK), "SSL23_PEEK"}, |
125 | {ERR_FUNC(SSL_F_SSL23_PEEK), "SSL23_PEEK"}, | 125 | {ERR_FUNC(SSL_F_SSL23_READ), "SSL23_READ"}, |
126 | {ERR_FUNC(SSL_F_SSL23_READ), "SSL23_READ"}, | 126 | {ERR_FUNC(SSL_F_SSL23_WRITE), "SSL23_WRITE"}, |
127 | {ERR_FUNC(SSL_F_SSL23_WRITE), "SSL23_WRITE"}, | 127 | {ERR_FUNC(SSL_F_SSL2_ACCEPT), "SSL2_ACCEPT"}, |
128 | {ERR_FUNC(SSL_F_SSL2_ACCEPT), "SSL2_ACCEPT"}, | 128 | {ERR_FUNC(SSL_F_SSL2_CONNECT), "SSL2_CONNECT"}, |
129 | {ERR_FUNC(SSL_F_SSL2_CONNECT), "SSL2_CONNECT"}, | 129 | {ERR_FUNC(SSL_F_SSL2_ENC_INIT), "SSL2_ENC_INIT"}, |
130 | {ERR_FUNC(SSL_F_SSL2_ENC_INIT), "SSL2_ENC_INIT"}, | 130 | {ERR_FUNC(SSL_F_SSL2_GENERATE_KEY_MATERIAL), "SSL2_GENERATE_KEY_MATERIAL"}, |
131 | {ERR_FUNC(SSL_F_SSL2_GENERATE_KEY_MATERIAL), "SSL2_GENERATE_KEY_MATERIAL"}, | 131 | {ERR_FUNC(SSL_F_SSL2_PEEK), "SSL2_PEEK"}, |
132 | {ERR_FUNC(SSL_F_SSL2_PEEK), "SSL2_PEEK"}, | 132 | {ERR_FUNC(SSL_F_SSL2_READ), "SSL2_READ"}, |
133 | {ERR_FUNC(SSL_F_SSL2_READ), "SSL2_READ"}, | 133 | {ERR_FUNC(SSL_F_SSL2_READ_INTERNAL), "SSL2_READ_INTERNAL"}, |
134 | {ERR_FUNC(SSL_F_SSL2_READ_INTERNAL), "SSL2_READ_INTERNAL"}, | 134 | {ERR_FUNC(SSL_F_SSL2_SET_CERTIFICATE), "SSL2_SET_CERTIFICATE"}, |
135 | {ERR_FUNC(SSL_F_SSL2_SET_CERTIFICATE), "SSL2_SET_CERTIFICATE"}, | 135 | {ERR_FUNC(SSL_F_SSL2_WRITE), "SSL2_WRITE"}, |
136 | {ERR_FUNC(SSL_F_SSL2_WRITE), "SSL2_WRITE"}, | 136 | {ERR_FUNC(SSL_F_SSL3_ACCEPT), "SSL3_ACCEPT"}, |
137 | {ERR_FUNC(SSL_F_SSL3_ACCEPT), "SSL3_ACCEPT"}, | 137 | {ERR_FUNC(SSL_F_SSL3_ADD_CERT_TO_BUF), "SSL3_ADD_CERT_TO_BUF"}, |
138 | {ERR_FUNC(SSL_F_SSL3_ADD_CERT_TO_BUF), "SSL3_ADD_CERT_TO_BUF"}, | 138 | {ERR_FUNC(SSL_F_SSL3_CALLBACK_CTRL), "SSL3_CALLBACK_CTRL"}, |
139 | {ERR_FUNC(SSL_F_SSL3_CALLBACK_CTRL), "SSL3_CALLBACK_CTRL"}, | 139 | {ERR_FUNC(SSL_F_SSL3_CHANGE_CIPHER_STATE), "SSL3_CHANGE_CIPHER_STATE"}, |
140 | {ERR_FUNC(SSL_F_SSL3_CHANGE_CIPHER_STATE), "SSL3_CHANGE_CIPHER_STATE"}, | 140 | {ERR_FUNC(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM), "SSL3_CHECK_CERT_AND_ALGORITHM"}, |
141 | {ERR_FUNC(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM), "SSL3_CHECK_CERT_AND_ALGORITHM"}, | 141 | {ERR_FUNC(SSL_F_SSL3_CHECK_CLIENT_HELLO), "SSL3_CHECK_CLIENT_HELLO"}, |
142 | {ERR_FUNC(SSL_F_SSL3_CHECK_CLIENT_HELLO), "SSL3_CHECK_CLIENT_HELLO"}, | 142 | {ERR_FUNC(SSL_F_SSL3_CLIENT_HELLO), "SSL3_CLIENT_HELLO"}, |
143 | {ERR_FUNC(SSL_F_SSL3_CLIENT_HELLO), "SSL3_CLIENT_HELLO"}, | 143 | {ERR_FUNC(SSL_F_SSL3_CONNECT), "SSL3_CONNECT"}, |
144 | {ERR_FUNC(SSL_F_SSL3_CONNECT), "SSL3_CONNECT"}, | 144 | {ERR_FUNC(SSL_F_SSL3_CTRL), "SSL3_CTRL"}, |
145 | {ERR_FUNC(SSL_F_SSL3_CTRL), "SSL3_CTRL"}, | 145 | {ERR_FUNC(SSL_F_SSL3_CTX_CTRL), "SSL3_CTX_CTRL"}, |
146 | {ERR_FUNC(SSL_F_SSL3_CTX_CTRL), "SSL3_CTX_CTRL"}, | 146 | {ERR_FUNC(SSL_F_SSL3_DIGEST_CACHED_RECORDS), "SSL3_DIGEST_CACHED_RECORDS"}, |
147 | {ERR_FUNC(SSL_F_SSL3_DIGEST_CACHED_RECORDS), "SSL3_DIGEST_CACHED_RECORDS"}, | 147 | {ERR_FUNC(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC), "SSL3_DO_CHANGE_CIPHER_SPEC"}, |
148 | {ERR_FUNC(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC), "SSL3_DO_CHANGE_CIPHER_SPEC"}, | 148 | {ERR_FUNC(SSL_F_SSL3_ENC), "SSL3_ENC"}, |
149 | {ERR_FUNC(SSL_F_SSL3_ENC), "SSL3_ENC"}, | 149 | {ERR_FUNC(SSL_F_SSL3_GENERATE_KEY_BLOCK), "SSL3_GENERATE_KEY_BLOCK"}, |
150 | {ERR_FUNC(SSL_F_SSL3_GENERATE_KEY_BLOCK), "SSL3_GENERATE_KEY_BLOCK"}, | 150 | {ERR_FUNC(SSL_F_SSL3_GET_CERTIFICATE_REQUEST), "SSL3_GET_CERTIFICATE_REQUEST"}, |
151 | {ERR_FUNC(SSL_F_SSL3_GET_CERTIFICATE_REQUEST), "SSL3_GET_CERTIFICATE_REQUEST"}, | 151 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_STATUS), "SSL3_GET_CERT_STATUS"}, |
152 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_STATUS), "SSL3_GET_CERT_STATUS"}, | 152 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_VERIFY), "SSL3_GET_CERT_VERIFY"}, |
153 | {ERR_FUNC(SSL_F_SSL3_GET_CERT_VERIFY), "SSL3_GET_CERT_VERIFY"}, | 153 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_CERTIFICATE), "SSL3_GET_CLIENT_CERTIFICATE"}, |
154 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_CERTIFICATE), "SSL3_GET_CLIENT_CERTIFICATE"}, | 154 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_HELLO), "SSL3_GET_CLIENT_HELLO"}, |
155 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_HELLO), "SSL3_GET_CLIENT_HELLO"}, | 155 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE), "SSL3_GET_CLIENT_KEY_EXCHANGE"}, |
156 | {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE), "SSL3_GET_CLIENT_KEY_EXCHANGE"}, | 156 | {ERR_FUNC(SSL_F_SSL3_GET_FINISHED), "SSL3_GET_FINISHED"}, |
157 | {ERR_FUNC(SSL_F_SSL3_GET_FINISHED), "SSL3_GET_FINISHED"}, | 157 | {ERR_FUNC(SSL_F_SSL3_GET_KEY_EXCHANGE), "SSL3_GET_KEY_EXCHANGE"}, |
158 | {ERR_FUNC(SSL_F_SSL3_GET_KEY_EXCHANGE), "SSL3_GET_KEY_EXCHANGE"}, | 158 | {ERR_FUNC(SSL_F_SSL3_GET_MESSAGE), "SSL3_GET_MESSAGE"}, |
159 | {ERR_FUNC(SSL_F_SSL3_GET_MESSAGE), "SSL3_GET_MESSAGE"}, | 159 | {ERR_FUNC(SSL_F_SSL3_GET_NEW_SESSION_TICKET), "SSL3_GET_NEW_SESSION_TICKET"}, |
160 | {ERR_FUNC(SSL_F_SSL3_GET_NEW_SESSION_TICKET), "SSL3_GET_NEW_SESSION_TICKET"}, | 160 | {ERR_FUNC(SSL_F_SSL3_GET_NEXT_PROTO), "SSL3_GET_NEXT_PROTO"}, |
161 | {ERR_FUNC(SSL_F_SSL3_GET_NEXT_PROTO), "SSL3_GET_NEXT_PROTO"}, | 161 | {ERR_FUNC(SSL_F_SSL3_GET_RECORD), "SSL3_GET_RECORD"}, |
162 | {ERR_FUNC(SSL_F_SSL3_GET_RECORD), "SSL3_GET_RECORD"}, | 162 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_CERTIFICATE), "SSL3_GET_SERVER_CERTIFICATE"}, |
163 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_CERTIFICATE), "SSL3_GET_SERVER_CERTIFICATE"}, | 163 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_DONE), "SSL3_GET_SERVER_DONE"}, |
164 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_DONE), "SSL3_GET_SERVER_DONE"}, | 164 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_HELLO), "SSL3_GET_SERVER_HELLO"}, |
165 | {ERR_FUNC(SSL_F_SSL3_GET_SERVER_HELLO), "SSL3_GET_SERVER_HELLO"}, | 165 | {ERR_FUNC(SSL_F_SSL3_HANDSHAKE_MAC), "ssl3_handshake_mac"}, |
166 | {ERR_FUNC(SSL_F_SSL3_HANDSHAKE_MAC), "ssl3_handshake_mac"}, | 166 | {ERR_FUNC(SSL_F_SSL3_NEW_SESSION_TICKET), "SSL3_NEW_SESSION_TICKET"}, |
167 | {ERR_FUNC(SSL_F_SSL3_NEW_SESSION_TICKET), "SSL3_NEW_SESSION_TICKET"}, | 167 | {ERR_FUNC(SSL_F_SSL3_OUTPUT_CERT_CHAIN), "SSL3_OUTPUT_CERT_CHAIN"}, |
168 | {ERR_FUNC(SSL_F_SSL3_OUTPUT_CERT_CHAIN), "SSL3_OUTPUT_CERT_CHAIN"}, | 168 | {ERR_FUNC(SSL_F_SSL3_PEEK), "SSL3_PEEK"}, |
169 | {ERR_FUNC(SSL_F_SSL3_PEEK), "SSL3_PEEK"}, | 169 | {ERR_FUNC(SSL_F_SSL3_READ_BYTES), "SSL3_READ_BYTES"}, |
170 | {ERR_FUNC(SSL_F_SSL3_READ_BYTES), "SSL3_READ_BYTES"}, | 170 | {ERR_FUNC(SSL_F_SSL3_READ_N), "SSL3_READ_N"}, |
171 | {ERR_FUNC(SSL_F_SSL3_READ_N), "SSL3_READ_N"}, | 171 | {ERR_FUNC(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST), "SSL3_SEND_CERTIFICATE_REQUEST"}, |
172 | {ERR_FUNC(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST), "SSL3_SEND_CERTIFICATE_REQUEST"}, | 172 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE), "SSL3_SEND_CLIENT_CERTIFICATE"}, |
173 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE), "SSL3_SEND_CLIENT_CERTIFICATE"}, | 173 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE), "SSL3_SEND_CLIENT_KEY_EXCHANGE"}, |
174 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE), "SSL3_SEND_CLIENT_KEY_EXCHANGE"}, | 174 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_VERIFY), "SSL3_SEND_CLIENT_VERIFY"}, |
175 | {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_VERIFY), "SSL3_SEND_CLIENT_VERIFY"}, | 175 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_CERTIFICATE), "SSL3_SEND_SERVER_CERTIFICATE"}, |
176 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_CERTIFICATE), "SSL3_SEND_SERVER_CERTIFICATE"}, | 176 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_HELLO), "SSL3_SEND_SERVER_HELLO"}, |
177 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_HELLO), "SSL3_SEND_SERVER_HELLO"}, | 177 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE), "SSL3_SEND_SERVER_KEY_EXCHANGE"}, |
178 | {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE), "SSL3_SEND_SERVER_KEY_EXCHANGE"}, | 178 | {ERR_FUNC(SSL_F_SSL3_SETUP_KEY_BLOCK), "SSL3_SETUP_KEY_BLOCK"}, |
179 | {ERR_FUNC(SSL_F_SSL3_SETUP_KEY_BLOCK), "SSL3_SETUP_KEY_BLOCK"}, | 179 | {ERR_FUNC(SSL_F_SSL3_SETUP_READ_BUFFER), "SSL3_SETUP_READ_BUFFER"}, |
180 | {ERR_FUNC(SSL_F_SSL3_SETUP_READ_BUFFER), "SSL3_SETUP_READ_BUFFER"}, | 180 | {ERR_FUNC(SSL_F_SSL3_SETUP_WRITE_BUFFER), "SSL3_SETUP_WRITE_BUFFER"}, |
181 | {ERR_FUNC(SSL_F_SSL3_SETUP_WRITE_BUFFER), "SSL3_SETUP_WRITE_BUFFER"}, | 181 | {ERR_FUNC(SSL_F_SSL3_WRITE_BYTES), "SSL3_WRITE_BYTES"}, |
182 | {ERR_FUNC(SSL_F_SSL3_WRITE_BYTES), "SSL3_WRITE_BYTES"}, | 182 | {ERR_FUNC(SSL_F_SSL3_WRITE_PENDING), "SSL3_WRITE_PENDING"}, |
183 | {ERR_FUNC(SSL_F_SSL3_WRITE_PENDING), "SSL3_WRITE_PENDING"}, | 183 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT"}, |
184 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT"}, | 184 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT), "SSL_ADD_CLIENTHELLO_TLSEXT"}, |
185 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT), "SSL_ADD_CLIENTHELLO_TLSEXT"}, | 185 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT), "SSL_ADD_CLIENTHELLO_USE_SRTP_EXT"}, |
186 | {ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT), "SSL_ADD_CLIENTHELLO_USE_SRTP_EXT"}, | 186 | {ERR_FUNC(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK), "SSL_add_dir_cert_subjects_to_stack"}, |
187 | {ERR_FUNC(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK), "SSL_add_dir_cert_subjects_to_stack"}, | 187 | {ERR_FUNC(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK), "SSL_add_file_cert_subjects_to_stack"}, |
188 | {ERR_FUNC(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK), "SSL_add_file_cert_subjects_to_stack"}, | 188 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT), "SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT"}, |
189 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT), "SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT"}, | 189 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT), "SSL_ADD_SERVERHELLO_TLSEXT"}, |
190 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT), "SSL_ADD_SERVERHELLO_TLSEXT"}, | 190 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT), "SSL_ADD_SERVERHELLO_USE_SRTP_EXT"}, |
191 | {ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT), "SSL_ADD_SERVERHELLO_USE_SRTP_EXT"}, | 191 | {ERR_FUNC(SSL_F_SSL_BAD_METHOD), "SSL_BAD_METHOD"}, |
192 | {ERR_FUNC(SSL_F_SSL_BAD_METHOD), "SSL_BAD_METHOD"}, | 192 | {ERR_FUNC(SSL_F_SSL_BYTES_TO_CIPHER_LIST), "SSL_BYTES_TO_CIPHER_LIST"}, |
193 | {ERR_FUNC(SSL_F_SSL_BYTES_TO_CIPHER_LIST), "SSL_BYTES_TO_CIPHER_LIST"}, | 193 | {ERR_FUNC(SSL_F_SSL_CERT_DUP), "SSL_CERT_DUP"}, |
194 | {ERR_FUNC(SSL_F_SSL_CERT_DUP), "SSL_CERT_DUP"}, | 194 | {ERR_FUNC(SSL_F_SSL_CERT_INST), "SSL_CERT_INST"}, |
195 | {ERR_FUNC(SSL_F_SSL_CERT_INST), "SSL_CERT_INST"}, | 195 | {ERR_FUNC(SSL_F_SSL_CERT_INSTANTIATE), "SSL_CERT_INSTANTIATE"}, |
196 | {ERR_FUNC(SSL_F_SSL_CERT_INSTANTIATE), "SSL_CERT_INSTANTIATE"}, | 196 | {ERR_FUNC(SSL_F_SSL_CERT_NEW), "SSL_CERT_NEW"}, |
197 | {ERR_FUNC(SSL_F_SSL_CERT_NEW), "SSL_CERT_NEW"}, | 197 | {ERR_FUNC(SSL_F_SSL_CHECK_PRIVATE_KEY), "SSL_check_private_key"}, |
198 | {ERR_FUNC(SSL_F_SSL_CHECK_PRIVATE_KEY), "SSL_check_private_key"}, | 198 | {ERR_FUNC(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT), "SSL_CHECK_SERVERHELLO_TLSEXT"}, |
199 | {ERR_FUNC(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT), "SSL_CHECK_SERVERHELLO_TLSEXT"}, | 199 | {ERR_FUNC(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG), "SSL_CHECK_SRVR_ECC_CERT_AND_ALG"}, |
200 | {ERR_FUNC(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG), "SSL_CHECK_SRVR_ECC_CERT_AND_ALG"}, | 200 | {ERR_FUNC(SSL_F_SSL_CIPHER_PROCESS_RULESTR), "SSL_CIPHER_PROCESS_RULESTR"}, |
201 | {ERR_FUNC(SSL_F_SSL_CIPHER_PROCESS_RULESTR), "SSL_CIPHER_PROCESS_RULESTR"}, | 201 | {ERR_FUNC(SSL_F_SSL_CIPHER_STRENGTH_SORT), "SSL_CIPHER_STRENGTH_SORT"}, |
202 | {ERR_FUNC(SSL_F_SSL_CIPHER_STRENGTH_SORT), "SSL_CIPHER_STRENGTH_SORT"}, | 202 | {ERR_FUNC(SSL_F_SSL_CLEAR), "SSL_clear"}, |
203 | {ERR_FUNC(SSL_F_SSL_CLEAR), "SSL_clear"}, | 203 | {ERR_FUNC(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD), "SSL_COMP_add_compression_method"}, |
204 | {ERR_FUNC(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD), "SSL_COMP_add_compression_method"}, | 204 | {ERR_FUNC(SSL_F_SSL_CREATE_CIPHER_LIST), "SSL_CREATE_CIPHER_LIST"}, |
205 | {ERR_FUNC(SSL_F_SSL_CREATE_CIPHER_LIST), "SSL_CREATE_CIPHER_LIST"}, | 205 | {ERR_FUNC(SSL_F_SSL_CTRL), "SSL_ctrl"}, |
206 | {ERR_FUNC(SSL_F_SSL_CTRL), "SSL_ctrl"}, | 206 | {ERR_FUNC(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY), "SSL_CTX_check_private_key"}, |
207 | {ERR_FUNC(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY), "SSL_CTX_check_private_key"}, | 207 | {ERR_FUNC(SSL_F_SSL_CTX_MAKE_PROFILES), "SSL_CTX_MAKE_PROFILES"}, |
208 | {ERR_FUNC(SSL_F_SSL_CTX_MAKE_PROFILES), "SSL_CTX_MAKE_PROFILES"}, | 208 | {ERR_FUNC(SSL_F_SSL_CTX_NEW), "SSL_CTX_new"}, |
209 | {ERR_FUNC(SSL_F_SSL_CTX_NEW), "SSL_CTX_new"}, | 209 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CIPHER_LIST), "SSL_CTX_set_cipher_list"}, |
210 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CIPHER_LIST), "SSL_CTX_set_cipher_list"}, | 210 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE), "SSL_CTX_set_client_cert_engine"}, |
211 | {ERR_FUNC(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE), "SSL_CTX_set_client_cert_engine"}, | 211 | {ERR_FUNC(SSL_F_SSL_CTX_SET_PURPOSE), "SSL_CTX_set_purpose"}, |
212 | {ERR_FUNC(SSL_F_SSL_CTX_SET_PURPOSE), "SSL_CTX_set_purpose"}, | 212 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT), "SSL_CTX_set_session_id_context"}, |
213 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT), "SSL_CTX_set_session_id_context"}, | 213 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SSL_VERSION), "SSL_CTX_set_ssl_version"}, |
214 | {ERR_FUNC(SSL_F_SSL_CTX_SET_SSL_VERSION), "SSL_CTX_set_ssl_version"}, | 214 | {ERR_FUNC(SSL_F_SSL_CTX_SET_TRUST), "SSL_CTX_set_trust"}, |
215 | {ERR_FUNC(SSL_F_SSL_CTX_SET_TRUST), "SSL_CTX_set_trust"}, | 215 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE), "SSL_CTX_use_certificate"}, |
216 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE), "SSL_CTX_use_certificate"}, | 216 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1), "SSL_CTX_use_certificate_ASN1"}, |
217 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1), "SSL_CTX_use_certificate_ASN1"}, | 217 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE), "SSL_CTX_use_certificate_chain_file"}, |
218 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE), "SSL_CTX_use_certificate_chain_file"}, | 218 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE), "SSL_CTX_use_certificate_file"}, |
219 | {ERR_FUNC(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE), "SSL_CTX_use_certificate_file"}, | 219 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY), "SSL_CTX_use_PrivateKey"}, |
220 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY), "SSL_CTX_use_PrivateKey"}, | 220 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1), "SSL_CTX_use_PrivateKey_ASN1"}, |
221 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1), "SSL_CTX_use_PrivateKey_ASN1"}, | 221 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE), "SSL_CTX_use_PrivateKey_file"}, |
222 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE), "SSL_CTX_use_PrivateKey_file"}, | 222 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT), "SSL_CTX_use_psk_identity_hint"}, |
223 | {ERR_FUNC(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT), "SSL_CTX_use_psk_identity_hint"}, | 223 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY), "SSL_CTX_use_RSAPrivateKey"}, |
224 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY), "SSL_CTX_use_RSAPrivateKey"}, | 224 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1), "SSL_CTX_use_RSAPrivateKey_ASN1"}, |
225 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1), "SSL_CTX_use_RSAPrivateKey_ASN1"}, | 225 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE), "SSL_CTX_use_RSAPrivateKey_file"}, |
226 | {ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE), "SSL_CTX_use_RSAPrivateKey_file"}, | 226 | {ERR_FUNC(SSL_F_SSL_DO_HANDSHAKE), "SSL_do_handshake"}, |
227 | {ERR_FUNC(SSL_F_SSL_DO_HANDSHAKE), "SSL_do_handshake"}, | 227 | {ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"}, |
228 | {ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"}, | 228 | {ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"}, |
229 | {ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"}, | 229 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"}, |
230 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"}, | 230 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "SSL_GET_SERVER_SEND_PKEY"}, |
231 | {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "SSL_GET_SERVER_SEND_PKEY"}, | 231 | {ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"}, |
232 | {ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"}, | 232 | {ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"}, |
233 | {ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"}, | 233 | {ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"}, |
234 | {ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"}, | 234 | {ERR_FUNC(SSL_F_SSL_NEW), "SSL_new"}, |
235 | {ERR_FUNC(SSL_F_SSL_NEW), "SSL_new"}, | 235 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT"}, |
236 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT), "SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT"}, | 236 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT), "SSL_PARSE_CLIENTHELLO_TLSEXT"}, |
237 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT), "SSL_PARSE_CLIENTHELLO_TLSEXT"}, | 237 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT), "SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT"}, |
238 | {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT), "SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT"}, | 238 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT), "SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT"}, |
239 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT), "SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT"}, | 239 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT), "SSL_PARSE_SERVERHELLO_TLSEXT"}, |
240 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT), "SSL_PARSE_SERVERHELLO_TLSEXT"}, | 240 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT), "SSL_PARSE_SERVERHELLO_USE_SRTP_EXT"}, |
241 | {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT), "SSL_PARSE_SERVERHELLO_USE_SRTP_EXT"}, | 241 | {ERR_FUNC(SSL_F_SSL_PEEK), "SSL_peek"}, |
242 | {ERR_FUNC(SSL_F_SSL_PEEK), "SSL_peek"}, | 242 | {ERR_FUNC(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT), "SSL_PREPARE_CLIENTHELLO_TLSEXT"}, |
243 | {ERR_FUNC(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT), "SSL_PREPARE_CLIENTHELLO_TLSEXT"}, | 243 | {ERR_FUNC(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT), "SSL_PREPARE_SERVERHELLO_TLSEXT"}, |
244 | {ERR_FUNC(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT), "SSL_PREPARE_SERVERHELLO_TLSEXT"}, | 244 | {ERR_FUNC(SSL_F_SSL_READ), "SSL_read"}, |
245 | {ERR_FUNC(SSL_F_SSL_READ), "SSL_read"}, | 245 | {ERR_FUNC(SSL_F_SSL_RSA_PRIVATE_DECRYPT), "SSL_RSA_PRIVATE_DECRYPT"}, |
246 | {ERR_FUNC(SSL_F_SSL_RSA_PRIVATE_DECRYPT), "SSL_RSA_PRIVATE_DECRYPT"}, | 246 | {ERR_FUNC(SSL_F_SSL_RSA_PUBLIC_ENCRYPT), "SSL_RSA_PUBLIC_ENCRYPT"}, |
247 | {ERR_FUNC(SSL_F_SSL_RSA_PUBLIC_ENCRYPT), "SSL_RSA_PUBLIC_ENCRYPT"}, | 247 | {ERR_FUNC(SSL_F_SSL_SESSION_NEW), "SSL_SESSION_new"}, |
248 | {ERR_FUNC(SSL_F_SSL_SESSION_NEW), "SSL_SESSION_new"}, | 248 | {ERR_FUNC(SSL_F_SSL_SESSION_PRINT_FP), "SSL_SESSION_print_fp"}, |
249 | {ERR_FUNC(SSL_F_SSL_SESSION_PRINT_FP), "SSL_SESSION_print_fp"}, | 249 | {ERR_FUNC(SSL_F_SSL_SESSION_SET1_ID_CONTEXT), "SSL_SESSION_set1_id_context"}, |
250 | {ERR_FUNC(SSL_F_SSL_SESSION_SET1_ID_CONTEXT), "SSL_SESSION_set1_id_context"}, | 250 | {ERR_FUNC(SSL_F_SSL_SESS_CERT_NEW), "SSL_SESS_CERT_NEW"}, |
251 | {ERR_FUNC(SSL_F_SSL_SESS_CERT_NEW), "SSL_SESS_CERT_NEW"}, | 251 | {ERR_FUNC(SSL_F_SSL_SET_CERT), "SSL_SET_CERT"}, |
252 | {ERR_FUNC(SSL_F_SSL_SET_CERT), "SSL_SET_CERT"}, | 252 | {ERR_FUNC(SSL_F_SSL_SET_CIPHER_LIST), "SSL_set_cipher_list"}, |
253 | {ERR_FUNC(SSL_F_SSL_SET_CIPHER_LIST), "SSL_set_cipher_list"}, | 253 | {ERR_FUNC(SSL_F_SSL_SET_FD), "SSL_set_fd"}, |
254 | {ERR_FUNC(SSL_F_SSL_SET_FD), "SSL_set_fd"}, | 254 | {ERR_FUNC(SSL_F_SSL_SET_PKEY), "SSL_SET_PKEY"}, |
255 | {ERR_FUNC(SSL_F_SSL_SET_PKEY), "SSL_SET_PKEY"}, | 255 | {ERR_FUNC(SSL_F_SSL_SET_PURPOSE), "SSL_set_purpose"}, |
256 | {ERR_FUNC(SSL_F_SSL_SET_PURPOSE), "SSL_set_purpose"}, | 256 | {ERR_FUNC(SSL_F_SSL_SET_RFD), "SSL_set_rfd"}, |
257 | {ERR_FUNC(SSL_F_SSL_SET_RFD), "SSL_set_rfd"}, | 257 | {ERR_FUNC(SSL_F_SSL_SET_SESSION), "SSL_set_session"}, |
258 | {ERR_FUNC(SSL_F_SSL_SET_SESSION), "SSL_set_session"}, | 258 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_ID_CONTEXT), "SSL_set_session_id_context"}, |
259 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_ID_CONTEXT), "SSL_set_session_id_context"}, | 259 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_TICKET_EXT), "SSL_set_session_ticket_ext"}, |
260 | {ERR_FUNC(SSL_F_SSL_SET_SESSION_TICKET_EXT), "SSL_set_session_ticket_ext"}, | 260 | {ERR_FUNC(SSL_F_SSL_SET_TRUST), "SSL_set_trust"}, |
261 | {ERR_FUNC(SSL_F_SSL_SET_TRUST), "SSL_set_trust"}, | 261 | {ERR_FUNC(SSL_F_SSL_SET_WFD), "SSL_set_wfd"}, |
262 | {ERR_FUNC(SSL_F_SSL_SET_WFD), "SSL_set_wfd"}, | 262 | {ERR_FUNC(SSL_F_SSL_SHUTDOWN), "SSL_shutdown"}, |
263 | {ERR_FUNC(SSL_F_SSL_SHUTDOWN), "SSL_shutdown"}, | 263 | {ERR_FUNC(SSL_F_SSL_SRP_CTX_INIT), "SSL_SRP_CTX_init"}, |
264 | {ERR_FUNC(SSL_F_SSL_SRP_CTX_INIT), "SSL_SRP_CTX_init"}, | 264 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_CONST_FUNCTION), "SSL_UNDEFINED_CONST_FUNCTION"}, |
265 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_CONST_FUNCTION), "SSL_UNDEFINED_CONST_FUNCTION"}, | 265 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_FUNCTION), "SSL_UNDEFINED_FUNCTION"}, |
266 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_FUNCTION), "SSL_UNDEFINED_FUNCTION"}, | 266 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_VOID_FUNCTION), "SSL_UNDEFINED_VOID_FUNCTION"}, |
267 | {ERR_FUNC(SSL_F_SSL_UNDEFINED_VOID_FUNCTION), "SSL_UNDEFINED_VOID_FUNCTION"}, | 267 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE), "SSL_use_certificate"}, |
268 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE), "SSL_use_certificate"}, | 268 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_ASN1), "SSL_use_certificate_ASN1"}, |
269 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_ASN1), "SSL_use_certificate_ASN1"}, | 269 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_FILE), "SSL_use_certificate_file"}, |
270 | {ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_FILE), "SSL_use_certificate_file"}, | 270 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY), "SSL_use_PrivateKey"}, |
271 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY), "SSL_use_PrivateKey"}, | 271 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_ASN1), "SSL_use_PrivateKey_ASN1"}, |
272 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_ASN1), "SSL_use_PrivateKey_ASN1"}, | 272 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_FILE), "SSL_use_PrivateKey_file"}, |
273 | {ERR_FUNC(SSL_F_SSL_USE_PRIVATEKEY_FILE), "SSL_use_PrivateKey_file"}, | 273 | {ERR_FUNC(SSL_F_SSL_USE_PSK_IDENTITY_HINT), "SSL_use_psk_identity_hint"}, |
274 | {ERR_FUNC(SSL_F_SSL_USE_PSK_IDENTITY_HINT), "SSL_use_psk_identity_hint"}, | 274 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY), "SSL_use_RSAPrivateKey"}, |
275 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY), "SSL_use_RSAPrivateKey"}, | 275 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1), "SSL_use_RSAPrivateKey_ASN1"}, |
276 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1), "SSL_use_RSAPrivateKey_ASN1"}, | 276 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE), "SSL_use_RSAPrivateKey_file"}, |
277 | {ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE), "SSL_use_RSAPrivateKey_file"}, | 277 | {ERR_FUNC(SSL_F_SSL_VERIFY_CERT_CHAIN), "SSL_VERIFY_CERT_CHAIN"}, |
278 | {ERR_FUNC(SSL_F_SSL_VERIFY_CERT_CHAIN), "SSL_VERIFY_CERT_CHAIN"}, | 278 | {ERR_FUNC(SSL_F_SSL_WRITE), "SSL_write"}, |
279 | {ERR_FUNC(SSL_F_SSL_WRITE), "SSL_write"}, | 279 | {ERR_FUNC(SSL_F_TLS1_CERT_VERIFY_MAC), "tls1_cert_verify_mac"}, |
280 | {ERR_FUNC(SSL_F_TLS1_CERT_VERIFY_MAC), "tls1_cert_verify_mac"}, | 280 | {ERR_FUNC(SSL_F_TLS1_CHANGE_CIPHER_STATE), "TLS1_CHANGE_CIPHER_STATE"}, |
281 | {ERR_FUNC(SSL_F_TLS1_CHANGE_CIPHER_STATE), "TLS1_CHANGE_CIPHER_STATE"}, | 281 | {ERR_FUNC(SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT), "TLS1_CHECK_SERVERHELLO_TLSEXT"}, |
282 | {ERR_FUNC(SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT), "TLS1_CHECK_SERVERHELLO_TLSEXT"}, | 282 | {ERR_FUNC(SSL_F_TLS1_ENC), "TLS1_ENC"}, |
283 | {ERR_FUNC(SSL_F_TLS1_ENC), "TLS1_ENC"}, | 283 | {ERR_FUNC(SSL_F_TLS1_EXPORT_KEYING_MATERIAL), "TLS1_EXPORT_KEYING_MATERIAL"}, |
284 | {ERR_FUNC(SSL_F_TLS1_EXPORT_KEYING_MATERIAL), "TLS1_EXPORT_KEYING_MATERIAL"}, | 284 | {ERR_FUNC(SSL_F_TLS1_HEARTBEAT), "SSL_F_TLS1_HEARTBEAT"}, |
285 | {ERR_FUNC(SSL_F_TLS1_HEARTBEAT), "SSL_F_TLS1_HEARTBEAT"}, | 285 | {ERR_FUNC(SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT), "TLS1_PREPARE_CLIENTHELLO_TLSEXT"}, |
286 | {ERR_FUNC(SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT), "TLS1_PREPARE_CLIENTHELLO_TLSEXT"}, | 286 | {ERR_FUNC(SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT), "TLS1_PREPARE_SERVERHELLO_TLSEXT"}, |
287 | {ERR_FUNC(SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT), "TLS1_PREPARE_SERVERHELLO_TLSEXT"}, | 287 | {ERR_FUNC(SSL_F_TLS1_PRF), "tls1_prf"}, |
288 | {ERR_FUNC(SSL_F_TLS1_PRF), "tls1_prf"}, | 288 | {ERR_FUNC(SSL_F_TLS1_SETUP_KEY_BLOCK), "TLS1_SETUP_KEY_BLOCK"}, |
289 | {ERR_FUNC(SSL_F_TLS1_SETUP_KEY_BLOCK), "TLS1_SETUP_KEY_BLOCK"}, | 289 | {ERR_FUNC(SSL_F_WRITE_PENDING), "WRITE_PENDING"}, |
290 | {ERR_FUNC(SSL_F_WRITE_PENDING), "WRITE_PENDING"}, | 290 | {0, NULL} |
291 | {0,NULL} | 291 | }; |
292 | }; | ||
293 | 292 | ||
294 | static ERR_STRING_DATA SSL_str_reasons[]= | 293 | static ERR_STRING_DATA SSL_str_reasons[]= { |
295 | { | 294 | {ERR_REASON(SSL_R_APP_DATA_IN_HANDSHAKE) , "app data in handshake"}, |
296 | {ERR_REASON(SSL_R_APP_DATA_IN_HANDSHAKE) ,"app data in handshake"}, | 295 | {ERR_REASON(SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT), "attempt to reuse session in different context"}, |
297 | {ERR_REASON(SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT),"attempt to reuse session in different context"}, | 296 | {ERR_REASON(SSL_R_BAD_ALERT_RECORD) , "bad alert record"}, |
298 | {ERR_REASON(SSL_R_BAD_ALERT_RECORD) ,"bad alert record"}, | 297 | {ERR_REASON(SSL_R_BAD_AUTHENTICATION_TYPE), "bad authentication type"}, |
299 | {ERR_REASON(SSL_R_BAD_AUTHENTICATION_TYPE),"bad authentication type"}, | 298 | {ERR_REASON(SSL_R_BAD_CHANGE_CIPHER_SPEC), "bad change cipher spec"}, |
300 | {ERR_REASON(SSL_R_BAD_CHANGE_CIPHER_SPEC),"bad change cipher spec"}, | 299 | {ERR_REASON(SSL_R_BAD_CHECKSUM) , "bad checksum"}, |
301 | {ERR_REASON(SSL_R_BAD_CHECKSUM) ,"bad checksum"}, | 300 | {ERR_REASON(SSL_R_BAD_DATA_RETURNED_BY_CALLBACK), "bad data returned by callback"}, |
302 | {ERR_REASON(SSL_R_BAD_DATA_RETURNED_BY_CALLBACK),"bad data returned by callback"}, | 301 | {ERR_REASON(SSL_R_BAD_DECOMPRESSION) , "bad decompression"}, |
303 | {ERR_REASON(SSL_R_BAD_DECOMPRESSION) ,"bad decompression"}, | 302 | {ERR_REASON(SSL_R_BAD_DH_G_LENGTH) , "bad dh g length"}, |
304 | {ERR_REASON(SSL_R_BAD_DH_G_LENGTH) ,"bad dh g length"}, | 303 | {ERR_REASON(SSL_R_BAD_DH_PUB_KEY_LENGTH) , "bad dh pub key length"}, |
305 | {ERR_REASON(SSL_R_BAD_DH_PUB_KEY_LENGTH) ,"bad dh pub key length"}, | 304 | {ERR_REASON(SSL_R_BAD_DH_P_LENGTH) , "bad dh p length"}, |
306 | {ERR_REASON(SSL_R_BAD_DH_P_LENGTH) ,"bad dh p length"}, | 305 | {ERR_REASON(SSL_R_BAD_DIGEST_LENGTH) , "bad digest length"}, |
307 | {ERR_REASON(SSL_R_BAD_DIGEST_LENGTH) ,"bad digest length"}, | 306 | {ERR_REASON(SSL_R_BAD_DSA_SIGNATURE) , "bad dsa signature"}, |
308 | {ERR_REASON(SSL_R_BAD_DSA_SIGNATURE) ,"bad dsa signature"}, | 307 | {ERR_REASON(SSL_R_BAD_ECC_CERT) , "bad ecc cert"}, |
309 | {ERR_REASON(SSL_R_BAD_ECC_CERT) ,"bad ecc cert"}, | 308 | {ERR_REASON(SSL_R_BAD_ECDSA_SIGNATURE) , "bad ecdsa signature"}, |
310 | {ERR_REASON(SSL_R_BAD_ECDSA_SIGNATURE) ,"bad ecdsa signature"}, | 309 | {ERR_REASON(SSL_R_BAD_ECPOINT) , "bad ecpoint"}, |
311 | {ERR_REASON(SSL_R_BAD_ECPOINT) ,"bad ecpoint"}, | 310 | {ERR_REASON(SSL_R_BAD_HANDSHAKE_LENGTH) , "bad handshake length"}, |
312 | {ERR_REASON(SSL_R_BAD_HANDSHAKE_LENGTH) ,"bad handshake length"}, | 311 | {ERR_REASON(SSL_R_BAD_HELLO_REQUEST) , "bad hello request"}, |
313 | {ERR_REASON(SSL_R_BAD_HELLO_REQUEST) ,"bad hello request"}, | 312 | {ERR_REASON(SSL_R_BAD_LENGTH) , "bad length"}, |
314 | {ERR_REASON(SSL_R_BAD_LENGTH) ,"bad length"}, | 313 | {ERR_REASON(SSL_R_BAD_MAC_DECODE) , "bad mac decode"}, |
315 | {ERR_REASON(SSL_R_BAD_MAC_DECODE) ,"bad mac decode"}, | 314 | {ERR_REASON(SSL_R_BAD_MAC_LENGTH) , "bad mac length"}, |
316 | {ERR_REASON(SSL_R_BAD_MAC_LENGTH) ,"bad mac length"}, | 315 | {ERR_REASON(SSL_R_BAD_MESSAGE_TYPE) , "bad message type"}, |
317 | {ERR_REASON(SSL_R_BAD_MESSAGE_TYPE) ,"bad message type"}, | 316 | {ERR_REASON(SSL_R_BAD_PACKET_LENGTH) , "bad packet length"}, |
318 | {ERR_REASON(SSL_R_BAD_PACKET_LENGTH) ,"bad packet length"}, | 317 | {ERR_REASON(SSL_R_BAD_PROTOCOL_VERSION_NUMBER), "bad protocol version number"}, |
319 | {ERR_REASON(SSL_R_BAD_PROTOCOL_VERSION_NUMBER),"bad protocol version number"}, | 318 | {ERR_REASON(SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH), "bad psk identity hint length"}, |
320 | {ERR_REASON(SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH),"bad psk identity hint length"}, | 319 | {ERR_REASON(SSL_R_BAD_RESPONSE_ARGUMENT) , "bad response argument"}, |
321 | {ERR_REASON(SSL_R_BAD_RESPONSE_ARGUMENT) ,"bad response argument"}, | 320 | {ERR_REASON(SSL_R_BAD_RSA_DECRYPT) , "bad rsa decrypt"}, |
322 | {ERR_REASON(SSL_R_BAD_RSA_DECRYPT) ,"bad rsa decrypt"}, | 321 | {ERR_REASON(SSL_R_BAD_RSA_ENCRYPT) , "bad rsa encrypt"}, |
323 | {ERR_REASON(SSL_R_BAD_RSA_ENCRYPT) ,"bad rsa encrypt"}, | 322 | {ERR_REASON(SSL_R_BAD_RSA_E_LENGTH) , "bad rsa e length"}, |
324 | {ERR_REASON(SSL_R_BAD_RSA_E_LENGTH) ,"bad rsa e length"}, | 323 | {ERR_REASON(SSL_R_BAD_RSA_MODULUS_LENGTH), "bad rsa modulus length"}, |
325 | {ERR_REASON(SSL_R_BAD_RSA_MODULUS_LENGTH),"bad rsa modulus length"}, | 324 | {ERR_REASON(SSL_R_BAD_RSA_SIGNATURE) , "bad rsa signature"}, |
326 | {ERR_REASON(SSL_R_BAD_RSA_SIGNATURE) ,"bad rsa signature"}, | 325 | {ERR_REASON(SSL_R_BAD_SIGNATURE) , "bad signature"}, |
327 | {ERR_REASON(SSL_R_BAD_SIGNATURE) ,"bad signature"}, | 326 | {ERR_REASON(SSL_R_BAD_SRP_A_LENGTH) , "bad srp a length"}, |
328 | {ERR_REASON(SSL_R_BAD_SRP_A_LENGTH) ,"bad srp a length"}, | 327 | {ERR_REASON(SSL_R_BAD_SRP_B_LENGTH) , "bad srp b length"}, |
329 | {ERR_REASON(SSL_R_BAD_SRP_B_LENGTH) ,"bad srp b length"}, | 328 | {ERR_REASON(SSL_R_BAD_SRP_G_LENGTH) , "bad srp g length"}, |
330 | {ERR_REASON(SSL_R_BAD_SRP_G_LENGTH) ,"bad srp g length"}, | 329 | {ERR_REASON(SSL_R_BAD_SRP_N_LENGTH) , "bad srp n length"}, |
331 | {ERR_REASON(SSL_R_BAD_SRP_N_LENGTH) ,"bad srp n length"}, | 330 | {ERR_REASON(SSL_R_BAD_SRP_S_LENGTH) , "bad srp s length"}, |
332 | {ERR_REASON(SSL_R_BAD_SRP_S_LENGTH) ,"bad srp s length"}, | 331 | {ERR_REASON(SSL_R_BAD_SRTP_MKI_VALUE) , "bad srtp mki value"}, |
333 | {ERR_REASON(SSL_R_BAD_SRTP_MKI_VALUE) ,"bad srtp mki value"}, | 332 | {ERR_REASON(SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST), "bad srtp protection profile list"}, |
334 | {ERR_REASON(SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST),"bad srtp protection profile list"}, | 333 | {ERR_REASON(SSL_R_BAD_SSL_FILETYPE) , "bad ssl filetype"}, |
335 | {ERR_REASON(SSL_R_BAD_SSL_FILETYPE) ,"bad ssl filetype"}, | 334 | {ERR_REASON(SSL_R_BAD_SSL_SESSION_ID_LENGTH), "bad ssl session id length"}, |
336 | {ERR_REASON(SSL_R_BAD_SSL_SESSION_ID_LENGTH),"bad ssl session id length"}, | 335 | {ERR_REASON(SSL_R_BAD_STATE) , "bad state"}, |
337 | {ERR_REASON(SSL_R_BAD_STATE) ,"bad state"}, | 336 | {ERR_REASON(SSL_R_BAD_WRITE_RETRY) , "bad write retry"}, |
338 | {ERR_REASON(SSL_R_BAD_WRITE_RETRY) ,"bad write retry"}, | 337 | {ERR_REASON(SSL_R_BIO_NOT_SET) , "bio not set"}, |
339 | {ERR_REASON(SSL_R_BIO_NOT_SET) ,"bio not set"}, | 338 | {ERR_REASON(SSL_R_BLOCK_CIPHER_PAD_IS_WRONG), "block cipher pad is wrong"}, |
340 | {ERR_REASON(SSL_R_BLOCK_CIPHER_PAD_IS_WRONG),"block cipher pad is wrong"}, | 339 | {ERR_REASON(SSL_R_BN_LIB) , "bn lib"}, |
341 | {ERR_REASON(SSL_R_BN_LIB) ,"bn lib"}, | 340 | {ERR_REASON(SSL_R_CA_DN_LENGTH_MISMATCH) , "ca dn length mismatch"}, |
342 | {ERR_REASON(SSL_R_CA_DN_LENGTH_MISMATCH) ,"ca dn length mismatch"}, | 341 | {ERR_REASON(SSL_R_CA_DN_TOO_LONG) , "ca dn too long"}, |
343 | {ERR_REASON(SSL_R_CA_DN_TOO_LONG) ,"ca dn too long"}, | 342 | {ERR_REASON(SSL_R_CCS_RECEIVED_EARLY) , "ccs received early"}, |
344 | {ERR_REASON(SSL_R_CCS_RECEIVED_EARLY) ,"ccs received early"}, | 343 | {ERR_REASON(SSL_R_CERTIFICATE_VERIFY_FAILED), "certificate verify failed"}, |
345 | {ERR_REASON(SSL_R_CERTIFICATE_VERIFY_FAILED),"certificate verify failed"}, | 344 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) , "cert length mismatch"}, |
346 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) ,"cert length mismatch"}, | 345 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT), "challenge is different"}, |
347 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT),"challenge is different"}, | 346 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH), "cipher code wrong length"}, |
348 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH),"cipher code wrong length"}, | 347 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE), "cipher or hash unavailable"}, |
349 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE),"cipher or hash unavailable"}, | 348 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR), "cipher table src error"}, |
350 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR),"cipher table src error"}, | 349 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) , "clienthello tlsext"}, |
351 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) ,"clienthello tlsext"}, | 350 | {ERR_REASON(SSL_R_COMPRESSED_LENGTH_TOO_LONG), "compressed length too long"}, |
352 | {ERR_REASON(SSL_R_COMPRESSED_LENGTH_TOO_LONG),"compressed length too long"}, | 351 | {ERR_REASON(SSL_R_COMPRESSION_DISABLED) , "compression disabled"}, |
353 | {ERR_REASON(SSL_R_COMPRESSION_DISABLED) ,"compression disabled"}, | 352 | {ERR_REASON(SSL_R_COMPRESSION_FAILURE) , "compression failure"}, |
354 | {ERR_REASON(SSL_R_COMPRESSION_FAILURE) ,"compression failure"}, | 353 | {ERR_REASON(SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE), "compression id not within private range"}, |
355 | {ERR_REASON(SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE),"compression id not within private range"}, | 354 | {ERR_REASON(SSL_R_COMPRESSION_LIBRARY_ERROR), "compression library error"}, |
356 | {ERR_REASON(SSL_R_COMPRESSION_LIBRARY_ERROR),"compression library error"}, | 355 | {ERR_REASON(SSL_R_CONNECTION_ID_IS_DIFFERENT), "connection id is different"}, |
357 | {ERR_REASON(SSL_R_CONNECTION_ID_IS_DIFFERENT),"connection id is different"}, | 356 | {ERR_REASON(SSL_R_CONNECTION_TYPE_NOT_SET), "connection type not set"}, |
358 | {ERR_REASON(SSL_R_CONNECTION_TYPE_NOT_SET),"connection type not set"}, | 357 | {ERR_REASON(SSL_R_COOKIE_MISMATCH) , "cookie mismatch"}, |
359 | {ERR_REASON(SSL_R_COOKIE_MISMATCH) ,"cookie mismatch"}, | 358 | {ERR_REASON(SSL_R_DATA_BETWEEN_CCS_AND_FINISHED), "data between ccs and finished"}, |
360 | {ERR_REASON(SSL_R_DATA_BETWEEN_CCS_AND_FINISHED),"data between ccs and finished"}, | 359 | {ERR_REASON(SSL_R_DATA_LENGTH_TOO_LONG) , "data length too long"}, |
361 | {ERR_REASON(SSL_R_DATA_LENGTH_TOO_LONG) ,"data length too long"}, | 360 | {ERR_REASON(SSL_R_DECRYPTION_FAILED) , "decryption failed"}, |
362 | {ERR_REASON(SSL_R_DECRYPTION_FAILED) ,"decryption failed"}, | 361 | {ERR_REASON(SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC), "decryption failed or bad record mac"}, |
363 | {ERR_REASON(SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC),"decryption failed or bad record mac"}, | 362 | {ERR_REASON(SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG), "dh public value length is wrong"}, |
364 | {ERR_REASON(SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG),"dh public value length is wrong"}, | 363 | {ERR_REASON(SSL_R_DIGEST_CHECK_FAILED) , "digest check failed"}, |
365 | {ERR_REASON(SSL_R_DIGEST_CHECK_FAILED) ,"digest check failed"}, | 364 | {ERR_REASON(SSL_R_DTLS_MESSAGE_TOO_BIG) , "dtls message too big"}, |
366 | {ERR_REASON(SSL_R_DTLS_MESSAGE_TOO_BIG) ,"dtls message too big"}, | 365 | {ERR_REASON(SSL_R_DUPLICATE_COMPRESSION_ID), "duplicate compression id"}, |
367 | {ERR_REASON(SSL_R_DUPLICATE_COMPRESSION_ID),"duplicate compression id"}, | 366 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT), "ecc cert not for key agreement"}, |
368 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT),"ecc cert not for key agreement"}, | 367 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_SIGNING), "ecc cert not for signing"}, |
369 | {ERR_REASON(SSL_R_ECC_CERT_NOT_FOR_SIGNING),"ecc cert not for signing"}, | 368 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE), "ecc cert should have rsa signature"}, |
370 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE),"ecc cert should have rsa signature"}, | 369 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE), "ecc cert should have sha1 signature"}, |
371 | {ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE),"ecc cert should have sha1 signature"}, | 370 | {ERR_REASON(SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER), "ecgroup too large for cipher"}, |
372 | {ERR_REASON(SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER),"ecgroup too large for cipher"}, | 371 | {ERR_REASON(SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST), "empty srtp protection profile list"}, |
373 | {ERR_REASON(SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST),"empty srtp protection profile list"}, | 372 | {ERR_REASON(SSL_R_ENCRYPTED_LENGTH_TOO_LONG), "encrypted length too long"}, |
374 | {ERR_REASON(SSL_R_ENCRYPTED_LENGTH_TOO_LONG),"encrypted length too long"}, | 373 | {ERR_REASON(SSL_R_ERROR_GENERATING_TMP_RSA_KEY), "error generating tmp rsa key"}, |
375 | {ERR_REASON(SSL_R_ERROR_GENERATING_TMP_RSA_KEY),"error generating tmp rsa key"}, | 374 | {ERR_REASON(SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST), "error in received cipher list"}, |
376 | {ERR_REASON(SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST),"error in received cipher list"}, | 375 | {ERR_REASON(SSL_R_EXCESSIVE_MESSAGE_SIZE), "excessive message size"}, |
377 | {ERR_REASON(SSL_R_EXCESSIVE_MESSAGE_SIZE),"excessive message size"}, | 376 | {ERR_REASON(SSL_R_EXTRA_DATA_IN_MESSAGE) , "extra data in message"}, |
378 | {ERR_REASON(SSL_R_EXTRA_DATA_IN_MESSAGE) ,"extra data in message"}, | 377 | {ERR_REASON(SSL_R_GOT_A_FIN_BEFORE_A_CCS), "got a fin before a ccs"}, |
379 | {ERR_REASON(SSL_R_GOT_A_FIN_BEFORE_A_CCS),"got a fin before a ccs"}, | 378 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS), "got next proto before a ccs"}, |
380 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS),"got next proto before a ccs"}, | 379 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION), "got next proto without seeing extension"}, |
381 | {ERR_REASON(SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION),"got next proto without seeing extension"}, | 380 | {ERR_REASON(SSL_R_HTTPS_PROXY_REQUEST) , "https proxy request"}, |
382 | {ERR_REASON(SSL_R_HTTPS_PROXY_REQUEST) ,"https proxy request"}, | 381 | {ERR_REASON(SSL_R_HTTP_REQUEST) , "http request"}, |
383 | {ERR_REASON(SSL_R_HTTP_REQUEST) ,"http request"}, | 382 | {ERR_REASON(SSL_R_ILLEGAL_PADDING) , "illegal padding"}, |
384 | {ERR_REASON(SSL_R_ILLEGAL_PADDING) ,"illegal padding"}, | 383 | {ERR_REASON(SSL_R_INCONSISTENT_COMPRESSION), "inconsistent compression"}, |
385 | {ERR_REASON(SSL_R_INCONSISTENT_COMPRESSION),"inconsistent compression"}, | 384 | {ERR_REASON(SSL_R_INVALID_CHALLENGE_LENGTH), "invalid challenge length"}, |
386 | {ERR_REASON(SSL_R_INVALID_CHALLENGE_LENGTH),"invalid challenge length"}, | 385 | {ERR_REASON(SSL_R_INVALID_COMMAND) , "invalid command"}, |
387 | {ERR_REASON(SSL_R_INVALID_COMMAND) ,"invalid command"}, | 386 | {ERR_REASON(SSL_R_INVALID_COMPRESSION_ALGORITHM), "invalid compression algorithm"}, |
388 | {ERR_REASON(SSL_R_INVALID_COMPRESSION_ALGORITHM),"invalid compression algorithm"}, | 387 | {ERR_REASON(SSL_R_INVALID_PURPOSE) , "invalid purpose"}, |
389 | {ERR_REASON(SSL_R_INVALID_PURPOSE) ,"invalid purpose"}, | 388 | {ERR_REASON(SSL_R_INVALID_SRP_USERNAME) , "invalid srp username"}, |
390 | {ERR_REASON(SSL_R_INVALID_SRP_USERNAME) ,"invalid srp username"}, | 389 | {ERR_REASON(SSL_R_INVALID_STATUS_RESPONSE), "invalid status response"}, |
391 | {ERR_REASON(SSL_R_INVALID_STATUS_RESPONSE),"invalid status response"}, | 390 | {ERR_REASON(SSL_R_INVALID_TICKET_KEYS_LENGTH), "invalid ticket keys length"}, |
392 | {ERR_REASON(SSL_R_INVALID_TICKET_KEYS_LENGTH),"invalid ticket keys length"}, | 391 | {ERR_REASON(SSL_R_INVALID_TRUST) , "invalid trust"}, |
393 | {ERR_REASON(SSL_R_INVALID_TRUST) ,"invalid trust"}, | 392 | {ERR_REASON(SSL_R_KEY_ARG_TOO_LONG) , "key arg too long"}, |
394 | {ERR_REASON(SSL_R_KEY_ARG_TOO_LONG) ,"key arg too long"}, | 393 | {ERR_REASON(SSL_R_KRB5) , "krb5"}, |
395 | {ERR_REASON(SSL_R_KRB5) ,"krb5"}, | 394 | {ERR_REASON(SSL_R_KRB5_C_CC_PRINC) , "krb5 client cc principal (no tkt?)"}, |
396 | {ERR_REASON(SSL_R_KRB5_C_CC_PRINC) ,"krb5 client cc principal (no tkt?)"}, | 395 | {ERR_REASON(SSL_R_KRB5_C_GET_CRED) , "krb5 client get cred"}, |
397 | {ERR_REASON(SSL_R_KRB5_C_GET_CRED) ,"krb5 client get cred"}, | 396 | {ERR_REASON(SSL_R_KRB5_C_INIT) , "krb5 client init"}, |
398 | {ERR_REASON(SSL_R_KRB5_C_INIT) ,"krb5 client init"}, | 397 | {ERR_REASON(SSL_R_KRB5_C_MK_REQ) , "krb5 client mk_req (expired tkt?)"}, |
399 | {ERR_REASON(SSL_R_KRB5_C_MK_REQ) ,"krb5 client mk_req (expired tkt?)"}, | 398 | {ERR_REASON(SSL_R_KRB5_S_BAD_TICKET) , "krb5 server bad ticket"}, |
400 | {ERR_REASON(SSL_R_KRB5_S_BAD_TICKET) ,"krb5 server bad ticket"}, | 399 | {ERR_REASON(SSL_R_KRB5_S_INIT) , "krb5 server init"}, |
401 | {ERR_REASON(SSL_R_KRB5_S_INIT) ,"krb5 server init"}, | 400 | {ERR_REASON(SSL_R_KRB5_S_RD_REQ) , "krb5 server rd_req (keytab perms?)"}, |
402 | {ERR_REASON(SSL_R_KRB5_S_RD_REQ) ,"krb5 server rd_req (keytab perms?)"}, | 401 | {ERR_REASON(SSL_R_KRB5_S_TKT_EXPIRED) , "krb5 server tkt expired"}, |
403 | {ERR_REASON(SSL_R_KRB5_S_TKT_EXPIRED) ,"krb5 server tkt expired"}, | 402 | {ERR_REASON(SSL_R_KRB5_S_TKT_NYV) , "krb5 server tkt not yet valid"}, |
404 | {ERR_REASON(SSL_R_KRB5_S_TKT_NYV) ,"krb5 server tkt not yet valid"}, | 403 | {ERR_REASON(SSL_R_KRB5_S_TKT_SKEW) , "krb5 server tkt skew"}, |
405 | {ERR_REASON(SSL_R_KRB5_S_TKT_SKEW) ,"krb5 server tkt skew"}, | 404 | {ERR_REASON(SSL_R_LENGTH_MISMATCH) , "length mismatch"}, |
406 | {ERR_REASON(SSL_R_LENGTH_MISMATCH) ,"length mismatch"}, | 405 | {ERR_REASON(SSL_R_LENGTH_TOO_SHORT) , "length too short"}, |
407 | {ERR_REASON(SSL_R_LENGTH_TOO_SHORT) ,"length too short"}, | 406 | {ERR_REASON(SSL_R_LIBRARY_BUG) , "library bug"}, |
408 | {ERR_REASON(SSL_R_LIBRARY_BUG) ,"library bug"}, | 407 | {ERR_REASON(SSL_R_LIBRARY_HAS_NO_CIPHERS), "library has no ciphers"}, |
409 | {ERR_REASON(SSL_R_LIBRARY_HAS_NO_CIPHERS),"library has no ciphers"}, | 408 | {ERR_REASON(SSL_R_MESSAGE_TOO_LONG) , "message too long"}, |
410 | {ERR_REASON(SSL_R_MESSAGE_TOO_LONG) ,"message too long"}, | 409 | {ERR_REASON(SSL_R_MISSING_DH_DSA_CERT) , "missing dh dsa cert"}, |
411 | {ERR_REASON(SSL_R_MISSING_DH_DSA_CERT) ,"missing dh dsa cert"}, | 410 | {ERR_REASON(SSL_R_MISSING_DH_KEY) , "missing dh key"}, |
412 | {ERR_REASON(SSL_R_MISSING_DH_KEY) ,"missing dh key"}, | 411 | {ERR_REASON(SSL_R_MISSING_DH_RSA_CERT) , "missing dh rsa cert"}, |
413 | {ERR_REASON(SSL_R_MISSING_DH_RSA_CERT) ,"missing dh rsa cert"}, | 412 | {ERR_REASON(SSL_R_MISSING_DSA_SIGNING_CERT), "missing dsa signing cert"}, |
414 | {ERR_REASON(SSL_R_MISSING_DSA_SIGNING_CERT),"missing dsa signing cert"}, | 413 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_DH_KEY), "missing export tmp dh key"}, |
415 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_DH_KEY),"missing export tmp dh key"}, | 414 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_RSA_KEY), "missing export tmp rsa key"}, |
416 | {ERR_REASON(SSL_R_MISSING_EXPORT_TMP_RSA_KEY),"missing export tmp rsa key"}, | 415 | {ERR_REASON(SSL_R_MISSING_RSA_CERTIFICATE), "missing rsa certificate"}, |
417 | {ERR_REASON(SSL_R_MISSING_RSA_CERTIFICATE),"missing rsa certificate"}, | 416 | {ERR_REASON(SSL_R_MISSING_RSA_ENCRYPTING_CERT), "missing rsa encrypting cert"}, |
418 | {ERR_REASON(SSL_R_MISSING_RSA_ENCRYPTING_CERT),"missing rsa encrypting cert"}, | 417 | {ERR_REASON(SSL_R_MISSING_RSA_SIGNING_CERT), "missing rsa signing cert"}, |
419 | {ERR_REASON(SSL_R_MISSING_RSA_SIGNING_CERT),"missing rsa signing cert"}, | 418 | {ERR_REASON(SSL_R_MISSING_SRP_PARAM) , "can't find SRP server param"}, |
420 | {ERR_REASON(SSL_R_MISSING_SRP_PARAM) ,"can't find SRP server param"}, | 419 | {ERR_REASON(SSL_R_MISSING_TMP_DH_KEY) , "missing tmp dh key"}, |
421 | {ERR_REASON(SSL_R_MISSING_TMP_DH_KEY) ,"missing tmp dh key"}, | 420 | {ERR_REASON(SSL_R_MISSING_TMP_ECDH_KEY) , "missing tmp ecdh key"}, |
422 | {ERR_REASON(SSL_R_MISSING_TMP_ECDH_KEY) ,"missing tmp ecdh key"}, | 421 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_KEY) , "missing tmp rsa key"}, |
423 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_KEY) ,"missing tmp rsa key"}, | 422 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_PKEY) , "missing tmp rsa pkey"}, |
424 | {ERR_REASON(SSL_R_MISSING_TMP_RSA_PKEY) ,"missing tmp rsa pkey"}, | 423 | {ERR_REASON(SSL_R_MISSING_VERIFY_MESSAGE), "missing verify message"}, |
425 | {ERR_REASON(SSL_R_MISSING_VERIFY_MESSAGE),"missing verify message"}, | 424 | {ERR_REASON(SSL_R_MULTIPLE_SGC_RESTARTS) , "multiple sgc restarts"}, |
426 | {ERR_REASON(SSL_R_MULTIPLE_SGC_RESTARTS) ,"multiple sgc restarts"}, | 425 | {ERR_REASON(SSL_R_NON_SSLV2_INITIAL_PACKET), "non sslv2 initial packet"}, |
427 | {ERR_REASON(SSL_R_NON_SSLV2_INITIAL_PACKET),"non sslv2 initial packet"}, | 426 | {ERR_REASON(SSL_R_NO_CERTIFICATES_RETURNED), "no certificates returned"}, |
428 | {ERR_REASON(SSL_R_NO_CERTIFICATES_RETURNED),"no certificates returned"}, | 427 | {ERR_REASON(SSL_R_NO_CERTIFICATE_ASSIGNED), "no certificate assigned"}, |
429 | {ERR_REASON(SSL_R_NO_CERTIFICATE_ASSIGNED),"no certificate assigned"}, | 428 | {ERR_REASON(SSL_R_NO_CERTIFICATE_RETURNED), "no certificate returned"}, |
430 | {ERR_REASON(SSL_R_NO_CERTIFICATE_RETURNED),"no certificate returned"}, | 429 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SET) , "no certificate set"}, |
431 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SET) ,"no certificate set"}, | 430 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SPECIFIED), "no certificate specified"}, |
432 | {ERR_REASON(SSL_R_NO_CERTIFICATE_SPECIFIED),"no certificate specified"}, | 431 | {ERR_REASON(SSL_R_NO_CIPHERS_AVAILABLE) , "no ciphers available"}, |
433 | {ERR_REASON(SSL_R_NO_CIPHERS_AVAILABLE) ,"no ciphers available"}, | 432 | {ERR_REASON(SSL_R_NO_CIPHERS_PASSED) , "no ciphers passed"}, |
434 | {ERR_REASON(SSL_R_NO_CIPHERS_PASSED) ,"no ciphers passed"}, | 433 | {ERR_REASON(SSL_R_NO_CIPHERS_SPECIFIED) , "no ciphers specified"}, |
435 | {ERR_REASON(SSL_R_NO_CIPHERS_SPECIFIED) ,"no ciphers specified"}, | 434 | {ERR_REASON(SSL_R_NO_CIPHER_LIST) , "no cipher list"}, |
436 | {ERR_REASON(SSL_R_NO_CIPHER_LIST) ,"no cipher list"}, | 435 | {ERR_REASON(SSL_R_NO_CIPHER_MATCH) , "no cipher match"}, |
437 | {ERR_REASON(SSL_R_NO_CIPHER_MATCH) ,"no cipher match"}, | 436 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_METHOD) , "no client cert method"}, |
438 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_METHOD) ,"no client cert method"}, | 437 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_RECEIVED), "no client cert received"}, |
439 | {ERR_REASON(SSL_R_NO_CLIENT_CERT_RECEIVED),"no client cert received"}, | 438 | {ERR_REASON(SSL_R_NO_COMPRESSION_SPECIFIED), "no compression specified"}, |
440 | {ERR_REASON(SSL_R_NO_COMPRESSION_SPECIFIED),"no compression specified"}, | 439 | {ERR_REASON(SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER), "Peer haven't sent GOST certificate, required for selected ciphersuite"}, |
441 | {ERR_REASON(SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER),"Peer haven't sent GOST certificate, required for selected ciphersuite"}, | 440 | {ERR_REASON(SSL_R_NO_METHOD_SPECIFIED) , "no method specified"}, |
442 | {ERR_REASON(SSL_R_NO_METHOD_SPECIFIED) ,"no method specified"}, | 441 | {ERR_REASON(SSL_R_NO_PRIVATEKEY) , "no privatekey"}, |
443 | {ERR_REASON(SSL_R_NO_PRIVATEKEY) ,"no privatekey"}, | 442 | {ERR_REASON(SSL_R_NO_PRIVATE_KEY_ASSIGNED), "no private key assigned"}, |
444 | {ERR_REASON(SSL_R_NO_PRIVATE_KEY_ASSIGNED),"no private key assigned"}, | 443 | {ERR_REASON(SSL_R_NO_PROTOCOLS_AVAILABLE), "no protocols available"}, |
445 | {ERR_REASON(SSL_R_NO_PROTOCOLS_AVAILABLE),"no protocols available"}, | 444 | {ERR_REASON(SSL_R_NO_PUBLICKEY) , "no publickey"}, |
446 | {ERR_REASON(SSL_R_NO_PUBLICKEY) ,"no publickey"}, | 445 | {ERR_REASON(SSL_R_NO_RENEGOTIATION) , "no renegotiation"}, |
447 | {ERR_REASON(SSL_R_NO_RENEGOTIATION) ,"no renegotiation"}, | 446 | {ERR_REASON(SSL_R_NO_REQUIRED_DIGEST) , "digest requred for handshake isn't computed"}, |
448 | {ERR_REASON(SSL_R_NO_REQUIRED_DIGEST) ,"digest requred for handshake isn't computed"}, | 447 | {ERR_REASON(SSL_R_NO_SHARED_CIPHER) , "no shared cipher"}, |
449 | {ERR_REASON(SSL_R_NO_SHARED_CIPHER) ,"no shared cipher"}, | 448 | {ERR_REASON(SSL_R_NO_SRTP_PROFILES) , "no srtp profiles"}, |
450 | {ERR_REASON(SSL_R_NO_SRTP_PROFILES) ,"no srtp profiles"}, | 449 | {ERR_REASON(SSL_R_NO_VERIFY_CALLBACK) , "no verify callback"}, |
451 | {ERR_REASON(SSL_R_NO_VERIFY_CALLBACK) ,"no verify callback"}, | 450 | {ERR_REASON(SSL_R_NULL_SSL_CTX) , "null ssl ctx"}, |
452 | {ERR_REASON(SSL_R_NULL_SSL_CTX) ,"null ssl ctx"}, | 451 | {ERR_REASON(SSL_R_NULL_SSL_METHOD_PASSED), "null ssl method passed"}, |
453 | {ERR_REASON(SSL_R_NULL_SSL_METHOD_PASSED),"null ssl method passed"}, | 452 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "old session cipher not returned"}, |
454 | {ERR_REASON(SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED),"old session cipher not returned"}, | 453 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), "old session compression algorithm not returned"}, |
455 | {ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED),"old session compression algorithm not returned"}, | 454 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE), "only tls allowed in fips mode"}, |
456 | {ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE),"only tls allowed in fips mode"}, | 455 | {ERR_REASON(SSL_R_OPAQUE_PRF_INPUT_TOO_LONG), "opaque PRF input too long"}, |
457 | {ERR_REASON(SSL_R_OPAQUE_PRF_INPUT_TOO_LONG),"opaque PRF input too long"}, | 456 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG), "packet length too long"}, |
458 | {ERR_REASON(SSL_R_PACKET_LENGTH_TOO_LONG),"packet length too long"}, | 457 | {ERR_REASON(SSL_R_PARSE_TLSEXT) , "parse tlsext"}, |
459 | {ERR_REASON(SSL_R_PARSE_TLSEXT) ,"parse tlsext"}, | 458 | {ERR_REASON(SSL_R_PATH_TOO_LONG) , "path too long"}, |
460 | {ERR_REASON(SSL_R_PATH_TOO_LONG) ,"path too long"}, | 459 | {ERR_REASON(SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE), "peer did not return a certificate"}, |
461 | {ERR_REASON(SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE),"peer did not return a certificate"}, | 460 | {ERR_REASON(SSL_R_PEER_ERROR) , "peer error"}, |
462 | {ERR_REASON(SSL_R_PEER_ERROR) ,"peer error"}, | 461 | {ERR_REASON(SSL_R_PEER_ERROR_CERTIFICATE), "peer error certificate"}, |
463 | {ERR_REASON(SSL_R_PEER_ERROR_CERTIFICATE),"peer error certificate"}, | 462 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CERTIFICATE), "peer error no certificate"}, |
464 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CERTIFICATE),"peer error no certificate"}, | 463 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CIPHER) , "peer error no cipher"}, |
465 | {ERR_REASON(SSL_R_PEER_ERROR_NO_CIPHER) ,"peer error no cipher"}, | 464 | {ERR_REASON(SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE), "peer error unsupported certificate type"}, |
466 | {ERR_REASON(SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE),"peer error unsupported certificate type"}, | 465 | {ERR_REASON(SSL_R_PRE_MAC_LENGTH_TOO_LONG), "pre mac length too long"}, |
467 | {ERR_REASON(SSL_R_PRE_MAC_LENGTH_TOO_LONG),"pre mac length too long"}, | 466 | {ERR_REASON(SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS), "problems mapping cipher functions"}, |
468 | {ERR_REASON(SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS),"problems mapping cipher functions"}, | 467 | {ERR_REASON(SSL_R_PROTOCOL_IS_SHUTDOWN) , "protocol is shutdown"}, |
469 | {ERR_REASON(SSL_R_PROTOCOL_IS_SHUTDOWN) ,"protocol is shutdown"}, | 468 | {ERR_REASON(SSL_R_PSK_IDENTITY_NOT_FOUND), "psk identity not found"}, |
470 | {ERR_REASON(SSL_R_PSK_IDENTITY_NOT_FOUND),"psk identity not found"}, | 469 | {ERR_REASON(SSL_R_PSK_NO_CLIENT_CB) , "psk no client cb"}, |
471 | {ERR_REASON(SSL_R_PSK_NO_CLIENT_CB) ,"psk no client cb"}, | 470 | {ERR_REASON(SSL_R_PSK_NO_SERVER_CB) , "psk no server cb"}, |
472 | {ERR_REASON(SSL_R_PSK_NO_SERVER_CB) ,"psk no server cb"}, | 471 | {ERR_REASON(SSL_R_PUBLIC_KEY_ENCRYPT_ERROR), "public key encrypt error"}, |
473 | {ERR_REASON(SSL_R_PUBLIC_KEY_ENCRYPT_ERROR),"public key encrypt error"}, | 472 | {ERR_REASON(SSL_R_PUBLIC_KEY_IS_NOT_RSA) , "public key is not rsa"}, |
474 | {ERR_REASON(SSL_R_PUBLIC_KEY_IS_NOT_RSA) ,"public key is not rsa"}, | 473 | {ERR_REASON(SSL_R_PUBLIC_KEY_NOT_RSA) , "public key not rsa"}, |
475 | {ERR_REASON(SSL_R_PUBLIC_KEY_NOT_RSA) ,"public key not rsa"}, | 474 | {ERR_REASON(SSL_R_READ_BIO_NOT_SET) , "read bio not set"}, |
476 | {ERR_REASON(SSL_R_READ_BIO_NOT_SET) ,"read bio not set"}, | 475 | {ERR_REASON(SSL_R_READ_TIMEOUT_EXPIRED) , "read timeout expired"}, |
477 | {ERR_REASON(SSL_R_READ_TIMEOUT_EXPIRED) ,"read timeout expired"}, | 476 | {ERR_REASON(SSL_R_READ_WRONG_PACKET_TYPE), "read wrong packet type"}, |
478 | {ERR_REASON(SSL_R_READ_WRONG_PACKET_TYPE),"read wrong packet type"}, | 477 | {ERR_REASON(SSL_R_RECORD_LENGTH_MISMATCH), "record length mismatch"}, |
479 | {ERR_REASON(SSL_R_RECORD_LENGTH_MISMATCH),"record length mismatch"}, | 478 | {ERR_REASON(SSL_R_RECORD_TOO_LARGE) , "record too large"}, |
480 | {ERR_REASON(SSL_R_RECORD_TOO_LARGE) ,"record too large"}, | 479 | {ERR_REASON(SSL_R_RECORD_TOO_SMALL) , "record too small"}, |
481 | {ERR_REASON(SSL_R_RECORD_TOO_SMALL) ,"record too small"}, | 480 | {ERR_REASON(SSL_R_RENEGOTIATE_EXT_TOO_LONG), "renegotiate ext too long"}, |
482 | {ERR_REASON(SSL_R_RENEGOTIATE_EXT_TOO_LONG),"renegotiate ext too long"}, | 481 | {ERR_REASON(SSL_R_RENEGOTIATION_ENCODING_ERR), "renegotiation encoding err"}, |
483 | {ERR_REASON(SSL_R_RENEGOTIATION_ENCODING_ERR),"renegotiation encoding err"}, | 482 | {ERR_REASON(SSL_R_RENEGOTIATION_MISMATCH), "renegotiation mismatch"}, |
484 | {ERR_REASON(SSL_R_RENEGOTIATION_MISMATCH),"renegotiation mismatch"}, | 483 | {ERR_REASON(SSL_R_REQUIRED_CIPHER_MISSING), "required cipher missing"}, |
485 | {ERR_REASON(SSL_R_REQUIRED_CIPHER_MISSING),"required cipher missing"}, | 484 | {ERR_REASON(SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING), "required compresssion algorithm missing"}, |
486 | {ERR_REASON(SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING),"required compresssion algorithm missing"}, | 485 | {ERR_REASON(SSL_R_REUSE_CERT_LENGTH_NOT_ZERO), "reuse cert length not zero"}, |
487 | {ERR_REASON(SSL_R_REUSE_CERT_LENGTH_NOT_ZERO),"reuse cert length not zero"}, | 486 | {ERR_REASON(SSL_R_REUSE_CERT_TYPE_NOT_ZERO), "reuse cert type not zero"}, |
488 | {ERR_REASON(SSL_R_REUSE_CERT_TYPE_NOT_ZERO),"reuse cert type not zero"}, | 487 | {ERR_REASON(SSL_R_REUSE_CIPHER_LIST_NOT_ZERO), "reuse cipher list not zero"}, |
489 | {ERR_REASON(SSL_R_REUSE_CIPHER_LIST_NOT_ZERO),"reuse cipher list not zero"}, | 488 | {ERR_REASON(SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING), "scsv received when renegotiating"}, |
490 | {ERR_REASON(SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING),"scsv received when renegotiating"}, | 489 | {ERR_REASON(SSL_R_SERVERHELLO_TLSEXT) , "serverhello tlsext"}, |
491 | {ERR_REASON(SSL_R_SERVERHELLO_TLSEXT) ,"serverhello tlsext"}, | 490 | {ERR_REASON(SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED), "session id context uninitialized"}, |
492 | {ERR_REASON(SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED),"session id context uninitialized"}, | 491 | {ERR_REASON(SSL_R_SHORT_READ) , "short read"}, |
493 | {ERR_REASON(SSL_R_SHORT_READ) ,"short read"}, | 492 | {ERR_REASON(SSL_R_SIGNATURE_ALGORITHMS_ERROR), "signature algorithms error"}, |
494 | {ERR_REASON(SSL_R_SIGNATURE_ALGORITHMS_ERROR),"signature algorithms error"}, | 493 | {ERR_REASON(SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE), "signature for non signing certificate"}, |
495 | {ERR_REASON(SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE),"signature for non signing certificate"}, | 494 | {ERR_REASON(SSL_R_SRP_A_CALC) , "error with the srp params"}, |
496 | {ERR_REASON(SSL_R_SRP_A_CALC) ,"error with the srp params"}, | 495 | {ERR_REASON(SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES), "srtp could not allocate profiles"}, |
497 | {ERR_REASON(SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES),"srtp could not allocate profiles"}, | 496 | {ERR_REASON(SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG), "srtp protection profile list too long"}, |
498 | {ERR_REASON(SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG),"srtp protection profile list too long"}, | 497 | {ERR_REASON(SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE), "srtp unknown protection profile"}, |
499 | {ERR_REASON(SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE),"srtp unknown protection profile"}, | 498 | {ERR_REASON(SSL_R_SSL23_DOING_SESSION_ID_REUSE), "ssl23 doing session id reuse"}, |
500 | {ERR_REASON(SSL_R_SSL23_DOING_SESSION_ID_REUSE),"ssl23 doing session id reuse"}, | 499 | {ERR_REASON(SSL_R_SSL2_CONNECTION_ID_TOO_LONG), "ssl2 connection id too long"}, |
501 | {ERR_REASON(SSL_R_SSL2_CONNECTION_ID_TOO_LONG),"ssl2 connection id too long"}, | 500 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT), "ssl3 ext invalid ecpointformat"}, |
502 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT),"ssl3 ext invalid ecpointformat"}, | 501 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME), "ssl3 ext invalid servername"}, |
503 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME),"ssl3 ext invalid servername"}, | 502 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE), "ssl3 ext invalid servername type"}, |
504 | {ERR_REASON(SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE),"ssl3 ext invalid servername type"}, | 503 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_LONG), "ssl3 session id too long"}, |
505 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_LONG),"ssl3 session id too long"}, | 504 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_SHORT), "ssl3 session id too short"}, |
506 | {ERR_REASON(SSL_R_SSL3_SESSION_ID_TOO_SHORT),"ssl3 session id too short"}, | 505 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_CERTIFICATE), "sslv3 alert bad certificate"}, |
507 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_CERTIFICATE),"sslv3 alert bad certificate"}, | 506 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_RECORD_MAC), "sslv3 alert bad record mac"}, |
508 | {ERR_REASON(SSL_R_SSLV3_ALERT_BAD_RECORD_MAC),"sslv3 alert bad record mac"}, | 507 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED), "sslv3 alert certificate expired"}, |
509 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED),"sslv3 alert certificate expired"}, | 508 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED), "sslv3 alert certificate revoked"}, |
510 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED),"sslv3 alert certificate revoked"}, | 509 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN), "sslv3 alert certificate unknown"}, |
511 | {ERR_REASON(SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN),"sslv3 alert certificate unknown"}, | 510 | {ERR_REASON(SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE), "sslv3 alert decompression failure"}, |
512 | {ERR_REASON(SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE),"sslv3 alert decompression failure"}, | 511 | {ERR_REASON(SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE), "sslv3 alert handshake failure"}, |
513 | {ERR_REASON(SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE),"sslv3 alert handshake failure"}, | 512 | {ERR_REASON(SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER), "sslv3 alert illegal parameter"}, |
514 | {ERR_REASON(SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER),"sslv3 alert illegal parameter"}, | 513 | {ERR_REASON(SSL_R_SSLV3_ALERT_NO_CERTIFICATE), "sslv3 alert no certificate"}, |
515 | {ERR_REASON(SSL_R_SSLV3_ALERT_NO_CERTIFICATE),"sslv3 alert no certificate"}, | 514 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE), "sslv3 alert unexpected message"}, |
516 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE),"sslv3 alert unexpected message"}, | 515 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE), "sslv3 alert unsupported certificate"}, |
517 | {ERR_REASON(SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE),"sslv3 alert unsupported certificate"}, | 516 | {ERR_REASON(SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION), "ssl ctx has no default ssl version"}, |
518 | {ERR_REASON(SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION),"ssl ctx has no default ssl version"}, | 517 | {ERR_REASON(SSL_R_SSL_HANDSHAKE_FAILURE) , "ssl handshake failure"}, |
519 | {ERR_REASON(SSL_R_SSL_HANDSHAKE_FAILURE) ,"ssl handshake failure"}, | 518 | {ERR_REASON(SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS), "ssl library has no ciphers"}, |
520 | {ERR_REASON(SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS),"ssl library has no ciphers"}, | 519 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CALLBACK_FAILED), "ssl session id callback failed"}, |
521 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CALLBACK_FAILED),"ssl session id callback failed"}, | 520 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONFLICT), "ssl session id conflict"}, |
522 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONFLICT),"ssl session id conflict"}, | 521 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG), "ssl session id context too long"}, |
523 | {ERR_REASON(SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG),"ssl session id context too long"}, | 522 | {ERR_REASON(SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH), "ssl session id has bad length"}, |
524 | {ERR_REASON(SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH),"ssl session id has bad length"}, | 523 | {ERR_REASON(SSL_R_SSL_SESSION_ID_IS_DIFFERENT), "ssl session id is different"}, |
525 | {ERR_REASON(SSL_R_SSL_SESSION_ID_IS_DIFFERENT),"ssl session id is different"}, | 524 | {ERR_REASON(SSL_R_TLSV1_ALERT_ACCESS_DENIED), "tlsv1 alert access denied"}, |
526 | {ERR_REASON(SSL_R_TLSV1_ALERT_ACCESS_DENIED),"tlsv1 alert access denied"}, | 525 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECODE_ERROR), "tlsv1 alert decode error"}, |
527 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECODE_ERROR),"tlsv1 alert decode error"}, | 526 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPTION_FAILED), "tlsv1 alert decryption failed"}, |
528 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPTION_FAILED),"tlsv1 alert decryption failed"}, | 527 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPT_ERROR), "tlsv1 alert decrypt error"}, |
529 | {ERR_REASON(SSL_R_TLSV1_ALERT_DECRYPT_ERROR),"tlsv1 alert decrypt error"}, | 528 | {ERR_REASON(SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION), "tlsv1 alert export restriction"}, |
530 | {ERR_REASON(SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION),"tlsv1 alert export restriction"}, | 529 | {ERR_REASON(SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY), "tlsv1 alert insufficient security"}, |
531 | {ERR_REASON(SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY),"tlsv1 alert insufficient security"}, | 530 | {ERR_REASON(SSL_R_TLSV1_ALERT_INTERNAL_ERROR), "tlsv1 alert internal error"}, |
532 | {ERR_REASON(SSL_R_TLSV1_ALERT_INTERNAL_ERROR),"tlsv1 alert internal error"}, | 531 | {ERR_REASON(SSL_R_TLSV1_ALERT_NO_RENEGOTIATION), "tlsv1 alert no renegotiation"}, |
533 | {ERR_REASON(SSL_R_TLSV1_ALERT_NO_RENEGOTIATION),"tlsv1 alert no renegotiation"}, | 532 | {ERR_REASON(SSL_R_TLSV1_ALERT_PROTOCOL_VERSION), "tlsv1 alert protocol version"}, |
534 | {ERR_REASON(SSL_R_TLSV1_ALERT_PROTOCOL_VERSION),"tlsv1 alert protocol version"}, | 533 | {ERR_REASON(SSL_R_TLSV1_ALERT_RECORD_OVERFLOW), "tlsv1 alert record overflow"}, |
535 | {ERR_REASON(SSL_R_TLSV1_ALERT_RECORD_OVERFLOW),"tlsv1 alert record overflow"}, | 534 | {ERR_REASON(SSL_R_TLSV1_ALERT_UNKNOWN_CA), "tlsv1 alert unknown ca"}, |
536 | {ERR_REASON(SSL_R_TLSV1_ALERT_UNKNOWN_CA),"tlsv1 alert unknown ca"}, | 535 | {ERR_REASON(SSL_R_TLSV1_ALERT_USER_CANCELLED), "tlsv1 alert user cancelled"}, |
537 | {ERR_REASON(SSL_R_TLSV1_ALERT_USER_CANCELLED),"tlsv1 alert user cancelled"}, | 536 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE), "tlsv1 bad certificate hash value"}, |
538 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE),"tlsv1 bad certificate hash value"}, | 537 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE), "tlsv1 bad certificate status response"}, |
539 | {ERR_REASON(SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE),"tlsv1 bad certificate status response"}, | 538 | {ERR_REASON(SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE), "tlsv1 certificate unobtainable"}, |
540 | {ERR_REASON(SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE),"tlsv1 certificate unobtainable"}, | 539 | {ERR_REASON(SSL_R_TLSV1_UNRECOGNIZED_NAME), "tlsv1 unrecognized name"}, |
541 | {ERR_REASON(SSL_R_TLSV1_UNRECOGNIZED_NAME),"tlsv1 unrecognized name"}, | 540 | {ERR_REASON(SSL_R_TLSV1_UNSUPPORTED_EXTENSION), "tlsv1 unsupported extension"}, |
542 | {ERR_REASON(SSL_R_TLSV1_UNSUPPORTED_EXTENSION),"tlsv1 unsupported extension"}, | 541 | {ERR_REASON(SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER), "tls client cert req with anon cipher"}, |
543 | {ERR_REASON(SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER),"tls client cert req with anon cipher"}, | 542 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT), "peer does not accept heartbearts"}, |
544 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT),"peer does not accept heartbearts"}, | 543 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PENDING) , "heartbeat request already pending"}, |
545 | {ERR_REASON(SSL_R_TLS_HEARTBEAT_PENDING) ,"heartbeat request already pending"}, | 544 | {ERR_REASON(SSL_R_TLS_ILLEGAL_EXPORTER_LABEL), "tls illegal exporter label"}, |
546 | {ERR_REASON(SSL_R_TLS_ILLEGAL_EXPORTER_LABEL),"tls illegal exporter label"}, | 545 | {ERR_REASON(SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST), "tls invalid ecpointformat list"}, |
547 | {ERR_REASON(SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST),"tls invalid ecpointformat list"}, | 546 | {ERR_REASON(SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST), "tls peer did not respond with certificate list"}, |
548 | {ERR_REASON(SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST),"tls peer did not respond with certificate list"}, | 547 | {ERR_REASON(SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG), "tls rsa encrypted value length is wrong"}, |
549 | {ERR_REASON(SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG),"tls rsa encrypted value length is wrong"}, | 548 | {ERR_REASON(SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER), "tried to use unsupported cipher"}, |
550 | {ERR_REASON(SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER),"tried to use unsupported cipher"}, | 549 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_DH_CERTS), "unable to decode dh certs"}, |
551 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_DH_CERTS),"unable to decode dh certs"}, | 550 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_ECDH_CERTS), "unable to decode ecdh certs"}, |
552 | {ERR_REASON(SSL_R_UNABLE_TO_DECODE_ECDH_CERTS),"unable to decode ecdh certs"}, | 551 | {ERR_REASON(SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY), "unable to extract public key"}, |
553 | {ERR_REASON(SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY),"unable to extract public key"}, | 552 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_DH_PARAMETERS), "unable to find dh parameters"}, |
554 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_DH_PARAMETERS),"unable to find dh parameters"}, | 553 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS), "unable to find ecdh parameters"}, |
555 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS),"unable to find ecdh parameters"}, | 554 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS), "unable to find public key parameters"}, |
556 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS),"unable to find public key parameters"}, | 555 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_SSL_METHOD), "unable to find ssl method"}, |
557 | {ERR_REASON(SSL_R_UNABLE_TO_FIND_SSL_METHOD),"unable to find ssl method"}, | 556 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES), "unable to load ssl2 md5 routines"}, |
558 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES),"unable to load ssl2 md5 routines"}, | 557 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES), "unable to load ssl3 md5 routines"}, |
559 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES),"unable to load ssl3 md5 routines"}, | 558 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES), "unable to load ssl3 sha1 routines"}, |
560 | {ERR_REASON(SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES),"unable to load ssl3 sha1 routines"}, | 559 | {ERR_REASON(SSL_R_UNEXPECTED_MESSAGE) , "unexpected message"}, |
561 | {ERR_REASON(SSL_R_UNEXPECTED_MESSAGE) ,"unexpected message"}, | 560 | {ERR_REASON(SSL_R_UNEXPECTED_RECORD) , "unexpected record"}, |
562 | {ERR_REASON(SSL_R_UNEXPECTED_RECORD) ,"unexpected record"}, | 561 | {ERR_REASON(SSL_R_UNINITIALIZED) , "uninitialized"}, |
563 | {ERR_REASON(SSL_R_UNINITIALIZED) ,"uninitialized"}, | 562 | {ERR_REASON(SSL_R_UNKNOWN_ALERT_TYPE) , "unknown alert type"}, |
564 | {ERR_REASON(SSL_R_UNKNOWN_ALERT_TYPE) ,"unknown alert type"}, | 563 | {ERR_REASON(SSL_R_UNKNOWN_CERTIFICATE_TYPE), "unknown certificate type"}, |
565 | {ERR_REASON(SSL_R_UNKNOWN_CERTIFICATE_TYPE),"unknown certificate type"}, | 564 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_RETURNED), "unknown cipher returned"}, |
566 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_RETURNED),"unknown cipher returned"}, | 565 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_TYPE) , "unknown cipher type"}, |
567 | {ERR_REASON(SSL_R_UNKNOWN_CIPHER_TYPE) ,"unknown cipher type"}, | 566 | {ERR_REASON(SSL_R_UNKNOWN_DIGEST) , "unknown digest"}, |
568 | {ERR_REASON(SSL_R_UNKNOWN_DIGEST) ,"unknown digest"}, | 567 | {ERR_REASON(SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE), "unknown key exchange type"}, |
569 | {ERR_REASON(SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE),"unknown key exchange type"}, | 568 | {ERR_REASON(SSL_R_UNKNOWN_PKEY_TYPE) , "unknown pkey type"}, |
570 | {ERR_REASON(SSL_R_UNKNOWN_PKEY_TYPE) ,"unknown pkey type"}, | 569 | {ERR_REASON(SSL_R_UNKNOWN_PROTOCOL) , "unknown protocol"}, |
571 | {ERR_REASON(SSL_R_UNKNOWN_PROTOCOL) ,"unknown protocol"}, | 570 | {ERR_REASON(SSL_R_UNKNOWN_REMOTE_ERROR_TYPE), "unknown remote error type"}, |
572 | {ERR_REASON(SSL_R_UNKNOWN_REMOTE_ERROR_TYPE),"unknown remote error type"}, | 571 | {ERR_REASON(SSL_R_UNKNOWN_SSL_VERSION) , "unknown ssl version"}, |
573 | {ERR_REASON(SSL_R_UNKNOWN_SSL_VERSION) ,"unknown ssl version"}, | 572 | {ERR_REASON(SSL_R_UNKNOWN_STATE) , "unknown state"}, |
574 | {ERR_REASON(SSL_R_UNKNOWN_STATE) ,"unknown state"}, | 573 | {ERR_REASON(SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED), "unsafe legacy renegotiation disabled"}, |
575 | {ERR_REASON(SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED),"unsafe legacy renegotiation disabled"}, | 574 | {ERR_REASON(SSL_R_UNSUPPORTED_CIPHER) , "unsupported cipher"}, |
576 | {ERR_REASON(SSL_R_UNSUPPORTED_CIPHER) ,"unsupported cipher"}, | 575 | {ERR_REASON(SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM), "unsupported compression algorithm"}, |
577 | {ERR_REASON(SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM),"unsupported compression algorithm"}, | 576 | {ERR_REASON(SSL_R_UNSUPPORTED_DIGEST_TYPE), "unsupported digest type"}, |
578 | {ERR_REASON(SSL_R_UNSUPPORTED_DIGEST_TYPE),"unsupported digest type"}, | 577 | {ERR_REASON(SSL_R_UNSUPPORTED_ELLIPTIC_CURVE), "unsupported elliptic curve"}, |
579 | {ERR_REASON(SSL_R_UNSUPPORTED_ELLIPTIC_CURVE),"unsupported elliptic curve"}, | 578 | {ERR_REASON(SSL_R_UNSUPPORTED_PROTOCOL) , "unsupported protocol"}, |
580 | {ERR_REASON(SSL_R_UNSUPPORTED_PROTOCOL) ,"unsupported protocol"}, | 579 | {ERR_REASON(SSL_R_UNSUPPORTED_SSL_VERSION), "unsupported ssl version"}, |
581 | {ERR_REASON(SSL_R_UNSUPPORTED_SSL_VERSION),"unsupported ssl version"}, | 580 | {ERR_REASON(SSL_R_UNSUPPORTED_STATUS_TYPE), "unsupported status type"}, |
582 | {ERR_REASON(SSL_R_UNSUPPORTED_STATUS_TYPE),"unsupported status type"}, | 581 | {ERR_REASON(SSL_R_USE_SRTP_NOT_NEGOTIATED), "use srtp not negotiated"}, |
583 | {ERR_REASON(SSL_R_USE_SRTP_NOT_NEGOTIATED),"use srtp not negotiated"}, | 582 | {ERR_REASON(SSL_R_WRITE_BIO_NOT_SET) , "write bio not set"}, |
584 | {ERR_REASON(SSL_R_WRITE_BIO_NOT_SET) ,"write bio not set"}, | 583 | {ERR_REASON(SSL_R_WRONG_CIPHER_RETURNED) , "wrong cipher returned"}, |
585 | {ERR_REASON(SSL_R_WRONG_CIPHER_RETURNED) ,"wrong cipher returned"}, | 584 | {ERR_REASON(SSL_R_WRONG_MESSAGE_TYPE) , "wrong message type"}, |
586 | {ERR_REASON(SSL_R_WRONG_MESSAGE_TYPE) ,"wrong message type"}, | 585 | {ERR_REASON(SSL_R_WRONG_NUMBER_OF_KEY_BITS), "wrong number of key bits"}, |
587 | {ERR_REASON(SSL_R_WRONG_NUMBER_OF_KEY_BITS),"wrong number of key bits"}, | 586 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_LENGTH), "wrong signature length"}, |
588 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_LENGTH),"wrong signature length"}, | 587 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_SIZE) , "wrong signature size"}, |
589 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_SIZE) ,"wrong signature size"}, | 588 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_TYPE) , "wrong signature type"}, |
590 | {ERR_REASON(SSL_R_WRONG_SIGNATURE_TYPE) ,"wrong signature type"}, | 589 | {ERR_REASON(SSL_R_WRONG_SSL_VERSION) , "wrong ssl version"}, |
591 | {ERR_REASON(SSL_R_WRONG_SSL_VERSION) ,"wrong ssl version"}, | 590 | {ERR_REASON(SSL_R_WRONG_VERSION_NUMBER) , "wrong version number"}, |
592 | {ERR_REASON(SSL_R_WRONG_VERSION_NUMBER) ,"wrong version number"}, | 591 | {ERR_REASON(SSL_R_X509_LIB) , "x509 lib"}, |
593 | {ERR_REASON(SSL_R_X509_LIB) ,"x509 lib"}, | 592 | {ERR_REASON(SSL_R_X509_VERIFICATION_SETUP_PROBLEMS), "x509 verification setup problems"}, |
594 | {ERR_REASON(SSL_R_X509_VERIFICATION_SETUP_PROBLEMS),"x509 verification setup problems"}, | 593 | {0, NULL} |
595 | {0,NULL} | 594 | }; |
596 | }; | ||
597 | 595 | ||
598 | #endif | 596 | #endif |
599 | 597 | ||
600 | void ERR_load_SSL_strings(void) | 598 | void |
601 | { | 599 | ERR_load_SSL_strings(void) |
600 | { | ||
602 | #ifndef OPENSSL_NO_ERR | 601 | #ifndef OPENSSL_NO_ERR |
603 | 602 | ||
604 | if (ERR_func_error_string(SSL_str_functs[0].error) == NULL) | 603 | if (ERR_func_error_string(SSL_str_functs[0].error) == NULL) { |
605 | { | 604 | ERR_load_strings(0, SSL_str_functs); |
606 | ERR_load_strings(0,SSL_str_functs); | 605 | ERR_load_strings(0, SSL_str_reasons); |
607 | ERR_load_strings(0,SSL_str_reasons); | ||
608 | } | ||
609 | #endif | ||
610 | } | 606 | } |
607 | #endif | ||
608 | } | ||
diff --git a/src/lib/libssl/ssl_err2.c b/src/lib/libssl/ssl_err2.c index ea95a5f983..cd781d38aa 100644 --- a/src/lib/libssl/ssl_err2.c +++ b/src/lib/libssl/ssl_err2.c | |||
@@ -60,11 +60,12 @@ | |||
60 | #include <openssl/err.h> | 60 | #include <openssl/err.h> |
61 | #include <openssl/ssl.h> | 61 | #include <openssl/ssl.h> |
62 | 62 | ||
63 | void SSL_load_error_strings(void) | 63 | void |
64 | { | 64 | SSL_load_error_strings(void) |
65 | { | ||
65 | #ifndef OPENSSL_NO_ERR | 66 | #ifndef OPENSSL_NO_ERR |
66 | ERR_load_crypto_strings(); | 67 | ERR_load_crypto_strings(); |
67 | ERR_load_SSL_strings(); | 68 | ERR_load_SSL_strings(); |
68 | #endif | 69 | #endif |
69 | } | 70 | } |
70 | 71 | ||
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index d9a728493e..98764b82aa 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
@@ -160,11 +160,11 @@ | |||
160 | #include <openssl/engine.h> | 160 | #include <openssl/engine.h> |
161 | #endif | 161 | #endif |
162 | 162 | ||
163 | const char *SSL_version_str=OPENSSL_VERSION_TEXT; | 163 | const char *SSL_version_str = OPENSSL_VERSION_TEXT; |
164 | 164 | ||
165 | SSL3_ENC_METHOD ssl3_undef_enc_method={ | 165 | SSL3_ENC_METHOD ssl3_undef_enc_method = { |
166 | /* evil casts, but these functions are only called if there's a library bug */ | 166 | /* evil casts, but these functions are only called if there's a library bug */ |
167 | (int (*)(SSL *,int))ssl_undefined_function, | 167 | (int (*)(SSL *, int))ssl_undefined_function, |
168 | (int (*)(SSL *, unsigned char *, int))ssl_undefined_function, | 168 | (int (*)(SSL *, unsigned char *, int))ssl_undefined_function, |
169 | ssl_undefined_function, | 169 | ssl_undefined_function, |
170 | (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_function, | 170 | (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_function, |
@@ -178,129 +178,124 @@ SSL3_ENC_METHOD ssl3_undef_enc_method={ | |||
178 | 0, /* server_finished_label_len */ | 178 | 0, /* server_finished_label_len */ |
179 | (int (*)(int))ssl_undefined_function, | 179 | (int (*)(int))ssl_undefined_function, |
180 | (int (*)(SSL *, unsigned char *, size_t, const char *, | 180 | (int (*)(SSL *, unsigned char *, size_t, const char *, |
181 | size_t, const unsigned char *, size_t, | 181 | size_t, const unsigned char *, size_t, |
182 | int use_context)) ssl_undefined_function, | 182 | int use_context)) ssl_undefined_function, |
183 | }; | 183 | }; |
184 | 184 | ||
185 | int SSL_clear(SSL *s) | 185 | int |
186 | { | 186 | SSL_clear(SSL *s) |
187 | { | ||
187 | 188 | ||
188 | if (s->method == NULL) | 189 | if (s->method == NULL) { |
189 | { | 190 | SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED); |
190 | SSLerr(SSL_F_SSL_CLEAR,SSL_R_NO_METHOD_SPECIFIED); | 191 | return (0); |
191 | return(0); | 192 | } |
192 | } | ||
193 | 193 | ||
194 | if (ssl_clear_bad_session(s)) | 194 | if (ssl_clear_bad_session(s)) { |
195 | { | ||
196 | SSL_SESSION_free(s->session); | 195 | SSL_SESSION_free(s->session); |
197 | s->session=NULL; | 196 | s->session = NULL; |
198 | } | 197 | } |
199 | 198 | ||
200 | s->error=0; | 199 | s->error = 0; |
201 | s->hit=0; | 200 | s->hit = 0; |
202 | s->shutdown=0; | 201 | s->shutdown = 0; |
203 | 202 | ||
204 | #if 0 /* Disabled since version 1.10 of this file (early return not | 203 | #if 0 /* Disabled since version 1.10 of this file (early return not |
205 | * needed because SSL_clear is not called when doing renegotiation) */ | 204 | * needed because SSL_clear is not called when doing renegotiation) */ |
206 | /* This is set if we are doing dynamic renegotiation so keep | 205 | /* This is set if we are doing dynamic renegotiation so keep |
207 | * the old cipher. It is sort of a SSL_clear_lite :-) */ | 206 | * the old cipher. It is sort of a SSL_clear_lite :-) */ |
208 | if (s->renegotiate) return(1); | ||
209 | #else | ||
210 | if (s->renegotiate) | 207 | if (s->renegotiate) |
211 | { | 208 | return (1); |
212 | SSLerr(SSL_F_SSL_CLEAR,ERR_R_INTERNAL_ERROR); | 209 | #else |
210 | if (s->renegotiate) { | ||
211 | SSLerr(SSL_F_SSL_CLEAR, ERR_R_INTERNAL_ERROR); | ||
213 | return 0; | 212 | return 0; |
214 | } | 213 | } |
215 | #endif | 214 | #endif |
216 | 215 | ||
217 | s->type=0; | 216 | s->type = 0; |
218 | 217 | ||
219 | s->state=SSL_ST_BEFORE|((s->server)?SSL_ST_ACCEPT:SSL_ST_CONNECT); | 218 | s->state = SSL_ST_BEFORE|((s->server) ? SSL_ST_ACCEPT : SSL_ST_CONNECT); |
220 | 219 | ||
221 | s->version=s->method->version; | 220 | s->version = s->method->version; |
222 | s->client_version=s->version; | 221 | s->client_version = s->version; |
223 | s->rwstate=SSL_NOTHING; | 222 | s->rwstate = SSL_NOTHING; |
224 | s->rstate=SSL_ST_READ_HEADER; | 223 | s->rstate = SSL_ST_READ_HEADER; |
225 | #if 0 | 224 | #if 0 |
226 | s->read_ahead=s->ctx->read_ahead; | 225 | s->read_ahead = s->ctx->read_ahead; |
227 | #endif | 226 | #endif |
228 | 227 | ||
229 | if (s->init_buf != NULL) | 228 | if (s->init_buf != NULL) { |
230 | { | ||
231 | BUF_MEM_free(s->init_buf); | 229 | BUF_MEM_free(s->init_buf); |
232 | s->init_buf=NULL; | 230 | s->init_buf = NULL; |
233 | } | 231 | } |
234 | 232 | ||
235 | ssl_clear_cipher_ctx(s); | 233 | ssl_clear_cipher_ctx(s); |
236 | ssl_clear_hash_ctx(&s->read_hash); | 234 | ssl_clear_hash_ctx(&s->read_hash); |
237 | ssl_clear_hash_ctx(&s->write_hash); | 235 | ssl_clear_hash_ctx(&s->write_hash); |
238 | 236 | ||
239 | s->first_packet=0; | 237 | s->first_packet = 0; |
240 | 238 | ||
241 | #if 1 | 239 | #if 1 |
242 | /* Check to see if we were changed into a different method, if | 240 | /* Check to see if we were changed into a different method, if |
243 | * so, revert back if we are not doing session-id reuse. */ | 241 | * so, revert back if we are not doing session-id reuse. */ |
244 | if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->method)) | 242 | if (!s->in_handshake && (s->session == NULL) && (s->method != s->ctx->method)) { |
245 | { | ||
246 | s->method->ssl_free(s); | 243 | s->method->ssl_free(s); |
247 | s->method=s->ctx->method; | 244 | s->method = s->ctx->method; |
248 | if (!s->method->ssl_new(s)) | 245 | if (!s->method->ssl_new(s)) |
249 | return(0); | 246 | return (0); |
250 | } | 247 | } else |
251 | else | ||
252 | #endif | 248 | #endif |
253 | s->method->ssl_clear(s); | 249 | s->method->ssl_clear(s); |
254 | return(1); | 250 | return (1); |
255 | } | 251 | } |
256 | 252 | ||
257 | /** Used to change an SSL_CTXs default SSL method type */ | 253 | /** Used to change an SSL_CTXs default SSL method type */ |
258 | int SSL_CTX_set_ssl_version(SSL_CTX *ctx,const SSL_METHOD *meth) | 254 | int |
259 | { | 255 | SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth) |
256 | { | ||
260 | STACK_OF(SSL_CIPHER) *sk; | 257 | STACK_OF(SSL_CIPHER) *sk; |
261 | 258 | ||
262 | ctx->method=meth; | 259 | ctx->method = meth; |
263 | 260 | ||
264 | sk=ssl_create_cipher_list(ctx->method,&(ctx->cipher_list), | 261 | sk = ssl_create_cipher_list(ctx->method, &(ctx->cipher_list), |
265 | &(ctx->cipher_list_by_id), | 262 | &(ctx->cipher_list_by_id), |
266 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); | 263 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); |
267 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) | 264 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) { |
268 | { | 265 | SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); |
269 | SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION,SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS); | 266 | return (0); |
270 | return(0); | ||
271 | } | ||
272 | return(1); | ||
273 | } | 267 | } |
268 | return (1); | ||
269 | } | ||
274 | 270 | ||
275 | SSL *SSL_new(SSL_CTX *ctx) | 271 | SSL |
276 | { | 272 | *SSL_new(SSL_CTX *ctx) |
273 | { | ||
277 | SSL *s; | 274 | SSL *s; |
278 | 275 | ||
279 | if (ctx == NULL) | 276 | if (ctx == NULL) { |
280 | { | 277 | SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX); |
281 | SSLerr(SSL_F_SSL_NEW,SSL_R_NULL_SSL_CTX); | 278 | return (NULL); |
282 | return(NULL); | 279 | } |
283 | } | 280 | if (ctx->method == NULL) { |
284 | if (ctx->method == NULL) | 281 | SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION); |
285 | { | 282 | return (NULL); |
286 | SSLerr(SSL_F_SSL_NEW,SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION); | 283 | } |
287 | return(NULL); | ||
288 | } | ||
289 | 284 | ||
290 | s=(SSL *)OPENSSL_malloc(sizeof(SSL)); | 285 | s = (SSL *)OPENSSL_malloc(sizeof(SSL)); |
291 | if (s == NULL) goto err; | 286 | if (s == NULL) |
292 | memset(s,0,sizeof(SSL)); | 287 | goto err; |
288 | memset(s, 0, sizeof(SSL)); | ||
293 | 289 | ||
294 | #ifndef OPENSSL_NO_KRB5 | 290 | #ifndef OPENSSL_NO_KRB5 |
295 | s->kssl_ctx = kssl_ctx_new(); | 291 | s->kssl_ctx = kssl_ctx_new(); |
296 | #endif /* OPENSSL_NO_KRB5 */ | 292 | #endif /* OPENSSL_NO_KRB5 */ |
297 | 293 | ||
298 | s->options=ctx->options; | 294 | s->options = ctx->options; |
299 | s->mode=ctx->mode; | 295 | s->mode = ctx->mode; |
300 | s->max_cert_list=ctx->max_cert_list; | 296 | s->max_cert_list = ctx->max_cert_list; |
301 | 297 | ||
302 | if (ctx->cert != NULL) | 298 | if (ctx->cert != NULL) { |
303 | { | ||
304 | /* Earlier library versions used to copy the pointer to | 299 | /* Earlier library versions used to copy the pointer to |
305 | * the CERT, not its contents; only when setting new | 300 | * the CERT, not its contents; only when setting new |
306 | * parameters for the per-SSL copy, ssl_cert_new would be | 301 | * parameters for the per-SSL copy, ssl_cert_new would be |
@@ -314,22 +309,21 @@ SSL *SSL_new(SSL_CTX *ctx) | |||
314 | s->cert = ssl_cert_dup(ctx->cert); | 309 | s->cert = ssl_cert_dup(ctx->cert); |
315 | if (s->cert == NULL) | 310 | if (s->cert == NULL) |
316 | goto err; | 311 | goto err; |
317 | } | 312 | } else |
318 | else | ||
319 | s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */ | 313 | s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */ |
320 | 314 | ||
321 | s->read_ahead=ctx->read_ahead; | 315 | s->read_ahead = ctx->read_ahead; |
322 | s->msg_callback=ctx->msg_callback; | 316 | s->msg_callback = ctx->msg_callback; |
323 | s->msg_callback_arg=ctx->msg_callback_arg; | 317 | s->msg_callback_arg = ctx->msg_callback_arg; |
324 | s->verify_mode=ctx->verify_mode; | 318 | s->verify_mode = ctx->verify_mode; |
325 | #if 0 | 319 | #if 0 |
326 | s->verify_depth=ctx->verify_depth; | 320 | s->verify_depth = ctx->verify_depth; |
327 | #endif | 321 | #endif |
328 | s->sid_ctx_length=ctx->sid_ctx_length; | 322 | s->sid_ctx_length = ctx->sid_ctx_length; |
329 | OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx); | 323 | OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx); |
330 | memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx)); | 324 | memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx)); |
331 | s->verify_callback=ctx->default_verify_callback; | 325 | s->verify_callback = ctx->default_verify_callback; |
332 | s->generate_session_id=ctx->generate_session_id; | 326 | s->generate_session_id = ctx->generate_session_id; |
333 | 327 | ||
334 | s->param = X509_VERIFY_PARAM_new(); | 328 | s->param = X509_VERIFY_PARAM_new(); |
335 | if (!s->param) | 329 | if (!s->param) |
@@ -339,11 +333,11 @@ SSL *SSL_new(SSL_CTX *ctx) | |||
339 | s->purpose = ctx->purpose; | 333 | s->purpose = ctx->purpose; |
340 | s->trust = ctx->trust; | 334 | s->trust = ctx->trust; |
341 | #endif | 335 | #endif |
342 | s->quiet_shutdown=ctx->quiet_shutdown; | 336 | s->quiet_shutdown = ctx->quiet_shutdown; |
343 | s->max_send_fragment = ctx->max_send_fragment; | 337 | s->max_send_fragment = ctx->max_send_fragment; |
344 | 338 | ||
345 | CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); | 339 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); |
346 | s->ctx=ctx; | 340 | s->ctx = ctx; |
347 | #ifndef OPENSSL_NO_TLSEXT | 341 | #ifndef OPENSSL_NO_TLSEXT |
348 | s->tlsext_debug_cb = 0; | 342 | s->tlsext_debug_cb = 0; |
349 | s->tlsext_debug_arg = NULL; | 343 | s->tlsext_debug_arg = NULL; |
@@ -354,93 +348,95 @@ SSL *SSL_new(SSL_CTX *ctx) | |||
354 | s->tlsext_ocsp_exts = NULL; | 348 | s->tlsext_ocsp_exts = NULL; |
355 | s->tlsext_ocsp_resp = NULL; | 349 | s->tlsext_ocsp_resp = NULL; |
356 | s->tlsext_ocsp_resplen = -1; | 350 | s->tlsext_ocsp_resplen = -1; |
357 | CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); | 351 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); |
358 | s->initial_ctx=ctx; | 352 | s->initial_ctx = ctx; |
359 | # ifndef OPENSSL_NO_NEXTPROTONEG | 353 | # ifndef OPENSSL_NO_NEXTPROTONEG |
360 | s->next_proto_negotiated = NULL; | 354 | s->next_proto_negotiated = NULL; |
361 | # endif | 355 | # endif |
362 | #endif | 356 | #endif |
363 | 357 | ||
364 | s->verify_result=X509_V_OK; | 358 | s->verify_result = X509_V_OK; |
365 | 359 | ||
366 | s->method=ctx->method; | 360 | s->method = ctx->method; |
367 | 361 | ||
368 | if (!s->method->ssl_new(s)) | 362 | if (!s->method->ssl_new(s)) |
369 | goto err; | 363 | goto err; |
370 | 364 | ||
371 | s->references=1; | 365 | s->references = 1; |
372 | s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1; | 366 | s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1; |
373 | 367 | ||
374 | SSL_clear(s); | 368 | SSL_clear(s); |
375 | 369 | ||
376 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); | 370 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); |
377 | 371 | ||
378 | #ifndef OPENSSL_NO_PSK | 372 | #ifndef OPENSSL_NO_PSK |
379 | s->psk_client_callback=ctx->psk_client_callback; | 373 | s->psk_client_callback = ctx->psk_client_callback; |
380 | s->psk_server_callback=ctx->psk_server_callback; | 374 | s->psk_server_callback = ctx->psk_server_callback; |
381 | #endif | 375 | #endif |
382 | 376 | ||
383 | return(s); | 377 | return (s); |
384 | err: | 378 | err: |
385 | if (s != NULL) | 379 | if (s != NULL) { |
386 | { | ||
387 | if (s->cert != NULL) | 380 | if (s->cert != NULL) |
388 | ssl_cert_free(s->cert); | 381 | ssl_cert_free(s->cert); |
389 | if (s->ctx != NULL) | 382 | if (s->ctx != NULL) |
390 | SSL_CTX_free(s->ctx); /* decrement reference count */ | 383 | SSL_CTX_free(s->ctx); /* decrement reference count */ |
391 | OPENSSL_free(s); | 384 | OPENSSL_free(s); |
392 | } | ||
393 | SSLerr(SSL_F_SSL_NEW,ERR_R_MALLOC_FAILURE); | ||
394 | return(NULL); | ||
395 | } | 385 | } |
386 | SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE); | ||
387 | return (NULL); | ||
388 | } | ||
396 | 389 | ||
397 | int SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx, | 390 | int |
398 | unsigned int sid_ctx_len) | 391 | SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, |
399 | { | 392 | unsigned int sid_ctx_len) |
400 | if(sid_ctx_len > sizeof ctx->sid_ctx) | 393 | { |
401 | { | 394 | if (sid_ctx_len > sizeof ctx->sid_ctx) { |
402 | SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); | 395 | SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); |
403 | return 0; | 396 | return 0; |
404 | } | 397 | } |
405 | ctx->sid_ctx_length=sid_ctx_len; | 398 | ctx->sid_ctx_length = sid_ctx_len; |
406 | memcpy(ctx->sid_ctx,sid_ctx,sid_ctx_len); | 399 | memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len); |
407 | 400 | ||
408 | return 1; | 401 | return 1; |
409 | } | 402 | } |
410 | 403 | ||
411 | int SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx, | 404 | int |
412 | unsigned int sid_ctx_len) | 405 | SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, |
413 | { | 406 | unsigned int sid_ctx_len) |
414 | if(sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) | 407 | { |
415 | { | 408 | if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) { |
416 | SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); | 409 | SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); |
417 | return 0; | 410 | return 0; |
418 | } | 411 | } |
419 | ssl->sid_ctx_length=sid_ctx_len; | 412 | ssl->sid_ctx_length = sid_ctx_len; |
420 | memcpy(ssl->sid_ctx,sid_ctx,sid_ctx_len); | 413 | memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len); |
421 | 414 | ||
422 | return 1; | 415 | return 1; |
423 | } | 416 | } |
424 | 417 | ||
425 | int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) | 418 | int |
426 | { | 419 | SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb) |
420 | { | ||
427 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 421 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
428 | ctx->generate_session_id = cb; | 422 | ctx->generate_session_id = cb; |
429 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 423 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
430 | return 1; | 424 | return 1; |
431 | } | 425 | } |
432 | 426 | ||
433 | int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb) | 427 | int |
434 | { | 428 | SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb) |
429 | { | ||
435 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); | 430 | CRYPTO_w_lock(CRYPTO_LOCK_SSL); |
436 | ssl->generate_session_id = cb; | 431 | ssl->generate_session_id = cb; |
437 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); | 432 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL); |
438 | return 1; | 433 | return 1; |
439 | } | 434 | } |
440 | 435 | ||
441 | int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, | 436 | int |
442 | unsigned int id_len) | 437 | SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, |
443 | { | 438 | unsigned int id_len) |
439 | { | ||
444 | /* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how | 440 | /* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how |
445 | * we can "construct" a session to give us the desired check - ie. to | 441 | * we can "construct" a session to give us the desired check - ie. to |
446 | * find if there's a session in the hash table that would conflict with | 442 | * find if there's a session in the hash table that would conflict with |
@@ -448,7 +444,7 @@ int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, | |||
448 | * use by this SSL. */ | 444 | * use by this SSL. */ |
449 | SSL_SESSION r, *p; | 445 | SSL_SESSION r, *p; |
450 | 446 | ||
451 | if(id_len > sizeof r.session_id) | 447 | if (id_len > sizeof r.session_id) |
452 | return 0; | 448 | return 0; |
453 | 449 | ||
454 | r.ssl_version = ssl->version; | 450 | r.ssl_version = ssl->version; |
@@ -458,68 +454,74 @@ int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, | |||
458 | * callback is calling us to check the uniqueness of a shorter ID, it | 454 | * callback is calling us to check the uniqueness of a shorter ID, it |
459 | * must be compared as a padded-out ID because that is what it will be | 455 | * must be compared as a padded-out ID because that is what it will be |
460 | * converted to when the callback has finished choosing it. */ | 456 | * converted to when the callback has finished choosing it. */ |
461 | if((r.ssl_version == SSL2_VERSION) && | 457 | if ((r.ssl_version == SSL2_VERSION) && |
462 | (id_len < SSL2_SSL_SESSION_ID_LENGTH)) | 458 | (id_len < SSL2_SSL_SESSION_ID_LENGTH)) { |
463 | { | ||
464 | memset(r.session_id + id_len, 0, | 459 | memset(r.session_id + id_len, 0, |
465 | SSL2_SSL_SESSION_ID_LENGTH - id_len); | 460 | SSL2_SSL_SESSION_ID_LENGTH - id_len); |
466 | r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH; | 461 | r.session_id_length = SSL2_SSL_SESSION_ID_LENGTH; |
467 | } | 462 | } |
468 | 463 | ||
469 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 464 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
470 | p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r); | 465 | p = lh_SSL_SESSION_retrieve(ssl->ctx->sessions, &r); |
471 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 466 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
472 | return (p != NULL); | 467 | return (p != NULL); |
473 | } | 468 | } |
474 | 469 | ||
475 | int SSL_CTX_set_purpose(SSL_CTX *s, int purpose) | 470 | int |
476 | { | 471 | SSL_CTX_set_purpose(SSL_CTX *s, int purpose) |
472 | { | ||
477 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); | 473 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); |
478 | } | 474 | } |
479 | 475 | ||
480 | int SSL_set_purpose(SSL *s, int purpose) | 476 | int |
481 | { | 477 | SSL_set_purpose(SSL *s, int purpose) |
478 | { | ||
482 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); | 479 | return X509_VERIFY_PARAM_set_purpose(s->param, purpose); |
483 | } | 480 | } |
484 | 481 | ||
485 | int SSL_CTX_set_trust(SSL_CTX *s, int trust) | 482 | int |
486 | { | 483 | SSL_CTX_set_trust(SSL_CTX *s, int trust) |
484 | { | ||
487 | return X509_VERIFY_PARAM_set_trust(s->param, trust); | 485 | return X509_VERIFY_PARAM_set_trust(s->param, trust); |
488 | } | 486 | } |
489 | 487 | ||
490 | int SSL_set_trust(SSL *s, int trust) | 488 | int |
491 | { | 489 | SSL_set_trust(SSL *s, int trust) |
490 | { | ||
492 | return X509_VERIFY_PARAM_set_trust(s->param, trust); | 491 | return X509_VERIFY_PARAM_set_trust(s->param, trust); |
493 | } | 492 | } |
494 | 493 | ||
495 | int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) | 494 | int |
496 | { | 495 | SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) |
496 | { | ||
497 | return X509_VERIFY_PARAM_set1(ctx->param, vpm); | 497 | return X509_VERIFY_PARAM_set1(ctx->param, vpm); |
498 | } | 498 | } |
499 | 499 | ||
500 | int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) | 500 | int |
501 | { | 501 | SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) |
502 | { | ||
502 | return X509_VERIFY_PARAM_set1(ssl->param, vpm); | 503 | return X509_VERIFY_PARAM_set1(ssl->param, vpm); |
503 | } | 504 | } |
504 | 505 | ||
505 | void SSL_free(SSL *s) | 506 | void |
506 | { | 507 | SSL_free(SSL *s) |
508 | { | ||
507 | int i; | 509 | int i; |
508 | 510 | ||
509 | if(s == NULL) | 511 | if (s == NULL) |
510 | return; | 512 | return; |
511 | 513 | ||
512 | i=CRYPTO_add(&s->references,-1,CRYPTO_LOCK_SSL); | 514 | i = CRYPTO_add(&s->references, -1, CRYPTO_LOCK_SSL); |
513 | #ifdef REF_PRINT | 515 | #ifdef REF_PRINT |
514 | REF_PRINT("SSL",s); | 516 | REF_PRINT("SSL", s); |
515 | #endif | 517 | #endif |
516 | if (i > 0) return; | 518 | if (i > 0) |
519 | return; | ||
517 | #ifdef REF_CHECK | 520 | #ifdef REF_CHECK |
518 | if (i < 0) | 521 | if (i < 0) { |
519 | { | 522 | fprintf(stderr, "SSL_free, bad reference count\n"); |
520 | fprintf(stderr,"SSL_free, bad reference count\n"); | ||
521 | abort(); /* ok */ | 523 | abort(); /* ok */ |
522 | } | 524 | } |
523 | #endif | 525 | #endif |
524 | 526 | ||
525 | if (s->param) | 527 | if (s->param) |
@@ -527,53 +529,58 @@ void SSL_free(SSL *s) | |||
527 | 529 | ||
528 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); | 530 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data); |
529 | 531 | ||
530 | if (s->bbio != NULL) | 532 | if (s->bbio != NULL) { |
531 | { | ||
532 | /* If the buffering BIO is in place, pop it off */ | 533 | /* If the buffering BIO is in place, pop it off */ |
533 | if (s->bbio == s->wbio) | 534 | if (s->bbio == s->wbio) { |
534 | { | 535 | s->wbio = BIO_pop(s->wbio); |
535 | s->wbio=BIO_pop(s->wbio); | ||
536 | } | ||
537 | BIO_free(s->bbio); | ||
538 | s->bbio=NULL; | ||
539 | } | 536 | } |
537 | BIO_free(s->bbio); | ||
538 | s->bbio = NULL; | ||
539 | } | ||
540 | if (s->rbio != NULL) | 540 | if (s->rbio != NULL) |
541 | BIO_free_all(s->rbio); | 541 | BIO_free_all(s->rbio); |
542 | if ((s->wbio != NULL) && (s->wbio != s->rbio)) | 542 | if ((s->wbio != NULL) && (s->wbio != s->rbio)) |
543 | BIO_free_all(s->wbio); | 543 | BIO_free_all(s->wbio); |
544 | 544 | ||
545 | if (s->init_buf != NULL) BUF_MEM_free(s->init_buf); | 545 | if (s->init_buf != NULL) |
546 | BUF_MEM_free(s->init_buf); | ||
546 | 547 | ||
547 | /* add extra stuff */ | 548 | /* add extra stuff */ |
548 | if (s->cipher_list != NULL) sk_SSL_CIPHER_free(s->cipher_list); | 549 | if (s->cipher_list != NULL) |
549 | if (s->cipher_list_by_id != NULL) sk_SSL_CIPHER_free(s->cipher_list_by_id); | 550 | sk_SSL_CIPHER_free(s->cipher_list); |
551 | if (s->cipher_list_by_id != NULL) | ||
552 | sk_SSL_CIPHER_free(s->cipher_list_by_id); | ||
550 | 553 | ||
551 | /* Make the next call work :-) */ | 554 | /* Make the next call work :-) */ |
552 | if (s->session != NULL) | 555 | if (s->session != NULL) { |
553 | { | ||
554 | ssl_clear_bad_session(s); | 556 | ssl_clear_bad_session(s); |
555 | SSL_SESSION_free(s->session); | 557 | SSL_SESSION_free(s->session); |
556 | } | 558 | } |
557 | 559 | ||
558 | ssl_clear_cipher_ctx(s); | 560 | ssl_clear_cipher_ctx(s); |
559 | ssl_clear_hash_ctx(&s->read_hash); | 561 | ssl_clear_hash_ctx(&s->read_hash); |
560 | ssl_clear_hash_ctx(&s->write_hash); | 562 | ssl_clear_hash_ctx(&s->write_hash); |
561 | 563 | ||
562 | if (s->cert != NULL) ssl_cert_free(s->cert); | 564 | if (s->cert != NULL) |
565 | ssl_cert_free(s->cert); | ||
563 | /* Free up if allocated */ | 566 | /* Free up if allocated */ |
564 | 567 | ||
565 | #ifndef OPENSSL_NO_TLSEXT | 568 | #ifndef OPENSSL_NO_TLSEXT |
566 | if (s->tlsext_hostname) | 569 | if (s->tlsext_hostname) |
567 | OPENSSL_free(s->tlsext_hostname); | 570 | OPENSSL_free(s->tlsext_hostname); |
568 | if (s->initial_ctx) SSL_CTX_free(s->initial_ctx); | 571 | if (s->initial_ctx) |
572 | SSL_CTX_free(s->initial_ctx); | ||
569 | #ifndef OPENSSL_NO_EC | 573 | #ifndef OPENSSL_NO_EC |
570 | if (s->tlsext_ecpointformatlist) OPENSSL_free(s->tlsext_ecpointformatlist); | 574 | if (s->tlsext_ecpointformatlist) |
571 | if (s->tlsext_ellipticcurvelist) OPENSSL_free(s->tlsext_ellipticcurvelist); | 575 | OPENSSL_free(s->tlsext_ecpointformatlist); |
576 | if (s->tlsext_ellipticcurvelist) | ||
577 | OPENSSL_free(s->tlsext_ellipticcurvelist); | ||
572 | #endif /* OPENSSL_NO_EC */ | 578 | #endif /* OPENSSL_NO_EC */ |
573 | if (s->tlsext_opaque_prf_input) OPENSSL_free(s->tlsext_opaque_prf_input); | 579 | if (s->tlsext_opaque_prf_input) |
580 | OPENSSL_free(s->tlsext_opaque_prf_input); | ||
574 | if (s->tlsext_ocsp_exts) | 581 | if (s->tlsext_ocsp_exts) |
575 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, | 582 | sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts, |
576 | X509_EXTENSION_free); | 583 | X509_EXTENSION_free); |
577 | if (s->tlsext_ocsp_ids) | 584 | if (s->tlsext_ocsp_ids) |
578 | sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free); | 585 | sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free); |
579 | if (s->tlsext_ocsp_resp) | 586 | if (s->tlsext_ocsp_resp) |
@@ -581,11 +588,13 @@ void SSL_free(SSL *s) | |||
581 | #endif | 588 | #endif |
582 | 589 | ||
583 | if (s->client_CA != NULL) | 590 | if (s->client_CA != NULL) |
584 | sk_X509_NAME_pop_free(s->client_CA,X509_NAME_free); | 591 | sk_X509_NAME_pop_free(s->client_CA, X509_NAME_free); |
585 | 592 | ||
586 | if (s->method != NULL) s->method->ssl_free(s); | 593 | if (s->method != NULL) |
594 | s->method->ssl_free(s); | ||
587 | 595 | ||
588 | if (s->ctx) SSL_CTX_free(s->ctx); | 596 | if (s->ctx) |
597 | SSL_CTX_free(s->ctx); | ||
589 | 598 | ||
590 | #ifndef OPENSSL_NO_KRB5 | 599 | #ifndef OPENSSL_NO_KRB5 |
591 | if (s->kssl_ctx != NULL) | 600 | if (s->kssl_ctx != NULL) |
@@ -598,223 +607,237 @@ void SSL_free(SSL *s) | |||
598 | #endif | 607 | #endif |
599 | 608 | ||
600 | #ifndef OPENSSL_NO_SRTP | 609 | #ifndef OPENSSL_NO_SRTP |
601 | if (s->srtp_profiles) | 610 | if (s->srtp_profiles) |
602 | sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); | 611 | sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); |
603 | #endif | 612 | #endif |
604 | 613 | ||
605 | OPENSSL_free(s); | 614 | OPENSSL_free(s); |
606 | } | 615 | } |
607 | 616 | ||
608 | void SSL_set_bio(SSL *s,BIO *rbio,BIO *wbio) | 617 | void |
609 | { | 618 | SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio) |
619 | { | ||
610 | /* If the output buffering BIO is still in place, remove it | 620 | /* If the output buffering BIO is still in place, remove it |
611 | */ | 621 | */ |
612 | if (s->bbio != NULL) | 622 | if (s->bbio != NULL) { |
613 | { | 623 | if (s->wbio == s->bbio) { |
614 | if (s->wbio == s->bbio) | 624 | s->wbio = s->wbio->next_bio; |
615 | { | 625 | s->bbio->next_bio = NULL; |
616 | s->wbio=s->wbio->next_bio; | ||
617 | s->bbio->next_bio=NULL; | ||
618 | } | ||
619 | } | 626 | } |
627 | } | ||
620 | if ((s->rbio != NULL) && (s->rbio != rbio)) | 628 | if ((s->rbio != NULL) && (s->rbio != rbio)) |
621 | BIO_free_all(s->rbio); | 629 | BIO_free_all(s->rbio); |
622 | if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio)) | 630 | if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio)) |
623 | BIO_free_all(s->wbio); | 631 | BIO_free_all(s->wbio); |
624 | s->rbio=rbio; | 632 | s->rbio = rbio; |
625 | s->wbio=wbio; | 633 | s->wbio = wbio; |
626 | } | 634 | } |
627 | 635 | ||
628 | BIO *SSL_get_rbio(const SSL *s) | 636 | BIO |
629 | { return(s->rbio); } | 637 | *SSL_get_rbio(const SSL *s) |
638 | { return (s->rbio); | ||
639 | } | ||
630 | 640 | ||
631 | BIO *SSL_get_wbio(const SSL *s) | 641 | BIO |
632 | { return(s->wbio); } | 642 | *SSL_get_wbio(const SSL *s) |
643 | { return (s->wbio); | ||
644 | } | ||
633 | 645 | ||
634 | int SSL_get_fd(const SSL *s) | 646 | int |
635 | { | 647 | SSL_get_fd(const SSL *s) |
636 | return(SSL_get_rfd(s)); | 648 | { |
637 | } | 649 | return (SSL_get_rfd(s)); |
650 | } | ||
638 | 651 | ||
639 | int SSL_get_rfd(const SSL *s) | 652 | int |
640 | { | 653 | SSL_get_rfd(const SSL *s) |
641 | int ret= -1; | 654 | { |
642 | BIO *b,*r; | 655 | int ret = -1; |
656 | BIO *b, *r; | ||
643 | 657 | ||
644 | b=SSL_get_rbio(s); | 658 | b = SSL_get_rbio(s); |
645 | r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR); | 659 | r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR); |
646 | if (r != NULL) | 660 | if (r != NULL) |
647 | BIO_get_fd(r,&ret); | 661 | BIO_get_fd(r, &ret); |
648 | return(ret); | 662 | return (ret); |
649 | } | 663 | } |
650 | 664 | ||
651 | int SSL_get_wfd(const SSL *s) | 665 | int |
652 | { | 666 | SSL_get_wfd(const SSL *s) |
653 | int ret= -1; | 667 | { |
654 | BIO *b,*r; | 668 | int ret = -1; |
669 | BIO *b, *r; | ||
655 | 670 | ||
656 | b=SSL_get_wbio(s); | 671 | b = SSL_get_wbio(s); |
657 | r=BIO_find_type(b,BIO_TYPE_DESCRIPTOR); | 672 | r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR); |
658 | if (r != NULL) | 673 | if (r != NULL) |
659 | BIO_get_fd(r,&ret); | 674 | BIO_get_fd(r, &ret); |
660 | return(ret); | 675 | return (ret); |
661 | } | 676 | } |
662 | 677 | ||
663 | #ifndef OPENSSL_NO_SOCK | 678 | #ifndef OPENSSL_NO_SOCK |
664 | int SSL_set_fd(SSL *s,int fd) | 679 | int |
665 | { | 680 | SSL_set_fd(SSL *s, int fd) |
666 | int ret=0; | 681 | { |
667 | BIO *bio=NULL; | 682 | int ret = 0; |
683 | BIO *bio = NULL; | ||
668 | 684 | ||
669 | bio=BIO_new(BIO_s_socket()); | 685 | bio = BIO_new(BIO_s_socket()); |
670 | 686 | ||
671 | if (bio == NULL) | 687 | if (bio == NULL) { |
672 | { | 688 | SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB); |
673 | SSLerr(SSL_F_SSL_SET_FD,ERR_R_BUF_LIB); | ||
674 | goto err; | 689 | goto err; |
675 | } | ||
676 | BIO_set_fd(bio,fd,BIO_NOCLOSE); | ||
677 | SSL_set_bio(s,bio,bio); | ||
678 | ret=1; | ||
679 | err: | ||
680 | return(ret); | ||
681 | } | 690 | } |
691 | BIO_set_fd(bio, fd, BIO_NOCLOSE); | ||
692 | SSL_set_bio(s, bio, bio); | ||
693 | ret = 1; | ||
694 | err: | ||
695 | return (ret); | ||
696 | } | ||
682 | 697 | ||
683 | int SSL_set_wfd(SSL *s,int fd) | 698 | int |
684 | { | 699 | SSL_set_wfd(SSL *s, int fd) |
685 | int ret=0; | 700 | { |
686 | BIO *bio=NULL; | 701 | int ret = 0; |
702 | BIO *bio = NULL; | ||
687 | 703 | ||
688 | if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET) | 704 | if ((s->rbio == NULL) || (BIO_method_type(s->rbio) != BIO_TYPE_SOCKET) |
689 | || ((int)BIO_get_fd(s->rbio,NULL) != fd)) | 705 | || ((int)BIO_get_fd(s->rbio, NULL) != fd)) { |
690 | { | 706 | bio = BIO_new(BIO_s_socket()); |
691 | bio=BIO_new(BIO_s_socket()); | ||
692 | 707 | ||
693 | if (bio == NULL) | 708 | if (bio == NULL) |
694 | { SSLerr(SSL_F_SSL_SET_WFD,ERR_R_BUF_LIB); goto err; } | 709 | { SSLerr(SSL_F_SSL_SET_WFD, ERR_R_BUF_LIB); |
695 | BIO_set_fd(bio,fd,BIO_NOCLOSE); | 710 | goto err; |
696 | SSL_set_bio(s,SSL_get_rbio(s),bio); | ||
697 | } | 711 | } |
698 | else | 712 | BIO_set_fd(bio, fd, BIO_NOCLOSE); |
699 | SSL_set_bio(s,SSL_get_rbio(s),SSL_get_rbio(s)); | 713 | SSL_set_bio(s, SSL_get_rbio(s), bio); |
700 | ret=1; | 714 | } else |
715 | SSL_set_bio(s, SSL_get_rbio(s), SSL_get_rbio(s)); | ||
716 | ret = 1; | ||
701 | err: | 717 | err: |
702 | return(ret); | 718 | return (ret); |
703 | } | 719 | } |
704 | 720 | ||
705 | int SSL_set_rfd(SSL *s,int fd) | 721 | int |
706 | { | 722 | SSL_set_rfd(SSL *s, int fd) |
707 | int ret=0; | 723 | { |
708 | BIO *bio=NULL; | 724 | int ret = 0; |
725 | BIO *bio = NULL; | ||
709 | 726 | ||
710 | if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET) | 727 | if ((s->wbio == NULL) || (BIO_method_type(s->wbio) != BIO_TYPE_SOCKET) |
711 | || ((int)BIO_get_fd(s->wbio,NULL) != fd)) | 728 | || ((int)BIO_get_fd(s->wbio, NULL) != fd)) { |
712 | { | 729 | bio = BIO_new(BIO_s_socket()); |
713 | bio=BIO_new(BIO_s_socket()); | ||
714 | 730 | ||
715 | if (bio == NULL) | 731 | if (bio == NULL) { |
716 | { | 732 | SSLerr(SSL_F_SSL_SET_RFD, ERR_R_BUF_LIB); |
717 | SSLerr(SSL_F_SSL_SET_RFD,ERR_R_BUF_LIB); | ||
718 | goto err; | 733 | goto err; |
719 | } | ||
720 | BIO_set_fd(bio,fd,BIO_NOCLOSE); | ||
721 | SSL_set_bio(s,bio,SSL_get_wbio(s)); | ||
722 | } | 734 | } |
723 | else | 735 | BIO_set_fd(bio, fd, BIO_NOCLOSE); |
724 | SSL_set_bio(s,SSL_get_wbio(s),SSL_get_wbio(s)); | 736 | SSL_set_bio(s, bio, SSL_get_wbio(s)); |
725 | ret=1; | 737 | } else |
738 | SSL_set_bio(s, SSL_get_wbio(s), SSL_get_wbio(s)); | ||
739 | ret = 1; | ||
726 | err: | 740 | err: |
727 | return(ret); | 741 | return (ret); |
728 | } | 742 | } |
729 | #endif | 743 | #endif |
730 | 744 | ||
731 | 745 | ||
732 | /* return length of latest Finished message we sent, copy to 'buf' */ | 746 | /* return length of latest Finished message we sent, copy to 'buf' */ |
733 | size_t SSL_get_finished(const SSL *s, void *buf, size_t count) | 747 | size_t |
734 | { | 748 | SSL_get_finished(const SSL *s, void *buf, size_t count) |
749 | { | ||
735 | size_t ret = 0; | 750 | size_t ret = 0; |
736 | 751 | ||
737 | if (s->s3 != NULL) | 752 | if (s->s3 != NULL) { |
738 | { | ||
739 | ret = s->s3->tmp.finish_md_len; | 753 | ret = s->s3->tmp.finish_md_len; |
740 | if (count > ret) | 754 | if (count > ret) |
741 | count = ret; | 755 | count = ret; |
742 | memcpy(buf, s->s3->tmp.finish_md, count); | 756 | memcpy(buf, s->s3->tmp.finish_md, count); |
743 | } | ||
744 | return ret; | ||
745 | } | 757 | } |
758 | return ret; | ||
759 | } | ||
746 | 760 | ||
747 | /* return length of latest Finished message we expected, copy to 'buf' */ | 761 | /* return length of latest Finished message we expected, copy to 'buf' */ |
748 | size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count) | 762 | size_t |
749 | { | 763 | SSL_get_peer_finished(const SSL *s, void *buf, size_t count) |
764 | { | ||
750 | size_t ret = 0; | 765 | size_t ret = 0; |
751 | 766 | ||
752 | if (s->s3 != NULL) | 767 | if (s->s3 != NULL) { |
753 | { | ||
754 | ret = s->s3->tmp.peer_finish_md_len; | 768 | ret = s->s3->tmp.peer_finish_md_len; |
755 | if (count > ret) | 769 | if (count > ret) |
756 | count = ret; | 770 | count = ret; |
757 | memcpy(buf, s->s3->tmp.peer_finish_md, count); | 771 | memcpy(buf, s->s3->tmp.peer_finish_md, count); |
758 | } | ||
759 | return ret; | ||
760 | } | 772 | } |
773 | return ret; | ||
774 | } | ||
761 | 775 | ||
762 | 776 | ||
763 | int SSL_get_verify_mode(const SSL *s) | 777 | int |
764 | { | 778 | SSL_get_verify_mode(const SSL *s) |
765 | return(s->verify_mode); | 779 | { |
766 | } | 780 | return (s->verify_mode); |
781 | } | ||
767 | 782 | ||
768 | int SSL_get_verify_depth(const SSL *s) | 783 | int |
769 | { | 784 | SSL_get_verify_depth(const SSL *s) |
785 | { | ||
770 | return X509_VERIFY_PARAM_get_depth(s->param); | 786 | return X509_VERIFY_PARAM_get_depth(s->param); |
771 | } | 787 | } |
772 | 788 | ||
773 | int (*SSL_get_verify_callback(const SSL *s))(int,X509_STORE_CTX *) | 789 | int (*SSL_get_verify_callback(const SSL *s))(int, X509_STORE_CTX *) |
774 | { | 790 | { |
775 | return(s->verify_callback); | 791 | return (s->verify_callback); |
776 | } | 792 | } |
777 | 793 | ||
778 | int SSL_CTX_get_verify_mode(const SSL_CTX *ctx) | 794 | int |
779 | { | 795 | SSL_CTX_get_verify_mode(const SSL_CTX *ctx) |
780 | return(ctx->verify_mode); | 796 | { |
781 | } | 797 | return (ctx->verify_mode); |
798 | } | ||
782 | 799 | ||
783 | int SSL_CTX_get_verify_depth(const SSL_CTX *ctx) | 800 | int |
784 | { | 801 | SSL_CTX_get_verify_depth(const SSL_CTX *ctx) |
802 | { | ||
785 | return X509_VERIFY_PARAM_get_depth(ctx->param); | 803 | return X509_VERIFY_PARAM_get_depth(ctx->param); |
786 | } | 804 | } |
787 | 805 | ||
788 | int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int,X509_STORE_CTX *) | 806 | int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *) |
789 | { | 807 | { |
790 | return(ctx->default_verify_callback); | 808 | return (ctx->default_verify_callback); |
791 | } | 809 | } |
792 | 810 | ||
793 | void SSL_set_verify(SSL *s,int mode, | 811 | void |
794 | int (*callback)(int ok,X509_STORE_CTX *ctx)) | 812 | SSL_set_verify(SSL *s, int mode, |
795 | { | 813 | int (*callback)(int ok, X509_STORE_CTX *ctx)) |
796 | s->verify_mode=mode; | 814 | { |
815 | s->verify_mode = mode; | ||
797 | if (callback != NULL) | 816 | if (callback != NULL) |
798 | s->verify_callback=callback; | 817 | s->verify_callback = callback; |
799 | } | 818 | } |
800 | 819 | ||
801 | void SSL_set_verify_depth(SSL *s,int depth) | 820 | void |
802 | { | 821 | SSL_set_verify_depth(SSL *s, int depth) |
822 | { | ||
803 | X509_VERIFY_PARAM_set_depth(s->param, depth); | 823 | X509_VERIFY_PARAM_set_depth(s->param, depth); |
804 | } | 824 | } |
805 | 825 | ||
806 | void SSL_set_read_ahead(SSL *s,int yes) | 826 | void |
807 | { | 827 | SSL_set_read_ahead(SSL *s, int yes) |
808 | s->read_ahead=yes; | 828 | { |
809 | } | 829 | s->read_ahead = yes; |
830 | } | ||
810 | 831 | ||
811 | int SSL_get_read_ahead(const SSL *s) | 832 | int |
812 | { | 833 | SSL_get_read_ahead(const SSL *s) |
813 | return(s->read_ahead); | 834 | { |
814 | } | 835 | return (s->read_ahead); |
836 | } | ||
815 | 837 | ||
816 | int SSL_pending(const SSL *s) | 838 | int |
817 | { | 839 | SSL_pending(const SSL *s) |
840 | { | ||
818 | /* SSL_pending cannot work properly if read-ahead is enabled | 841 | /* SSL_pending cannot work properly if read-ahead is enabled |
819 | * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), | 842 | * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), |
820 | * and it is impossible to fix since SSL_pending cannot report | 843 | * and it is impossible to fix since SSL_pending cannot report |
@@ -822,264 +845,266 @@ int SSL_pending(const SSL *s) | |||
822 | * (Note that SSL_pending() is often used as a boolean value, | 845 | * (Note that SSL_pending() is often used as a boolean value, |
823 | * so we'd better not return -1.) | 846 | * so we'd better not return -1.) |
824 | */ | 847 | */ |
825 | return(s->method->ssl_pending(s)); | 848 | return (s->method->ssl_pending(s)); |
826 | } | 849 | } |
827 | 850 | ||
828 | X509 *SSL_get_peer_certificate(const SSL *s) | 851 | X509 |
829 | { | 852 | *SSL_get_peer_certificate(const SSL *s) |
853 | { | ||
830 | X509 *r; | 854 | X509 *r; |
831 | 855 | ||
832 | if ((s == NULL) || (s->session == NULL)) | 856 | if ((s == NULL) || (s->session == NULL)) |
833 | r=NULL; | 857 | r = NULL; |
834 | else | 858 | else |
835 | r=s->session->peer; | 859 | r = s->session->peer; |
836 | 860 | ||
837 | if (r == NULL) return(r); | 861 | if (r == NULL) |
862 | return (r); | ||
838 | 863 | ||
839 | CRYPTO_add(&r->references,1,CRYPTO_LOCK_X509); | 864 | CRYPTO_add(&r->references, 1, CRYPTO_LOCK_X509); |
840 | 865 | ||
841 | return(r); | 866 | return (r); |
842 | } | 867 | } |
843 | 868 | ||
844 | STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s) | 869 | STACK_OF(X509) |
845 | { | 870 | *SSL_get_peer_cert_chain(const SSL *s) |
871 | { | ||
846 | STACK_OF(X509) *r; | 872 | STACK_OF(X509) *r; |
847 | 873 | ||
848 | if ((s == NULL) || (s->session == NULL) || (s->session->sess_cert == NULL)) | 874 | if ((s == NULL) || (s->session == NULL) || (s->session->sess_cert == NULL)) |
849 | r=NULL; | 875 | r = NULL; |
850 | else | 876 | else |
851 | r=s->session->sess_cert->cert_chain; | 877 | r = s->session->sess_cert->cert_chain; |
852 | 878 | ||
853 | /* If we are a client, cert_chain includes the peer's own | 879 | /* If we are a client, cert_chain includes the peer's own |
854 | * certificate; if we are a server, it does not. */ | 880 | * certificate; |
855 | 881 | if we are a server, it does not. */ | |
856 | return(r); | 882 | |
857 | } | 883 | return (r); |
884 | } | ||
858 | 885 | ||
859 | /* Now in theory, since the calling process own 't' it should be safe to | 886 | /* Now in theory, since the calling process own 't' it should be safe to |
860 | * modify. We need to be able to read f without being hassled */ | 887 | * modify. We need to be able to read f without being hassled */ |
861 | void SSL_copy_session_id(SSL *t,const SSL *f) | 888 | void |
862 | { | 889 | SSL_copy_session_id(SSL *t, const SSL *f) |
890 | { | ||
863 | CERT *tmp; | 891 | CERT *tmp; |
864 | 892 | ||
865 | /* Do we need to to SSL locking? */ | 893 | /* Do we need to to SSL locking? */ |
866 | SSL_set_session(t,SSL_get_session(f)); | 894 | SSL_set_session(t, SSL_get_session(f)); |
867 | 895 | ||
868 | /* what if we are setup as SSLv2 but want to talk SSLv3 or | 896 | /* what if we are setup as SSLv2 but want to talk SSLv3 or |
869 | * vice-versa */ | 897 | * vice-versa */ |
870 | if (t->method != f->method) | 898 | if (t->method != f->method) { |
871 | { | ||
872 | t->method->ssl_free(t); /* cleanup current */ | 899 | t->method->ssl_free(t); /* cleanup current */ |
873 | t->method=f->method; /* change method */ | 900 | t->method=f->method; /* change method */ |
874 | t->method->ssl_new(t); /* setup new */ | 901 | t->method->ssl_new(t); /* setup new */ |
875 | } | ||
876 | |||
877 | tmp=t->cert; | ||
878 | if (f->cert != NULL) | ||
879 | { | ||
880 | CRYPTO_add(&f->cert->references,1,CRYPTO_LOCK_SSL_CERT); | ||
881 | t->cert=f->cert; | ||
882 | } | ||
883 | else | ||
884 | t->cert=NULL; | ||
885 | if (tmp != NULL) ssl_cert_free(tmp); | ||
886 | SSL_set_session_id_context(t,f->sid_ctx,f->sid_ctx_length); | ||
887 | } | 902 | } |
888 | 903 | ||
904 | tmp = t->cert; | ||
905 | if (f->cert != NULL) { | ||
906 | CRYPTO_add(&f->cert->references, 1, CRYPTO_LOCK_SSL_CERT); | ||
907 | t->cert = f->cert; | ||
908 | } else | ||
909 | t->cert = NULL; | ||
910 | if (tmp != NULL) | ||
911 | ssl_cert_free(tmp); | ||
912 | SSL_set_session_id_context(t, f->sid_ctx, f->sid_ctx_length); | ||
913 | } | ||
914 | |||
889 | /* Fix this so it checks all the valid key/cert options */ | 915 | /* Fix this so it checks all the valid key/cert options */ |
890 | int SSL_CTX_check_private_key(const SSL_CTX *ctx) | 916 | int |
891 | { | 917 | SSL_CTX_check_private_key(const SSL_CTX *ctx) |
892 | if ( (ctx == NULL) || | 918 | { |
919 | if ((ctx == NULL) || | ||
893 | (ctx->cert == NULL) || | 920 | (ctx->cert == NULL) || |
894 | (ctx->cert->key->x509 == NULL)) | 921 | (ctx->cert->key->x509 == NULL)) { |
895 | { | 922 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED); |
896 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED); | 923 | return (0); |
897 | return(0); | 924 | } |
898 | } | 925 | if (ctx->cert->key->privatekey == NULL) { |
899 | if (ctx->cert->key->privatekey == NULL) | 926 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED); |
900 | { | 927 | return (0); |
901 | SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED); | ||
902 | return(0); | ||
903 | } | ||
904 | return(X509_check_private_key(ctx->cert->key->x509, ctx->cert->key->privatekey)); | ||
905 | } | 928 | } |
929 | return (X509_check_private_key(ctx->cert->key->x509, ctx->cert->key->privatekey)); | ||
930 | } | ||
906 | 931 | ||
907 | /* Fix this function so that it takes an optional type parameter */ | 932 | /* Fix this function so that it takes an optional type parameter */ |
908 | int SSL_check_private_key(const SSL *ssl) | 933 | int |
909 | { | 934 | SSL_check_private_key(const SSL *ssl) |
910 | if (ssl == NULL) | 935 | { |
911 | { | 936 | if (ssl == NULL) { |
912 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,ERR_R_PASSED_NULL_PARAMETER); | 937 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, ERR_R_PASSED_NULL_PARAMETER); |
913 | return(0); | 938 | return (0); |
914 | } | 939 | } |
915 | if (ssl->cert == NULL) | 940 | if (ssl->cert == NULL) { |
916 | { | 941 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED); |
917 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED); | ||
918 | return 0; | 942 | return 0; |
919 | } | ||
920 | if (ssl->cert->key->x509 == NULL) | ||
921 | { | ||
922 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED); | ||
923 | return(0); | ||
924 | } | ||
925 | if (ssl->cert->key->privatekey == NULL) | ||
926 | { | ||
927 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_PRIVATE_KEY_ASSIGNED); | ||
928 | return(0); | ||
929 | } | ||
930 | return(X509_check_private_key(ssl->cert->key->x509, | ||
931 | ssl->cert->key->privatekey)); | ||
932 | } | 943 | } |
944 | if (ssl->cert->key->x509 == NULL) { | ||
945 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED); | ||
946 | return (0); | ||
947 | } | ||
948 | if (ssl->cert->key->privatekey == NULL) { | ||
949 | SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED); | ||
950 | return (0); | ||
951 | } | ||
952 | return(X509_check_private_key(ssl->cert->key->x509, | ||
953 | ssl->cert->key->privatekey)); | ||
954 | } | ||
933 | 955 | ||
934 | int SSL_accept(SSL *s) | 956 | int |
935 | { | 957 | SSL_accept(SSL *s) |
958 | { | ||
936 | if (s->handshake_func == 0) | 959 | if (s->handshake_func == 0) |
937 | /* Not properly initialized yet */ | 960 | /* Not properly initialized yet */ |
938 | SSL_set_accept_state(s); | 961 | SSL_set_accept_state(s); |
939 | 962 | ||
940 | return(s->method->ssl_accept(s)); | 963 | return (s->method->ssl_accept(s)); |
941 | } | 964 | } |
942 | 965 | ||
943 | int SSL_connect(SSL *s) | 966 | int |
944 | { | 967 | SSL_connect(SSL *s) |
968 | { | ||
945 | if (s->handshake_func == 0) | 969 | if (s->handshake_func == 0) |
946 | /* Not properly initialized yet */ | 970 | /* Not properly initialized yet */ |
947 | SSL_set_connect_state(s); | 971 | SSL_set_connect_state(s); |
948 | 972 | ||
949 | return(s->method->ssl_connect(s)); | 973 | return (s->method->ssl_connect(s)); |
950 | } | 974 | } |
951 | 975 | ||
952 | long SSL_get_default_timeout(const SSL *s) | 976 | long |
953 | { | 977 | SSL_get_default_timeout(const SSL *s) |
954 | return(s->method->get_timeout()); | 978 | { |
955 | } | 979 | return (s->method->get_timeout()); |
980 | } | ||
956 | 981 | ||
957 | int SSL_read(SSL *s,void *buf,int num) | 982 | int |
958 | { | 983 | SSL_read(SSL *s, void *buf, int num) |
959 | if (s->handshake_func == 0) | 984 | { |
960 | { | 985 | if (s->handshake_func == 0) { |
961 | SSLerr(SSL_F_SSL_READ, SSL_R_UNINITIALIZED); | 986 | SSLerr(SSL_F_SSL_READ, SSL_R_UNINITIALIZED); |
962 | return -1; | 987 | return -1; |
963 | } | 988 | } |
964 | 989 | ||
965 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 990 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
966 | { | 991 | s->rwstate = SSL_NOTHING; |
967 | s->rwstate=SSL_NOTHING; | 992 | return (0); |
968 | return(0); | ||
969 | } | ||
970 | return(s->method->ssl_read(s,buf,num)); | ||
971 | } | 993 | } |
994 | return (s->method->ssl_read(s, buf, num)); | ||
995 | } | ||
972 | 996 | ||
973 | int SSL_peek(SSL *s,void *buf,int num) | 997 | int |
974 | { | 998 | SSL_peek(SSL *s, void *buf, int num) |
975 | if (s->handshake_func == 0) | 999 | { |
976 | { | 1000 | if (s->handshake_func == 0) { |
977 | SSLerr(SSL_F_SSL_PEEK, SSL_R_UNINITIALIZED); | 1001 | SSLerr(SSL_F_SSL_PEEK, SSL_R_UNINITIALIZED); |
978 | return -1; | 1002 | return -1; |
979 | } | 1003 | } |
980 | 1004 | ||
981 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) | 1005 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) { |
982 | { | 1006 | return (0); |
983 | return(0); | ||
984 | } | ||
985 | return(s->method->ssl_peek(s,buf,num)); | ||
986 | } | 1007 | } |
1008 | return (s->method->ssl_peek(s, buf, num)); | ||
1009 | } | ||
987 | 1010 | ||
988 | int SSL_write(SSL *s,const void *buf,int num) | 1011 | int |
989 | { | 1012 | SSL_write(SSL *s, const void *buf, int num) |
990 | if (s->handshake_func == 0) | 1013 | { |
991 | { | 1014 | if (s->handshake_func == 0) { |
992 | SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED); | 1015 | SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED); |
993 | return -1; | 1016 | return -1; |
994 | } | 1017 | } |
995 | 1018 | ||
996 | if (s->shutdown & SSL_SENT_SHUTDOWN) | 1019 | if (s->shutdown & SSL_SENT_SHUTDOWN) { |
997 | { | 1020 | s->rwstate = SSL_NOTHING; |
998 | s->rwstate=SSL_NOTHING; | 1021 | SSLerr(SSL_F_SSL_WRITE, SSL_R_PROTOCOL_IS_SHUTDOWN); |
999 | SSLerr(SSL_F_SSL_WRITE,SSL_R_PROTOCOL_IS_SHUTDOWN); | 1022 | return (-1); |
1000 | return(-1); | ||
1001 | } | ||
1002 | return(s->method->ssl_write(s,buf,num)); | ||
1003 | } | 1023 | } |
1024 | return (s->method->ssl_write(s, buf, num)); | ||
1025 | } | ||
1004 | 1026 | ||
1005 | int SSL_shutdown(SSL *s) | 1027 | int |
1006 | { | 1028 | SSL_shutdown(SSL *s) |
1029 | { | ||
1007 | /* Note that this function behaves differently from what one might | 1030 | /* Note that this function behaves differently from what one might |
1008 | * expect. Return values are 0 for no success (yet), | 1031 | * expect. Return values are 0 for no success (yet), |
1009 | * 1 for success; but calling it once is usually not enough, | 1032 | * 1 for success; but calling it once is usually not enough, |
1010 | * even if blocking I/O is used (see ssl3_shutdown). | 1033 | * even if blocking I/O is used (see ssl3_shutdown). |
1011 | */ | 1034 | */ |
1012 | 1035 | ||
1013 | if (s->handshake_func == 0) | 1036 | if (s->handshake_func == 0) { |
1014 | { | ||
1015 | SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED); | 1037 | SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED); |
1016 | return -1; | 1038 | return -1; |
1017 | } | 1039 | } |
1018 | 1040 | ||
1019 | if ((s != NULL) && !SSL_in_init(s)) | 1041 | if ((s != NULL) && !SSL_in_init(s)) |
1020 | return(s->method->ssl_shutdown(s)); | 1042 | return (s->method->ssl_shutdown(s)); |
1021 | else | 1043 | else |
1022 | return(1); | 1044 | return (1); |
1023 | } | 1045 | } |
1024 | 1046 | ||
1025 | int SSL_renegotiate(SSL *s) | 1047 | int |
1026 | { | 1048 | SSL_renegotiate(SSL *s) |
1049 | { | ||
1027 | if (s->renegotiate == 0) | 1050 | if (s->renegotiate == 0) |
1028 | s->renegotiate=1; | 1051 | s->renegotiate = 1; |
1029 | 1052 | ||
1030 | s->new_session=1; | 1053 | s->new_session = 1; |
1031 | 1054 | ||
1032 | return(s->method->ssl_renegotiate(s)); | 1055 | return (s->method->ssl_renegotiate(s)); |
1033 | } | 1056 | } |
1034 | 1057 | ||
1035 | int SSL_renegotiate_abbreviated(SSL *s) | 1058 | int |
1036 | { | 1059 | SSL_renegotiate_abbreviated(SSL *s) |
1060 | { | ||
1037 | if (s->renegotiate == 0) | 1061 | if (s->renegotiate == 0) |
1038 | s->renegotiate=1; | 1062 | s->renegotiate = 1; |
1039 | 1063 | ||
1040 | s->new_session=0; | 1064 | s->new_session = 0; |
1041 | 1065 | ||
1042 | return(s->method->ssl_renegotiate(s)); | 1066 | return (s->method->ssl_renegotiate(s)); |
1043 | } | 1067 | } |
1044 | 1068 | ||
1045 | int SSL_renegotiate_pending(SSL *s) | 1069 | int |
1046 | { | 1070 | SSL_renegotiate_pending(SSL *s) |
1071 | { | ||
1047 | /* becomes true when negotiation is requested; | 1072 | /* becomes true when negotiation is requested; |
1048 | * false again once a handshake has finished */ | 1073 | * false again once a handshake has finished */ |
1049 | return (s->renegotiate != 0); | 1074 | return (s->renegotiate != 0); |
1050 | } | 1075 | } |
1051 | 1076 | ||
1052 | long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) | 1077 | long |
1053 | { | 1078 | SSL_ctrl(SSL *s, int cmd, long larg, void *parg) |
1079 | { | ||
1054 | long l; | 1080 | long l; |
1055 | 1081 | ||
1056 | switch (cmd) | 1082 | switch (cmd) { |
1057 | { | ||
1058 | case SSL_CTRL_GET_READ_AHEAD: | 1083 | case SSL_CTRL_GET_READ_AHEAD: |
1059 | return(s->read_ahead); | 1084 | return (s->read_ahead); |
1060 | case SSL_CTRL_SET_READ_AHEAD: | 1085 | case SSL_CTRL_SET_READ_AHEAD: |
1061 | l=s->read_ahead; | 1086 | l = s->read_ahead; |
1062 | s->read_ahead=larg; | 1087 | s->read_ahead = larg; |
1063 | return(l); | 1088 | return (l); |
1064 | 1089 | ||
1065 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: | 1090 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: |
1066 | s->msg_callback_arg = parg; | 1091 | s->msg_callback_arg = parg; |
1067 | return 1; | 1092 | return 1; |
1068 | 1093 | ||
1069 | case SSL_CTRL_OPTIONS: | 1094 | case SSL_CTRL_OPTIONS: |
1070 | return(s->options|=larg); | 1095 | return (s->options|=larg); |
1071 | case SSL_CTRL_CLEAR_OPTIONS: | 1096 | case SSL_CTRL_CLEAR_OPTIONS: |
1072 | return(s->options&=~larg); | 1097 | return (s->options&=~larg); |
1073 | case SSL_CTRL_MODE: | 1098 | case SSL_CTRL_MODE: |
1074 | return(s->mode|=larg); | 1099 | return (s->mode|=larg); |
1075 | case SSL_CTRL_CLEAR_MODE: | 1100 | case SSL_CTRL_CLEAR_MODE: |
1076 | return(s->mode &=~larg); | 1101 | return (s->mode &=~larg); |
1077 | case SSL_CTRL_GET_MAX_CERT_LIST: | 1102 | case SSL_CTRL_GET_MAX_CERT_LIST: |
1078 | return(s->max_cert_list); | 1103 | return (s->max_cert_list); |
1079 | case SSL_CTRL_SET_MAX_CERT_LIST: | 1104 | case SSL_CTRL_SET_MAX_CERT_LIST: |
1080 | l=s->max_cert_list; | 1105 | l = s->max_cert_list; |
1081 | s->max_cert_list=larg; | 1106 | s->max_cert_list = larg; |
1082 | return(l); | 1107 | return (l); |
1083 | case SSL_CTRL_SET_MTU: | 1108 | case SSL_CTRL_SET_MTU: |
1084 | #ifndef OPENSSL_NO_DTLS1 | 1109 | #ifndef OPENSSL_NO_DTLS1 |
1085 | if (larg < (long)dtls1_min_mtu()) | 1110 | if (larg < (long)dtls1_min_mtu()) |
@@ -1087,11 +1112,10 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) | |||
1087 | #endif | 1112 | #endif |
1088 | 1113 | ||
1089 | if (SSL_version(s) == DTLS1_VERSION || | 1114 | if (SSL_version(s) == DTLS1_VERSION || |
1090 | SSL_version(s) == DTLS1_BAD_VER) | 1115 | SSL_version(s) == DTLS1_BAD_VER) { |
1091 | { | ||
1092 | s->d1->mtu = larg; | 1116 | s->d1->mtu = larg; |
1093 | return larg; | 1117 | return larg; |
1094 | } | 1118 | } |
1095 | return 0; | 1119 | return 0; |
1096 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: | 1120 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: |
1097 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) | 1121 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) |
@@ -1103,203 +1127,204 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) | |||
1103 | return s->s3->send_connection_binding; | 1127 | return s->s3->send_connection_binding; |
1104 | else return 0; | 1128 | else return 0; |
1105 | default: | 1129 | default: |
1106 | return(s->method->ssl_ctrl(s,cmd,larg,parg)); | 1130 | return (s->method->ssl_ctrl(s, cmd, larg, parg)); |
1107 | } | ||
1108 | } | 1131 | } |
1132 | } | ||
1109 | 1133 | ||
1110 | long SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | 1134 | long |
1111 | { | 1135 | SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) |
1112 | switch(cmd) | 1136 | { |
1113 | { | 1137 | switch (cmd) { |
1114 | case SSL_CTRL_SET_MSG_CALLBACK: | 1138 | case SSL_CTRL_SET_MSG_CALLBACK: |
1115 | s->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); | 1139 | s->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); |
1116 | return 1; | 1140 | return 1; |
1117 | 1141 | ||
1118 | default: | 1142 | default: |
1119 | return(s->method->ssl_callback_ctrl(s,cmd,fp)); | 1143 | return (s->method->ssl_callback_ctrl(s, cmd, fp)); |
1120 | } | ||
1121 | } | 1144 | } |
1145 | } | ||
1122 | 1146 | ||
1123 | LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx) | 1147 | LHASH_OF(SSL_SESSION) |
1124 | { | 1148 | *SSL_CTX_sessions(SSL_CTX *ctx) |
1149 | { | ||
1125 | return ctx->sessions; | 1150 | return ctx->sessions; |
1126 | } | 1151 | } |
1127 | 1152 | ||
1128 | long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,void *parg) | 1153 | long |
1129 | { | 1154 | SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) |
1155 | { | ||
1130 | long l; | 1156 | long l; |
1131 | 1157 | ||
1132 | switch (cmd) | 1158 | switch (cmd) { |
1133 | { | ||
1134 | case SSL_CTRL_GET_READ_AHEAD: | 1159 | case SSL_CTRL_GET_READ_AHEAD: |
1135 | return(ctx->read_ahead); | 1160 | return (ctx->read_ahead); |
1136 | case SSL_CTRL_SET_READ_AHEAD: | 1161 | case SSL_CTRL_SET_READ_AHEAD: |
1137 | l=ctx->read_ahead; | 1162 | l = ctx->read_ahead; |
1138 | ctx->read_ahead=larg; | 1163 | ctx->read_ahead = larg; |
1139 | return(l); | 1164 | return (l); |
1140 | 1165 | ||
1141 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: | 1166 | case SSL_CTRL_SET_MSG_CALLBACK_ARG: |
1142 | ctx->msg_callback_arg = parg; | 1167 | ctx->msg_callback_arg = parg; |
1143 | return 1; | 1168 | return 1; |
1144 | 1169 | ||
1145 | case SSL_CTRL_GET_MAX_CERT_LIST: | 1170 | case SSL_CTRL_GET_MAX_CERT_LIST: |
1146 | return(ctx->max_cert_list); | 1171 | return (ctx->max_cert_list); |
1147 | case SSL_CTRL_SET_MAX_CERT_LIST: | 1172 | case SSL_CTRL_SET_MAX_CERT_LIST: |
1148 | l=ctx->max_cert_list; | 1173 | l = ctx->max_cert_list; |
1149 | ctx->max_cert_list=larg; | 1174 | ctx->max_cert_list = larg; |
1150 | return(l); | 1175 | return (l); |
1151 | 1176 | ||
1152 | case SSL_CTRL_SET_SESS_CACHE_SIZE: | 1177 | case SSL_CTRL_SET_SESS_CACHE_SIZE: |
1153 | l=ctx->session_cache_size; | 1178 | l = ctx->session_cache_size; |
1154 | ctx->session_cache_size=larg; | 1179 | ctx->session_cache_size = larg; |
1155 | return(l); | 1180 | return (l); |
1156 | case SSL_CTRL_GET_SESS_CACHE_SIZE: | 1181 | case SSL_CTRL_GET_SESS_CACHE_SIZE: |
1157 | return(ctx->session_cache_size); | 1182 | return (ctx->session_cache_size); |
1158 | case SSL_CTRL_SET_SESS_CACHE_MODE: | 1183 | case SSL_CTRL_SET_SESS_CACHE_MODE: |
1159 | l=ctx->session_cache_mode; | 1184 | l = ctx->session_cache_mode; |
1160 | ctx->session_cache_mode=larg; | 1185 | ctx->session_cache_mode = larg; |
1161 | return(l); | 1186 | return (l); |
1162 | case SSL_CTRL_GET_SESS_CACHE_MODE: | 1187 | case SSL_CTRL_GET_SESS_CACHE_MODE: |
1163 | return(ctx->session_cache_mode); | 1188 | return (ctx->session_cache_mode); |
1164 | 1189 | ||
1165 | case SSL_CTRL_SESS_NUMBER: | 1190 | case SSL_CTRL_SESS_NUMBER: |
1166 | return(lh_SSL_SESSION_num_items(ctx->sessions)); | 1191 | return (lh_SSL_SESSION_num_items(ctx->sessions)); |
1167 | case SSL_CTRL_SESS_CONNECT: | 1192 | case SSL_CTRL_SESS_CONNECT: |
1168 | return(ctx->stats.sess_connect); | 1193 | return (ctx->stats.sess_connect); |
1169 | case SSL_CTRL_SESS_CONNECT_GOOD: | 1194 | case SSL_CTRL_SESS_CONNECT_GOOD: |
1170 | return(ctx->stats.sess_connect_good); | 1195 | return (ctx->stats.sess_connect_good); |
1171 | case SSL_CTRL_SESS_CONNECT_RENEGOTIATE: | 1196 | case SSL_CTRL_SESS_CONNECT_RENEGOTIATE: |
1172 | return(ctx->stats.sess_connect_renegotiate); | 1197 | return (ctx->stats.sess_connect_renegotiate); |
1173 | case SSL_CTRL_SESS_ACCEPT: | 1198 | case SSL_CTRL_SESS_ACCEPT: |
1174 | return(ctx->stats.sess_accept); | 1199 | return (ctx->stats.sess_accept); |
1175 | case SSL_CTRL_SESS_ACCEPT_GOOD: | 1200 | case SSL_CTRL_SESS_ACCEPT_GOOD: |
1176 | return(ctx->stats.sess_accept_good); | 1201 | return (ctx->stats.sess_accept_good); |
1177 | case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE: | 1202 | case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE: |
1178 | return(ctx->stats.sess_accept_renegotiate); | 1203 | return (ctx->stats.sess_accept_renegotiate); |
1179 | case SSL_CTRL_SESS_HIT: | 1204 | case SSL_CTRL_SESS_HIT: |
1180 | return(ctx->stats.sess_hit); | 1205 | return (ctx->stats.sess_hit); |
1181 | case SSL_CTRL_SESS_CB_HIT: | 1206 | case SSL_CTRL_SESS_CB_HIT: |
1182 | return(ctx->stats.sess_cb_hit); | 1207 | return (ctx->stats.sess_cb_hit); |
1183 | case SSL_CTRL_SESS_MISSES: | 1208 | case SSL_CTRL_SESS_MISSES: |
1184 | return(ctx->stats.sess_miss); | 1209 | return (ctx->stats.sess_miss); |
1185 | case SSL_CTRL_SESS_TIMEOUTS: | 1210 | case SSL_CTRL_SESS_TIMEOUTS: |
1186 | return(ctx->stats.sess_timeout); | 1211 | return (ctx->stats.sess_timeout); |
1187 | case SSL_CTRL_SESS_CACHE_FULL: | 1212 | case SSL_CTRL_SESS_CACHE_FULL: |
1188 | return(ctx->stats.sess_cache_full); | 1213 | return (ctx->stats.sess_cache_full); |
1189 | case SSL_CTRL_OPTIONS: | 1214 | case SSL_CTRL_OPTIONS: |
1190 | return(ctx->options|=larg); | 1215 | return (ctx->options|=larg); |
1191 | case SSL_CTRL_CLEAR_OPTIONS: | 1216 | case SSL_CTRL_CLEAR_OPTIONS: |
1192 | return(ctx->options&=~larg); | 1217 | return (ctx->options&=~larg); |
1193 | case SSL_CTRL_MODE: | 1218 | case SSL_CTRL_MODE: |
1194 | return(ctx->mode|=larg); | 1219 | return (ctx->mode|=larg); |
1195 | case SSL_CTRL_CLEAR_MODE: | 1220 | case SSL_CTRL_CLEAR_MODE: |
1196 | return(ctx->mode&=~larg); | 1221 | return (ctx->mode&=~larg); |
1197 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: | 1222 | case SSL_CTRL_SET_MAX_SEND_FRAGMENT: |
1198 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) | 1223 | if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH) |
1199 | return 0; | 1224 | return 0; |
1200 | ctx->max_send_fragment = larg; | 1225 | ctx->max_send_fragment = larg; |
1201 | return 1; | 1226 | return 1; |
1202 | default: | 1227 | default: |
1203 | return(ctx->method->ssl_ctx_ctrl(ctx,cmd,larg,parg)); | 1228 | return (ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg)); |
1204 | } | ||
1205 | } | 1229 | } |
1230 | } | ||
1206 | 1231 | ||
1207 | long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | 1232 | long |
1208 | { | 1233 | SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) |
1209 | switch(cmd) | 1234 | { |
1210 | { | 1235 | switch (cmd) { |
1211 | case SSL_CTRL_SET_MSG_CALLBACK: | 1236 | case SSL_CTRL_SET_MSG_CALLBACK: |
1212 | ctx->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); | 1237 | ctx->msg_callback = (void (*)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg))(fp); |
1213 | return 1; | 1238 | return 1; |
1214 | 1239 | ||
1215 | default: | 1240 | default: |
1216 | return(ctx->method->ssl_ctx_callback_ctrl(ctx,cmd,fp)); | 1241 | return (ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp)); |
1217 | } | ||
1218 | } | 1242 | } |
1243 | } | ||
1219 | 1244 | ||
1220 | int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b) | 1245 | int |
1221 | { | 1246 | ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b) |
1247 | { | ||
1222 | long l; | 1248 | long l; |
1223 | 1249 | ||
1224 | l=a->id-b->id; | 1250 | l = a->id - b->id; |
1225 | if (l == 0L) | 1251 | if (l == 0L) |
1226 | return(0); | 1252 | return (0); |
1227 | else | 1253 | else |
1228 | return((l > 0)?1:-1); | 1254 | return ((l > 0) ? 1:-1); |
1229 | } | 1255 | } |
1230 | 1256 | ||
1231 | int ssl_cipher_ptr_id_cmp(const SSL_CIPHER * const *ap, | 1257 | int |
1232 | const SSL_CIPHER * const *bp) | 1258 | ssl_cipher_ptr_id_cmp(const SSL_CIPHER * const *ap, |
1233 | { | 1259 | const SSL_CIPHER * const *bp) |
1260 | { | ||
1234 | long l; | 1261 | long l; |
1235 | 1262 | ||
1236 | l=(*ap)->id-(*bp)->id; | 1263 | l = (*ap)->id - (*bp)->id; |
1237 | if (l == 0L) | 1264 | if (l == 0L) |
1238 | return(0); | 1265 | return (0); |
1239 | else | 1266 | else |
1240 | return((l > 0)?1:-1); | 1267 | return ((l > 0) ? 1:-1); |
1241 | } | 1268 | } |
1242 | 1269 | ||
1243 | /** return a STACK of the ciphers available for the SSL and in order of | 1270 | /** return a STACK of the ciphers available for the SSL and in order of |
1244 | * preference */ | 1271 | * preference */ |
1245 | STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s) | 1272 | STACK_OF(SSL_CIPHER) |
1246 | { | 1273 | *SSL_get_ciphers(const SSL *s) |
1247 | if (s != NULL) | 1274 | { |
1248 | { | 1275 | if (s != NULL) { |
1249 | if (s->cipher_list != NULL) | 1276 | if (s->cipher_list != NULL) { |
1250 | { | 1277 | return (s->cipher_list); |
1251 | return(s->cipher_list); | 1278 | } else if ((s->ctx != NULL) && |
1252 | } | 1279 | (s->ctx->cipher_list != NULL)) { |
1253 | else if ((s->ctx != NULL) && | 1280 | return (s->ctx->cipher_list); |
1254 | (s->ctx->cipher_list != NULL)) | ||
1255 | { | ||
1256 | return(s->ctx->cipher_list); | ||
1257 | } | ||
1258 | } | 1281 | } |
1259 | return(NULL); | ||
1260 | } | 1282 | } |
1283 | return (NULL); | ||
1284 | } | ||
1261 | 1285 | ||
1262 | /** return a STACK of the ciphers available for the SSL and in order of | 1286 | /** return a STACK of the ciphers available for the SSL and in order of |
1263 | * algorithm id */ | 1287 | * algorithm id */ |
1264 | STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s) | 1288 | STACK_OF(SSL_CIPHER) |
1265 | { | 1289 | *ssl_get_ciphers_by_id(SSL *s) |
1266 | if (s != NULL) | 1290 | { |
1267 | { | 1291 | if (s != NULL) { |
1268 | if (s->cipher_list_by_id != NULL) | 1292 | if (s->cipher_list_by_id != NULL) { |
1269 | { | 1293 | return (s->cipher_list_by_id); |
1270 | return(s->cipher_list_by_id); | 1294 | } else if ((s->ctx != NULL) && |
1271 | } | 1295 | (s->ctx->cipher_list_by_id != NULL)) { |
1272 | else if ((s->ctx != NULL) && | 1296 | return (s->ctx->cipher_list_by_id); |
1273 | (s->ctx->cipher_list_by_id != NULL)) | ||
1274 | { | ||
1275 | return(s->ctx->cipher_list_by_id); | ||
1276 | } | ||
1277 | } | 1297 | } |
1278 | return(NULL); | ||
1279 | } | 1298 | } |
1299 | return (NULL); | ||
1300 | } | ||
1280 | 1301 | ||
1281 | /** The old interface to get the same thing as SSL_get_ciphers() */ | 1302 | /** The old interface to get the same thing as SSL_get_ciphers() */ |
1282 | const char *SSL_get_cipher_list(const SSL *s,int n) | 1303 | const char |
1283 | { | 1304 | *SSL_get_cipher_list(const SSL *s, int n) |
1305 | { | ||
1284 | SSL_CIPHER *c; | 1306 | SSL_CIPHER *c; |
1285 | STACK_OF(SSL_CIPHER) *sk; | 1307 | STACK_OF(SSL_CIPHER) *sk; |
1286 | 1308 | ||
1287 | if (s == NULL) return(NULL); | 1309 | if (s == NULL) |
1288 | sk=SSL_get_ciphers(s); | 1310 | return (NULL); |
1311 | sk = SSL_get_ciphers(s); | ||
1289 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n)) | 1312 | if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n)) |
1290 | return(NULL); | 1313 | return (NULL); |
1291 | c=sk_SSL_CIPHER_value(sk,n); | 1314 | c = sk_SSL_CIPHER_value(sk, n); |
1292 | if (c == NULL) return(NULL); | 1315 | if (c == NULL) |
1293 | return(c->name); | 1316 | return (NULL); |
1294 | } | 1317 | return (c->name); |
1318 | } | ||
1295 | 1319 | ||
1296 | /** specify the ciphers to be used by default by the SSL_CTX */ | 1320 | /** specify the ciphers to be used by default by the SSL_CTX */ |
1297 | int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) | 1321 | int |
1298 | { | 1322 | SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) |
1323 | { | ||
1299 | STACK_OF(SSL_CIPHER) *sk; | 1324 | STACK_OF(SSL_CIPHER) *sk; |
1300 | 1325 | ||
1301 | sk=ssl_create_cipher_list(ctx->method,&ctx->cipher_list, | 1326 | sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list, |
1302 | &ctx->cipher_list_by_id,str); | 1327 | &ctx->cipher_list_by_id, str); |
1303 | /* ssl_create_cipher_list may return an empty stack if it | 1328 | /* ssl_create_cipher_list may return an empty stack if it |
1304 | * was unable to find a cipher matching the given rule string | 1329 | * was unable to find a cipher matching the given rule string |
1305 | * (for example if the rule string specifies a cipher which | 1330 | * (for example if the rule string specifies a cipher which |
@@ -1309,35 +1334,35 @@ int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str) | |||
1309 | * updated. */ | 1334 | * updated. */ |
1310 | if (sk == NULL) | 1335 | if (sk == NULL) |
1311 | return 0; | 1336 | return 0; |
1312 | else if (sk_SSL_CIPHER_num(sk) == 0) | 1337 | else if (sk_SSL_CIPHER_num(sk) == 0) { |
1313 | { | ||
1314 | SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); | 1338 | SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); |
1315 | return 0; | 1339 | return 0; |
1316 | } | ||
1317 | return 1; | ||
1318 | } | 1340 | } |
1341 | return 1; | ||
1342 | } | ||
1319 | 1343 | ||
1320 | /** specify the ciphers to be used by the SSL */ | 1344 | /** specify the ciphers to be used by the SSL */ |
1321 | int SSL_set_cipher_list(SSL *s,const char *str) | 1345 | int |
1322 | { | 1346 | SSL_set_cipher_list(SSL *s, const char *str) |
1347 | { | ||
1323 | STACK_OF(SSL_CIPHER) *sk; | 1348 | STACK_OF(SSL_CIPHER) *sk; |
1324 | 1349 | ||
1325 | sk=ssl_create_cipher_list(s->ctx->method,&s->cipher_list, | 1350 | sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list, |
1326 | &s->cipher_list_by_id,str); | 1351 | &s->cipher_list_by_id, str); |
1327 | /* see comment in SSL_CTX_set_cipher_list */ | 1352 | /* see comment in SSL_CTX_set_cipher_list */ |
1328 | if (sk == NULL) | 1353 | if (sk == NULL) |
1329 | return 0; | 1354 | return 0; |
1330 | else if (sk_SSL_CIPHER_num(sk) == 0) | 1355 | else if (sk_SSL_CIPHER_num(sk) == 0) { |
1331 | { | ||
1332 | SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); | 1356 | SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH); |
1333 | return 0; | 1357 | return 0; |
1334 | } | ||
1335 | return 1; | ||
1336 | } | 1358 | } |
1359 | return 1; | ||
1360 | } | ||
1337 | 1361 | ||
1338 | /* works well for SSLv2, not so good for SSLv3 */ | 1362 | /* works well for SSLv2, not so good for SSLv3 */ |
1339 | char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) | 1363 | char |
1340 | { | 1364 | *SSL_get_shared_ciphers(const SSL *s, char *buf, int len) |
1365 | { | ||
1341 | char *end; | 1366 | char *end; |
1342 | STACK_OF(SSL_CIPHER) *sk; | 1367 | STACK_OF(SSL_CIPHER) *sk; |
1343 | SSL_CIPHER *c; | 1368 | SSL_CIPHER *c; |
@@ -1346,146 +1371,138 @@ char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) | |||
1346 | 1371 | ||
1347 | if ((s->session == NULL) || (s->session->ciphers == NULL) || | 1372 | if ((s->session == NULL) || (s->session->ciphers == NULL) || |
1348 | (len < 2)) | 1373 | (len < 2)) |
1349 | return(NULL); | 1374 | return (NULL); |
1350 | 1375 | ||
1351 | sk=s->session->ciphers; | 1376 | sk = s->session->ciphers; |
1352 | buf[0] = '\0'; | 1377 | buf[0] = '\0'; |
1353 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) | 1378 | for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { |
1354 | { | 1379 | c = sk_SSL_CIPHER_value(sk, i); |
1355 | c=sk_SSL_CIPHER_value(sk,i); | ||
1356 | end = buf + curlen; | 1380 | end = buf + curlen; |
1357 | if (strlcat(buf, c->name, len) >= len || | 1381 | if (strlcat(buf, c->name, len) >= len || |
1358 | (curlen = strlcat(buf, ":", len)) >= len) | 1382 | (curlen = strlcat(buf, ":", len)) >= len) { |
1359 | { | ||
1360 | /* remove truncated cipher from list */ | 1383 | /* remove truncated cipher from list */ |
1361 | *end = '\0'; | 1384 | *end = '\0'; |
1362 | break; | 1385 | break; |
1363 | } | ||
1364 | } | 1386 | } |
1387 | } | ||
1365 | /* remove trailing colon */ | 1388 | /* remove trailing colon */ |
1366 | if ((end = strrchr(buf, ':')) != NULL) | 1389 | if ((end = strrchr(buf, ':')) != NULL) |
1367 | *end = '\0'; | 1390 | *end = '\0'; |
1368 | return(buf); | 1391 | return (buf); |
1369 | } | 1392 | } |
1370 | 1393 | ||
1371 | int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p, | 1394 | int |
1372 | int (*put_cb)(const SSL_CIPHER *, unsigned char *)) | 1395 | ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk, unsigned char *p, |
1373 | { | 1396 | int (*put_cb)(const SSL_CIPHER *, unsigned char *)) |
1374 | int i,j=0; | 1397 | { |
1398 | int i, j = 0; | ||
1375 | SSL_CIPHER *c; | 1399 | SSL_CIPHER *c; |
1376 | unsigned char *q; | 1400 | unsigned char *q; |
1377 | #ifndef OPENSSL_NO_KRB5 | 1401 | #ifndef OPENSSL_NO_KRB5 |
1378 | int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx); | 1402 | int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx); |
1379 | #endif /* OPENSSL_NO_KRB5 */ | 1403 | #endif /* OPENSSL_NO_KRB5 */ |
1380 | 1404 | ||
1381 | if (sk == NULL) return(0); | 1405 | if (sk == NULL) |
1382 | q=p; | 1406 | return (0); |
1407 | q = p; | ||
1383 | 1408 | ||
1384 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) | 1409 | for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { |
1385 | { | 1410 | c = sk_SSL_CIPHER_value(sk, i); |
1386 | c=sk_SSL_CIPHER_value(sk,i); | ||
1387 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ | 1411 | /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */ |
1388 | if ((c->algorithm_ssl & SSL_TLSV1_2) && | 1412 | if ((c->algorithm_ssl & SSL_TLSV1_2) && |
1389 | (TLS1_get_client_version(s) < TLS1_2_VERSION)) | 1413 | (TLS1_get_client_version(s) < TLS1_2_VERSION)) |
1390 | continue; | 1414 | continue; |
1391 | #ifndef OPENSSL_NO_KRB5 | 1415 | #ifndef OPENSSL_NO_KRB5 |
1392 | if (((c->algorithm_mkey & SSL_kKRB5) || (c->algorithm_auth & SSL_aKRB5)) && | 1416 | if (((c->algorithm_mkey & SSL_kKRB5) || (c->algorithm_auth & SSL_aKRB5)) && |
1393 | nokrb5) | 1417 | nokrb5) |
1394 | continue; | 1418 | continue; |
1395 | #endif /* OPENSSL_NO_KRB5 */ | 1419 | #endif /* OPENSSL_NO_KRB5 */ |
1396 | #ifndef OPENSSL_NO_PSK | 1420 | #ifndef OPENSSL_NO_PSK |
1397 | /* with PSK there must be client callback set */ | 1421 | /* with PSK there must be client callback set */ |
1398 | if (((c->algorithm_mkey & SSL_kPSK) || (c->algorithm_auth & SSL_aPSK)) && | 1422 | if (((c->algorithm_mkey & SSL_kPSK) || (c->algorithm_auth & SSL_aPSK)) && |
1399 | s->psk_client_callback == NULL) | 1423 | s->psk_client_callback == NULL) |
1400 | continue; | 1424 | continue; |
1401 | #endif /* OPENSSL_NO_PSK */ | 1425 | #endif /* OPENSSL_NO_PSK */ |
1402 | j = put_cb ? put_cb(c,p) : ssl_put_cipher_by_char(s,c,p); | 1426 | j = put_cb ? put_cb(c, p) : ssl_put_cipher_by_char(s, c, p); |
1403 | p+=j; | 1427 | p += j; |
1404 | } | 1428 | } |
1405 | /* If p == q, no ciphers and caller indicates an error. Otherwise | 1429 | /* If p == q, no ciphers and caller indicates an error. Otherwise |
1406 | * add SCSV if not renegotiating. | 1430 | * add SCSV if not renegotiating. |
1407 | */ | 1431 | */ |
1408 | if (p != q && !s->renegotiate) | 1432 | if (p != q && !s->renegotiate) { |
1409 | { | 1433 | static SSL_CIPHER scsv = { |
1410 | static SSL_CIPHER scsv = | ||
1411 | { | ||
1412 | 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 1434 | 0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
1413 | }; | 1435 | }; |
1414 | j = put_cb ? put_cb(&scsv,p) : ssl_put_cipher_by_char(s,&scsv,p); | 1436 | j = put_cb ? put_cb(&scsv, p) : ssl_put_cipher_by_char(s, &scsv, p); |
1415 | p+=j; | 1437 | p += j; |
1416 | #ifdef OPENSSL_RI_DEBUG | 1438 | #ifdef OPENSSL_RI_DEBUG |
1417 | fprintf(stderr, "SCSV sent by client\n"); | 1439 | fprintf(stderr, "SCSV sent by client\n"); |
1418 | #endif | 1440 | #endif |
1419 | } | ||
1420 | |||
1421 | return(p-q); | ||
1422 | } | 1441 | } |
1423 | 1442 | ||
1424 | STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num, | 1443 | return (p - q); |
1425 | STACK_OF(SSL_CIPHER) **skp) | 1444 | } |
1426 | { | 1445 | |
1446 | STACK_OF(SSL_CIPHER) | ||
1447 | *ssl_bytes_to_cipher_list(SSL *s, unsigned char *p, int num, | ||
1448 | STACK_OF(SSL_CIPHER) **skp) | ||
1449 | { | ||
1427 | const SSL_CIPHER *c; | 1450 | const SSL_CIPHER *c; |
1428 | STACK_OF(SSL_CIPHER) *sk; | 1451 | STACK_OF(SSL_CIPHER) *sk; |
1429 | int i,n; | 1452 | int i, n; |
1430 | if (s->s3) | 1453 | if (s->s3) |
1431 | s->s3->send_connection_binding = 0; | 1454 | s->s3->send_connection_binding = 0; |
1432 | 1455 | ||
1433 | n=ssl_put_cipher_by_char(s,NULL,NULL); | 1456 | n = ssl_put_cipher_by_char(s, NULL, NULL); |
1434 | if ((num%n) != 0) | 1457 | if ((num % n) != 0) { |
1435 | { | 1458 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); |
1436 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); | 1459 | return (NULL); |
1437 | return(NULL); | 1460 | } |
1438 | } | ||
1439 | if ((skp == NULL) || (*skp == NULL)) | 1461 | if ((skp == NULL) || (*skp == NULL)) |
1440 | sk=sk_SSL_CIPHER_new_null(); /* change perhaps later */ | 1462 | sk=sk_SSL_CIPHER_new_null(); /* change perhaps later */ |
1441 | else | 1463 | else { |
1442 | { | ||
1443 | sk= *skp; | 1464 | sk= *skp; |
1444 | sk_SSL_CIPHER_zero(sk); | 1465 | sk_SSL_CIPHER_zero(sk); |
1445 | } | 1466 | } |
1446 | 1467 | ||
1447 | for (i=0; i<num; i+=n) | 1468 | for (i = 0; i < num; i += n) { |
1448 | { | ||
1449 | /* Check for SCSV */ | 1469 | /* Check for SCSV */ |
1450 | if (s->s3 && (n != 3 || !p[0]) && | 1470 | if (s->s3 && (n != 3 || !p[0]) && |
1451 | (p[n-2] == ((SSL3_CK_SCSV >> 8) & 0xff)) && | 1471 | (p[n - 2] == ((SSL3_CK_SCSV >> 8) & 0xff)) && |
1452 | (p[n-1] == (SSL3_CK_SCSV & 0xff))) | 1472 | (p[n - 1] == (SSL3_CK_SCSV & 0xff))) { |
1453 | { | ||
1454 | /* SCSV fatal if renegotiating */ | 1473 | /* SCSV fatal if renegotiating */ |
1455 | if (s->renegotiate) | 1474 | if (s->renegotiate) { |
1456 | { | 1475 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING); |
1457 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING); | 1476 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); |
1458 | ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE); | 1477 | |
1459 | goto err; | 1478 | goto err; |
1460 | } | 1479 | } |
1461 | s->s3->send_connection_binding = 1; | 1480 | s->s3->send_connection_binding = 1; |
1462 | p += n; | 1481 | p += n; |
1463 | #ifdef OPENSSL_RI_DEBUG | 1482 | #ifdef OPENSSL_RI_DEBUG |
1464 | fprintf(stderr, "SCSV received by server\n"); | 1483 | fprintf(stderr, "SCSV received by server\n"); |
1465 | #endif | 1484 | #endif |
1466 | continue; | 1485 | continue; |
1467 | } | 1486 | } |
1468 | 1487 | ||
1469 | c=ssl_get_cipher_by_char(s,p); | 1488 | c = ssl_get_cipher_by_char(s, p); |
1470 | p+=n; | 1489 | p += n; |
1471 | if (c != NULL) | 1490 | if (c != NULL) { |
1472 | { | 1491 | if (!sk_SSL_CIPHER_push(sk, c)) { |
1473 | if (!sk_SSL_CIPHER_push(sk,c)) | 1492 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE); |
1474 | { | ||
1475 | SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,ERR_R_MALLOC_FAILURE); | ||
1476 | goto err; | 1493 | goto err; |
1477 | } | ||
1478 | } | 1494 | } |
1479 | } | 1495 | } |
1496 | } | ||
1480 | 1497 | ||
1481 | if (skp != NULL) | 1498 | if (skp != NULL) |
1482 | *skp=sk; | 1499 | *skp = sk; |
1483 | return(sk); | 1500 | return (sk); |
1484 | err: | 1501 | err: |
1485 | if ((skp == NULL) || (*skp == NULL)) | 1502 | if ((skp == NULL) || (*skp == NULL)) |
1486 | sk_SSL_CIPHER_free(sk); | 1503 | sk_SSL_CIPHER_free(sk); |
1487 | return(NULL); | 1504 | return (NULL); |
1488 | } | 1505 | } |
1489 | 1506 | ||
1490 | 1507 | ||
1491 | #ifndef OPENSSL_NO_TLSEXT | 1508 | #ifndef OPENSSL_NO_TLSEXT |
@@ -1493,22 +1510,24 @@ err: | |||
1493 | * So far, only host_name types are defined (RFC 3546). | 1510 | * So far, only host_name types are defined (RFC 3546). |
1494 | */ | 1511 | */ |
1495 | 1512 | ||
1496 | const char *SSL_get_servername(const SSL *s, const int type) | 1513 | const char |
1497 | { | 1514 | *SSL_get_servername(const SSL *s, const int type) |
1515 | { | ||
1498 | if (type != TLSEXT_NAMETYPE_host_name) | 1516 | if (type != TLSEXT_NAMETYPE_host_name) |
1499 | return NULL; | 1517 | return NULL; |
1500 | 1518 | ||
1501 | return s->session && !s->tlsext_hostname ? | 1519 | return s->session && !s->tlsext_hostname ? |
1502 | s->session->tlsext_hostname : | 1520 | s->session->tlsext_hostname : |
1503 | s->tlsext_hostname; | 1521 | s->tlsext_hostname; |
1504 | } | 1522 | } |
1505 | 1523 | ||
1506 | int SSL_get_servername_type(const SSL *s) | 1524 | int |
1507 | { | 1525 | SSL_get_servername_type(const SSL *s) |
1526 | { | ||
1508 | if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s->tlsext_hostname)) | 1527 | if (s->session && (!s->tlsext_hostname ? s->session->tlsext_hostname : s->tlsext_hostname)) |
1509 | return TLSEXT_NAMETYPE_host_name; | 1528 | return TLSEXT_NAMETYPE_host_name; |
1510 | return -1; | 1529 | return -1; |
1511 | } | 1530 | } |
1512 | 1531 | ||
1513 | # ifndef OPENSSL_NO_NEXTPROTONEG | 1532 | # ifndef OPENSSL_NO_NEXTPROTONEG |
1514 | /* SSL_select_next_proto implements the standard protocol selection. It is | 1533 | /* SSL_select_next_proto implements the standard protocol selection. It is |
@@ -1541,31 +1560,29 @@ int SSL_get_servername_type(const SSL *s) | |||
1541 | * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or | 1560 | * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or |
1542 | * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached. | 1561 | * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached. |
1543 | */ | 1562 | */ |
1544 | int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len) | 1563 | int |
1545 | { | 1564 | SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len) |
1565 | { | ||
1546 | unsigned int i, j; | 1566 | unsigned int i, j; |
1547 | const unsigned char *result; | 1567 | const unsigned char *result; |
1548 | int status = OPENSSL_NPN_UNSUPPORTED; | 1568 | int status = OPENSSL_NPN_UNSUPPORTED; |
1549 | 1569 | ||
1550 | /* For each protocol in server preference order, see if we support it. */ | 1570 | /* For each protocol in server preference order, see if we support it. */ |
1551 | for (i = 0; i < server_len; ) | 1571 | for (i = 0; i < server_len; ) { |
1552 | { | 1572 | for (j = 0; j < client_len; ) { |
1553 | for (j = 0; j < client_len; ) | ||
1554 | { | ||
1555 | if (server[i] == client[j] && | 1573 | if (server[i] == client[j] && |
1556 | memcmp(&server[i+1], &client[j+1], server[i]) == 0) | 1574 | memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) { |
1557 | { | ||
1558 | /* We found a match */ | 1575 | /* We found a match */ |
1559 | result = &server[i]; | 1576 | result = &server[i]; |
1560 | status = OPENSSL_NPN_NEGOTIATED; | 1577 | status = OPENSSL_NPN_NEGOTIATED; |
1561 | goto found; | 1578 | goto found; |
1562 | } | 1579 | } |
1563 | j += client[j]; | 1580 | j += client[j]; |
1564 | j++; | 1581 | j++; |
1565 | } | 1582 | } |
1566 | i += server[i]; | 1583 | i += server[i]; |
1567 | i++; | 1584 | i++; |
1568 | } | 1585 | } |
1569 | 1586 | ||
1570 | /* There's no overlap between our protocols and the server's list. */ | 1587 | /* There's no overlap between our protocols and the server's list. */ |
1571 | result = client; | 1588 | result = client; |
@@ -1575,7 +1592,7 @@ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsi | |||
1575 | *out = (unsigned char *) result + 1; | 1592 | *out = (unsigned char *) result + 1; |
1576 | *outlen = result[0]; | 1593 | *outlen = result[0]; |
1577 | return status; | 1594 | return status; |
1578 | } | 1595 | } |
1579 | 1596 | ||
1580 | /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's | 1597 | /* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's |
1581 | * requested protocol for this connection and returns 0. If the client didn't | 1598 | * requested protocol for this connection and returns 0. If the client didn't |
@@ -1585,8 +1602,9 @@ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsi | |||
1585 | * from this function need not be a member of the list of supported protocols | 1602 | * from this function need not be a member of the list of supported protocols |
1586 | * provided by the callback. | 1603 | * provided by the callback. |
1587 | */ | 1604 | */ |
1588 | void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len) | 1605 | void |
1589 | { | 1606 | SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len) |
1607 | { | ||
1590 | *data = s->next_proto_negotiated; | 1608 | *data = s->next_proto_negotiated; |
1591 | if (!*data) { | 1609 | if (!*data) { |
1592 | *len = 0; | 1610 | *len = 0; |
@@ -1604,11 +1622,12 @@ void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, un | |||
1604 | * | 1622 | * |
1605 | * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no | 1623 | * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no |
1606 | * such extension will be included in the ServerHello. */ | 1624 | * such extension will be included in the ServerHello. */ |
1607 | void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg) | 1625 | void |
1608 | { | 1626 | SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg) |
1627 | { | ||
1609 | ctx->next_protos_advertised_cb = cb; | 1628 | ctx->next_protos_advertised_cb = cb; |
1610 | ctx->next_protos_advertised_cb_arg = arg; | 1629 | ctx->next_protos_advertised_cb_arg = arg; |
1611 | } | 1630 | } |
1612 | 1631 | ||
1613 | /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a | 1632 | /* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a |
1614 | * client needs to select a protocol from the server's provided list. |out| | 1633 | * client needs to select a protocol from the server's provided list. |out| |
@@ -1620,183 +1639,186 @@ void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, co | |||
1620 | * The client must select a protocol. It is fatal to the connection if this | 1639 | * The client must select a protocol. It is fatal to the connection if this |
1621 | * callback returns a value other than SSL_TLSEXT_ERR_OK. | 1640 | * callback returns a value other than SSL_TLSEXT_ERR_OK. |
1622 | */ | 1641 | */ |
1623 | void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg) | 1642 | void |
1624 | { | 1643 | SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg) |
1644 | { | ||
1625 | ctx->next_proto_select_cb = cb; | 1645 | ctx->next_proto_select_cb = cb; |
1626 | ctx->next_proto_select_cb_arg = arg; | 1646 | ctx->next_proto_select_cb_arg = arg; |
1627 | } | 1647 | } |
1628 | # endif | 1648 | # endif |
1629 | #endif | 1649 | #endif |
1630 | 1650 | ||
1631 | int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, | 1651 | int |
1632 | const char *label, size_t llen, const unsigned char *p, size_t plen, | 1652 | SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, |
1633 | int use_context) | 1653 | const char *label, size_t llen, const unsigned char *p, size_t plen, |
1634 | { | 1654 | int use_context) |
1655 | { | ||
1635 | if (s->version < TLS1_VERSION) | 1656 | if (s->version < TLS1_VERSION) |
1636 | return -1; | 1657 | return -1; |
1637 | 1658 | ||
1638 | return s->method->ssl3_enc->export_keying_material(s, out, olen, label, | 1659 | return s->method->ssl3_enc->export_keying_material(s, out, olen, label, |
1639 | llen, p, plen, | 1660 | llen, p, plen, |
1640 | use_context); | 1661 | use_context); |
1641 | } | 1662 | } |
1642 | 1663 | ||
1643 | static unsigned long ssl_session_hash(const SSL_SESSION *a) | 1664 | static unsigned long |
1644 | { | 1665 | ssl_session_hash(const SSL_SESSION *a) |
1666 | { | ||
1645 | unsigned long l; | 1667 | unsigned long l; |
1646 | 1668 | ||
1647 | l=(unsigned long) | 1669 | l = (unsigned long) |
1648 | ((unsigned int) a->session_id[0] )| | 1670 | ((unsigned int) a->session_id[0] )| |
1649 | ((unsigned int) a->session_id[1]<< 8L)| | 1671 | ((unsigned int) a->session_id[1]<< 8L)| |
1650 | ((unsigned long)a->session_id[2]<<16L)| | 1672 | ((unsigned long)a->session_id[2]<<16L)| |
1651 | ((unsigned long)a->session_id[3]<<24L); | 1673 | ((unsigned long)a->session_id[3]<<24L); |
1652 | return(l); | 1674 | return (l); |
1653 | } | 1675 | } |
1654 | 1676 | ||
1655 | /* NB: If this function (or indeed the hash function which uses a sort of | 1677 | /* NB: If this function (or indeed the hash function which uses a sort of |
1656 | * coarser function than this one) is changed, ensure | 1678 | * coarser function than this one) is changed, ensure |
1657 | * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being | 1679 | * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on being |
1658 | * able to construct an SSL_SESSION that will collide with any existing session | 1680 | * able to construct an SSL_SESSION that will collide with any existing session |
1659 | * with a matching session ID. */ | 1681 | * with a matching session ID. */ |
1660 | static int ssl_session_cmp(const SSL_SESSION *a,const SSL_SESSION *b) | 1682 | static int |
1661 | { | 1683 | ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b) |
1684 | { | ||
1662 | if (a->ssl_version != b->ssl_version) | 1685 | if (a->ssl_version != b->ssl_version) |
1663 | return(1); | 1686 | return (1); |
1664 | if (a->session_id_length != b->session_id_length) | 1687 | if (a->session_id_length != b->session_id_length) |
1665 | return(1); | 1688 | return (1); |
1666 | return(memcmp(a->session_id,b->session_id,a->session_id_length)); | 1689 | return (memcmp(a->session_id, b->session_id, a->session_id_length)); |
1667 | } | 1690 | } |
1668 | 1691 | ||
1669 | /* These wrapper functions should remain rather than redeclaring | 1692 | /* These wrapper functions should remain rather than redeclaring |
1670 | * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each | 1693 | * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each |
1671 | * variable. The reason is that the functions aren't static, they're exposed via | 1694 | * variable. The reason is that the functions aren't static, they're exposed via |
1672 | * ssl.h. */ | 1695 | * ssl.h. */ |
1673 | static IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION) | 1696 | static |
1674 | static IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION) | 1697 | IMPLEMENT_LHASH_HASH_FN(ssl_session, SSL_SESSION) |
1698 | static | ||
1699 | IMPLEMENT_LHASH_COMP_FN(ssl_session, SSL_SESSION) | ||
1675 | 1700 | ||
1676 | SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | 1701 | SSL_CTX |
1677 | { | 1702 | *SSL_CTX_new(const SSL_METHOD *meth) |
1678 | SSL_CTX *ret=NULL; | 1703 | { |
1704 | SSL_CTX *ret = NULL; | ||
1679 | 1705 | ||
1680 | if (meth == NULL) | 1706 | if (meth == NULL) { |
1681 | { | 1707 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED); |
1682 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED); | 1708 | return (NULL); |
1683 | return(NULL); | 1709 | } |
1684 | } | ||
1685 | 1710 | ||
1686 | #ifdef OPENSSL_FIPS | 1711 | #ifdef OPENSSL_FIPS |
1687 | if (FIPS_mode() && (meth->version < TLS1_VERSION)) | 1712 | if (FIPS_mode() && (meth->version < TLS1_VERSION)) { |
1688 | { | ||
1689 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE); | 1713 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE); |
1690 | return NULL; | 1714 | return NULL; |
1691 | } | 1715 | } |
1692 | #endif | 1716 | #endif |
1693 | 1717 | ||
1694 | if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) | 1718 | if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) { |
1695 | { | 1719 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); |
1696 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); | ||
1697 | goto err; | 1720 | goto err; |
1698 | } | 1721 | } |
1699 | ret=(SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX)); | 1722 | ret = (SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX)); |
1700 | if (ret == NULL) | 1723 | if (ret == NULL) |
1701 | goto err; | 1724 | goto err; |
1702 | 1725 | ||
1703 | memset(ret,0,sizeof(SSL_CTX)); | 1726 | memset(ret, 0, sizeof(SSL_CTX)); |
1704 | 1727 | ||
1705 | ret->method=meth; | 1728 | ret->method = meth; |
1706 | 1729 | ||
1707 | ret->cert_store=NULL; | 1730 | ret->cert_store = NULL; |
1708 | ret->session_cache_mode=SSL_SESS_CACHE_SERVER; | 1731 | ret->session_cache_mode = SSL_SESS_CACHE_SERVER; |
1709 | ret->session_cache_size=SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; | 1732 | ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; |
1710 | ret->session_cache_head=NULL; | 1733 | ret->session_cache_head = NULL; |
1711 | ret->session_cache_tail=NULL; | 1734 | ret->session_cache_tail = NULL; |
1712 | 1735 | ||
1713 | /* We take the system default */ | 1736 | /* We take the system default */ |
1714 | ret->session_timeout=meth->get_timeout(); | 1737 | ret->session_timeout = meth->get_timeout(); |
1715 | 1738 | ||
1716 | ret->new_session_cb=0; | 1739 | ret->new_session_cb = 0; |
1717 | ret->remove_session_cb=0; | 1740 | ret->remove_session_cb = 0; |
1718 | ret->get_session_cb=0; | 1741 | ret->get_session_cb = 0; |
1719 | ret->generate_session_id=0; | 1742 | ret->generate_session_id = 0; |
1720 | 1743 | ||
1721 | memset((char *)&ret->stats,0,sizeof(ret->stats)); | 1744 | memset((char *)&ret->stats, 0, sizeof(ret->stats)); |
1722 | 1745 | ||
1723 | ret->references=1; | 1746 | ret->references = 1; |
1724 | ret->quiet_shutdown=0; | 1747 | ret->quiet_shutdown = 0; |
1725 | 1748 | ||
1726 | /* ret->cipher=NULL;*/ | 1749 | /* ret->cipher=NULL;*/ |
1727 | /* ret->s2->challenge=NULL; | 1750 | /* ret->s2->challenge=NULL; |
1728 | ret->master_key=NULL; | 1751 | ret->master_key=NULL; |
1729 | ret->key_arg=NULL; | 1752 | ret->key_arg=NULL; |
1730 | ret->s2->conn_id=NULL; */ | 1753 | ret->s2->conn_id=NULL; |
1754 | */ | ||
1731 | 1755 | ||
1732 | ret->info_callback=NULL; | 1756 | ret->info_callback = NULL; |
1733 | 1757 | ||
1734 | ret->app_verify_callback=0; | 1758 | ret->app_verify_callback = 0; |
1735 | ret->app_verify_arg=NULL; | 1759 | ret->app_verify_arg = NULL; |
1736 | 1760 | ||
1737 | ret->max_cert_list=SSL_MAX_CERT_LIST_DEFAULT; | 1761 | ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; |
1738 | ret->read_ahead=0; | 1762 | ret->read_ahead = 0; |
1739 | ret->msg_callback=0; | 1763 | ret->msg_callback = 0; |
1740 | ret->msg_callback_arg=NULL; | 1764 | ret->msg_callback_arg = NULL; |
1741 | ret->verify_mode=SSL_VERIFY_NONE; | 1765 | ret->verify_mode = SSL_VERIFY_NONE; |
1742 | #if 0 | 1766 | #if 0 |
1743 | ret->verify_depth=-1; /* Don't impose a limit (but x509_lu.c does) */ | 1767 | ret->verify_depth=-1; /* Don't impose a limit (but x509_lu.c does) */ |
1744 | #endif | 1768 | #endif |
1745 | ret->sid_ctx_length=0; | 1769 | ret->sid_ctx_length = 0; |
1746 | ret->default_verify_callback=NULL; | 1770 | ret->default_verify_callback = NULL; |
1747 | if ((ret->cert=ssl_cert_new()) == NULL) | 1771 | if ((ret->cert = ssl_cert_new()) == NULL) |
1748 | goto err; | 1772 | goto err; |
1749 | 1773 | ||
1750 | ret->default_passwd_callback=0; | 1774 | ret->default_passwd_callback = 0; |
1751 | ret->default_passwd_callback_userdata=NULL; | 1775 | ret->default_passwd_callback_userdata = NULL; |
1752 | ret->client_cert_cb=0; | 1776 | ret->client_cert_cb = 0; |
1753 | ret->app_gen_cookie_cb=0; | 1777 | ret->app_gen_cookie_cb = 0; |
1754 | ret->app_verify_cookie_cb=0; | 1778 | ret->app_verify_cookie_cb = 0; |
1755 | 1779 | ||
1756 | ret->sessions=lh_SSL_SESSION_new(); | 1780 | ret->sessions = lh_SSL_SESSION_new(); |
1757 | if (ret->sessions == NULL) goto err; | 1781 | if (ret->sessions == NULL) |
1758 | ret->cert_store=X509_STORE_new(); | 1782 | goto err; |
1759 | if (ret->cert_store == NULL) goto err; | 1783 | ret->cert_store = X509_STORE_new(); |
1784 | if (ret->cert_store == NULL) | ||
1785 | goto err; | ||
1760 | 1786 | ||
1761 | ssl_create_cipher_list(ret->method, | 1787 | ssl_create_cipher_list(ret->method, |
1762 | &ret->cipher_list,&ret->cipher_list_by_id, | 1788 | &ret->cipher_list, &ret->cipher_list_by_id, |
1763 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); | 1789 | meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST); |
1764 | if (ret->cipher_list == NULL | 1790 | if (ret->cipher_list == NULL |
1765 | || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) | 1791 | || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) { |
1766 | { | 1792 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS); |
1767 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_LIBRARY_HAS_NO_CIPHERS); | ||
1768 | goto err2; | 1793 | goto err2; |
1769 | } | 1794 | } |
1770 | 1795 | ||
1771 | ret->param = X509_VERIFY_PARAM_new(); | 1796 | ret->param = X509_VERIFY_PARAM_new(); |
1772 | if (!ret->param) | 1797 | if (!ret->param) |
1773 | goto err; | 1798 | goto err; |
1774 | 1799 | ||
1775 | if ((ret->rsa_md5=EVP_get_digestbyname("ssl2-md5")) == NULL) | 1800 | if ((ret->rsa_md5 = EVP_get_digestbyname("ssl2-md5")) == NULL) { |
1776 | { | 1801 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES); |
1777 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES); | ||
1778 | goto err2; | 1802 | goto err2; |
1779 | } | 1803 | } |
1780 | if ((ret->md5=EVP_get_digestbyname("ssl3-md5")) == NULL) | 1804 | if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) { |
1781 | { | 1805 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES); |
1782 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES); | ||
1783 | goto err2; | 1806 | goto err2; |
1784 | } | 1807 | } |
1785 | if ((ret->sha1=EVP_get_digestbyname("ssl3-sha1")) == NULL) | 1808 | if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) { |
1786 | { | 1809 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES); |
1787 | SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES); | ||
1788 | goto err2; | 1810 | goto err2; |
1789 | } | 1811 | } |
1790 | 1812 | ||
1791 | if ((ret->client_CA=sk_X509_NAME_new_null()) == NULL) | 1813 | if ((ret->client_CA = sk_X509_NAME_new_null()) == NULL) |
1792 | goto err; | 1814 | goto err; |
1793 | 1815 | ||
1794 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); | 1816 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); |
1795 | 1817 | ||
1796 | ret->extra_certs=NULL; | 1818 | ret->extra_certs = NULL; |
1797 | /* No compression for DTLS */ | 1819 | /* No compression for DTLS */ |
1798 | if (meth->version != DTLS1_VERSION) | 1820 | if (meth->version != DTLS1_VERSION) |
1799 | ret->comp_methods=SSL_COMP_get_compression_methods(); | 1821 | ret->comp_methods = SSL_COMP_get_compression_methods(); |
1800 | 1822 | ||
1801 | ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; | 1823 | ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; |
1802 | 1824 | ||
@@ -1806,8 +1828,8 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1806 | /* Setup RFC4507 ticket keys */ | 1828 | /* Setup RFC4507 ticket keys */ |
1807 | if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0) | 1829 | if ((RAND_pseudo_bytes(ret->tlsext_tick_key_name, 16) <= 0) |
1808 | || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0) | 1830 | || (RAND_bytes(ret->tlsext_tick_hmac_key, 16) <= 0) |
1809 | || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0)) | 1831 | || (RAND_bytes(ret->tlsext_tick_aes_key, 16) <= 0)) |
1810 | ret->options |= SSL_OP_NO_TICKET; | 1832 | ret->options |= SSL_OP_NO_TICKET; |
1811 | 1833 | ||
1812 | ret->tlsext_status_cb = 0; | 1834 | ret->tlsext_status_cb = 0; |
1813 | ret->tlsext_status_arg = NULL; | 1835 | ret->tlsext_status_arg = NULL; |
@@ -1818,9 +1840,9 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1818 | # endif | 1840 | # endif |
1819 | #endif | 1841 | #endif |
1820 | #ifndef OPENSSL_NO_PSK | 1842 | #ifndef OPENSSL_NO_PSK |
1821 | ret->psk_identity_hint=NULL; | 1843 | ret->psk_identity_hint = NULL; |
1822 | ret->psk_client_callback=NULL; | 1844 | ret->psk_client_callback = NULL; |
1823 | ret->psk_server_callback=NULL; | 1845 | ret->psk_server_callback = NULL; |
1824 | #endif | 1846 | #endif |
1825 | #ifndef OPENSSL_NO_SRP | 1847 | #ifndef OPENSSL_NO_SRP |
1826 | SSL_CTX_SRP_CTX_init(ret); | 1848 | SSL_CTX_SRP_CTX_init(ret); |
@@ -1834,11 +1856,10 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1834 | ret->rbuf_freelist->len = 0; | 1856 | ret->rbuf_freelist->len = 0; |
1835 | ret->rbuf_freelist->head = NULL; | 1857 | ret->rbuf_freelist->head = NULL; |
1836 | ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST)); | 1858 | ret->wbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST)); |
1837 | if (!ret->wbuf_freelist) | 1859 | if (!ret->wbuf_freelist) { |
1838 | { | ||
1839 | OPENSSL_free(ret->rbuf_freelist); | 1860 | OPENSSL_free(ret->rbuf_freelist); |
1840 | goto err; | 1861 | goto err; |
1841 | } | 1862 | } |
1842 | ret->wbuf_freelist->chunklen = 0; | 1863 | ret->wbuf_freelist->chunklen = 0; |
1843 | ret->wbuf_freelist->len = 0; | 1864 | ret->wbuf_freelist->len = 0; |
1844 | ret->wbuf_freelist->head = NULL; | 1865 | ret->wbuf_freelist->head = NULL; |
@@ -1850,16 +1871,15 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1850 | #define eng_str(x) eng_strx(x) | 1871 | #define eng_str(x) eng_strx(x) |
1851 | /* Use specific client engine automatically... ignore errors */ | 1872 | /* Use specific client engine automatically... ignore errors */ |
1852 | { | 1873 | { |
1853 | ENGINE *eng; | 1874 | ENGINE *eng; |
1854 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); | ||
1855 | if (!eng) | ||
1856 | { | ||
1857 | ERR_clear_error(); | ||
1858 | ENGINE_load_builtin_engines(); | ||
1859 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); | 1875 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); |
1876 | if (!eng) { | ||
1877 | ERR_clear_error(); | ||
1878 | ENGINE_load_builtin_engines(); | ||
1879 | eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO)); | ||
1860 | } | 1880 | } |
1861 | if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng)) | 1881 | if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng)) |
1862 | ERR_clear_error(); | 1882 | ERR_clear_error(); |
1863 | } | 1883 | } |
1864 | #endif | 1884 | #endif |
1865 | #endif | 1885 | #endif |
@@ -1868,50 +1888,54 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) | |||
1868 | */ | 1888 | */ |
1869 | ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; | 1889 | ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; |
1870 | 1890 | ||
1871 | return(ret); | 1891 | return (ret); |
1872 | err: | 1892 | err: |
1873 | SSLerr(SSL_F_SSL_CTX_NEW,ERR_R_MALLOC_FAILURE); | 1893 | SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE); |
1874 | err2: | 1894 | err2: |
1875 | if (ret != NULL) SSL_CTX_free(ret); | 1895 | if (ret != NULL) |
1876 | return(NULL); | 1896 | SSL_CTX_free(ret); |
1877 | } | 1897 | return (NULL); |
1898 | } | ||
1878 | 1899 | ||
1879 | #if 0 | 1900 | #if 0 |
1880 | static void SSL_COMP_free(SSL_COMP *comp) | 1901 | static void |
1881 | { OPENSSL_free(comp); } | 1902 | SSL_COMP_free(SSL_COMP *comp) |
1903 | { OPENSSL_free(comp); | ||
1904 | } | ||
1882 | #endif | 1905 | #endif |
1883 | 1906 | ||
1884 | #ifndef OPENSSL_NO_BUF_FREELISTS | 1907 | #ifndef OPENSSL_NO_BUF_FREELISTS |
1885 | static void | 1908 | static void |
1886 | ssl_buf_freelist_free(SSL3_BUF_FREELIST *list) | 1909 | ssl_buf_freelist_free(SSL3_BUF_FREELIST *list) |
1887 | { | 1910 | { |
1888 | SSL3_BUF_FREELIST_ENTRY *ent, *next; | 1911 | SSL3_BUF_FREELIST_ENTRY *ent, *next; |
1889 | for (ent = list->head; ent; ent = next) | 1912 | for (ent = list->head; ent; ent = next) { |
1890 | { | ||
1891 | next = ent->next; | 1913 | next = ent->next; |
1892 | OPENSSL_free(ent); | 1914 | OPENSSL_free(ent); |
1893 | } | ||
1894 | OPENSSL_free(list); | ||
1895 | } | 1915 | } |
1916 | OPENSSL_free(list); | ||
1917 | } | ||
1896 | #endif | 1918 | #endif |
1897 | 1919 | ||
1898 | void SSL_CTX_free(SSL_CTX *a) | 1920 | void |
1899 | { | 1921 | SSL_CTX_free(SSL_CTX *a) |
1922 | { | ||
1900 | int i; | 1923 | int i; |
1901 | 1924 | ||
1902 | if (a == NULL) return; | 1925 | if (a == NULL) |
1926 | return; | ||
1903 | 1927 | ||
1904 | i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_SSL_CTX); | 1928 | i = CRYPTO_add(&a->references, -1, CRYPTO_LOCK_SSL_CTX); |
1905 | #ifdef REF_PRINT | 1929 | #ifdef REF_PRINT |
1906 | REF_PRINT("SSL_CTX",a); | 1930 | REF_PRINT("SSL_CTX", a); |
1907 | #endif | 1931 | #endif |
1908 | if (i > 0) return; | 1932 | if (i > 0) |
1933 | return; | ||
1909 | #ifdef REF_CHECK | 1934 | #ifdef REF_CHECK |
1910 | if (i < 0) | 1935 | if (i < 0) { |
1911 | { | 1936 | fprintf(stderr, "SSL_CTX_free, bad reference count\n"); |
1912 | fprintf(stderr,"SSL_CTX_free, bad reference count\n"); | ||
1913 | abort(); /* ok */ | 1937 | abort(); /* ok */ |
1914 | } | 1938 | } |
1915 | #endif | 1939 | #endif |
1916 | 1940 | ||
1917 | if (a->param) | 1941 | if (a->param) |
@@ -1927,7 +1951,7 @@ void SSL_CTX_free(SSL_CTX *a) | |||
1927 | * (See ticket [openssl.org #212].) | 1951 | * (See ticket [openssl.org #212].) |
1928 | */ | 1952 | */ |
1929 | if (a->sessions != NULL) | 1953 | if (a->sessions != NULL) |
1930 | SSL_CTX_flush_sessions(a,0); | 1954 | SSL_CTX_flush_sessions(a, 0); |
1931 | 1955 | ||
1932 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); | 1956 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data); |
1933 | 1957 | ||
@@ -1943,19 +1967,19 @@ void SSL_CTX_free(SSL_CTX *a) | |||
1943 | if (a->cert != NULL) | 1967 | if (a->cert != NULL) |
1944 | ssl_cert_free(a->cert); | 1968 | ssl_cert_free(a->cert); |
1945 | if (a->client_CA != NULL) | 1969 | if (a->client_CA != NULL) |
1946 | sk_X509_NAME_pop_free(a->client_CA,X509_NAME_free); | 1970 | sk_X509_NAME_pop_free(a->client_CA, X509_NAME_free); |
1947 | if (a->extra_certs != NULL) | 1971 | if (a->extra_certs != NULL) |
1948 | sk_X509_pop_free(a->extra_certs,X509_free); | 1972 | sk_X509_pop_free(a->extra_certs, X509_free); |
1949 | #if 0 /* This should never be done, since it removes a global database */ | 1973 | #if 0 /* This should never be done, since it removes a global database */ |
1950 | if (a->comp_methods != NULL) | 1974 | if (a->comp_methods != NULL) |
1951 | sk_SSL_COMP_pop_free(a->comp_methods,SSL_COMP_free); | 1975 | sk_SSL_COMP_pop_free(a->comp_methods, SSL_COMP_free); |
1952 | #else | 1976 | #else |
1953 | a->comp_methods = NULL; | 1977 | a->comp_methods = NULL; |
1954 | #endif | 1978 | #endif |
1955 | 1979 | ||
1956 | #ifndef OPENSSL_NO_SRTP | 1980 | #ifndef OPENSSL_NO_SRTP |
1957 | if (a->srtp_profiles) | 1981 | if (a->srtp_profiles) |
1958 | sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); | 1982 | sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); |
1959 | #endif | 1983 | #endif |
1960 | 1984 | ||
1961 | #ifndef OPENSSL_NO_PSK | 1985 | #ifndef OPENSSL_NO_PSK |
@@ -1978,42 +2002,48 @@ void SSL_CTX_free(SSL_CTX *a) | |||
1978 | #endif | 2002 | #endif |
1979 | 2003 | ||
1980 | OPENSSL_free(a); | 2004 | OPENSSL_free(a); |
1981 | } | 2005 | } |
1982 | 2006 | ||
1983 | void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) | 2007 | void |
1984 | { | 2008 | SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb) |
1985 | ctx->default_passwd_callback=cb; | 2009 | { |
1986 | } | 2010 | ctx->default_passwd_callback = cb; |
2011 | } | ||
1987 | 2012 | ||
1988 | void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u) | 2013 | void |
1989 | { | 2014 | SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) |
1990 | ctx->default_passwd_callback_userdata=u; | 2015 | { |
1991 | } | 2016 | ctx->default_passwd_callback_userdata = u; |
2017 | } | ||
1992 | 2018 | ||
1993 | void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *,void *), void *arg) | 2019 | void |
1994 | { | 2020 | SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb)(X509_STORE_CTX *, void *), void *arg) |
1995 | ctx->app_verify_callback=cb; | 2021 | { |
1996 | ctx->app_verify_arg=arg; | 2022 | ctx->app_verify_callback = cb; |
1997 | } | 2023 | ctx->app_verify_arg = arg; |
2024 | } | ||
1998 | 2025 | ||
1999 | void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*cb)(int, X509_STORE_CTX *)) | 2026 | void |
2000 | { | 2027 | SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb)(int, X509_STORE_CTX *)) |
2001 | ctx->verify_mode=mode; | 2028 | { |
2002 | ctx->default_verify_callback=cb; | 2029 | ctx->verify_mode = mode; |
2003 | } | 2030 | ctx->default_verify_callback = cb; |
2031 | } | ||
2004 | 2032 | ||
2005 | void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth) | 2033 | void |
2006 | { | 2034 | SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth) |
2035 | { | ||
2007 | X509_VERIFY_PARAM_set_depth(ctx->param, depth); | 2036 | X509_VERIFY_PARAM_set_depth(ctx->param, depth); |
2008 | } | 2037 | } |
2009 | 2038 | ||
2010 | void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | 2039 | void |
2011 | { | 2040 | ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) |
2041 | { | ||
2012 | CERT_PKEY *cpk; | 2042 | CERT_PKEY *cpk; |
2013 | int rsa_enc,rsa_tmp,rsa_sign,dh_tmp,dh_rsa,dh_dsa,dsa_sign; | 2043 | int rsa_enc, rsa_tmp, rsa_sign, dh_tmp, dh_rsa, dh_dsa, dsa_sign; |
2014 | int rsa_enc_export,dh_rsa_export,dh_dsa_export; | 2044 | int rsa_enc_export, dh_rsa_export, dh_dsa_export; |
2015 | int rsa_tmp_export,dh_tmp_export,kl; | 2045 | int rsa_tmp_export, dh_tmp_export, kl; |
2016 | unsigned long mask_k,mask_a,emask_k,emask_a; | 2046 | unsigned long mask_k, mask_a, emask_k, emask_a; |
2017 | int have_ecc_cert, ecdh_ok, ecdsa_ok, ecc_pkey_size; | 2047 | int have_ecc_cert, ecdh_ok, ecdsa_ok, ecc_pkey_size; |
2018 | #ifndef OPENSSL_NO_ECDH | 2048 | #ifndef OPENSSL_NO_ECDH |
2019 | int have_ecdh_tmp; | 2049 | int have_ecdh_tmp; |
@@ -2022,57 +2052,58 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2022 | EVP_PKEY *ecc_pkey = NULL; | 2052 | EVP_PKEY *ecc_pkey = NULL; |
2023 | int signature_nid = 0, pk_nid = 0, md_nid = 0; | 2053 | int signature_nid = 0, pk_nid = 0, md_nid = 0; |
2024 | 2054 | ||
2025 | if (c == NULL) return; | 2055 | if (c == NULL) |
2056 | return; | ||
2026 | 2057 | ||
2027 | kl=SSL_C_EXPORT_PKEYLENGTH(cipher); | 2058 | kl = SSL_C_EXPORT_PKEYLENGTH(cipher); |
2028 | 2059 | ||
2029 | #ifndef OPENSSL_NO_RSA | 2060 | #ifndef OPENSSL_NO_RSA |
2030 | rsa_tmp=(c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL); | 2061 | rsa_tmp = (c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL); |
2031 | rsa_tmp_export=(c->rsa_tmp_cb != NULL || | 2062 | rsa_tmp_export = (c->rsa_tmp_cb != NULL || |
2032 | (rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl)); | 2063 | (rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl)); |
2033 | #else | 2064 | #else |
2034 | rsa_tmp=rsa_tmp_export=0; | 2065 | rsa_tmp = rsa_tmp_export = 0; |
2035 | #endif | 2066 | #endif |
2036 | #ifndef OPENSSL_NO_DH | 2067 | #ifndef OPENSSL_NO_DH |
2037 | dh_tmp=(c->dh_tmp != NULL || c->dh_tmp_cb != NULL); | 2068 | dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL); |
2038 | dh_tmp_export=(c->dh_tmp_cb != NULL || | 2069 | dh_tmp_export = (c->dh_tmp_cb != NULL || |
2039 | (dh_tmp && DH_size(c->dh_tmp)*8 <= kl)); | 2070 | (dh_tmp && DH_size(c->dh_tmp)*8 <= kl)); |
2040 | #else | 2071 | #else |
2041 | dh_tmp=dh_tmp_export=0; | 2072 | dh_tmp = dh_tmp_export = 0; |
2042 | #endif | 2073 | #endif |
2043 | 2074 | ||
2044 | #ifndef OPENSSL_NO_ECDH | 2075 | #ifndef OPENSSL_NO_ECDH |
2045 | have_ecdh_tmp=(c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL); | 2076 | have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL); |
2046 | #endif | 2077 | #endif |
2047 | cpk= &(c->pkeys[SSL_PKEY_RSA_ENC]); | 2078 | cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]); |
2048 | rsa_enc= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2079 | rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2049 | rsa_enc_export=(rsa_enc && EVP_PKEY_size(cpk->privatekey)*8 <= kl); | 2080 | rsa_enc_export = (rsa_enc && EVP_PKEY_size(cpk->privatekey)*8 <= kl); |
2050 | cpk= &(c->pkeys[SSL_PKEY_RSA_SIGN]); | 2081 | cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]); |
2051 | rsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL); | 2082 | rsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2052 | cpk= &(c->pkeys[SSL_PKEY_DSA_SIGN]); | 2083 | cpk = &(c->pkeys[SSL_PKEY_DSA_SIGN]); |
2053 | dsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL); | 2084 | dsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2054 | cpk= &(c->pkeys[SSL_PKEY_DH_RSA]); | 2085 | cpk = &(c->pkeys[SSL_PKEY_DH_RSA]); |
2055 | dh_rsa= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2086 | dh_rsa = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2056 | dh_rsa_export=(dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); | 2087 | dh_rsa_export = (dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); |
2057 | cpk= &(c->pkeys[SSL_PKEY_DH_DSA]); | 2088 | cpk = &(c->pkeys[SSL_PKEY_DH_DSA]); |
2058 | /* FIX THIS EAY EAY EAY */ | 2089 | /* FIX THIS EAY EAY EAY */ |
2059 | dh_dsa= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2090 | dh_dsa = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2060 | dh_dsa_export=(dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); | 2091 | dh_dsa_export = (dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl); |
2061 | cpk= &(c->pkeys[SSL_PKEY_ECC]); | 2092 | cpk = &(c->pkeys[SSL_PKEY_ECC]); |
2062 | have_ecc_cert= (cpk->x509 != NULL && cpk->privatekey != NULL); | 2093 | have_ecc_cert = (cpk->x509 != NULL && cpk->privatekey != NULL); |
2063 | mask_k=0; | 2094 | mask_k = 0; |
2064 | mask_a=0; | 2095 | mask_a = 0; |
2065 | emask_k=0; | 2096 | emask_k = 0; |
2066 | emask_a=0; | 2097 | emask_a = 0; |
2098 | |||
2067 | 2099 | ||
2068 | |||
2069 | 2100 | ||
2070 | #ifdef CIPHER_DEBUG | 2101 | #ifdef CIPHER_DEBUG |
2071 | printf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n", | 2102 | printf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\n", |
2072 | rsa_tmp,rsa_tmp_export,dh_tmp,have_ecdh_tmp, | 2103 | rsa_tmp, rsa_tmp_export, dh_tmp, have_ecdh_tmp, |
2073 | rsa_enc,rsa_enc_export,rsa_sign,dsa_sign,dh_rsa,dh_dsa); | 2104 | rsa_enc, rsa_enc_export, rsa_sign, dsa_sign, dh_rsa, dh_dsa); |
2074 | #endif | 2105 | #endif |
2075 | 2106 | ||
2076 | cpk = &(c->pkeys[SSL_PKEY_GOST01]); | 2107 | cpk = &(c->pkeys[SSL_PKEY_GOST01]); |
2077 | if (cpk->x509 != NULL && cpk->privatekey !=NULL) { | 2108 | if (cpk->x509 != NULL && cpk->privatekey !=NULL) { |
2078 | mask_k |= SSL_kGOST; | 2109 | mask_k |= SSL_kGOST; |
@@ -2091,12 +2122,12 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2091 | 2122 | ||
2092 | #if 0 | 2123 | #if 0 |
2093 | /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */ | 2124 | /* The match needs to be both kEDH and aRSA or aDSA, so don't worry */ |
2094 | if ( (dh_tmp || dh_rsa || dh_dsa) && | 2125 | if ((dh_tmp || dh_rsa || dh_dsa) && |
2095 | (rsa_enc || rsa_sign || dsa_sign)) | 2126 | (rsa_enc || rsa_sign || dsa_sign)) |
2096 | mask_k|=SSL_kEDH; | 2127 | mask_k|=SSL_kEDH; |
2097 | if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) && | 2128 | if ((dh_tmp_export || dh_rsa_export || dh_dsa_export) && |
2098 | (rsa_enc || rsa_sign || dsa_sign)) | 2129 | (rsa_enc || rsa_sign || dsa_sign)) |
2099 | emask_k|=SSL_kEDH; | 2130 | emask_k|=SSL_kEDH; |
2100 | #endif | 2131 | #endif |
2101 | 2132 | ||
2102 | if (dh_tmp_export) | 2133 | if (dh_tmp_export) |
@@ -2105,23 +2136,25 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2105 | if (dh_tmp) | 2136 | if (dh_tmp) |
2106 | mask_k|=SSL_kEDH; | 2137 | mask_k|=SSL_kEDH; |
2107 | 2138 | ||
2108 | if (dh_rsa) mask_k|=SSL_kDHr; | 2139 | if (dh_rsa) |
2109 | if (dh_rsa_export) emask_k|=SSL_kDHr; | 2140 | mask_k|=SSL_kDHr; |
2141 | if (dh_rsa_export) | ||
2142 | emask_k|=SSL_kDHr; | ||
2110 | 2143 | ||
2111 | if (dh_dsa) mask_k|=SSL_kDHd; | 2144 | if (dh_dsa) |
2112 | if (dh_dsa_export) emask_k|=SSL_kDHd; | 2145 | mask_k|=SSL_kDHd; |
2146 | if (dh_dsa_export) | ||
2147 | emask_k|=SSL_kDHd; | ||
2113 | 2148 | ||
2114 | if (rsa_enc || rsa_sign) | 2149 | if (rsa_enc || rsa_sign) { |
2115 | { | ||
2116 | mask_a|=SSL_aRSA; | 2150 | mask_a|=SSL_aRSA; |
2117 | emask_a|=SSL_aRSA; | 2151 | emask_a|=SSL_aRSA; |
2118 | } | 2152 | } |
2119 | 2153 | ||
2120 | if (dsa_sign) | 2154 | if (dsa_sign) { |
2121 | { | ||
2122 | mask_a|=SSL_aDSS; | 2155 | mask_a|=SSL_aDSS; |
2123 | emask_a|=SSL_aDSS; | 2156 | emask_a|=SSL_aDSS; |
2124 | } | 2157 | } |
2125 | 2158 | ||
2126 | mask_a|=SSL_aNULL; | 2159 | mask_a|=SSL_aNULL; |
2127 | emask_a|=SSL_aNULL; | 2160 | emask_a|=SSL_aNULL; |
@@ -2136,66 +2169,57 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2136 | /* An ECC certificate may be usable for ECDH and/or | 2169 | /* An ECC certificate may be usable for ECDH and/or |
2137 | * ECDSA cipher suites depending on the key usage extension. | 2170 | * ECDSA cipher suites depending on the key usage extension. |
2138 | */ | 2171 | */ |
2139 | if (have_ecc_cert) | 2172 | if (have_ecc_cert) { |
2140 | { | ||
2141 | /* This call populates extension flags (ex_flags) */ | 2173 | /* This call populates extension flags (ex_flags) */ |
2142 | x = (c->pkeys[SSL_PKEY_ECC]).x509; | 2174 | x = (c->pkeys[SSL_PKEY_ECC]).x509; |
2143 | X509_check_purpose(x, -1, 0); | 2175 | X509_check_purpose(x, -1, 0); |
2144 | ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ? | 2176 | ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ? |
2145 | (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1; | 2177 | (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1; |
2146 | ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ? | 2178 | ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ? |
2147 | (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1; | 2179 | (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1; |
2148 | ecc_pkey = X509_get_pubkey(x); | 2180 | ecc_pkey = X509_get_pubkey(x); |
2149 | ecc_pkey_size = (ecc_pkey != NULL) ? | 2181 | ecc_pkey_size = (ecc_pkey != NULL) ? |
2150 | EVP_PKEY_bits(ecc_pkey) : 0; | 2182 | EVP_PKEY_bits(ecc_pkey) : 0; |
2151 | EVP_PKEY_free(ecc_pkey); | 2183 | EVP_PKEY_free(ecc_pkey); |
2152 | if ((x->sig_alg) && (x->sig_alg->algorithm)) | 2184 | if ((x->sig_alg) && (x->sig_alg->algorithm)) { |
2153 | { | ||
2154 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); | 2185 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); |
2155 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); | 2186 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); |
2156 | } | 2187 | } |
2157 | #ifndef OPENSSL_NO_ECDH | 2188 | #ifndef OPENSSL_NO_ECDH |
2158 | if (ecdh_ok) | 2189 | if (ecdh_ok) { |
2159 | { | ||
2160 | 2190 | ||
2161 | if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa) | 2191 | if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa) { |
2162 | { | ||
2163 | mask_k|=SSL_kECDHr; | 2192 | mask_k|=SSL_kECDHr; |
2164 | mask_a|=SSL_aECDH; | 2193 | mask_a|=SSL_aECDH; |
2165 | if (ecc_pkey_size <= 163) | 2194 | if (ecc_pkey_size <= 163) { |
2166 | { | ||
2167 | emask_k|=SSL_kECDHr; | 2195 | emask_k|=SSL_kECDHr; |
2168 | emask_a|=SSL_aECDH; | 2196 | emask_a|=SSL_aECDH; |
2169 | } | ||
2170 | } | 2197 | } |
2198 | } | ||
2171 | 2199 | ||
2172 | if (pk_nid == NID_X9_62_id_ecPublicKey) | 2200 | if (pk_nid == NID_X9_62_id_ecPublicKey) { |
2173 | { | ||
2174 | mask_k|=SSL_kECDHe; | 2201 | mask_k|=SSL_kECDHe; |
2175 | mask_a|=SSL_aECDH; | 2202 | mask_a|=SSL_aECDH; |
2176 | if (ecc_pkey_size <= 163) | 2203 | if (ecc_pkey_size <= 163) { |
2177 | { | ||
2178 | emask_k|=SSL_kECDHe; | 2204 | emask_k|=SSL_kECDHe; |
2179 | emask_a|=SSL_aECDH; | 2205 | emask_a|=SSL_aECDH; |
2180 | } | ||
2181 | } | 2206 | } |
2182 | } | 2207 | } |
2208 | } | ||
2183 | #endif | 2209 | #endif |
2184 | #ifndef OPENSSL_NO_ECDSA | 2210 | #ifndef OPENSSL_NO_ECDSA |
2185 | if (ecdsa_ok) | 2211 | if (ecdsa_ok) { |
2186 | { | ||
2187 | mask_a|=SSL_aECDSA; | 2212 | mask_a|=SSL_aECDSA; |
2188 | emask_a|=SSL_aECDSA; | 2213 | emask_a|=SSL_aECDSA; |
2189 | } | ||
2190 | #endif | ||
2191 | } | 2214 | } |
2215 | #endif | ||
2216 | } | ||
2192 | 2217 | ||
2193 | #ifndef OPENSSL_NO_ECDH | 2218 | #ifndef OPENSSL_NO_ECDH |
2194 | if (have_ecdh_tmp) | 2219 | if (have_ecdh_tmp) { |
2195 | { | ||
2196 | mask_k|=SSL_kEECDH; | 2220 | mask_k|=SSL_kEECDH; |
2197 | emask_k|=SSL_kEECDH; | 2221 | emask_k|=SSL_kEECDH; |
2198 | } | 2222 | } |
2199 | #endif | 2223 | #endif |
2200 | 2224 | ||
2201 | #ifndef OPENSSL_NO_PSK | 2225 | #ifndef OPENSSL_NO_PSK |
@@ -2205,12 +2229,12 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2205 | emask_a |= SSL_aPSK; | 2229 | emask_a |= SSL_aPSK; |
2206 | #endif | 2230 | #endif |
2207 | 2231 | ||
2208 | c->mask_k=mask_k; | 2232 | c->mask_k = mask_k; |
2209 | c->mask_a=mask_a; | 2233 | c->mask_a = mask_a; |
2210 | c->export_mask_k=emask_k; | 2234 | c->export_mask_k = emask_k; |
2211 | c->export_mask_a=emask_a; | 2235 | c->export_mask_a = emask_a; |
2212 | c->valid=1; | 2236 | c->valid = 1; |
2213 | } | 2237 | } |
2214 | 2238 | ||
2215 | /* This handy macro borrowed from crypto/x509v3/v3_purp.c */ | 2239 | /* This handy macro borrowed from crypto/x509v3/v3_purp.c */ |
2216 | #define ku_reject(x, usage) \ | 2240 | #define ku_reject(x, usage) \ |
@@ -2218,8 +2242,9 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
2218 | 2242 | ||
2219 | #ifndef OPENSSL_NO_EC | 2243 | #ifndef OPENSSL_NO_EC |
2220 | 2244 | ||
2221 | int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) | 2245 | int |
2222 | { | 2246 | ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) |
2247 | { | ||
2223 | unsigned long alg_k, alg_a; | 2248 | unsigned long alg_k, alg_a; |
2224 | EVP_PKEY *pkey = NULL; | 2249 | EVP_PKEY *pkey = NULL; |
2225 | int keysize = 0; | 2250 | int keysize = 0; |
@@ -2229,81 +2254,74 @@ int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s) | |||
2229 | alg_k = cs->algorithm_mkey; | 2254 | alg_k = cs->algorithm_mkey; |
2230 | alg_a = cs->algorithm_auth; | 2255 | alg_a = cs->algorithm_auth; |
2231 | 2256 | ||
2232 | if (SSL_C_IS_EXPORT(cs)) | 2257 | if (SSL_C_IS_EXPORT(cs)) { |
2233 | { | ||
2234 | /* ECDH key length in export ciphers must be <= 163 bits */ | 2258 | /* ECDH key length in export ciphers must be <= 163 bits */ |
2235 | pkey = X509_get_pubkey(x); | 2259 | pkey = X509_get_pubkey(x); |
2236 | if (pkey == NULL) return 0; | 2260 | if (pkey == NULL) |
2261 | return 0; | ||
2237 | keysize = EVP_PKEY_bits(pkey); | 2262 | keysize = EVP_PKEY_bits(pkey); |
2238 | EVP_PKEY_free(pkey); | 2263 | EVP_PKEY_free(pkey); |
2239 | if (keysize > 163) return 0; | 2264 | if (keysize > 163) |
2240 | } | 2265 | return 0; |
2266 | } | ||
2241 | 2267 | ||
2242 | /* This call populates the ex_flags field correctly */ | 2268 | /* This call populates the ex_flags field correctly */ |
2243 | X509_check_purpose(x, -1, 0); | 2269 | X509_check_purpose(x, -1, 0); |
2244 | if ((x->sig_alg) && (x->sig_alg->algorithm)) | 2270 | if ((x->sig_alg) && (x->sig_alg->algorithm)) { |
2245 | { | ||
2246 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); | 2271 | signature_nid = OBJ_obj2nid(x->sig_alg->algorithm); |
2247 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); | 2272 | OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid); |
2248 | } | 2273 | } |
2249 | if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr) | 2274 | if (alg_k & SSL_kECDHe || alg_k & SSL_kECDHr) { |
2250 | { | ||
2251 | /* key usage, if present, must allow key agreement */ | 2275 | /* key usage, if present, must allow key agreement */ |
2252 | if (ku_reject(x, X509v3_KU_KEY_AGREEMENT)) | 2276 | if (ku_reject(x, X509v3_KU_KEY_AGREEMENT)) { |
2253 | { | ||
2254 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT); | 2277 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT); |
2255 | return 0; | 2278 | return 0; |
2256 | } | 2279 | } |
2257 | if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION) | 2280 | if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION) { |
2258 | { | ||
2259 | /* signature alg must be ECDSA */ | 2281 | /* signature alg must be ECDSA */ |
2260 | if (pk_nid != NID_X9_62_id_ecPublicKey) | 2282 | if (pk_nid != NID_X9_62_id_ecPublicKey) { |
2261 | { | ||
2262 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE); | 2283 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE); |
2263 | return 0; | 2284 | return 0; |
2264 | } | ||
2265 | } | 2285 | } |
2266 | if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION) | 2286 | } |
2267 | { | 2287 | if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION) { |
2268 | /* signature alg must be RSA */ | 2288 | /* signature alg must be RSA */ |
2269 | 2289 | ||
2270 | if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa) | 2290 | if (pk_nid != NID_rsaEncryption && pk_nid != NID_rsa) { |
2271 | { | ||
2272 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE); | 2291 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE); |
2273 | return 0; | 2292 | return 0; |
2274 | } | ||
2275 | } | 2293 | } |
2276 | } | 2294 | } |
2277 | if (alg_a & SSL_aECDSA) | 2295 | } |
2278 | { | 2296 | if (alg_a & SSL_aECDSA) { |
2279 | /* key usage, if present, must allow signing */ | 2297 | /* key usage, if present, must allow signing */ |
2280 | if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) | 2298 | if (ku_reject(x, X509v3_KU_DIGITAL_SIGNATURE)) { |
2281 | { | ||
2282 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_SIGNING); | 2299 | SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_SIGNING); |
2283 | return 0; | 2300 | return 0; |
2284 | } | ||
2285 | } | 2301 | } |
2286 | |||
2287 | return 1; /* all checks are ok */ | ||
2288 | } | 2302 | } |
2289 | 2303 | ||
2304 | return 1; | ||
2305 | /* all checks are ok */ | ||
2306 | } | ||
2307 | |||
2290 | #endif | 2308 | #endif |
2291 | 2309 | ||
2292 | /* THIS NEEDS CLEANING UP */ | 2310 | /* THIS NEEDS CLEANING UP */ |
2293 | CERT_PKEY *ssl_get_server_send_pkey(const SSL *s) | 2311 | CERT_PKEY |
2294 | { | 2312 | *ssl_get_server_send_pkey(const SSL *s) |
2295 | unsigned long alg_k,alg_a; | 2313 | { |
2314 | unsigned long alg_k, alg_a; | ||
2296 | CERT *c; | 2315 | CERT *c; |
2297 | int i; | 2316 | int i; |
2298 | 2317 | ||
2299 | c=s->cert; | 2318 | c = s->cert; |
2300 | ssl_set_cert_masks(c, s->s3->tmp.new_cipher); | 2319 | ssl_set_cert_masks(c, s->s3->tmp.new_cipher); |
2301 | 2320 | ||
2302 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 2321 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
2303 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; | 2322 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; |
2304 | 2323 | ||
2305 | if (alg_k & (SSL_kECDHr|SSL_kECDHe)) | 2324 | if (alg_k & (SSL_kECDHr|SSL_kECDHe)) { |
2306 | { | ||
2307 | /* we don't need to look at SSL_kEECDH | 2325 | /* we don't need to look at SSL_kEECDH |
2308 | * since no certificate is needed for | 2326 | * since no certificate is needed for |
2309 | * anon ECDH and for authenticated | 2327 | * anon ECDH and for authenticated |
@@ -2315,171 +2333,162 @@ CERT_PKEY *ssl_get_server_send_pkey(const SSL *s) | |||
2315 | * checks for SSL_kECDH before RSA | 2333 | * checks for SSL_kECDH before RSA |
2316 | * checks ensures the correct cert is chosen. | 2334 | * checks ensures the correct cert is chosen. |
2317 | */ | 2335 | */ |
2318 | i=SSL_PKEY_ECC; | 2336 | i = SSL_PKEY_ECC; |
2319 | } | 2337 | } else if (alg_a & SSL_aECDSA) { |
2320 | else if (alg_a & SSL_aECDSA) | 2338 | i = SSL_PKEY_ECC; |
2321 | { | 2339 | } else if (alg_k & SSL_kDHr) |
2322 | i=SSL_PKEY_ECC; | 2340 | i = SSL_PKEY_DH_RSA; |
2323 | } | ||
2324 | else if (alg_k & SSL_kDHr) | ||
2325 | i=SSL_PKEY_DH_RSA; | ||
2326 | else if (alg_k & SSL_kDHd) | 2341 | else if (alg_k & SSL_kDHd) |
2327 | i=SSL_PKEY_DH_DSA; | 2342 | i = SSL_PKEY_DH_DSA; |
2328 | else if (alg_a & SSL_aDSS) | 2343 | else if (alg_a & SSL_aDSS) |
2329 | i=SSL_PKEY_DSA_SIGN; | 2344 | i = SSL_PKEY_DSA_SIGN; |
2330 | else if (alg_a & SSL_aRSA) | 2345 | else if (alg_a & SSL_aRSA) { |
2331 | { | ||
2332 | if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL) | 2346 | if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL) |
2333 | i=SSL_PKEY_RSA_SIGN; | 2347 | i = SSL_PKEY_RSA_SIGN; |
2334 | else | 2348 | else |
2335 | i=SSL_PKEY_RSA_ENC; | 2349 | i = SSL_PKEY_RSA_ENC; |
2336 | } | 2350 | } else if (alg_a & SSL_aKRB5) { |
2337 | else if (alg_a & SSL_aKRB5) | ||
2338 | { | ||
2339 | /* VRS something else here? */ | 2351 | /* VRS something else here? */ |
2340 | return(NULL); | 2352 | return (NULL); |
2341 | } | 2353 | } else if (alg_a & SSL_aGOST94) |
2342 | else if (alg_a & SSL_aGOST94) | 2354 | i = SSL_PKEY_GOST94; |
2343 | i=SSL_PKEY_GOST94; | ||
2344 | else if (alg_a & SSL_aGOST01) | 2355 | else if (alg_a & SSL_aGOST01) |
2345 | i=SSL_PKEY_GOST01; | 2356 | i = SSL_PKEY_GOST01; |
2346 | else /* if (alg_a & SSL_aNULL) */ | 2357 | else /* if (alg_a & SSL_aNULL) */ |
2347 | { | 2358 | { |
2348 | SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY,ERR_R_INTERNAL_ERROR); | 2359 | SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY, ERR_R_INTERNAL_ERROR); |
2349 | return(NULL); | 2360 | return (NULL); |
2350 | } | 2361 | } |
2351 | 2362 | ||
2352 | return c->pkeys + i; | 2363 | return c->pkeys + i; |
2353 | } | 2364 | } |
2354 | 2365 | ||
2355 | X509 *ssl_get_server_send_cert(const SSL *s) | 2366 | X509 |
2356 | { | 2367 | *ssl_get_server_send_cert(const SSL *s) |
2368 | { | ||
2357 | CERT_PKEY *cpk; | 2369 | CERT_PKEY *cpk; |
2358 | cpk = ssl_get_server_send_pkey(s); | 2370 | cpk = ssl_get_server_send_pkey(s); |
2359 | if (!cpk) | 2371 | if (!cpk) |
2360 | return NULL; | 2372 | return NULL; |
2361 | return cpk->x509; | 2373 | return cpk->x509; |
2362 | } | 2374 | } |
2363 | 2375 | ||
2364 | EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd) | 2376 | EVP_PKEY |
2365 | { | 2377 | *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher, const EVP_MD **pmd) |
2378 | { | ||
2366 | unsigned long alg_a; | 2379 | unsigned long alg_a; |
2367 | CERT *c; | 2380 | CERT *c; |
2368 | int idx = -1; | 2381 | int idx = -1; |
2369 | 2382 | ||
2370 | alg_a = cipher->algorithm_auth; | 2383 | alg_a = cipher->algorithm_auth; |
2371 | c=s->cert; | 2384 | c = s->cert; |
2372 | 2385 | ||
2373 | if ((alg_a & SSL_aDSS) && | 2386 | if ((alg_a & SSL_aDSS) && |
2374 | (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL)) | 2387 | (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL)) |
2375 | idx = SSL_PKEY_DSA_SIGN; | 2388 | idx = SSL_PKEY_DSA_SIGN; |
2376 | else if (alg_a & SSL_aRSA) | 2389 | else if (alg_a & SSL_aRSA) { |
2377 | { | ||
2378 | if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) | 2390 | if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) |
2379 | idx = SSL_PKEY_RSA_SIGN; | 2391 | idx = SSL_PKEY_RSA_SIGN; |
2380 | else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) | 2392 | else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) |
2381 | idx = SSL_PKEY_RSA_ENC; | 2393 | idx = SSL_PKEY_RSA_ENC; |
2382 | } | 2394 | } else if ((alg_a & SSL_aECDSA) && |
2383 | else if ((alg_a & SSL_aECDSA) && | 2395 | (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) |
2384 | (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) | 2396 | idx = SSL_PKEY_ECC; |
2385 | idx = SSL_PKEY_ECC; | 2397 | if (idx == -1) { |
2386 | if (idx == -1) | 2398 | SSLerr(SSL_F_SSL_GET_SIGN_PKEY, ERR_R_INTERNAL_ERROR); |
2387 | { | 2399 | return (NULL); |
2388 | SSLerr(SSL_F_SSL_GET_SIGN_PKEY,ERR_R_INTERNAL_ERROR); | 2400 | } |
2389 | return(NULL); | ||
2390 | } | ||
2391 | if (pmd) | 2401 | if (pmd) |
2392 | *pmd = c->pkeys[idx].digest; | 2402 | *pmd = c->pkeys[idx].digest; |
2393 | return c->pkeys[idx].privatekey; | 2403 | return c->pkeys[idx].privatekey; |
2394 | } | 2404 | } |
2395 | 2405 | ||
2396 | void ssl_update_cache(SSL *s,int mode) | 2406 | void |
2397 | { | 2407 | ssl_update_cache(SSL *s, int mode) |
2408 | { | ||
2398 | int i; | 2409 | int i; |
2399 | 2410 | ||
2400 | /* If the session_id_length is 0, we are not supposed to cache it, | 2411 | /* If the session_id_length is 0, we are not supposed to cache it, |
2401 | * and it would be rather hard to do anyway :-) */ | 2412 | * and it would be rather hard to do anyway :-) */ |
2402 | if (s->session->session_id_length == 0) return; | 2413 | if (s->session->session_id_length == 0) |
2414 | return; | ||
2403 | 2415 | ||
2404 | i=s->session_ctx->session_cache_mode; | 2416 | i = s->session_ctx->session_cache_mode; |
2405 | if ((i & mode) && (!s->hit) | 2417 | if ((i & mode) && (!s->hit) |
2406 | && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) | 2418 | && ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) |
2407 | || SSL_CTX_add_session(s->session_ctx,s->session)) | 2419 | || SSL_CTX_add_session(s->session_ctx, s->session)) |
2408 | && (s->session_ctx->new_session_cb != NULL)) | 2420 | && (s->session_ctx->new_session_cb != NULL)) { |
2409 | { | 2421 | CRYPTO_add(&s->session->references, 1, CRYPTO_LOCK_SSL_SESSION); |
2410 | CRYPTO_add(&s->session->references,1,CRYPTO_LOCK_SSL_SESSION); | 2422 | if (!s->session_ctx->new_session_cb(s, s->session)) |
2411 | if (!s->session_ctx->new_session_cb(s,s->session)) | ||
2412 | SSL_SESSION_free(s->session); | 2423 | SSL_SESSION_free(s->session); |
2413 | } | 2424 | } |
2414 | 2425 | ||
2415 | /* auto flush every 255 connections */ | 2426 | /* auto flush every 255 connections */ |
2416 | if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && | 2427 | if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && |
2417 | ((i & mode) == mode)) | 2428 | ((i & mode) == mode)) { |
2418 | { | 2429 | if ((((mode & SSL_SESS_CACHE_CLIENT) |
2419 | if ( (((mode & SSL_SESS_CACHE_CLIENT) | ||
2420 | ?s->session_ctx->stats.sess_connect_good | 2430 | ?s->session_ctx->stats.sess_connect_good |
2421 | :s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff) | 2431 | :s->session_ctx->stats.sess_accept_good) & 0xff) == 0xff) { |
2422 | { | ||
2423 | SSL_CTX_flush_sessions(s->session_ctx,(unsigned long)time(NULL)); | 2432 | SSL_CTX_flush_sessions(s->session_ctx,(unsigned long)time(NULL)); |
2424 | } | ||
2425 | } | 2433 | } |
2426 | } | 2434 | } |
2435 | } | ||
2427 | 2436 | ||
2428 | const SSL_METHOD *SSL_get_ssl_method(SSL *s) | 2437 | const SSL_METHOD |
2429 | { | 2438 | *SSL_get_ssl_method(SSL *s) |
2430 | return(s->method); | 2439 | { |
2431 | } | 2440 | return (s->method); |
2441 | } | ||
2432 | 2442 | ||
2433 | int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth) | 2443 | int |
2434 | { | 2444 | SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth) |
2435 | int conn= -1; | 2445 | { |
2436 | int ret=1; | 2446 | int conn = -1; |
2447 | int ret = 1; | ||
2437 | 2448 | ||
2438 | if (s->method != meth) | 2449 | if (s->method != meth) { |
2439 | { | ||
2440 | if (s->handshake_func != NULL) | 2450 | if (s->handshake_func != NULL) |
2441 | conn=(s->handshake_func == s->method->ssl_connect); | 2451 | conn = (s->handshake_func == s->method->ssl_connect); |
2442 | 2452 | ||
2443 | if (s->method->version == meth->version) | 2453 | if (s->method->version == meth->version) |
2444 | s->method=meth; | 2454 | s->method = meth; |
2445 | else | 2455 | else { |
2446 | { | ||
2447 | s->method->ssl_free(s); | 2456 | s->method->ssl_free(s); |
2448 | s->method=meth; | 2457 | s->method = meth; |
2449 | ret=s->method->ssl_new(s); | 2458 | ret = s->method->ssl_new(s); |
2450 | } | 2459 | } |
2451 | 2460 | ||
2452 | if (conn == 1) | 2461 | if (conn == 1) |
2453 | s->handshake_func=meth->ssl_connect; | 2462 | s->handshake_func = meth->ssl_connect; |
2454 | else if (conn == 0) | 2463 | else if (conn == 0) |
2455 | s->handshake_func=meth->ssl_accept; | 2464 | s->handshake_func = meth->ssl_accept; |
2456 | } | ||
2457 | return(ret); | ||
2458 | } | 2465 | } |
2466 | return (ret); | ||
2467 | } | ||
2459 | 2468 | ||
2460 | int SSL_get_error(const SSL *s,int i) | 2469 | int |
2461 | { | 2470 | SSL_get_error(const SSL *s, int i) |
2471 | { | ||
2462 | int reason; | 2472 | int reason; |
2463 | unsigned long l; | 2473 | unsigned long l; |
2464 | BIO *bio; | 2474 | BIO *bio; |
2465 | 2475 | ||
2466 | if (i > 0) return(SSL_ERROR_NONE); | 2476 | if (i > 0) |
2477 | return (SSL_ERROR_NONE); | ||
2467 | 2478 | ||
2468 | /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake | 2479 | /* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake |
2469 | * etc, where we do encode the error */ | 2480 | * etc, where we do encode the error */ |
2470 | if ((l=ERR_peek_error()) != 0) | 2481 | if ((l = ERR_peek_error()) != 0) { |
2471 | { | ||
2472 | if (ERR_GET_LIB(l) == ERR_LIB_SYS) | 2482 | if (ERR_GET_LIB(l) == ERR_LIB_SYS) |
2473 | return(SSL_ERROR_SYSCALL); | 2483 | return (SSL_ERROR_SYSCALL); |
2474 | else | 2484 | else |
2475 | return(SSL_ERROR_SSL); | 2485 | return (SSL_ERROR_SSL); |
2476 | } | 2486 | } |
2477 | 2487 | ||
2478 | if ((i < 0) && SSL_want_read(s)) | 2488 | if ((i < 0) && SSL_want_read(s)) { |
2479 | { | 2489 | bio = SSL_get_rbio(s); |
2480 | bio=SSL_get_rbio(s); | ||
2481 | if (BIO_should_read(bio)) | 2490 | if (BIO_should_read(bio)) |
2482 | return(SSL_ERROR_WANT_READ); | 2491 | return (SSL_ERROR_WANT_READ); |
2483 | else if (BIO_should_write(bio)) | 2492 | else if (BIO_should_write(bio)) |
2484 | /* This one doesn't make too much sense ... We never try | 2493 | /* This one doesn't make too much sense ... We never try |
2485 | * to write to the rbio, and an application program where | 2494 | * to write to the rbio, and an application program where |
@@ -2490,131 +2499,129 @@ int SSL_get_error(const SSL *s,int i) | |||
2490 | * SSL_want_write(s)) and rbio and wbio *are* the same, | 2499 | * SSL_want_write(s)) and rbio and wbio *are* the same, |
2491 | * this test works around that bug; so it might be safer | 2500 | * this test works around that bug; so it might be safer |
2492 | * to keep it. */ | 2501 | * to keep it. */ |
2493 | return(SSL_ERROR_WANT_WRITE); | 2502 | return (SSL_ERROR_WANT_WRITE); |
2494 | else if (BIO_should_io_special(bio)) | 2503 | else if (BIO_should_io_special(bio)) { |
2495 | { | 2504 | reason = BIO_get_retry_reason(bio); |
2496 | reason=BIO_get_retry_reason(bio); | ||
2497 | if (reason == BIO_RR_CONNECT) | 2505 | if (reason == BIO_RR_CONNECT) |
2498 | return(SSL_ERROR_WANT_CONNECT); | 2506 | return (SSL_ERROR_WANT_CONNECT); |
2499 | else if (reason == BIO_RR_ACCEPT) | 2507 | else if (reason == BIO_RR_ACCEPT) |
2500 | return(SSL_ERROR_WANT_ACCEPT); | 2508 | return (SSL_ERROR_WANT_ACCEPT); |
2501 | else | 2509 | else |
2502 | return(SSL_ERROR_SYSCALL); /* unknown */ | 2510 | return(SSL_ERROR_SYSCALL); /* unknown */ |
2503 | } | ||
2504 | } | 2511 | } |
2512 | } | ||
2505 | 2513 | ||
2506 | if ((i < 0) && SSL_want_write(s)) | 2514 | if ((i < 0) && SSL_want_write(s)) { |
2507 | { | 2515 | bio = SSL_get_wbio(s); |
2508 | bio=SSL_get_wbio(s); | ||
2509 | if (BIO_should_write(bio)) | 2516 | if (BIO_should_write(bio)) |
2510 | return(SSL_ERROR_WANT_WRITE); | 2517 | return (SSL_ERROR_WANT_WRITE); |
2511 | else if (BIO_should_read(bio)) | 2518 | else if (BIO_should_read(bio)) |
2512 | /* See above (SSL_want_read(s) with BIO_should_write(bio)) */ | 2519 | /* See above (SSL_want_read(s) with BIO_should_write(bio)) */ |
2513 | return(SSL_ERROR_WANT_READ); | 2520 | return (SSL_ERROR_WANT_READ); |
2514 | else if (BIO_should_io_special(bio)) | 2521 | else if (BIO_should_io_special(bio)) { |
2515 | { | 2522 | reason = BIO_get_retry_reason(bio); |
2516 | reason=BIO_get_retry_reason(bio); | ||
2517 | if (reason == BIO_RR_CONNECT) | 2523 | if (reason == BIO_RR_CONNECT) |
2518 | return(SSL_ERROR_WANT_CONNECT); | 2524 | return (SSL_ERROR_WANT_CONNECT); |
2519 | else if (reason == BIO_RR_ACCEPT) | 2525 | else if (reason == BIO_RR_ACCEPT) |
2520 | return(SSL_ERROR_WANT_ACCEPT); | 2526 | return (SSL_ERROR_WANT_ACCEPT); |
2521 | else | 2527 | else |
2522 | return(SSL_ERROR_SYSCALL); | 2528 | return (SSL_ERROR_SYSCALL); |
2523 | } | ||
2524 | } | ||
2525 | if ((i < 0) && SSL_want_x509_lookup(s)) | ||
2526 | { | ||
2527 | return(SSL_ERROR_WANT_X509_LOOKUP); | ||
2528 | } | 2529 | } |
2530 | } | ||
2531 | if ((i < 0) && SSL_want_x509_lookup(s)) { | ||
2532 | return (SSL_ERROR_WANT_X509_LOOKUP); | ||
2533 | } | ||
2529 | 2534 | ||
2530 | if (i == 0) | 2535 | if (i == 0) { |
2531 | { | 2536 | if (s->version == SSL2_VERSION) { |
2532 | if (s->version == SSL2_VERSION) | ||
2533 | { | ||
2534 | /* assume it is the socket being closed */ | 2537 | /* assume it is the socket being closed */ |
2535 | return(SSL_ERROR_ZERO_RETURN); | 2538 | return (SSL_ERROR_ZERO_RETURN); |
2536 | } | 2539 | } else { |
2537 | else | ||
2538 | { | ||
2539 | if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) && | 2540 | if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) && |
2540 | (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY)) | 2541 | (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY)) |
2541 | return(SSL_ERROR_ZERO_RETURN); | 2542 | return (SSL_ERROR_ZERO_RETURN); |
2542 | } | ||
2543 | } | 2543 | } |
2544 | return(SSL_ERROR_SYSCALL); | ||
2545 | } | 2544 | } |
2545 | return (SSL_ERROR_SYSCALL); | ||
2546 | } | ||
2546 | 2547 | ||
2547 | int SSL_do_handshake(SSL *s) | 2548 | int |
2548 | { | 2549 | SSL_do_handshake(SSL *s) |
2549 | int ret=1; | 2550 | { |
2551 | int ret = 1; | ||
2550 | 2552 | ||
2551 | if (s->handshake_func == NULL) | 2553 | if (s->handshake_func == NULL) { |
2552 | { | 2554 | SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET); |
2553 | SSLerr(SSL_F_SSL_DO_HANDSHAKE,SSL_R_CONNECTION_TYPE_NOT_SET); | 2555 | return (-1); |
2554 | return(-1); | 2556 | } |
2555 | } | ||
2556 | 2557 | ||
2557 | s->method->ssl_renegotiate_check(s); | 2558 | s->method->ssl_renegotiate_check(s); |
2558 | 2559 | ||
2559 | if (SSL_in_init(s) || SSL_in_before(s)) | 2560 | if (SSL_in_init(s) || SSL_in_before(s)) { |
2560 | { | 2561 | ret = s->handshake_func(s); |
2561 | ret=s->handshake_func(s); | ||
2562 | } | ||
2563 | return(ret); | ||
2564 | } | 2562 | } |
2563 | return (ret); | ||
2564 | } | ||
2565 | 2565 | ||
2566 | /* For the next 2 functions, SSL_clear() sets shutdown and so | 2566 | /* For the next 2 functions, SSL_clear() sets shutdown and so |
2567 | * one of these calls will reset it */ | 2567 | * one of these calls will reset it */ |
2568 | void SSL_set_accept_state(SSL *s) | 2568 | void |
2569 | { | 2569 | SSL_set_accept_state(SSL *s) |
2570 | s->server=1; | 2570 | { |
2571 | s->shutdown=0; | 2571 | s->server = 1; |
2572 | s->state=SSL_ST_ACCEPT|SSL_ST_BEFORE; | 2572 | s->shutdown = 0; |
2573 | s->handshake_func=s->method->ssl_accept; | 2573 | s->state = SSL_ST_ACCEPT|SSL_ST_BEFORE; |
2574 | s->handshake_func = s->method->ssl_accept; | ||
2574 | /* clear the current cipher */ | 2575 | /* clear the current cipher */ |
2575 | ssl_clear_cipher_ctx(s); | 2576 | ssl_clear_cipher_ctx(s); |
2576 | ssl_clear_hash_ctx(&s->read_hash); | 2577 | ssl_clear_hash_ctx(&s->read_hash); |
2577 | ssl_clear_hash_ctx(&s->write_hash); | 2578 | ssl_clear_hash_ctx(&s->write_hash); |
2578 | } | 2579 | } |
2579 | 2580 | ||
2580 | void SSL_set_connect_state(SSL *s) | 2581 | void |
2581 | { | 2582 | SSL_set_connect_state(SSL *s) |
2582 | s->server=0; | 2583 | { |
2583 | s->shutdown=0; | 2584 | s->server = 0; |
2584 | s->state=SSL_ST_CONNECT|SSL_ST_BEFORE; | 2585 | s->shutdown = 0; |
2585 | s->handshake_func=s->method->ssl_connect; | 2586 | s->state = SSL_ST_CONNECT|SSL_ST_BEFORE; |
2587 | s->handshake_func = s->method->ssl_connect; | ||
2586 | /* clear the current cipher */ | 2588 | /* clear the current cipher */ |
2587 | ssl_clear_cipher_ctx(s); | 2589 | ssl_clear_cipher_ctx(s); |
2588 | ssl_clear_hash_ctx(&s->read_hash); | 2590 | ssl_clear_hash_ctx(&s->read_hash); |
2589 | ssl_clear_hash_ctx(&s->write_hash); | 2591 | ssl_clear_hash_ctx(&s->write_hash); |
2590 | } | 2592 | } |
2591 | 2593 | ||
2592 | int ssl_undefined_function(SSL *s) | 2594 | int |
2593 | { | 2595 | ssl_undefined_function(SSL *s) |
2594 | SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2596 | { |
2595 | return(0); | 2597 | SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2596 | } | 2598 | return (0); |
2599 | } | ||
2597 | 2600 | ||
2598 | int ssl_undefined_void_function(void) | 2601 | int |
2599 | { | 2602 | ssl_undefined_void_function(void) |
2600 | SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2603 | { |
2601 | return(0); | 2604 | SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2602 | } | 2605 | return (0); |
2606 | } | ||
2603 | 2607 | ||
2604 | int ssl_undefined_const_function(const SSL *s) | 2608 | int |
2605 | { | 2609 | ssl_undefined_const_function(const SSL *s) |
2606 | SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2610 | { |
2607 | return(0); | 2611 | SSLerr(SSL_F_SSL_UNDEFINED_CONST_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2608 | } | 2612 | return (0); |
2613 | } | ||
2609 | 2614 | ||
2610 | SSL_METHOD *ssl_bad_method(int ver) | 2615 | SSL_METHOD |
2611 | { | 2616 | *ssl_bad_method(int ver) |
2612 | SSLerr(SSL_F_SSL_BAD_METHOD,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 2617 | { |
2613 | return(NULL); | 2618 | SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); |
2614 | } | 2619 | return (NULL); |
2620 | } | ||
2615 | 2621 | ||
2616 | const char *SSL_get_version(const SSL *s) | 2622 | const char |
2617 | { | 2623 | *SSL_get_version(const SSL *s) |
2624 | { | ||
2618 | if (s->version == TLS1_2_VERSION) | 2625 | if (s->version == TLS1_2_VERSION) |
2619 | return("TLSv1.2"); | 2626 | return("TLSv1.2"); |
2620 | else if (s->version == TLS1_1_VERSION) | 2627 | else if (s->version == TLS1_1_VERSION) |
@@ -2627,29 +2634,27 @@ const char *SSL_get_version(const SSL *s) | |||
2627 | return("SSLv2"); | 2634 | return("SSLv2"); |
2628 | else | 2635 | else |
2629 | return("unknown"); | 2636 | return("unknown"); |
2630 | } | 2637 | } |
2631 | 2638 | ||
2632 | SSL *SSL_dup(SSL *s) | 2639 | SSL |
2633 | { | 2640 | *SSL_dup(SSL *s) |
2641 | { | ||
2634 | STACK_OF(X509_NAME) *sk; | 2642 | STACK_OF(X509_NAME) *sk; |
2635 | X509_NAME *xn; | 2643 | X509_NAME *xn; |
2636 | SSL *ret; | 2644 | SSL *ret; |
2637 | int i; | 2645 | int i; |
2638 | 2646 | ||
2639 | if ((ret=SSL_new(SSL_get_SSL_CTX(s))) == NULL) | 2647 | if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL) |
2640 | return(NULL); | 2648 | return (NULL); |
2641 | 2649 | ||
2642 | ret->version = s->version; | 2650 | ret->version = s->version; |
2643 | ret->type = s->type; | 2651 | ret->type = s->type; |
2644 | ret->method = s->method; | 2652 | ret->method = s->method; |
2645 | 2653 | ||
2646 | if (s->session != NULL) | 2654 | if (s->session != NULL) { |
2647 | { | ||
2648 | /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */ | 2655 | /* This copies session-id, SSL_METHOD, sid_ctx, and 'cert' */ |
2649 | SSL_copy_session_id(ret,s); | 2656 | SSL_copy_session_id(ret, s); |
2650 | } | 2657 | } else { |
2651 | else | ||
2652 | { | ||
2653 | /* No session has been established yet, so we have to expect | 2658 | /* No session has been established yet, so we have to expect |
2654 | * that s->cert or ret->cert will be changed later -- | 2659 | * that s->cert or ret->cert will be changed later -- |
2655 | * they should not both point to the same object, | 2660 | * they should not both point to the same object, |
@@ -2659,56 +2664,50 @@ SSL *SSL_dup(SSL *s) | |||
2659 | ret->method = s->method; | 2664 | ret->method = s->method; |
2660 | ret->method->ssl_new(ret); | 2665 | ret->method->ssl_new(ret); |
2661 | 2666 | ||
2662 | if (s->cert != NULL) | 2667 | if (s->cert != NULL) { |
2663 | { | 2668 | if (ret->cert != NULL) { |
2664 | if (ret->cert != NULL) | ||
2665 | { | ||
2666 | ssl_cert_free(ret->cert); | 2669 | ssl_cert_free(ret->cert); |
2667 | } | 2670 | } |
2668 | ret->cert = ssl_cert_dup(s->cert); | 2671 | ret->cert = ssl_cert_dup(s->cert); |
2669 | if (ret->cert == NULL) | 2672 | if (ret->cert == NULL) |
2670 | goto err; | 2673 | goto err; |
2671 | } | ||
2672 | |||
2673 | SSL_set_session_id_context(ret, | ||
2674 | s->sid_ctx, s->sid_ctx_length); | ||
2675 | } | 2674 | } |
2676 | 2675 | ||
2677 | ret->options=s->options; | 2676 | SSL_set_session_id_context(ret, |
2678 | ret->mode=s->mode; | 2677 | s->sid_ctx, s->sid_ctx_length); |
2679 | SSL_set_max_cert_list(ret,SSL_get_max_cert_list(s)); | 2678 | } |
2680 | SSL_set_read_ahead(ret,SSL_get_read_ahead(s)); | 2679 | |
2680 | ret->options = s->options; | ||
2681 | ret->mode = s->mode; | ||
2682 | SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s)); | ||
2683 | SSL_set_read_ahead(ret, SSL_get_read_ahead(s)); | ||
2681 | ret->msg_callback = s->msg_callback; | 2684 | ret->msg_callback = s->msg_callback; |
2682 | ret->msg_callback_arg = s->msg_callback_arg; | 2685 | ret->msg_callback_arg = s->msg_callback_arg; |
2683 | SSL_set_verify(ret,SSL_get_verify_mode(s), | 2686 | SSL_set_verify(ret, SSL_get_verify_mode(s), |
2684 | SSL_get_verify_callback(s)); | 2687 | SSL_get_verify_callback(s)); |
2685 | SSL_set_verify_depth(ret,SSL_get_verify_depth(s)); | 2688 | SSL_set_verify_depth(ret, SSL_get_verify_depth(s)); |
2686 | ret->generate_session_id = s->generate_session_id; | 2689 | ret->generate_session_id = s->generate_session_id; |
2687 | 2690 | ||
2688 | SSL_set_info_callback(ret,SSL_get_info_callback(s)); | 2691 | SSL_set_info_callback(ret, SSL_get_info_callback(s)); |
2689 | 2692 | ||
2690 | ret->debug=s->debug; | 2693 | ret->debug = s->debug; |
2691 | 2694 | ||
2692 | /* copy app data, a little dangerous perhaps */ | 2695 | /* copy app data, a little dangerous perhaps */ |
2693 | if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data)) | 2696 | if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data)) |
2694 | goto err; | 2697 | goto err; |
2695 | 2698 | ||
2696 | /* setup rbio, and wbio */ | 2699 | /* setup rbio, and wbio */ |
2697 | if (s->rbio != NULL) | 2700 | if (s->rbio != NULL) { |
2698 | { | ||
2699 | if (!BIO_dup_state(s->rbio,(char *)&ret->rbio)) | 2701 | if (!BIO_dup_state(s->rbio,(char *)&ret->rbio)) |
2700 | goto err; | 2702 | goto err; |
2701 | } | 2703 | } |
2702 | if (s->wbio != NULL) | 2704 | if (s->wbio != NULL) { |
2703 | { | 2705 | if (s->wbio != s->rbio) { |
2704 | if (s->wbio != s->rbio) | ||
2705 | { | ||
2706 | if (!BIO_dup_state(s->wbio,(char *)&ret->wbio)) | 2706 | if (!BIO_dup_state(s->wbio,(char *)&ret->wbio)) |
2707 | goto err; | 2707 | goto err; |
2708 | } | 2708 | } else |
2709 | else | 2709 | ret->wbio = ret->rbio; |
2710 | ret->wbio=ret->rbio; | 2710 | } |
2711 | } | ||
2712 | ret->rwstate = s->rwstate; | 2711 | ret->rwstate = s->rwstate; |
2713 | ret->in_handshake = s->in_handshake; | 2712 | ret->in_handshake = s->in_handshake; |
2714 | ret->handshake_func = s->handshake_func; | 2713 | ret->handshake_func = s->handshake_func; |
@@ -2716,222 +2715,228 @@ SSL *SSL_dup(SSL *s) | |||
2716 | ret->renegotiate = s->renegotiate; | 2715 | ret->renegotiate = s->renegotiate; |
2717 | ret->new_session = s->new_session; | 2716 | ret->new_session = s->new_session; |
2718 | ret->quiet_shutdown = s->quiet_shutdown; | 2717 | ret->quiet_shutdown = s->quiet_shutdown; |
2719 | ret->shutdown=s->shutdown; | 2718 | ret->shutdown = s->shutdown; |
2720 | ret->state=s->state; /* SSL_dup does not really work at any state, though */ | 2719 | ret->state=s->state; /* SSL_dup does not really work at any state, though */ |
2721 | ret->rstate=s->rstate; | 2720 | ret->rstate = s->rstate; |
2722 | ret->init_num = 0; /* would have to copy ret->init_buf, ret->init_msg, ret->init_num, ret->init_off */ | 2721 | ret->init_num = 0; /* would have to copy ret->init_buf, ret->init_msg, ret->init_num, ret->init_off */ |
2723 | ret->hit=s->hit; | 2722 | ret->hit = s->hit; |
2724 | 2723 | ||
2725 | X509_VERIFY_PARAM_inherit(ret->param, s->param); | 2724 | X509_VERIFY_PARAM_inherit(ret->param, s->param); |
2726 | 2725 | ||
2727 | /* dup the cipher_list and cipher_list_by_id stacks */ | 2726 | /* dup the cipher_list and cipher_list_by_id stacks */ |
2728 | if (s->cipher_list != NULL) | 2727 | if (s->cipher_list != NULL) { |
2729 | { | 2728 | if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL) |
2730 | if ((ret->cipher_list=sk_SSL_CIPHER_dup(s->cipher_list)) == NULL) | ||
2731 | goto err; | 2729 | goto err; |
2732 | } | 2730 | } |
2733 | if (s->cipher_list_by_id != NULL) | 2731 | if (s->cipher_list_by_id != NULL) |
2734 | if ((ret->cipher_list_by_id=sk_SSL_CIPHER_dup(s->cipher_list_by_id)) | 2732 | if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id)) |
2735 | == NULL) | 2733 | == NULL) |
2736 | goto err; | 2734 | goto err; |
2737 | 2735 | ||
2738 | /* Dup the client_CA list */ | 2736 | /* Dup the client_CA list */ |
2739 | if (s->client_CA != NULL) | 2737 | if (s->client_CA != NULL) { |
2740 | { | 2738 | if ((sk = sk_X509_NAME_dup(s->client_CA)) == NULL) goto err; |
2741 | if ((sk=sk_X509_NAME_dup(s->client_CA)) == NULL) goto err; | 2739 | ret->client_CA = sk; |
2742 | ret->client_CA=sk; | 2740 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { |
2743 | for (i=0; i<sk_X509_NAME_num(sk); i++) | 2741 | xn = sk_X509_NAME_value(sk, i); |
2744 | { | 2742 | if (sk_X509_NAME_set(sk, i, X509_NAME_dup(xn)) == NULL) { |
2745 | xn=sk_X509_NAME_value(sk,i); | ||
2746 | if (sk_X509_NAME_set(sk,i,X509_NAME_dup(xn)) == NULL) | ||
2747 | { | ||
2748 | X509_NAME_free(xn); | 2743 | X509_NAME_free(xn); |
2749 | goto err; | 2744 | goto err; |
2750 | } | ||
2751 | } | 2745 | } |
2752 | } | 2746 | } |
2747 | } | ||
2753 | 2748 | ||
2754 | if (0) | 2749 | if (0) { |
2755 | { | ||
2756 | err: | 2750 | err: |
2757 | if (ret != NULL) SSL_free(ret); | 2751 | if (ret != NULL) |
2758 | ret=NULL; | 2752 | SSL_free(ret); |
2759 | } | 2753 | ret = NULL; |
2760 | return(ret); | ||
2761 | } | 2754 | } |
2755 | return (ret); | ||
2756 | } | ||
2762 | 2757 | ||
2763 | void ssl_clear_cipher_ctx(SSL *s) | 2758 | void |
2764 | { | 2759 | ssl_clear_cipher_ctx(SSL *s) |
2765 | if (s->enc_read_ctx != NULL) | 2760 | { |
2766 | { | 2761 | if (s->enc_read_ctx != NULL) { |
2767 | EVP_CIPHER_CTX_cleanup(s->enc_read_ctx); | 2762 | EVP_CIPHER_CTX_cleanup(s->enc_read_ctx); |
2768 | OPENSSL_free(s->enc_read_ctx); | 2763 | OPENSSL_free(s->enc_read_ctx); |
2769 | s->enc_read_ctx=NULL; | 2764 | s->enc_read_ctx = NULL; |
2770 | } | 2765 | } |
2771 | if (s->enc_write_ctx != NULL) | 2766 | if (s->enc_write_ctx != NULL) { |
2772 | { | ||
2773 | EVP_CIPHER_CTX_cleanup(s->enc_write_ctx); | 2767 | EVP_CIPHER_CTX_cleanup(s->enc_write_ctx); |
2774 | OPENSSL_free(s->enc_write_ctx); | 2768 | OPENSSL_free(s->enc_write_ctx); |
2775 | s->enc_write_ctx=NULL; | 2769 | s->enc_write_ctx = NULL; |
2776 | } | 2770 | } |
2777 | #ifndef OPENSSL_NO_COMP | 2771 | #ifndef OPENSSL_NO_COMP |
2778 | if (s->expand != NULL) | 2772 | if (s->expand != NULL) { |
2779 | { | ||
2780 | COMP_CTX_free(s->expand); | 2773 | COMP_CTX_free(s->expand); |
2781 | s->expand=NULL; | 2774 | s->expand = NULL; |
2782 | } | 2775 | } |
2783 | if (s->compress != NULL) | 2776 | if (s->compress != NULL) { |
2784 | { | ||
2785 | COMP_CTX_free(s->compress); | 2777 | COMP_CTX_free(s->compress); |
2786 | s->compress=NULL; | 2778 | s->compress = NULL; |
2787 | } | ||
2788 | #endif | ||
2789 | } | 2779 | } |
2780 | #endif | ||
2781 | } | ||
2790 | 2782 | ||
2791 | /* Fix this function so that it takes an optional type parameter */ | 2783 | /* Fix this function so that it takes an optional type parameter */ |
2792 | X509 *SSL_get_certificate(const SSL *s) | 2784 | X509 |
2793 | { | 2785 | *SSL_get_certificate(const SSL *s) |
2786 | { | ||
2794 | if (s->cert != NULL) | 2787 | if (s->cert != NULL) |
2795 | return(s->cert->key->x509); | 2788 | return (s->cert->key->x509); |
2796 | else | 2789 | else |
2797 | return(NULL); | 2790 | return (NULL); |
2798 | } | 2791 | } |
2799 | 2792 | ||
2800 | /* Fix this function so that it takes an optional type parameter */ | 2793 | /* Fix this function so that it takes an optional type parameter */ |
2801 | EVP_PKEY *SSL_get_privatekey(SSL *s) | 2794 | EVP_PKEY |
2802 | { | 2795 | *SSL_get_privatekey(SSL *s) |
2796 | { | ||
2803 | if (s->cert != NULL) | 2797 | if (s->cert != NULL) |
2804 | return(s->cert->key->privatekey); | 2798 | return (s->cert->key->privatekey); |
2805 | else | 2799 | else |
2806 | return(NULL); | 2800 | return (NULL); |
2807 | } | 2801 | } |
2808 | 2802 | ||
2809 | const SSL_CIPHER *SSL_get_current_cipher(const SSL *s) | 2803 | const SSL_CIPHER |
2810 | { | 2804 | *SSL_get_current_cipher(const SSL *s) |
2805 | { | ||
2811 | if ((s->session != NULL) && (s->session->cipher != NULL)) | 2806 | if ((s->session != NULL) && (s->session->cipher != NULL)) |
2812 | return(s->session->cipher); | 2807 | return (s->session->cipher); |
2813 | return(NULL); | 2808 | return (NULL); |
2814 | } | 2809 | } |
2815 | #ifdef OPENSSL_NO_COMP | 2810 | #ifdef OPENSSL_NO_COMP |
2816 | const void *SSL_get_current_compression(SSL *s) | 2811 | const void |
2817 | { | 2812 | *SSL_get_current_compression(SSL *s) |
2813 | { | ||
2818 | return NULL; | 2814 | return NULL; |
2819 | } | 2815 | } |
2820 | const void *SSL_get_current_expansion(SSL *s) | 2816 | |
2821 | { | 2817 | const void |
2818 | *SSL_get_current_expansion(SSL *s) | ||
2819 | { | ||
2822 | return NULL; | 2820 | return NULL; |
2823 | } | 2821 | } |
2824 | #else | 2822 | #else |
2825 | 2823 | ||
2826 | const COMP_METHOD *SSL_get_current_compression(SSL *s) | 2824 | const COMP_METHOD |
2827 | { | 2825 | *SSL_get_current_compression(SSL *s) |
2826 | { | ||
2828 | if (s->compress != NULL) | 2827 | if (s->compress != NULL) |
2829 | return(s->compress->meth); | 2828 | return (s->compress->meth); |
2830 | return(NULL); | 2829 | return (NULL); |
2831 | } | 2830 | } |
2832 | 2831 | ||
2833 | const COMP_METHOD *SSL_get_current_expansion(SSL *s) | 2832 | const COMP_METHOD |
2834 | { | 2833 | *SSL_get_current_expansion(SSL *s) |
2834 | { | ||
2835 | if (s->expand != NULL) | 2835 | if (s->expand != NULL) |
2836 | return(s->expand->meth); | 2836 | return (s->expand->meth); |
2837 | return(NULL); | 2837 | return (NULL); |
2838 | } | 2838 | } |
2839 | #endif | 2839 | #endif |
2840 | 2840 | ||
2841 | int ssl_init_wbio_buffer(SSL *s,int push) | 2841 | int |
2842 | { | 2842 | ssl_init_wbio_buffer(SSL *s, int push) |
2843 | { | ||
2843 | BIO *bbio; | 2844 | BIO *bbio; |
2844 | 2845 | ||
2845 | if (s->bbio == NULL) | 2846 | if (s->bbio == NULL) { |
2846 | { | 2847 | bbio = BIO_new(BIO_f_buffer()); |
2847 | bbio=BIO_new(BIO_f_buffer()); | 2848 | if (bbio == NULL) |
2848 | if (bbio == NULL) return(0); | 2849 | return (0); |
2849 | s->bbio=bbio; | 2850 | s->bbio = bbio; |
2850 | } | 2851 | } else { |
2851 | else | 2852 | bbio = s->bbio; |
2852 | { | ||
2853 | bbio=s->bbio; | ||
2854 | if (s->bbio == s->wbio) | 2853 | if (s->bbio == s->wbio) |
2855 | s->wbio=BIO_pop(s->wbio); | 2854 | s->wbio = BIO_pop(s->wbio); |
2856 | } | 2855 | } |
2857 | (void)BIO_reset(bbio); | 2856 | (void)BIO_reset(bbio); |
2858 | /* if (!BIO_set_write_buffer_size(bbio,16*1024)) */ | 2857 | /* if (!BIO_set_write_buffer_size(bbio,16*1024)) */ |
2859 | if (!BIO_set_read_buffer_size(bbio,1)) | 2858 | if (!BIO_set_read_buffer_size(bbio, 1)) { |
2860 | { | 2859 | SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB); |
2861 | SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER,ERR_R_BUF_LIB); | 2860 | return (0); |
2862 | return(0); | 2861 | } |
2863 | } | 2862 | if (push) { |
2864 | if (push) | ||
2865 | { | ||
2866 | if (s->wbio != bbio) | 2863 | if (s->wbio != bbio) |
2867 | s->wbio=BIO_push(bbio,s->wbio); | 2864 | s->wbio = BIO_push(bbio, s->wbio); |
2868 | } | 2865 | } else { |
2869 | else | ||
2870 | { | ||
2871 | if (s->wbio == bbio) | 2866 | if (s->wbio == bbio) |
2872 | s->wbio=BIO_pop(bbio); | 2867 | s->wbio = BIO_pop(bbio); |
2873 | } | ||
2874 | return(1); | ||
2875 | } | 2868 | } |
2869 | return (1); | ||
2870 | } | ||
2876 | 2871 | ||
2877 | void ssl_free_wbio_buffer(SSL *s) | 2872 | void |
2878 | { | 2873 | ssl_free_wbio_buffer(SSL *s) |
2879 | if (s->bbio == NULL) return; | 2874 | { |
2875 | if (s->bbio == NULL) | ||
2876 | return; | ||
2880 | 2877 | ||
2881 | if (s->bbio == s->wbio) | 2878 | if (s->bbio == s->wbio) { |
2882 | { | ||
2883 | /* remove buffering */ | 2879 | /* remove buffering */ |
2884 | s->wbio=BIO_pop(s->wbio); | 2880 | s->wbio = BIO_pop(s->wbio); |
2885 | #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more preprocessor symbol */ | 2881 | #ifdef REF_CHECK /* not the usual REF_CHECK, but this avoids adding one more preprocessor symbol */ |
2886 | assert(s->wbio != NULL); | 2882 | assert(s->wbio != NULL); |
2887 | #endif | 2883 | #endif |
2888 | } | 2884 | } |
2889 | BIO_free(s->bbio); | 2885 | BIO_free(s->bbio); |
2890 | s->bbio=NULL; | 2886 | s->bbio = NULL; |
2891 | } | 2887 | } |
2892 | |||
2893 | void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx,int mode) | ||
2894 | { | ||
2895 | ctx->quiet_shutdown=mode; | ||
2896 | } | ||
2897 | 2888 | ||
2898 | int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) | 2889 | void |
2899 | { | 2890 | SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) |
2900 | return(ctx->quiet_shutdown); | 2891 | { |
2901 | } | 2892 | ctx->quiet_shutdown = mode; |
2893 | } | ||
2902 | 2894 | ||
2903 | void SSL_set_quiet_shutdown(SSL *s,int mode) | 2895 | int |
2904 | { | 2896 | SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx) |
2905 | s->quiet_shutdown=mode; | 2897 | { |
2906 | } | 2898 | return (ctx->quiet_shutdown); |
2899 | } | ||
2907 | 2900 | ||
2908 | int SSL_get_quiet_shutdown(const SSL *s) | 2901 | void |
2909 | { | 2902 | SSL_set_quiet_shutdown(SSL *s, int mode) |
2910 | return(s->quiet_shutdown); | 2903 | { |
2911 | } | 2904 | s->quiet_shutdown = mode; |
2905 | } | ||
2912 | 2906 | ||
2913 | void SSL_set_shutdown(SSL *s,int mode) | 2907 | int |
2914 | { | 2908 | SSL_get_quiet_shutdown(const SSL *s) |
2915 | s->shutdown=mode; | 2909 | { |
2916 | } | 2910 | return (s->quiet_shutdown); |
2911 | } | ||
2917 | 2912 | ||
2918 | int SSL_get_shutdown(const SSL *s) | 2913 | void |
2919 | { | 2914 | SSL_set_shutdown(SSL *s, int mode) |
2920 | return(s->shutdown); | 2915 | { |
2921 | } | 2916 | s->shutdown = mode; |
2917 | } | ||
2922 | 2918 | ||
2923 | int SSL_version(const SSL *s) | 2919 | int |
2924 | { | 2920 | SSL_get_shutdown(const SSL *s) |
2925 | return(s->version); | 2921 | { |
2926 | } | 2922 | return (s->shutdown); |
2923 | } | ||
2927 | 2924 | ||
2928 | SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) | 2925 | int |
2929 | { | 2926 | SSL_version(const SSL *s) |
2930 | return(ssl->ctx); | 2927 | { |
2931 | } | 2928 | return (s->version); |
2929 | } | ||
2932 | 2930 | ||
2933 | SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) | 2931 | SSL_CTX |
2934 | { | 2932 | *SSL_get_SSL_CTX(const SSL *ssl) |
2933 | { | ||
2934 | return (ssl->ctx); | ||
2935 | } | ||
2936 | |||
2937 | SSL_CTX | ||
2938 | *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) | ||
2939 | { | ||
2935 | if (ssl->ctx == ctx) | 2940 | if (ssl->ctx == ctx) |
2936 | return ssl->ctx; | 2941 | return ssl->ctx; |
2937 | #ifndef OPENSSL_NO_TLSEXT | 2942 | #ifndef OPENSSL_NO_TLSEXT |
@@ -2941,114 +2946,131 @@ SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX* ctx) | |||
2941 | if (ssl->cert != NULL) | 2946 | if (ssl->cert != NULL) |
2942 | ssl_cert_free(ssl->cert); | 2947 | ssl_cert_free(ssl->cert); |
2943 | ssl->cert = ssl_cert_dup(ctx->cert); | 2948 | ssl->cert = ssl_cert_dup(ctx->cert); |
2944 | CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); | 2949 | CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); |
2945 | if (ssl->ctx != NULL) | 2950 | if (ssl->ctx != NULL) |
2946 | SSL_CTX_free(ssl->ctx); /* decrement reference count */ | 2951 | SSL_CTX_free(ssl->ctx); /* decrement reference count */ |
2947 | ssl->ctx = ctx; | 2952 | ssl->ctx = ctx; |
2948 | return(ssl->ctx); | 2953 | return (ssl->ctx); |
2949 | } | 2954 | } |
2950 | 2955 | ||
2951 | #ifndef OPENSSL_NO_STDIO | 2956 | #ifndef OPENSSL_NO_STDIO |
2952 | int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) | 2957 | int |
2953 | { | 2958 | SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) |
2954 | return(X509_STORE_set_default_paths(ctx->cert_store)); | 2959 | { |
2955 | } | 2960 | return (X509_STORE_set_default_paths(ctx->cert_store)); |
2961 | } | ||
2956 | 2962 | ||
2957 | int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, | 2963 | int |
2958 | const char *CApath) | 2964 | SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, |
2959 | { | 2965 | const char *CApath) |
2960 | return(X509_STORE_load_locations(ctx->cert_store,CAfile,CApath)); | 2966 | { |
2961 | } | 2967 | return (X509_STORE_load_locations(ctx->cert_store, CAfile, CApath)); |
2968 | } | ||
2962 | #endif | 2969 | #endif |
2963 | 2970 | ||
2964 | void SSL_set_info_callback(SSL *ssl, | 2971 | void |
2965 | void (*cb)(const SSL *ssl,int type,int val)) | 2972 | SSL_set_info_callback(SSL *ssl, |
2966 | { | 2973 | void (*cb)(const SSL *ssl, int type, int val)) |
2967 | ssl->info_callback=cb; | 2974 | { |
2968 | } | 2975 | ssl->info_callback = cb; |
2976 | } | ||
2969 | 2977 | ||
2970 | /* One compiler (Diab DCC) doesn't like argument names in returned | 2978 | /* One compiler (Diab DCC) doesn't like argument names in returned |
2971 | function pointer. */ | 2979 | function pointer. */ |
2972 | void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,int /*val*/) | 2980 | void (*SSL_get_info_callback(const SSL *ssl))(const SSL * /*ssl*/,int /*type*/,int /*val*/) |
2973 | { | 2981 | { |
2974 | return ssl->info_callback; | 2982 | return ssl->info_callback; |
2975 | } | 2983 | } |
2976 | 2984 | ||
2977 | int SSL_state(const SSL *ssl) | 2985 | int |
2978 | { | 2986 | SSL_state(const SSL *ssl) |
2979 | return(ssl->state); | 2987 | { |
2980 | } | 2988 | return (ssl->state); |
2989 | } | ||
2981 | 2990 | ||
2982 | void SSL_set_state(SSL *ssl, int state) | 2991 | void |
2983 | { | 2992 | SSL_set_state(SSL *ssl, int state) |
2993 | { | ||
2984 | ssl->state = state; | 2994 | ssl->state = state; |
2985 | } | 2995 | } |
2986 | 2996 | ||
2987 | void SSL_set_verify_result(SSL *ssl,long arg) | 2997 | void |
2988 | { | 2998 | SSL_set_verify_result(SSL *ssl, long arg) |
2989 | ssl->verify_result=arg; | 2999 | { |
2990 | } | 3000 | ssl->verify_result = arg; |
3001 | } | ||
2991 | 3002 | ||
2992 | long SSL_get_verify_result(const SSL *ssl) | 3003 | long |
2993 | { | 3004 | SSL_get_verify_result(const SSL *ssl) |
2994 | return(ssl->verify_result); | 3005 | { |
2995 | } | 3006 | return (ssl->verify_result); |
3007 | } | ||
2996 | 3008 | ||
2997 | int SSL_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func, | 3009 | int |
2998 | CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func) | 3010 | SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
2999 | { | 3011 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
3012 | { | ||
3000 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp, | 3013 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, argl, argp, |
3001 | new_func, dup_func, free_func); | 3014 | new_func, dup_func, free_func); |
3002 | } | 3015 | } |
3003 | 3016 | ||
3004 | int SSL_set_ex_data(SSL *s,int idx,void *arg) | 3017 | int |
3005 | { | 3018 | SSL_set_ex_data(SSL *s, int idx, void *arg) |
3006 | return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); | 3019 | { |
3007 | } | 3020 | return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); |
3021 | } | ||
3008 | 3022 | ||
3009 | void *SSL_get_ex_data(const SSL *s,int idx) | 3023 | void |
3010 | { | 3024 | *SSL_get_ex_data(const SSL *s, int idx) |
3011 | return(CRYPTO_get_ex_data(&s->ex_data,idx)); | 3025 | { |
3012 | } | 3026 | return (CRYPTO_get_ex_data(&s->ex_data, idx)); |
3027 | } | ||
3013 | 3028 | ||
3014 | int SSL_CTX_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func, | 3029 | int |
3015 | CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func) | 3030 | SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
3016 | { | 3031 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
3032 | { | ||
3017 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp, | 3033 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, argl, argp, |
3018 | new_func, dup_func, free_func); | 3034 | new_func, dup_func, free_func); |
3019 | } | 3035 | } |
3020 | 3036 | ||
3021 | int SSL_CTX_set_ex_data(SSL_CTX *s,int idx,void *arg) | 3037 | int |
3022 | { | 3038 | SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg) |
3023 | return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); | 3039 | { |
3024 | } | 3040 | return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); |
3041 | } | ||
3025 | 3042 | ||
3026 | void *SSL_CTX_get_ex_data(const SSL_CTX *s,int idx) | 3043 | void |
3027 | { | 3044 | *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx) |
3028 | return(CRYPTO_get_ex_data(&s->ex_data,idx)); | 3045 | { |
3029 | } | 3046 | return (CRYPTO_get_ex_data(&s->ex_data, idx)); |
3047 | } | ||
3030 | 3048 | ||
3031 | int ssl_ok(SSL *s) | 3049 | int |
3032 | { | 3050 | ssl_ok(SSL *s) |
3033 | return(1); | 3051 | { |
3034 | } | 3052 | return (1); |
3053 | } | ||
3035 | 3054 | ||
3036 | X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx) | 3055 | X509_STORE |
3037 | { | 3056 | *SSL_CTX_get_cert_store(const SSL_CTX *ctx) |
3038 | return(ctx->cert_store); | 3057 | { |
3039 | } | 3058 | return (ctx->cert_store); |
3059 | } | ||
3040 | 3060 | ||
3041 | void SSL_CTX_set_cert_store(SSL_CTX *ctx,X509_STORE *store) | 3061 | void |
3042 | { | 3062 | SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store) |
3063 | { | ||
3043 | if (ctx->cert_store != NULL) | 3064 | if (ctx->cert_store != NULL) |
3044 | X509_STORE_free(ctx->cert_store); | 3065 | X509_STORE_free(ctx->cert_store); |
3045 | ctx->cert_store=store; | 3066 | ctx->cert_store = store; |
3046 | } | 3067 | } |
3047 | 3068 | ||
3048 | int SSL_want(const SSL *s) | 3069 | int |
3049 | { | 3070 | SSL_want(const SSL *s) |
3050 | return(s->rwstate); | 3071 | { |
3051 | } | 3072 | return (s->rwstate); |
3073 | } | ||
3052 | 3074 | ||
3053 | /*! | 3075 | /*! |
3054 | * \brief Set the callback for generating temporary RSA keys. | 3076 | * \brief Set the callback for generating temporary RSA keys. |
@@ -3057,19 +3079,21 @@ int SSL_want(const SSL *s) | |||
3057 | */ | 3079 | */ |
3058 | 3080 | ||
3059 | #ifndef OPENSSL_NO_RSA | 3081 | #ifndef OPENSSL_NO_RSA |
3060 | void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,RSA *(*cb)(SSL *ssl, | 3082 | void |
3061 | int is_export, | 3083 | SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb)(SSL *ssl, |
3062 | int keylength)) | 3084 | int is_export, |
3063 | { | 3085 | int keylength)) |
3064 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); | 3086 | { |
3065 | } | 3087 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); |
3066 | 3088 | } | |
3067 | void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl, | 3089 | |
3068 | int is_export, | 3090 | void |
3069 | int keylength)) | 3091 | SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb)(SSL *ssl, |
3070 | { | 3092 | int is_export, |
3071 | SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); | 3093 | int keylength)) |
3072 | } | 3094 | { |
3095 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_RSA_CB,(void (*)(void))cb); | ||
3096 | } | ||
3073 | #endif | 3097 | #endif |
3074 | 3098 | ||
3075 | #ifdef DOXYGEN | 3099 | #ifdef DOXYGEN |
@@ -3083,8 +3107,9 @@ void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl, | |||
3083 | * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback | 3107 | * \sa SSL_CTX_set_tmp_rsa_callback, SSL_set_tmp_rsa_callback |
3084 | */ | 3108 | */ |
3085 | 3109 | ||
3086 | RSA *cb(SSL *ssl,int is_export,int keylength) | 3110 | RSA |
3087 | {} | 3111 | *cb(SSL *ssl, int is_export, int keylength) |
3112 | {} | ||
3088 | #endif | 3113 | #endif |
3089 | 3114 | ||
3090 | /*! | 3115 | /*! |
@@ -3094,133 +3119,142 @@ RSA *cb(SSL *ssl,int is_export,int keylength) | |||
3094 | */ | 3119 | */ |
3095 | 3120 | ||
3096 | #ifndef OPENSSL_NO_DH | 3121 | #ifndef OPENSSL_NO_DH |
3097 | void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,DH *(*dh)(SSL *ssl,int is_export, | 3122 | void |
3098 | int keylength)) | 3123 | SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh)(SSL *ssl, int is_export, |
3099 | { | 3124 | int keylength)) |
3100 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); | 3125 | { |
3101 | } | 3126 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); |
3127 | } | ||
3102 | 3128 | ||
3103 | void SSL_set_tmp_dh_callback(SSL *ssl,DH *(*dh)(SSL *ssl,int is_export, | 3129 | void |
3104 | int keylength)) | 3130 | SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh)(SSL *ssl, int is_export, |
3105 | { | 3131 | int keylength)) |
3106 | SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); | 3132 | { |
3107 | } | 3133 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB,(void (*)(void))dh); |
3134 | } | ||
3108 | #endif | 3135 | #endif |
3109 | 3136 | ||
3110 | #ifndef OPENSSL_NO_ECDH | 3137 | #ifndef OPENSSL_NO_ECDH |
3111 | void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,EC_KEY *(*ecdh)(SSL *ssl,int is_export, | 3138 | void |
3112 | int keylength)) | 3139 | SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, EC_KEY *(*ecdh)(SSL *ssl, int is_export, |
3113 | { | 3140 | int keylength)) |
3114 | SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); | 3141 | { |
3115 | } | 3142 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); |
3143 | } | ||
3116 | 3144 | ||
3117 | void SSL_set_tmp_ecdh_callback(SSL *ssl,EC_KEY *(*ecdh)(SSL *ssl,int is_export, | 3145 | void |
3118 | int keylength)) | 3146 | SSL_set_tmp_ecdh_callback(SSL *ssl, EC_KEY *(*ecdh)(SSL *ssl, int is_export, |
3119 | { | 3147 | int keylength)) |
3120 | SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); | 3148 | { |
3121 | } | 3149 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_ECDH_CB,(void (*)(void))ecdh); |
3150 | } | ||
3122 | #endif | 3151 | #endif |
3123 | 3152 | ||
3124 | #ifndef OPENSSL_NO_PSK | 3153 | #ifndef OPENSSL_NO_PSK |
3125 | int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) | 3154 | int |
3126 | { | 3155 | SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint) |
3127 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) | 3156 | { |
3128 | { | 3157 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) { |
3129 | SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); | 3158 | SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); |
3130 | return 0; | 3159 | return 0; |
3131 | } | 3160 | } |
3132 | if (ctx->psk_identity_hint != NULL) | 3161 | if (ctx->psk_identity_hint != NULL) |
3133 | OPENSSL_free(ctx->psk_identity_hint); | 3162 | OPENSSL_free(ctx->psk_identity_hint); |
3134 | if (identity_hint != NULL) | 3163 | if (identity_hint != NULL) { |
3135 | { | ||
3136 | ctx->psk_identity_hint = BUF_strdup(identity_hint); | 3164 | ctx->psk_identity_hint = BUF_strdup(identity_hint); |
3137 | if (ctx->psk_identity_hint == NULL) | 3165 | if (ctx->psk_identity_hint == NULL) |
3138 | return 0; | 3166 | return 0; |
3139 | } | 3167 | } else |
3140 | else | ||
3141 | ctx->psk_identity_hint = NULL; | 3168 | ctx->psk_identity_hint = NULL; |
3142 | return 1; | 3169 | return 1; |
3143 | } | 3170 | } |
3144 | 3171 | ||
3145 | int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint) | 3172 | int |
3146 | { | 3173 | SSL_use_psk_identity_hint(SSL *s, const char *identity_hint) |
3174 | { | ||
3147 | if (s == NULL) | 3175 | if (s == NULL) |
3148 | return 0; | 3176 | return 0; |
3149 | 3177 | ||
3150 | if (s->session == NULL) | 3178 | if (s->session == NULL) |
3151 | return 1; /* session not created yet, ignored */ | 3179 | return 1; /* session not created yet, ignored */ |
3152 | 3180 | ||
3153 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) | 3181 | if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) { |
3154 | { | ||
3155 | SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); | 3182 | SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG); |
3156 | return 0; | 3183 | return 0; |
3157 | } | 3184 | } |
3158 | if (s->session->psk_identity_hint != NULL) | 3185 | if (s->session->psk_identity_hint != NULL) |
3159 | OPENSSL_free(s->session->psk_identity_hint); | 3186 | OPENSSL_free(s->session->psk_identity_hint); |
3160 | if (identity_hint != NULL) | 3187 | if (identity_hint != NULL) { |
3161 | { | ||
3162 | s->session->psk_identity_hint = BUF_strdup(identity_hint); | 3188 | s->session->psk_identity_hint = BUF_strdup(identity_hint); |
3163 | if (s->session->psk_identity_hint == NULL) | 3189 | if (s->session->psk_identity_hint == NULL) |
3164 | return 0; | 3190 | return 0; |
3165 | } | 3191 | } else |
3166 | else | ||
3167 | s->session->psk_identity_hint = NULL; | 3192 | s->session->psk_identity_hint = NULL; |
3168 | return 1; | 3193 | return 1; |
3169 | } | 3194 | } |
3170 | 3195 | ||
3171 | const char *SSL_get_psk_identity_hint(const SSL *s) | 3196 | const char |
3172 | { | 3197 | *SSL_get_psk_identity_hint(const SSL *s) |
3198 | { | ||
3173 | if (s == NULL || s->session == NULL) | 3199 | if (s == NULL || s->session == NULL) |
3174 | return NULL; | 3200 | return NULL; |
3175 | return(s->session->psk_identity_hint); | 3201 | return (s->session->psk_identity_hint); |
3176 | } | 3202 | } |
3177 | 3203 | ||
3178 | const char *SSL_get_psk_identity(const SSL *s) | 3204 | const char |
3179 | { | 3205 | *SSL_get_psk_identity(const SSL *s) |
3206 | { | ||
3180 | if (s == NULL || s->session == NULL) | 3207 | if (s == NULL || s->session == NULL) |
3181 | return NULL; | 3208 | return NULL; |
3182 | return(s->session->psk_identity); | 3209 | return (s->session->psk_identity); |
3183 | } | 3210 | } |
3184 | 3211 | ||
3185 | void SSL_set_psk_client_callback(SSL *s, | 3212 | void |
3213 | SSL_set_psk_client_callback(SSL *s, | ||
3186 | unsigned int (*cb)(SSL *ssl, const char *hint, | 3214 | unsigned int (*cb)(SSL *ssl, const char *hint, |
3187 | char *identity, unsigned int max_identity_len, unsigned char *psk, | 3215 | char *identity, unsigned int max_identity_len, unsigned char *psk, |
3188 | unsigned int max_psk_len)) | 3216 | unsigned int max_psk_len)) |
3189 | { | 3217 | { |
3190 | s->psk_client_callback = cb; | 3218 | s->psk_client_callback = cb; |
3191 | } | 3219 | } |
3192 | 3220 | ||
3193 | void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, | 3221 | void |
3222 | SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, | ||
3194 | unsigned int (*cb)(SSL *ssl, const char *hint, | 3223 | unsigned int (*cb)(SSL *ssl, const char *hint, |
3195 | char *identity, unsigned int max_identity_len, unsigned char *psk, | 3224 | char *identity, unsigned int max_identity_len, unsigned char *psk, |
3196 | unsigned int max_psk_len)) | 3225 | unsigned int max_psk_len)) |
3197 | { | 3226 | { |
3198 | ctx->psk_client_callback = cb; | 3227 | ctx->psk_client_callback = cb; |
3199 | } | 3228 | } |
3200 | 3229 | ||
3201 | void SSL_set_psk_server_callback(SSL *s, | 3230 | void |
3231 | SSL_set_psk_server_callback(SSL *s, | ||
3202 | unsigned int (*cb)(SSL *ssl, const char *identity, | 3232 | unsigned int (*cb)(SSL *ssl, const char *identity, |
3203 | unsigned char *psk, unsigned int max_psk_len)) | 3233 | unsigned char *psk, unsigned int max_psk_len)) |
3204 | { | 3234 | { |
3205 | s->psk_server_callback = cb; | 3235 | s->psk_server_callback = cb; |
3206 | } | 3236 | } |
3207 | 3237 | ||
3208 | void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, | 3238 | void |
3239 | SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, | ||
3209 | unsigned int (*cb)(SSL *ssl, const char *identity, | 3240 | unsigned int (*cb)(SSL *ssl, const char *identity, |
3210 | unsigned char *psk, unsigned int max_psk_len)) | 3241 | unsigned char *psk, unsigned int max_psk_len)) |
3211 | { | 3242 | { |
3212 | ctx->psk_server_callback = cb; | 3243 | ctx->psk_server_callback = cb; |
3213 | } | 3244 | } |
3214 | #endif | 3245 | #endif |
3215 | 3246 | ||
3216 | void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) | 3247 | void |
3217 | { | 3248 | SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) |
3249 | { | ||
3218 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); | 3250 | SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); |
3219 | } | 3251 | } |
3220 | void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) | 3252 | |
3221 | { | 3253 | void |
3254 | SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)) | ||
3255 | { | ||
3222 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); | 3256 | SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb); |
3223 | } | 3257 | } |
3224 | 3258 | ||
3225 | /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer | 3259 | /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer |
3226 | * vairable, freeing EVP_MD_CTX previously stored in that variable, if | 3260 | * vairable, freeing EVP_MD_CTX previously stored in that variable, if |
@@ -3228,31 +3262,38 @@ void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int con | |||
3228 | * Returns newly allocated ctx; | 3262 | * Returns newly allocated ctx; |
3229 | */ | 3263 | */ |
3230 | 3264 | ||
3231 | EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash,const EVP_MD *md) | 3265 | EVP_MD_CTX |
3266 | *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md) | ||
3232 | { | 3267 | { |
3233 | ssl_clear_hash_ctx(hash); | 3268 | ssl_clear_hash_ctx(hash); |
3234 | *hash = EVP_MD_CTX_create(); | 3269 | *hash = EVP_MD_CTX_create(); |
3235 | if (md) EVP_DigestInit_ex(*hash,md,NULL); | 3270 | if (md) |
3271 | EVP_DigestInit_ex(*hash, md, NULL); | ||
3236 | return *hash; | 3272 | return *hash; |
3237 | } | 3273 | } |
3238 | void ssl_clear_hash_ctx(EVP_MD_CTX **hash) | 3274 | |
3275 | void | ||
3276 | ssl_clear_hash_ctx(EVP_MD_CTX **hash) | ||
3239 | { | 3277 | { |
3240 | 3278 | ||
3241 | if (*hash) EVP_MD_CTX_destroy(*hash); | 3279 | if (*hash) |
3242 | *hash=NULL; | 3280 | EVP_MD_CTX_destroy(*hash); |
3281 | *hash = NULL; | ||
3243 | } | 3282 | } |
3244 | 3283 | ||
3245 | void SSL_set_debug(SSL *s, int debug) | 3284 | void |
3246 | { | 3285 | SSL_set_debug(SSL *s, int debug) |
3286 | { | ||
3247 | s->debug = debug; | 3287 | s->debug = debug; |
3248 | } | 3288 | } |
3249 | 3289 | ||
3250 | int SSL_cache_hit(SSL *s) | 3290 | int |
3251 | { | 3291 | SSL_cache_hit(SSL *s) |
3292 | { | ||
3252 | return s->hit; | 3293 | return s->hit; |
3253 | } | 3294 | } |
3254 | 3295 | ||
3255 | IMPLEMENT_STACK_OF(SSL_CIPHER) | 3296 | IMPLEMENT_STACK_OF(SSL_CIPHER) |
3256 | IMPLEMENT_STACK_OF(SSL_COMP) | 3297 | IMPLEMENT_STACK_OF(SSL_COMP) |
3257 | IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, | 3298 | IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, |
3258 | ssl_cipher_id); | 3299 | ssl_cipher_id); |
diff --git a/src/lib/libssl/ssl_rsa.c b/src/lib/libssl/ssl_rsa.c index 60e7b66859..078df55f06 100644 --- a/src/lib/libssl/ssl_rsa.c +++ b/src/lib/libssl/ssl_rsa.c | |||
@@ -66,135 +66,126 @@ | |||
66 | 66 | ||
67 | static int ssl_set_cert(CERT *c, X509 *x509); | 67 | static int ssl_set_cert(CERT *c, X509 *x509); |
68 | static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey); | 68 | static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey); |
69 | int SSL_use_certificate(SSL *ssl, X509 *x) | 69 | int |
70 | { | 70 | SSL_use_certificate(SSL *ssl, X509 *x) |
71 | if (x == NULL) | 71 | { |
72 | { | 72 | if (x == NULL) { |
73 | SSLerr(SSL_F_SSL_USE_CERTIFICATE,ERR_R_PASSED_NULL_PARAMETER); | 73 | SSLerr(SSL_F_SSL_USE_CERTIFICATE, ERR_R_PASSED_NULL_PARAMETER); |
74 | return(0); | 74 | return (0); |
75 | } | 75 | } |
76 | if (!ssl_cert_inst(&ssl->cert)) | 76 | if (!ssl_cert_inst(&ssl->cert)) { |
77 | { | 77 | SSLerr(SSL_F_SSL_USE_CERTIFICATE, ERR_R_MALLOC_FAILURE); |
78 | SSLerr(SSL_F_SSL_USE_CERTIFICATE,ERR_R_MALLOC_FAILURE); | 78 | return (0); |
79 | return(0); | ||
80 | } | ||
81 | return(ssl_set_cert(ssl->cert,x)); | ||
82 | } | 79 | } |
80 | return (ssl_set_cert(ssl->cert, x)); | ||
81 | } | ||
83 | 82 | ||
84 | #ifndef OPENSSL_NO_STDIO | 83 | #ifndef OPENSSL_NO_STDIO |
85 | int SSL_use_certificate_file(SSL *ssl, const char *file, int type) | 84 | int |
86 | { | 85 | SSL_use_certificate_file(SSL *ssl, const char *file, int type) |
86 | { | ||
87 | int j; | 87 | int j; |
88 | BIO *in; | 88 | BIO *in; |
89 | int ret=0; | 89 | int ret = 0; |
90 | X509 *x=NULL; | 90 | X509 *x = NULL; |
91 | 91 | ||
92 | in=BIO_new(BIO_s_file_internal()); | 92 | in = BIO_new(BIO_s_file_internal()); |
93 | if (in == NULL) | 93 | if (in == NULL) { |
94 | { | 94 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, ERR_R_BUF_LIB); |
95 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,ERR_R_BUF_LIB); | ||
96 | goto end; | 95 | goto end; |
97 | } | 96 | } |
98 | 97 | ||
99 | if (BIO_read_filename(in,file) <= 0) | 98 | if (BIO_read_filename(in, file) <= 0) { |
100 | { | 99 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, ERR_R_SYS_LIB); |
101 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,ERR_R_SYS_LIB); | ||
102 | goto end; | 100 | goto end; |
103 | } | 101 | } |
104 | if (type == SSL_FILETYPE_ASN1) | 102 | if (type == SSL_FILETYPE_ASN1) { |
105 | { | 103 | j = ERR_R_ASN1_LIB; |
106 | j=ERR_R_ASN1_LIB; | 104 | x = d2i_X509_bio(in, NULL); |
107 | x=d2i_X509_bio(in,NULL); | 105 | } else if (type == SSL_FILETYPE_PEM) { |
108 | } | 106 | j = ERR_R_PEM_LIB; |
109 | else if (type == SSL_FILETYPE_PEM) | 107 | x = PEM_read_bio_X509(in, NULL, ssl->ctx->default_passwd_callback, ssl->ctx->default_passwd_callback_userdata); |
110 | { | 108 | } else { |
111 | j=ERR_R_PEM_LIB; | 109 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); |
112 | x=PEM_read_bio_X509(in,NULL,ssl->ctx->default_passwd_callback,ssl->ctx->default_passwd_callback_userdata); | ||
113 | } | ||
114 | else | ||
115 | { | ||
116 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
117 | goto end; | 110 | goto end; |
118 | } | 111 | } |
119 | 112 | ||
120 | if (x == NULL) | 113 | if (x == NULL) { |
121 | { | 114 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE, j); |
122 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_FILE,j); | ||
123 | goto end; | 115 | goto end; |
124 | } | 116 | } |
125 | 117 | ||
126 | ret=SSL_use_certificate(ssl,x); | 118 | ret = SSL_use_certificate(ssl, x); |
127 | end: | 119 | end: |
128 | if (x != NULL) X509_free(x); | 120 | if (x != NULL) |
129 | if (in != NULL) BIO_free(in); | 121 | X509_free(x); |
130 | return(ret); | 122 | if (in != NULL) |
131 | } | 123 | BIO_free(in); |
124 | return (ret); | ||
125 | } | ||
132 | #endif | 126 | #endif |
133 | 127 | ||
134 | int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len) | 128 | int |
135 | { | 129 | SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len) |
130 | { | ||
136 | X509 *x; | 131 | X509 *x; |
137 | int ret; | 132 | int ret; |
138 | 133 | ||
139 | x=d2i_X509(NULL,&d,(long)len); | 134 | x = d2i_X509(NULL, &d,(long)len); |
140 | if (x == NULL) | 135 | if (x == NULL) { |
141 | { | 136 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_ASN1, ERR_R_ASN1_LIB); |
142 | SSLerr(SSL_F_SSL_USE_CERTIFICATE_ASN1,ERR_R_ASN1_LIB); | 137 | return (0); |
143 | return(0); | 138 | } |
144 | } | ||
145 | 139 | ||
146 | ret=SSL_use_certificate(ssl,x); | 140 | ret = SSL_use_certificate(ssl, x); |
147 | X509_free(x); | 141 | X509_free(x); |
148 | return(ret); | 142 | return (ret); |
149 | } | 143 | } |
150 | 144 | ||
151 | #ifndef OPENSSL_NO_RSA | 145 | #ifndef OPENSSL_NO_RSA |
152 | int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) | 146 | int |
153 | { | 147 | SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) |
148 | { | ||
154 | EVP_PKEY *pkey; | 149 | EVP_PKEY *pkey; |
155 | int ret; | 150 | int ret; |
156 | 151 | ||
157 | if (rsa == NULL) | 152 | if (rsa == NULL) { |
158 | { | 153 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
159 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 154 | return (0); |
160 | return(0); | 155 | } |
161 | } | 156 | if (!ssl_cert_inst(&ssl->cert)) { |
162 | if (!ssl_cert_inst(&ssl->cert)) | 157 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY, ERR_R_MALLOC_FAILURE); |
163 | { | 158 | return (0); |
164 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY,ERR_R_MALLOC_FAILURE); | 159 | } |
165 | return(0); | 160 | if ((pkey = EVP_PKEY_new()) == NULL) { |
166 | } | 161 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY, ERR_R_EVP_LIB); |
167 | if ((pkey=EVP_PKEY_new()) == NULL) | 162 | return (0); |
168 | { | 163 | } |
169 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY,ERR_R_EVP_LIB); | ||
170 | return(0); | ||
171 | } | ||
172 | 164 | ||
173 | RSA_up_ref(rsa); | 165 | RSA_up_ref(rsa); |
174 | EVP_PKEY_assign_RSA(pkey,rsa); | 166 | EVP_PKEY_assign_RSA(pkey, rsa); |
175 | 167 | ||
176 | ret=ssl_set_pkey(ssl->cert,pkey); | 168 | ret = ssl_set_pkey(ssl->cert, pkey); |
177 | EVP_PKEY_free(pkey); | 169 | EVP_PKEY_free(pkey); |
178 | return(ret); | 170 | return (ret); |
179 | } | 171 | } |
180 | #endif | 172 | #endif |
181 | 173 | ||
182 | static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey) | 174 | static int |
183 | { | 175 | ssl_set_pkey(CERT *c, EVP_PKEY *pkey) |
176 | { | ||
184 | int i; | 177 | int i; |
185 | 178 | ||
186 | i=ssl_cert_type(NULL,pkey); | 179 | i = ssl_cert_type(NULL, pkey); |
187 | if (i < 0) | 180 | if (i < 0) { |
188 | { | 181 | SSLerr(SSL_F_SSL_SET_PKEY, SSL_R_UNKNOWN_CERTIFICATE_TYPE); |
189 | SSLerr(SSL_F_SSL_SET_PKEY,SSL_R_UNKNOWN_CERTIFICATE_TYPE); | 182 | return (0); |
190 | return(0); | 183 | } |
191 | } | ||
192 | 184 | ||
193 | if (c->pkeys[i].x509 != NULL) | 185 | if (c->pkeys[i].x509 != NULL) { |
194 | { | ||
195 | EVP_PKEY *pktmp; | 186 | EVP_PKEY *pktmp; |
196 | pktmp = X509_get_pubkey(c->pkeys[i].x509); | 187 | pktmp = X509_get_pubkey(c->pkeys[i].x509); |
197 | EVP_PKEY_copy_parameters(pktmp,pkey); | 188 | EVP_PKEY_copy_parameters(pktmp, pkey); |
198 | EVP_PKEY_free(pktmp); | 189 | EVP_PKEY_free(pktmp); |
199 | ERR_clear_error(); | 190 | ERR_clear_error(); |
200 | 191 | ||
@@ -203,217 +194,200 @@ static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey) | |||
203 | * for smart cards. */ | 194 | * for smart cards. */ |
204 | if ((pkey->type == EVP_PKEY_RSA) && | 195 | if ((pkey->type == EVP_PKEY_RSA) && |
205 | (RSA_flags(pkey->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) | 196 | (RSA_flags(pkey->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) |
206 | ; | 197 | ; |
207 | else | 198 | else |
208 | #endif | 199 | #endif |
209 | if (!X509_check_private_key(c->pkeys[i].x509,pkey)) | 200 | if (!X509_check_private_key(c->pkeys[i].x509, pkey)) { |
210 | { | ||
211 | X509_free(c->pkeys[i].x509); | 201 | X509_free(c->pkeys[i].x509); |
212 | c->pkeys[i].x509 = NULL; | 202 | c->pkeys[i].x509 = NULL; |
213 | return 0; | 203 | return 0; |
214 | } | ||
215 | } | 204 | } |
205 | } | ||
216 | 206 | ||
217 | if (c->pkeys[i].privatekey != NULL) | 207 | if (c->pkeys[i].privatekey != NULL) |
218 | EVP_PKEY_free(c->pkeys[i].privatekey); | 208 | EVP_PKEY_free(c->pkeys[i].privatekey); |
219 | CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY); | 209 | CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); |
220 | c->pkeys[i].privatekey=pkey; | 210 | c->pkeys[i].privatekey = pkey; |
221 | c->key= &(c->pkeys[i]); | 211 | c->key = &(c->pkeys[i]); |
222 | 212 | ||
223 | c->valid=0; | 213 | c->valid = 0; |
224 | return(1); | 214 | return (1); |
225 | } | 215 | } |
226 | 216 | ||
227 | #ifndef OPENSSL_NO_RSA | 217 | #ifndef OPENSSL_NO_RSA |
228 | #ifndef OPENSSL_NO_STDIO | 218 | #ifndef OPENSSL_NO_STDIO |
229 | int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type) | 219 | int |
230 | { | 220 | SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type) |
231 | int j,ret=0; | 221 | { |
222 | int j, ret = 0; | ||
232 | BIO *in; | 223 | BIO *in; |
233 | RSA *rsa=NULL; | 224 | RSA *rsa = NULL; |
234 | 225 | ||
235 | in=BIO_new(BIO_s_file_internal()); | 226 | in = BIO_new(BIO_s_file_internal()); |
236 | if (in == NULL) | 227 | if (in == NULL) { |
237 | { | 228 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, ERR_R_BUF_LIB); |
238 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
239 | goto end; | 229 | goto end; |
240 | } | 230 | } |
241 | 231 | ||
242 | if (BIO_read_filename(in,file) <= 0) | 232 | if (BIO_read_filename(in, file) <= 0) { |
243 | { | 233 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, ERR_R_SYS_LIB); |
244 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
245 | goto end; | 234 | goto end; |
246 | } | 235 | } |
247 | if (type == SSL_FILETYPE_ASN1) | 236 | if (type == SSL_FILETYPE_ASN1) { |
248 | { | 237 | j = ERR_R_ASN1_LIB; |
249 | j=ERR_R_ASN1_LIB; | 238 | rsa = d2i_RSAPrivateKey_bio(in, NULL); |
250 | rsa=d2i_RSAPrivateKey_bio(in,NULL); | 239 | } else if (type == SSL_FILETYPE_PEM) { |
251 | } | 240 | j = ERR_R_PEM_LIB; |
252 | else if (type == SSL_FILETYPE_PEM) | 241 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, |
253 | { | 242 | ssl->ctx->default_passwd_callback, ssl->ctx->default_passwd_callback_userdata); |
254 | j=ERR_R_PEM_LIB; | 243 | } else { |
255 | rsa=PEM_read_bio_RSAPrivateKey(in,NULL, | 244 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
256 | ssl->ctx->default_passwd_callback,ssl->ctx->default_passwd_callback_userdata); | ||
257 | } | ||
258 | else | ||
259 | { | ||
260 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
261 | goto end; | 245 | goto end; |
262 | } | 246 | } |
263 | if (rsa == NULL) | 247 | if (rsa == NULL) { |
264 | { | 248 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, j); |
265 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE,j); | ||
266 | goto end; | 249 | goto end; |
267 | } | 250 | } |
268 | ret=SSL_use_RSAPrivateKey(ssl,rsa); | 251 | ret = SSL_use_RSAPrivateKey(ssl, rsa); |
269 | RSA_free(rsa); | 252 | RSA_free(rsa); |
270 | end: | 253 | end: |
271 | if (in != NULL) BIO_free(in); | 254 | if (in != NULL) |
272 | return(ret); | 255 | BIO_free(in); |
273 | } | 256 | return (ret); |
257 | } | ||
274 | #endif | 258 | #endif |
275 | 259 | ||
276 | int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len) | 260 | int |
277 | { | 261 | SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len) |
262 | { | ||
278 | int ret; | 263 | int ret; |
279 | const unsigned char *p; | 264 | const unsigned char *p; |
280 | RSA *rsa; | 265 | RSA *rsa; |
281 | 266 | ||
282 | p=d; | 267 | p = d; |
283 | if ((rsa=d2i_RSAPrivateKey(NULL,&p,(long)len)) == NULL) | 268 | if ((rsa = d2i_RSAPrivateKey(NULL, &p,(long)len)) == NULL) { |
284 | { | 269 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
285 | SSLerr(SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 270 | return (0); |
286 | return(0); | 271 | } |
287 | } | ||
288 | 272 | ||
289 | ret=SSL_use_RSAPrivateKey(ssl,rsa); | 273 | ret = SSL_use_RSAPrivateKey(ssl, rsa); |
290 | RSA_free(rsa); | 274 | RSA_free(rsa); |
291 | return(ret); | 275 | return (ret); |
292 | } | 276 | } |
293 | #endif /* !OPENSSL_NO_RSA */ | 277 | #endif /* !OPENSSL_NO_RSA */ |
294 | 278 | ||
295 | int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) | 279 | int |
296 | { | 280 | SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) |
281 | { | ||
297 | int ret; | 282 | int ret; |
298 | 283 | ||
299 | if (pkey == NULL) | 284 | if (pkey == NULL) { |
300 | { | 285 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
301 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 286 | return (0); |
302 | return(0); | 287 | } |
303 | } | 288 | if (!ssl_cert_inst(&ssl->cert)) { |
304 | if (!ssl_cert_inst(&ssl->cert)) | 289 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY, ERR_R_MALLOC_FAILURE); |
305 | { | 290 | return (0); |
306 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY,ERR_R_MALLOC_FAILURE); | ||
307 | return(0); | ||
308 | } | ||
309 | ret=ssl_set_pkey(ssl->cert,pkey); | ||
310 | return(ret); | ||
311 | } | 291 | } |
292 | ret = ssl_set_pkey(ssl->cert, pkey); | ||
293 | return (ret); | ||
294 | } | ||
312 | 295 | ||
313 | #ifndef OPENSSL_NO_STDIO | 296 | #ifndef OPENSSL_NO_STDIO |
314 | int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type) | 297 | int |
315 | { | 298 | SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type) |
316 | int j,ret=0; | 299 | { |
300 | int j, ret = 0; | ||
317 | BIO *in; | 301 | BIO *in; |
318 | EVP_PKEY *pkey=NULL; | 302 | EVP_PKEY *pkey = NULL; |
319 | 303 | ||
320 | in=BIO_new(BIO_s_file_internal()); | 304 | in = BIO_new(BIO_s_file_internal()); |
321 | if (in == NULL) | 305 | if (in == NULL) { |
322 | { | 306 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, ERR_R_BUF_LIB); |
323 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
324 | goto end; | 307 | goto end; |
325 | } | 308 | } |
326 | 309 | ||
327 | if (BIO_read_filename(in,file) <= 0) | 310 | if (BIO_read_filename(in, file) <= 0) { |
328 | { | 311 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, ERR_R_SYS_LIB); |
329 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
330 | goto end; | 312 | goto end; |
331 | } | 313 | } |
332 | if (type == SSL_FILETYPE_PEM) | 314 | if (type == SSL_FILETYPE_PEM) { |
333 | { | 315 | j = ERR_R_PEM_LIB; |
334 | j=ERR_R_PEM_LIB; | 316 | pkey = PEM_read_bio_PrivateKey(in, NULL, |
335 | pkey=PEM_read_bio_PrivateKey(in,NULL, | 317 | ssl->ctx->default_passwd_callback, ssl->ctx->default_passwd_callback_userdata); |
336 | ssl->ctx->default_passwd_callback,ssl->ctx->default_passwd_callback_userdata); | 318 | } else if (type == SSL_FILETYPE_ASN1) { |
337 | } | ||
338 | else if (type == SSL_FILETYPE_ASN1) | ||
339 | { | ||
340 | j = ERR_R_ASN1_LIB; | 319 | j = ERR_R_ASN1_LIB; |
341 | pkey = d2i_PrivateKey_bio(in,NULL); | 320 | pkey = d2i_PrivateKey_bio(in, NULL); |
342 | } | 321 | } else { |
343 | else | 322 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
344 | { | ||
345 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
346 | goto end; | 323 | goto end; |
347 | } | 324 | } |
348 | if (pkey == NULL) | 325 | if (pkey == NULL) { |
349 | { | 326 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE, j); |
350 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_FILE,j); | ||
351 | goto end; | 327 | goto end; |
352 | } | 328 | } |
353 | ret=SSL_use_PrivateKey(ssl,pkey); | 329 | ret = SSL_use_PrivateKey(ssl, pkey); |
354 | EVP_PKEY_free(pkey); | 330 | EVP_PKEY_free(pkey); |
355 | end: | 331 | end: |
356 | if (in != NULL) BIO_free(in); | 332 | if (in != NULL) |
357 | return(ret); | 333 | BIO_free(in); |
358 | } | 334 | return (ret); |
335 | } | ||
359 | #endif | 336 | #endif |
360 | 337 | ||
361 | int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len) | 338 | int |
362 | { | 339 | SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len) |
340 | { | ||
363 | int ret; | 341 | int ret; |
364 | const unsigned char *p; | 342 | const unsigned char *p; |
365 | EVP_PKEY *pkey; | 343 | EVP_PKEY *pkey; |
366 | 344 | ||
367 | p=d; | 345 | p = d; |
368 | if ((pkey=d2i_PrivateKey(type,NULL,&p,(long)len)) == NULL) | 346 | if ((pkey = d2i_PrivateKey(type, NULL, &p,(long)len)) == NULL) { |
369 | { | 347 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
370 | SSLerr(SSL_F_SSL_USE_PRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 348 | return (0); |
371 | return(0); | 349 | } |
372 | } | ||
373 | 350 | ||
374 | ret=SSL_use_PrivateKey(ssl,pkey); | 351 | ret = SSL_use_PrivateKey(ssl, pkey); |
375 | EVP_PKEY_free(pkey); | 352 | EVP_PKEY_free(pkey); |
376 | return(ret); | 353 | return (ret); |
354 | } | ||
355 | |||
356 | int | ||
357 | SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) | ||
358 | { | ||
359 | if (x == NULL) { | ||
360 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_PASSED_NULL_PARAMETER); | ||
361 | return (0); | ||
377 | } | 362 | } |
378 | 363 | if (!ssl_cert_inst(&ctx->cert)) { | |
379 | int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) | 364 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE, ERR_R_MALLOC_FAILURE); |
380 | { | 365 | return (0); |
381 | if (x == NULL) | ||
382 | { | ||
383 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE,ERR_R_PASSED_NULL_PARAMETER); | ||
384 | return(0); | ||
385 | } | ||
386 | if (!ssl_cert_inst(&ctx->cert)) | ||
387 | { | ||
388 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE,ERR_R_MALLOC_FAILURE); | ||
389 | return(0); | ||
390 | } | ||
391 | return(ssl_set_cert(ctx->cert, x)); | ||
392 | } | 366 | } |
367 | return (ssl_set_cert(ctx->cert, x)); | ||
368 | } | ||
393 | 369 | ||
394 | static int ssl_set_cert(CERT *c, X509 *x) | 370 | static int |
395 | { | 371 | ssl_set_cert(CERT *c, X509 *x) |
372 | { | ||
396 | EVP_PKEY *pkey; | 373 | EVP_PKEY *pkey; |
397 | int i; | 374 | int i; |
398 | 375 | ||
399 | pkey=X509_get_pubkey(x); | 376 | pkey = X509_get_pubkey(x); |
400 | if (pkey == NULL) | 377 | if (pkey == NULL) { |
401 | { | 378 | SSLerr(SSL_F_SSL_SET_CERT, SSL_R_X509_LIB); |
402 | SSLerr(SSL_F_SSL_SET_CERT,SSL_R_X509_LIB); | 379 | return (0); |
403 | return(0); | 380 | } |
404 | } | ||
405 | 381 | ||
406 | i=ssl_cert_type(x,pkey); | 382 | i = ssl_cert_type(x, pkey); |
407 | if (i < 0) | 383 | if (i < 0) { |
408 | { | 384 | SSLerr(SSL_F_SSL_SET_CERT, SSL_R_UNKNOWN_CERTIFICATE_TYPE); |
409 | SSLerr(SSL_F_SSL_SET_CERT,SSL_R_UNKNOWN_CERTIFICATE_TYPE); | ||
410 | EVP_PKEY_free(pkey); | 385 | EVP_PKEY_free(pkey); |
411 | return(0); | 386 | return (0); |
412 | } | 387 | } |
413 | 388 | ||
414 | if (c->pkeys[i].privatekey != NULL) | 389 | if (c->pkeys[i].privatekey != NULL) { |
415 | { | 390 | EVP_PKEY_copy_parameters(pkey, c->pkeys[i].privatekey); |
416 | EVP_PKEY_copy_parameters(pkey,c->pkeys[i].privatekey); | ||
417 | ERR_clear_error(); | 391 | ERR_clear_error(); |
418 | 392 | ||
419 | #ifndef OPENSSL_NO_RSA | 393 | #ifndef OPENSSL_NO_RSA |
@@ -421,280 +395,259 @@ static int ssl_set_cert(CERT *c, X509 *x) | |||
421 | * for smart cards. */ | 395 | * for smart cards. */ |
422 | if ((c->pkeys[i].privatekey->type == EVP_PKEY_RSA) && | 396 | if ((c->pkeys[i].privatekey->type == EVP_PKEY_RSA) && |
423 | (RSA_flags(c->pkeys[i].privatekey->pkey.rsa) & | 397 | (RSA_flags(c->pkeys[i].privatekey->pkey.rsa) & |
424 | RSA_METHOD_FLAG_NO_CHECK)) | 398 | RSA_METHOD_FLAG_NO_CHECK)) |
425 | ; | 399 | ; |
426 | else | 400 | else |
427 | #endif /* OPENSSL_NO_RSA */ | 401 | #endif /* OPENSSL_NO_RSA */ |
428 | if (!X509_check_private_key(x,c->pkeys[i].privatekey)) | 402 | if (!X509_check_private_key(x, c->pkeys[i].privatekey)) { |
429 | { | ||
430 | /* don't fail for a cert/key mismatch, just free | 403 | /* don't fail for a cert/key mismatch, just free |
431 | * current private key (when switching to a different | 404 | * current private key (when switching to a different |
432 | * cert & key, first this function should be used, | 405 | * cert & key, first this function should be used, |
433 | * then ssl_set_pkey */ | 406 | * then ssl_set_pkey */ |
434 | EVP_PKEY_free(c->pkeys[i].privatekey); | 407 | EVP_PKEY_free(c->pkeys[i].privatekey); |
435 | c->pkeys[i].privatekey=NULL; | 408 | c->pkeys[i].privatekey = NULL; |
436 | /* clear error queue */ | 409 | /* clear error queue */ |
437 | ERR_clear_error(); | 410 | ERR_clear_error(); |
438 | } | ||
439 | } | 411 | } |
412 | } | ||
440 | 413 | ||
441 | EVP_PKEY_free(pkey); | 414 | EVP_PKEY_free(pkey); |
442 | 415 | ||
443 | if (c->pkeys[i].x509 != NULL) | 416 | if (c->pkeys[i].x509 != NULL) |
444 | X509_free(c->pkeys[i].x509); | 417 | X509_free(c->pkeys[i].x509); |
445 | CRYPTO_add(&x->references,1,CRYPTO_LOCK_X509); | 418 | CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); |
446 | c->pkeys[i].x509=x; | 419 | c->pkeys[i].x509 = x; |
447 | c->key= &(c->pkeys[i]); | 420 | c->key = &(c->pkeys[i]); |
448 | 421 | ||
449 | c->valid=0; | 422 | c->valid = 0; |
450 | return(1); | 423 | return (1); |
451 | } | 424 | } |
452 | 425 | ||
453 | #ifndef OPENSSL_NO_STDIO | 426 | #ifndef OPENSSL_NO_STDIO |
454 | int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type) | 427 | int |
455 | { | 428 | SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type) |
429 | { | ||
456 | int j; | 430 | int j; |
457 | BIO *in; | 431 | BIO *in; |
458 | int ret=0; | 432 | int ret = 0; |
459 | X509 *x=NULL; | 433 | X509 *x = NULL; |
460 | 434 | ||
461 | in=BIO_new(BIO_s_file_internal()); | 435 | in = BIO_new(BIO_s_file_internal()); |
462 | if (in == NULL) | 436 | if (in == NULL) { |
463 | { | 437 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, ERR_R_BUF_LIB); |
464 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,ERR_R_BUF_LIB); | ||
465 | goto end; | 438 | goto end; |
466 | } | 439 | } |
467 | 440 | ||
468 | if (BIO_read_filename(in,file) <= 0) | 441 | if (BIO_read_filename(in, file) <= 0) { |
469 | { | 442 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, ERR_R_SYS_LIB); |
470 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,ERR_R_SYS_LIB); | ||
471 | goto end; | 443 | goto end; |
472 | } | 444 | } |
473 | if (type == SSL_FILETYPE_ASN1) | 445 | if (type == SSL_FILETYPE_ASN1) { |
474 | { | 446 | j = ERR_R_ASN1_LIB; |
475 | j=ERR_R_ASN1_LIB; | 447 | x = d2i_X509_bio(in, NULL); |
476 | x=d2i_X509_bio(in,NULL); | 448 | } else if (type == SSL_FILETYPE_PEM) { |
477 | } | 449 | j = ERR_R_PEM_LIB; |
478 | else if (type == SSL_FILETYPE_PEM) | 450 | x = PEM_read_bio_X509(in, NULL, ctx->default_passwd_callback, ctx->default_passwd_callback_userdata); |
479 | { | 451 | } else { |
480 | j=ERR_R_PEM_LIB; | 452 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, SSL_R_BAD_SSL_FILETYPE); |
481 | x=PEM_read_bio_X509(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); | ||
482 | } | ||
483 | else | ||
484 | { | ||
485 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
486 | goto end; | 453 | goto end; |
487 | } | 454 | } |
488 | 455 | ||
489 | if (x == NULL) | 456 | if (x == NULL) { |
490 | { | 457 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, j); |
491 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,j); | ||
492 | goto end; | 458 | goto end; |
493 | } | 459 | } |
494 | 460 | ||
495 | ret=SSL_CTX_use_certificate(ctx,x); | 461 | ret = SSL_CTX_use_certificate(ctx, x); |
496 | end: | 462 | end: |
497 | if (x != NULL) X509_free(x); | 463 | if (x != NULL) |
498 | if (in != NULL) BIO_free(in); | 464 | X509_free(x); |
499 | return(ret); | 465 | if (in != NULL) |
500 | } | 466 | BIO_free(in); |
467 | return (ret); | ||
468 | } | ||
501 | #endif | 469 | #endif |
502 | 470 | ||
503 | int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) | 471 | int |
504 | { | 472 | SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) |
473 | { | ||
505 | X509 *x; | 474 | X509 *x; |
506 | int ret; | 475 | int ret; |
507 | 476 | ||
508 | x=d2i_X509(NULL,&d,(long)len); | 477 | x = d2i_X509(NULL, &d,(long)len); |
509 | if (x == NULL) | 478 | if (x == NULL) { |
510 | { | 479 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1, ERR_R_ASN1_LIB); |
511 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1,ERR_R_ASN1_LIB); | 480 | return (0); |
512 | return(0); | 481 | } |
513 | } | ||
514 | 482 | ||
515 | ret=SSL_CTX_use_certificate(ctx,x); | 483 | ret = SSL_CTX_use_certificate(ctx, x); |
516 | X509_free(x); | 484 | X509_free(x); |
517 | return(ret); | 485 | return (ret); |
518 | } | 486 | } |
519 | 487 | ||
520 | #ifndef OPENSSL_NO_RSA | 488 | #ifndef OPENSSL_NO_RSA |
521 | int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) | 489 | int |
522 | { | 490 | SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) |
491 | { | ||
523 | int ret; | 492 | int ret; |
524 | EVP_PKEY *pkey; | 493 | EVP_PKEY *pkey; |
525 | 494 | ||
526 | if (rsa == NULL) | 495 | if (rsa == NULL) { |
527 | { | 496 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
528 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 497 | return (0); |
529 | return(0); | 498 | } |
530 | } | 499 | if (!ssl_cert_inst(&ctx->cert)) { |
531 | if (!ssl_cert_inst(&ctx->cert)) | 500 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_MALLOC_FAILURE); |
532 | { | 501 | return (0); |
533 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY,ERR_R_MALLOC_FAILURE); | 502 | } |
534 | return(0); | 503 | if ((pkey = EVP_PKEY_new()) == NULL) { |
535 | } | 504 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, ERR_R_EVP_LIB); |
536 | if ((pkey=EVP_PKEY_new()) == NULL) | 505 | return (0); |
537 | { | 506 | } |
538 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY,ERR_R_EVP_LIB); | ||
539 | return(0); | ||
540 | } | ||
541 | 507 | ||
542 | RSA_up_ref(rsa); | 508 | RSA_up_ref(rsa); |
543 | EVP_PKEY_assign_RSA(pkey,rsa); | 509 | EVP_PKEY_assign_RSA(pkey, rsa); |
544 | 510 | ||
545 | ret=ssl_set_pkey(ctx->cert, pkey); | 511 | ret = ssl_set_pkey(ctx->cert, pkey); |
546 | EVP_PKEY_free(pkey); | 512 | EVP_PKEY_free(pkey); |
547 | return(ret); | 513 | return (ret); |
548 | } | 514 | } |
549 | 515 | ||
550 | #ifndef OPENSSL_NO_STDIO | 516 | #ifndef OPENSSL_NO_STDIO |
551 | int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type) | 517 | int |
552 | { | 518 | SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type) |
553 | int j,ret=0; | 519 | { |
520 | int j, ret = 0; | ||
554 | BIO *in; | 521 | BIO *in; |
555 | RSA *rsa=NULL; | 522 | RSA *rsa = NULL; |
556 | 523 | ||
557 | in=BIO_new(BIO_s_file_internal()); | 524 | in = BIO_new(BIO_s_file_internal()); |
558 | if (in == NULL) | 525 | if (in == NULL) { |
559 | { | 526 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, ERR_R_BUF_LIB); |
560 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
561 | goto end; | 527 | goto end; |
562 | } | 528 | } |
563 | 529 | ||
564 | if (BIO_read_filename(in,file) <= 0) | 530 | if (BIO_read_filename(in, file) <= 0) { |
565 | { | 531 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, ERR_R_SYS_LIB); |
566 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
567 | goto end; | 532 | goto end; |
568 | } | 533 | } |
569 | if (type == SSL_FILETYPE_ASN1) | 534 | if (type == SSL_FILETYPE_ASN1) { |
570 | { | 535 | j = ERR_R_ASN1_LIB; |
571 | j=ERR_R_ASN1_LIB; | 536 | rsa = d2i_RSAPrivateKey_bio(in, NULL); |
572 | rsa=d2i_RSAPrivateKey_bio(in,NULL); | 537 | } else if (type == SSL_FILETYPE_PEM) { |
573 | } | 538 | j = ERR_R_PEM_LIB; |
574 | else if (type == SSL_FILETYPE_PEM) | 539 | rsa = PEM_read_bio_RSAPrivateKey(in, NULL, |
575 | { | 540 | ctx->default_passwd_callback, ctx->default_passwd_callback_userdata); |
576 | j=ERR_R_PEM_LIB; | 541 | } else { |
577 | rsa=PEM_read_bio_RSAPrivateKey(in,NULL, | 542 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
578 | ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); | ||
579 | } | ||
580 | else | ||
581 | { | ||
582 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
583 | goto end; | 543 | goto end; |
584 | } | 544 | } |
585 | if (rsa == NULL) | 545 | if (rsa == NULL) { |
586 | { | 546 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, j); |
587 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE,j); | ||
588 | goto end; | 547 | goto end; |
589 | } | 548 | } |
590 | ret=SSL_CTX_use_RSAPrivateKey(ctx,rsa); | 549 | ret = SSL_CTX_use_RSAPrivateKey(ctx, rsa); |
591 | RSA_free(rsa); | 550 | RSA_free(rsa); |
592 | end: | 551 | end: |
593 | if (in != NULL) BIO_free(in); | 552 | if (in != NULL) |
594 | return(ret); | 553 | BIO_free(in); |
595 | } | 554 | return (ret); |
555 | } | ||
596 | #endif | 556 | #endif |
597 | 557 | ||
598 | int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len) | 558 | int |
599 | { | 559 | SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len) |
560 | { | ||
600 | int ret; | 561 | int ret; |
601 | const unsigned char *p; | 562 | const unsigned char *p; |
602 | RSA *rsa; | 563 | RSA *rsa; |
603 | 564 | ||
604 | p=d; | 565 | p = d; |
605 | if ((rsa=d2i_RSAPrivateKey(NULL,&p,(long)len)) == NULL) | 566 | if ((rsa = d2i_RSAPrivateKey(NULL, &p,(long)len)) == NULL) { |
606 | { | 567 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
607 | SSLerr(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 568 | return (0); |
608 | return(0); | 569 | } |
609 | } | ||
610 | 570 | ||
611 | ret=SSL_CTX_use_RSAPrivateKey(ctx,rsa); | 571 | ret = SSL_CTX_use_RSAPrivateKey(ctx, rsa); |
612 | RSA_free(rsa); | 572 | RSA_free(rsa); |
613 | return(ret); | 573 | return (ret); |
614 | } | 574 | } |
615 | #endif /* !OPENSSL_NO_RSA */ | 575 | #endif /* !OPENSSL_NO_RSA */ |
616 | 576 | ||
617 | int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) | 577 | int |
618 | { | 578 | SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) |
619 | if (pkey == NULL) | 579 | { |
620 | { | 580 | if (pkey == NULL) { |
621 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY,ERR_R_PASSED_NULL_PARAMETER); | 581 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY, ERR_R_PASSED_NULL_PARAMETER); |
622 | return(0); | 582 | return (0); |
623 | } | ||
624 | if (!ssl_cert_inst(&ctx->cert)) | ||
625 | { | ||
626 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY,ERR_R_MALLOC_FAILURE); | ||
627 | return(0); | ||
628 | } | ||
629 | return(ssl_set_pkey(ctx->cert,pkey)); | ||
630 | } | 583 | } |
584 | if (!ssl_cert_inst(&ctx->cert)) { | ||
585 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY, ERR_R_MALLOC_FAILURE); | ||
586 | return (0); | ||
587 | } | ||
588 | return (ssl_set_pkey(ctx->cert, pkey)); | ||
589 | } | ||
631 | 590 | ||
632 | #ifndef OPENSSL_NO_STDIO | 591 | #ifndef OPENSSL_NO_STDIO |
633 | int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) | 592 | int |
634 | { | 593 | SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) |
635 | int j,ret=0; | 594 | { |
595 | int j, ret = 0; | ||
636 | BIO *in; | 596 | BIO *in; |
637 | EVP_PKEY *pkey=NULL; | 597 | EVP_PKEY *pkey = NULL; |
638 | 598 | ||
639 | in=BIO_new(BIO_s_file_internal()); | 599 | in = BIO_new(BIO_s_file_internal()); |
640 | if (in == NULL) | 600 | if (in == NULL) { |
641 | { | 601 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, ERR_R_BUF_LIB); |
642 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,ERR_R_BUF_LIB); | ||
643 | goto end; | 602 | goto end; |
644 | } | 603 | } |
645 | 604 | ||
646 | if (BIO_read_filename(in,file) <= 0) | 605 | if (BIO_read_filename(in, file) <= 0) { |
647 | { | 606 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, ERR_R_SYS_LIB); |
648 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,ERR_R_SYS_LIB); | ||
649 | goto end; | 607 | goto end; |
650 | } | 608 | } |
651 | if (type == SSL_FILETYPE_PEM) | 609 | if (type == SSL_FILETYPE_PEM) { |
652 | { | 610 | j = ERR_R_PEM_LIB; |
653 | j=ERR_R_PEM_LIB; | 611 | pkey = PEM_read_bio_PrivateKey(in, NULL, |
654 | pkey=PEM_read_bio_PrivateKey(in,NULL, | 612 | ctx->default_passwd_callback, ctx->default_passwd_callback_userdata); |
655 | ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); | 613 | } else if (type == SSL_FILETYPE_ASN1) { |
656 | } | ||
657 | else if (type == SSL_FILETYPE_ASN1) | ||
658 | { | ||
659 | j = ERR_R_ASN1_LIB; | 614 | j = ERR_R_ASN1_LIB; |
660 | pkey = d2i_PrivateKey_bio(in,NULL); | 615 | pkey = d2i_PrivateKey_bio(in, NULL); |
661 | } | 616 | } else { |
662 | else | 617 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, SSL_R_BAD_SSL_FILETYPE); |
663 | { | ||
664 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,SSL_R_BAD_SSL_FILETYPE); | ||
665 | goto end; | 618 | goto end; |
666 | } | 619 | } |
667 | if (pkey == NULL) | 620 | if (pkey == NULL) { |
668 | { | 621 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, j); |
669 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE,j); | ||
670 | goto end; | 622 | goto end; |
671 | } | 623 | } |
672 | ret=SSL_CTX_use_PrivateKey(ctx,pkey); | 624 | ret = SSL_CTX_use_PrivateKey(ctx, pkey); |
673 | EVP_PKEY_free(pkey); | 625 | EVP_PKEY_free(pkey); |
674 | end: | 626 | end: |
675 | if (in != NULL) BIO_free(in); | 627 | if (in != NULL) |
676 | return(ret); | 628 | BIO_free(in); |
677 | } | 629 | return (ret); |
630 | } | ||
678 | #endif | 631 | #endif |
679 | 632 | ||
680 | int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, | 633 | int |
681 | long len) | 634 | SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, |
682 | { | 635 | long len) |
636 | { | ||
683 | int ret; | 637 | int ret; |
684 | const unsigned char *p; | 638 | const unsigned char *p; |
685 | EVP_PKEY *pkey; | 639 | EVP_PKEY *pkey; |
686 | 640 | ||
687 | p=d; | 641 | p = d; |
688 | if ((pkey=d2i_PrivateKey(type,NULL,&p,(long)len)) == NULL) | 642 | if ((pkey = d2i_PrivateKey(type, NULL, &p,(long)len)) == NULL) { |
689 | { | 643 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1, ERR_R_ASN1_LIB); |
690 | SSLerr(SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1,ERR_R_ASN1_LIB); | 644 | return (0); |
691 | return(0); | 645 | } |
692 | } | ||
693 | 646 | ||
694 | ret=SSL_CTX_use_PrivateKey(ctx,pkey); | 647 | ret = SSL_CTX_use_PrivateKey(ctx, pkey); |
695 | EVP_PKEY_free(pkey); | 648 | EVP_PKEY_free(pkey); |
696 | return(ret); | 649 | return (ret); |
697 | } | 650 | } |
698 | 651 | ||
699 | 652 | ||
700 | #ifndef OPENSSL_NO_STDIO | 653 | #ifndef OPENSSL_NO_STDIO |
@@ -702,82 +655,79 @@ int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, | |||
702 | * possibly followed by a sequence of CA certificates that should be | 655 | * possibly followed by a sequence of CA certificates that should be |
703 | * sent to the peer in the Certificate message. | 656 | * sent to the peer in the Certificate message. |
704 | */ | 657 | */ |
705 | int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file) | 658 | int |
706 | { | 659 | SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file) |
660 | { | ||
707 | BIO *in; | 661 | BIO *in; |
708 | int ret=0; | 662 | int ret = 0; |
709 | X509 *x=NULL; | 663 | X509 *x = NULL; |
710 | 664 | ||
711 | ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ | 665 | ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ |
712 | 666 | ||
713 | in = BIO_new(BIO_s_file_internal()); | 667 | in = BIO_new(BIO_s_file_internal()); |
714 | if (in == NULL) | 668 | if (in == NULL) { |
715 | { | 669 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_BUF_LIB); |
716 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_BUF_LIB); | ||
717 | goto end; | 670 | goto end; |
718 | } | 671 | } |
719 | 672 | ||
720 | if (BIO_read_filename(in,file) <= 0) | 673 | if (BIO_read_filename(in, file) <= 0) { |
721 | { | 674 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_SYS_LIB); |
722 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_SYS_LIB); | ||
723 | goto end; | 675 | goto end; |
724 | } | 676 | } |
725 | 677 | ||
726 | x=PEM_read_bio_X509_AUX(in,NULL,ctx->default_passwd_callback, | 678 | x = PEM_read_bio_X509_AUX(in, NULL, ctx->default_passwd_callback, |
727 | ctx->default_passwd_callback_userdata); | 679 | ctx->default_passwd_callback_userdata); |
728 | if (x == NULL) | 680 | if (x == NULL) { |
729 | { | 681 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE, ERR_R_PEM_LIB); |
730 | SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_PEM_LIB); | ||
731 | goto end; | 682 | goto end; |
732 | } | 683 | } |
733 | 684 | ||
734 | ret = SSL_CTX_use_certificate(ctx, x); | 685 | ret = SSL_CTX_use_certificate(ctx, x); |
735 | 686 | ||
736 | if (ERR_peek_error() != 0) | 687 | if (ERR_peek_error() != 0) |
737 | ret = 0; /* Key/certificate mismatch doesn't imply ret==0 ... */ | 688 | ret = 0; |
738 | if (ret) | 689 | /* Key/certificate mismatch doesn't imply ret==0 ... */ |
739 | { | 690 | if (ret) { |
740 | /* If we could set up our certificate, now proceed to | 691 | /* If we could set up our certificate, now proceed to |
741 | * the CA certificates. | 692 | * the CA certificates. |
742 | */ | 693 | */ |
743 | X509 *ca; | 694 | X509 *ca; |
744 | int r; | 695 | int r; |
745 | unsigned long err; | 696 | unsigned long err; |
746 | 697 | ||
747 | if (ctx->extra_certs != NULL) | 698 | if (ctx->extra_certs != NULL) { |
748 | { | ||
749 | sk_X509_pop_free(ctx->extra_certs, X509_free); | 699 | sk_X509_pop_free(ctx->extra_certs, X509_free); |
750 | ctx->extra_certs = NULL; | 700 | ctx->extra_certs = NULL; |
751 | } | 701 | } |
752 | 702 | ||
753 | while ((ca = PEM_read_bio_X509(in, NULL, | 703 | while ((ca = PEM_read_bio_X509(in, NULL, |
754 | ctx->default_passwd_callback, | 704 | ctx->default_passwd_callback, |
755 | ctx->default_passwd_callback_userdata)) | 705 | ctx->default_passwd_callback_userdata)) |
756 | != NULL) | 706 | != NULL) { |
757 | { | ||
758 | r = SSL_CTX_add_extra_chain_cert(ctx, ca); | 707 | r = SSL_CTX_add_extra_chain_cert(ctx, ca); |
759 | if (!r) | 708 | if (!r) { |
760 | { | ||
761 | X509_free(ca); | 709 | X509_free(ca); |
762 | ret = 0; | 710 | ret = 0; |
763 | goto end; | 711 | goto end; |
764 | } | 712 | } |
765 | /* Note that we must not free r if it was successfully | 713 | /* Note that we must not free r if it was successfully |
766 | * added to the chain (while we must free the main | 714 | * added to the chain (while we must free the main |
767 | * certificate, since its reference count is increased | 715 | * certificate, since its reference count is increased |
768 | * by SSL_CTX_use_certificate). */ | 716 | * by SSL_CTX_use_certificate). */ |
769 | } | 717 | } |
770 | /* When the while loop ends, it's usually just EOF. */ | 718 | /* When the while loop ends, it's usually just EOF. */ |
771 | err = ERR_peek_last_error(); | 719 | err = ERR_peek_last_error(); |
772 | if (ERR_GET_LIB(err) == ERR_LIB_PEM && ERR_GET_REASON(err) == PEM_R_NO_START_LINE) | 720 | if (ERR_GET_LIB(err) == ERR_LIB_PEM && ERR_GET_REASON(err) == PEM_R_NO_START_LINE) |
773 | ERR_clear_error(); | 721 | ERR_clear_error(); |
774 | else | 722 | else |
775 | ret = 0; /* some real error */ | 723 | ret = 0; /* some real error */ |
776 | } | 724 | } |
777 | 725 | ||
778 | end: | 726 | end: |
779 | if (x != NULL) X509_free(x); | 727 | if (x != NULL) |
780 | if (in != NULL) BIO_free(in); | 728 | X509_free(x); |
781 | return(ret); | 729 | if (in != NULL) |
782 | } | 730 | BIO_free(in); |
731 | return (ret); | ||
732 | } | ||
783 | #endif | 733 | #endif |
diff --git a/src/lib/libssl/ssl_sess.c b/src/lib/libssl/ssl_sess.c index ad40fadd02..b29115862b 100644 --- a/src/lib/libssl/ssl_sess.c +++ b/src/lib/libssl/ssl_sess.c | |||
@@ -144,68 +144,74 @@ | |||
144 | #include "ssl_locl.h" | 144 | #include "ssl_locl.h" |
145 | 145 | ||
146 | static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s); | 146 | static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s); |
147 | static void SSL_SESSION_list_add(SSL_CTX *ctx,SSL_SESSION *s); | 147 | static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s); |
148 | static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck); | 148 | static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck); |
149 | 149 | ||
150 | SSL_SESSION *SSL_get_session(const SSL *ssl) | 150 | SSL_SESSION |
151 | *SSL_get_session(const SSL *ssl) | ||
151 | /* aka SSL_get0_session; gets 0 objects, just returns a copy of the pointer */ | 152 | /* aka SSL_get0_session; gets 0 objects, just returns a copy of the pointer */ |
152 | { | 153 | { |
153 | return(ssl->session); | 154 | return (ssl->session); |
154 | } | 155 | } |
155 | 156 | ||
156 | SSL_SESSION *SSL_get1_session(SSL *ssl) | 157 | SSL_SESSION |
158 | *SSL_get1_session(SSL *ssl) | ||
157 | /* variant of SSL_get_session: caller really gets something */ | 159 | /* variant of SSL_get_session: caller really gets something */ |
158 | { | 160 | { |
159 | SSL_SESSION *sess; | 161 | SSL_SESSION *sess; |
160 | /* Need to lock this all up rather than just use CRYPTO_add so that | 162 | /* Need to lock this all up rather than just use CRYPTO_add so that |
161 | * somebody doesn't free ssl->session between when we check it's | 163 | * somebody doesn't free ssl->session between when we check it's |
162 | * non-null and when we up the reference count. */ | 164 | * non-null and when we up the reference count. */ |
163 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_SESSION); | 165 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_SESSION); |
164 | sess = ssl->session; | 166 | sess = ssl->session; |
165 | if(sess) | 167 | if (sess) |
166 | sess->references++; | 168 | sess->references++; |
167 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_SESSION); | 169 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_SESSION); |
168 | return(sess); | 170 | return (sess); |
169 | } | 171 | } |
170 | 172 | ||
171 | int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | 173 | int |
172 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) | 174 | SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
173 | { | 175 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
176 | { | ||
174 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, argl, argp, | 177 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, argl, argp, |
175 | new_func, dup_func, free_func); | 178 | new_func, dup_func, free_func); |
176 | } | 179 | } |
177 | 180 | ||
178 | int SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, void *arg) | 181 | int |
179 | { | 182 | SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, void *arg) |
180 | return(CRYPTO_set_ex_data(&s->ex_data,idx,arg)); | 183 | { |
181 | } | 184 | return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); |
185 | } | ||
182 | 186 | ||
183 | void *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx) | 187 | void |
184 | { | 188 | *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx) |
185 | return(CRYPTO_get_ex_data(&s->ex_data,idx)); | 189 | { |
186 | } | 190 | return (CRYPTO_get_ex_data(&s->ex_data, idx)); |
191 | } | ||
187 | 192 | ||
188 | SSL_SESSION *SSL_SESSION_new(void) | 193 | SSL_SESSION |
189 | { | 194 | *SSL_SESSION_new(void) |
195 | { | ||
190 | SSL_SESSION *ss; | 196 | SSL_SESSION *ss; |
191 | 197 | ||
192 | ss=(SSL_SESSION *)OPENSSL_malloc(sizeof(SSL_SESSION)); | 198 | ss = (SSL_SESSION *)OPENSSL_malloc(sizeof(SSL_SESSION)); |
193 | if (ss == NULL) | 199 | if (ss == NULL) { |
194 | { | 200 | SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE); |
195 | SSLerr(SSL_F_SSL_SESSION_NEW,ERR_R_MALLOC_FAILURE); | 201 | return (0); |
196 | return(0); | 202 | } |
197 | } | 203 | memset(ss, 0, sizeof(SSL_SESSION)); |
198 | memset(ss,0,sizeof(SSL_SESSION)); | ||
199 | 204 | ||
200 | ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */ | 205 | ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */ |
201 | ss->references=1; | 206 | ss->references = 1; |
202 | ss->timeout=60*5+4; /* 5 minute timeout by default */ | 207 | ss->timeout=60*5+4; /* 5 minute timeout by default */ |
203 | ss->time=(unsigned long)time(NULL); | 208 | ss->time = (unsigned long)time(NULL); |
204 | ss->prev=NULL; | 209 | ss->prev = NULL; |
205 | ss->next=NULL; | 210 | ss->next = NULL; |
206 | ss->compress_meth=0; | 211 | ss->compress_meth = 0; |
207 | #ifndef OPENSSL_NO_TLSEXT | 212 | #ifndef OPENSSL_NO_TLSEXT |
208 | ss->tlsext_hostname = NULL; | 213 | ss->tlsext_hostname = NULL; |
214 | |||
209 | #ifndef OPENSSL_NO_EC | 215 | #ifndef OPENSSL_NO_EC |
210 | ss->tlsext_ecpointformatlist_length = 0; | 216 | ss->tlsext_ecpointformatlist_length = 0; |
211 | ss->tlsext_ecpointformatlist = NULL; | 217 | ss->tlsext_ecpointformatlist = NULL; |
@@ -215,26 +221,28 @@ SSL_SESSION *SSL_SESSION_new(void) | |||
215 | #endif | 221 | #endif |
216 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); | 222 | CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); |
217 | #ifndef OPENSSL_NO_PSK | 223 | #ifndef OPENSSL_NO_PSK |
218 | ss->psk_identity_hint=NULL; | 224 | ss->psk_identity_hint = NULL; |
219 | ss->psk_identity=NULL; | 225 | ss->psk_identity = NULL; |
220 | #endif | 226 | #endif |
221 | #ifndef OPENSSL_NO_SRP | 227 | #ifndef OPENSSL_NO_SRP |
222 | ss->srp_username=NULL; | 228 | ss->srp_username = NULL; |
223 | #endif | 229 | #endif |
224 | return(ss); | 230 | return (ss); |
225 | } | 231 | } |
226 | 232 | ||
227 | const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len) | 233 | const unsigned char |
228 | { | 234 | *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len) |
229 | if(len) | 235 | { |
236 | if (len) | ||
230 | *len = s->session_id_length; | 237 | *len = s->session_id_length; |
231 | return s->session_id; | 238 | return s->session_id; |
232 | } | 239 | } |
233 | 240 | ||
234 | unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s) | 241 | unsigned int |
235 | { | 242 | SSL_SESSION_get_compress_id(const SSL_SESSION *s) |
243 | { | ||
236 | return s->compress_meth; | 244 | return s->compress_meth; |
237 | } | 245 | } |
238 | 246 | ||
239 | /* Even with SSLv2, we have 16 bytes (128 bits) of session ID space. SSLv3/TLSv1 | 247 | /* Even with SSLv2, we have 16 bytes (128 bits) of session ID space. SSLv3/TLSv1 |
240 | * has 32 bytes (256 bits). As such, filling the ID with random gunk repeatedly | 248 | * has 32 bytes (256 bits). As such, filling the ID with random gunk repeatedly |
@@ -246,16 +254,17 @@ unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s) | |||
246 | * store that many sessions is perhaps a more interesting question ... */ | 254 | * store that many sessions is perhaps a more interesting question ... */ |
247 | 255 | ||
248 | #define MAX_SESS_ID_ATTEMPTS 10 | 256 | #define MAX_SESS_ID_ATTEMPTS 10 |
249 | static int def_generate_session_id(const SSL *ssl, unsigned char *id, | 257 | static int |
250 | unsigned int *id_len) | 258 | def_generate_session_id(const SSL *ssl, unsigned char *id, |
259 | unsigned int *id_len) | ||
251 | { | 260 | { |
252 | unsigned int retry = 0; | 261 | unsigned int retry = 0; |
253 | do | 262 | do |
254 | if (RAND_pseudo_bytes(id, *id_len) <= 0) | 263 | if (RAND_pseudo_bytes(id, *id_len) <= 0) |
255 | return 0; | 264 | return 0; |
256 | while(SSL_has_matching_session_id(ssl, id, *id_len) && | 265 | while (SSL_has_matching_session_id(ssl, id, *id_len) && |
257 | (++retry < MAX_SESS_ID_ATTEMPTS)); | 266 | (++retry < MAX_SESS_ID_ATTEMPTS)); |
258 | if(retry < MAX_SESS_ID_ATTEMPTS) | 267 | if (retry < MAX_SESS_ID_ATTEMPTS) |
259 | return 1; | 268 | return 1; |
260 | /* else - woops a session_id match */ | 269 | /* else - woops a session_id match */ |
261 | /* XXX We should also check the external cache -- | 270 | /* XXX We should also check the external cache -- |
@@ -269,120 +278,100 @@ static int def_generate_session_id(const SSL *ssl, unsigned char *id, | |||
269 | return 0; | 278 | return 0; |
270 | } | 279 | } |
271 | 280 | ||
272 | int ssl_get_new_session(SSL *s, int session) | 281 | int |
273 | { | 282 | ssl_get_new_session(SSL *s, int session) |
283 | { | ||
274 | /* This gets used by clients and servers. */ | 284 | /* This gets used by clients and servers. */ |
275 | 285 | ||
276 | unsigned int tmp; | 286 | unsigned int tmp; |
277 | SSL_SESSION *ss=NULL; | 287 | SSL_SESSION *ss = NULL; |
278 | GEN_SESSION_CB cb = def_generate_session_id; | 288 | GEN_SESSION_CB cb = def_generate_session_id; |
279 | 289 | ||
280 | if ((ss=SSL_SESSION_new()) == NULL) return(0); | 290 | if ((ss = SSL_SESSION_new()) == NULL) return (0); |
281 | 291 | ||
282 | /* If the context has a default timeout, use it */ | 292 | /* If the context has a default timeout, use it */ |
283 | if (s->session_ctx->session_timeout == 0) | 293 | if (s->session_ctx->session_timeout == 0) |
284 | ss->timeout=SSL_get_default_timeout(s); | 294 | ss->timeout = SSL_get_default_timeout(s); |
285 | else | 295 | else |
286 | ss->timeout=s->session_ctx->session_timeout; | 296 | ss->timeout = s->session_ctx->session_timeout; |
287 | 297 | ||
288 | if (s->session != NULL) | 298 | if (s->session != NULL) { |
289 | { | ||
290 | SSL_SESSION_free(s->session); | 299 | SSL_SESSION_free(s->session); |
291 | s->session=NULL; | 300 | s->session = NULL; |
292 | } | 301 | } |
293 | 302 | ||
294 | if (session) | 303 | if (session) { |
295 | { | 304 | if (s->version == SSL2_VERSION) { |
296 | if (s->version == SSL2_VERSION) | 305 | ss->ssl_version = SSL2_VERSION; |
297 | { | 306 | ss->session_id_length = SSL2_SSL_SESSION_ID_LENGTH; |
298 | ss->ssl_version=SSL2_VERSION; | 307 | } else if (s->version == SSL3_VERSION) { |
299 | ss->session_id_length=SSL2_SSL_SESSION_ID_LENGTH; | 308 | ss->ssl_version = SSL3_VERSION; |
300 | } | 309 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
301 | else if (s->version == SSL3_VERSION) | 310 | } else if (s->version == TLS1_VERSION) { |
302 | { | 311 | ss->ssl_version = TLS1_VERSION; |
303 | ss->ssl_version=SSL3_VERSION; | 312 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
304 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | 313 | } else if (s->version == TLS1_1_VERSION) { |
305 | } | 314 | ss->ssl_version = TLS1_1_VERSION; |
306 | else if (s->version == TLS1_VERSION) | 315 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
307 | { | 316 | } else if (s->version == TLS1_2_VERSION) { |
308 | ss->ssl_version=TLS1_VERSION; | 317 | ss->ssl_version = TLS1_2_VERSION; |
309 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | 318 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
310 | } | 319 | } else if (s->version == DTLS1_BAD_VER) { |
311 | else if (s->version == TLS1_1_VERSION) | 320 | ss->ssl_version = DTLS1_BAD_VER; |
312 | { | 321 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
313 | ss->ssl_version=TLS1_1_VERSION; | 322 | } else if (s->version == DTLS1_VERSION) { |
314 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | 323 | ss->ssl_version = DTLS1_VERSION; |
315 | } | 324 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
316 | else if (s->version == TLS1_2_VERSION) | 325 | } else { |
317 | { | 326 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, SSL_R_UNSUPPORTED_SSL_VERSION); |
318 | ss->ssl_version=TLS1_2_VERSION; | ||
319 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | ||
320 | } | ||
321 | else if (s->version == DTLS1_BAD_VER) | ||
322 | { | ||
323 | ss->ssl_version=DTLS1_BAD_VER; | ||
324 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | ||
325 | } | ||
326 | else if (s->version == DTLS1_VERSION) | ||
327 | { | ||
328 | ss->ssl_version=DTLS1_VERSION; | ||
329 | ss->session_id_length=SSL3_SSL_SESSION_ID_LENGTH; | ||
330 | } | ||
331 | else | ||
332 | { | ||
333 | SSLerr(SSL_F_SSL_GET_NEW_SESSION,SSL_R_UNSUPPORTED_SSL_VERSION); | ||
334 | SSL_SESSION_free(ss); | 327 | SSL_SESSION_free(ss); |
335 | return(0); | 328 | return (0); |
336 | } | 329 | } |
337 | #ifndef OPENSSL_NO_TLSEXT | 330 | #ifndef OPENSSL_NO_TLSEXT |
338 | /* If RFC4507 ticket use empty session ID */ | 331 | /* If RFC4507 ticket use empty session ID */ |
339 | if (s->tlsext_ticket_expected) | 332 | if (s->tlsext_ticket_expected) { |
340 | { | ||
341 | ss->session_id_length = 0; | 333 | ss->session_id_length = 0; |
342 | goto sess_id_done; | 334 | goto sess_id_done; |
343 | } | 335 | } |
344 | #endif | 336 | #endif |
345 | /* Choose which callback will set the session ID */ | 337 | /* Choose which callback will set the session ID */ |
346 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 338 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
347 | if(s->generate_session_id) | 339 | if (s->generate_session_id) |
348 | cb = s->generate_session_id; | 340 | cb = s->generate_session_id; |
349 | else if(s->session_ctx->generate_session_id) | 341 | else if (s->session_ctx->generate_session_id) |
350 | cb = s->session_ctx->generate_session_id; | 342 | cb = s->session_ctx->generate_session_id; |
351 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 343 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
352 | /* Choose a session ID */ | 344 | /* Choose a session ID */ |
353 | tmp = ss->session_id_length; | 345 | tmp = ss->session_id_length; |
354 | if(!cb(s, ss->session_id, &tmp)) | 346 | if (!cb(s, ss->session_id, &tmp)) { |
355 | { | ||
356 | /* The callback failed */ | 347 | /* The callback failed */ |
357 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, | 348 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, |
358 | SSL_R_SSL_SESSION_ID_CALLBACK_FAILED); | 349 | SSL_R_SSL_SESSION_ID_CALLBACK_FAILED); |
359 | SSL_SESSION_free(ss); | 350 | SSL_SESSION_free(ss); |
360 | return(0); | 351 | return (0); |
361 | } | 352 | } |
362 | /* Don't allow the callback to set the session length to zero. | 353 | /* Don't allow the callback to set the session length to zero. |
363 | * nor set it higher than it was. */ | 354 | * nor set it higher than it was. */ |
364 | if(!tmp || (tmp > ss->session_id_length)) | 355 | if (!tmp || (tmp > ss->session_id_length)) { |
365 | { | ||
366 | /* The callback set an illegal length */ | 356 | /* The callback set an illegal length */ |
367 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, | 357 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, |
368 | SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH); | 358 | SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH); |
369 | SSL_SESSION_free(ss); | 359 | SSL_SESSION_free(ss); |
370 | return(0); | 360 | return (0); |
371 | } | 361 | } |
372 | /* If the session length was shrunk and we're SSLv2, pad it */ | 362 | /* If the session length was shrunk and we're SSLv2, pad it */ |
373 | if((tmp < ss->session_id_length) && (s->version == SSL2_VERSION)) | 363 | if ((tmp < ss->session_id_length) && (s->version == SSL2_VERSION)) |
374 | memset(ss->session_id + tmp, 0, ss->session_id_length - tmp); | 364 | memset(ss->session_id + tmp, 0, ss->session_id_length - tmp); |
375 | else | 365 | else |
376 | ss->session_id_length = tmp; | 366 | ss->session_id_length = tmp; |
377 | /* Finally, check for a conflict */ | 367 | /* Finally, check for a conflict */ |
378 | if(SSL_has_matching_session_id(s, ss->session_id, | 368 | if (SSL_has_matching_session_id(s, ss->session_id, |
379 | ss->session_id_length)) | 369 | ss->session_id_length)) { |
380 | { | ||
381 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, | 370 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, |
382 | SSL_R_SSL_SESSION_ID_CONFLICT); | 371 | SSL_R_SSL_SESSION_ID_CONFLICT); |
383 | SSL_SESSION_free(ss); | 372 | SSL_SESSION_free(ss); |
384 | return(0); | 373 | return (0); |
385 | } | 374 | } |
386 | #ifndef OPENSSL_NO_TLSEXT | 375 | #ifndef OPENSSL_NO_TLSEXT |
387 | sess_id_done: | 376 | sess_id_done: |
388 | if (s->tlsext_hostname) { | 377 | if (s->tlsext_hostname) { |
@@ -391,55 +380,50 @@ int ssl_get_new_session(SSL *s, int session) | |||
391 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); | 380 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); |
392 | SSL_SESSION_free(ss); | 381 | SSL_SESSION_free(ss); |
393 | return 0; | 382 | return 0; |
394 | } | ||
395 | } | 383 | } |
384 | } | ||
396 | #ifndef OPENSSL_NO_EC | 385 | #ifndef OPENSSL_NO_EC |
397 | if (s->tlsext_ecpointformatlist) | 386 | if (s->tlsext_ecpointformatlist) { |
398 | { | 387 | if (ss->tlsext_ecpointformatlist != NULL) |
399 | if (ss->tlsext_ecpointformatlist != NULL) OPENSSL_free(ss->tlsext_ecpointformatlist); | 388 | OPENSSL_free(ss->tlsext_ecpointformatlist); |
400 | if ((ss->tlsext_ecpointformatlist = OPENSSL_malloc(s->tlsext_ecpointformatlist_length)) == NULL) | 389 | if ((ss->tlsext_ecpointformatlist = OPENSSL_malloc(s->tlsext_ecpointformatlist_length)) == NULL) { |
401 | { | ||
402 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); | 390 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); |
403 | SSL_SESSION_free(ss); | 391 | SSL_SESSION_free(ss); |
404 | return 0; | 392 | return 0; |
405 | } | 393 | } |
406 | ss->tlsext_ecpointformatlist_length = s->tlsext_ecpointformatlist_length; | 394 | ss->tlsext_ecpointformatlist_length = s->tlsext_ecpointformatlist_length; |
407 | memcpy(ss->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length); | 395 | memcpy(ss->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length); |
408 | } | 396 | } |
409 | if (s->tlsext_ellipticcurvelist) | 397 | if (s->tlsext_ellipticcurvelist) { |
410 | { | 398 | if (ss->tlsext_ellipticcurvelist != NULL) |
411 | if (ss->tlsext_ellipticcurvelist != NULL) OPENSSL_free(ss->tlsext_ellipticcurvelist); | 399 | OPENSSL_free(ss->tlsext_ellipticcurvelist); |
412 | if ((ss->tlsext_ellipticcurvelist = OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) == NULL) | 400 | if ((ss->tlsext_ellipticcurvelist = OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) == NULL) { |
413 | { | ||
414 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); | 401 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE); |
415 | SSL_SESSION_free(ss); | 402 | SSL_SESSION_free(ss); |
416 | return 0; | 403 | return 0; |
417 | } | 404 | } |
418 | ss->tlsext_ellipticcurvelist_length = s->tlsext_ellipticcurvelist_length; | 405 | ss->tlsext_ellipticcurvelist_length = s->tlsext_ellipticcurvelist_length; |
419 | memcpy(ss->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length); | 406 | memcpy(ss->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length); |
420 | } | 407 | } |
421 | #endif | 408 | #endif |
422 | #endif | 409 | #endif |
423 | } | 410 | } else { |
424 | else | 411 | ss->session_id_length = 0; |
425 | { | 412 | } |
426 | ss->session_id_length=0; | ||
427 | } | ||
428 | 413 | ||
429 | if (s->sid_ctx_length > sizeof ss->sid_ctx) | 414 | if (s->sid_ctx_length > sizeof ss->sid_ctx) { |
430 | { | ||
431 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); | 415 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_INTERNAL_ERROR); |
432 | SSL_SESSION_free(ss); | 416 | SSL_SESSION_free(ss); |
433 | return 0; | 417 | return 0; |
434 | } | 418 | } |
435 | memcpy(ss->sid_ctx,s->sid_ctx,s->sid_ctx_length); | 419 | memcpy(ss->sid_ctx, s->sid_ctx, s->sid_ctx_length); |
436 | ss->sid_ctx_length=s->sid_ctx_length; | 420 | ss->sid_ctx_length = s->sid_ctx_length; |
437 | s->session=ss; | 421 | s->session = ss; |
438 | ss->ssl_version=s->version; | 422 | ss->ssl_version = s->version; |
439 | ss->verify_result = X509_V_OK; | 423 | ss->verify_result = X509_V_OK; |
440 | 424 | ||
441 | return(1); | 425 | return (1); |
442 | } | 426 | } |
443 | 427 | ||
444 | /* ssl_get_prev attempts to find an SSL_SESSION to be used to resume this | 428 | /* ssl_get_prev attempts to find an SSL_SESSION to be used to resume this |
445 | * connection. It is only called by servers. | 429 | * connection. It is only called by servers. |
@@ -460,12 +444,13 @@ int ssl_get_new_session(SSL *s, int session) | |||
460 | * - Both for new and resumed sessions, s->tlsext_ticket_expected is set to 1 | 444 | * - Both for new and resumed sessions, s->tlsext_ticket_expected is set to 1 |
461 | * if the server should issue a new session ticket (to 0 otherwise). | 445 | * if the server should issue a new session ticket (to 0 otherwise). |
462 | */ | 446 | */ |
463 | int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | 447 | int |
464 | const unsigned char *limit) | 448 | ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, |
465 | { | 449 | const unsigned char *limit) |
450 | { | ||
466 | /* This is used only by servers. */ | 451 | /* This is used only by servers. */ |
467 | 452 | ||
468 | SSL_SESSION *ret=NULL; | 453 | SSL_SESSION *ret = NULL; |
469 | int fatal = 0; | 454 | int fatal = 0; |
470 | int try_session_cache = 1; | 455 | int try_session_cache = 1; |
471 | #ifndef OPENSSL_NO_TLSEXT | 456 | #ifndef OPENSSL_NO_TLSEXT |
@@ -480,8 +465,7 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
480 | 465 | ||
481 | #ifndef OPENSSL_NO_TLSEXT | 466 | #ifndef OPENSSL_NO_TLSEXT |
482 | r = tls1_process_ticket(s, session_id, len, limit, &ret); /* sets s->tlsext_ticket_expected */ | 467 | r = tls1_process_ticket(s, session_id, len, limit, &ret); /* sets s->tlsext_ticket_expected */ |
483 | switch (r) | 468 | switch (r) { |
484 | { | ||
485 | case -1: /* Error during processing */ | 469 | case -1: /* Error during processing */ |
486 | fatal = 1; | 470 | fatal = 1; |
487 | goto err; | 471 | goto err; |
@@ -494,39 +478,35 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
494 | break; | 478 | break; |
495 | default: | 479 | default: |
496 | abort(); | 480 | abort(); |
497 | } | 481 | } |
498 | #endif | 482 | #endif |
499 | 483 | ||
500 | if (try_session_cache && | 484 | if (try_session_cache && |
501 | ret == NULL && | 485 | ret == NULL && |
502 | !(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) | 486 | !(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) { |
503 | { | ||
504 | SSL_SESSION data; | 487 | SSL_SESSION data; |
505 | data.ssl_version=s->version; | 488 | data.ssl_version = s->version; |
506 | data.session_id_length=len; | 489 | data.session_id_length = len; |
507 | if (len == 0) | 490 | if (len == 0) |
508 | return 0; | 491 | return 0; |
509 | memcpy(data.session_id,session_id,len); | 492 | memcpy(data.session_id, session_id, len); |
510 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); | 493 | CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX); |
511 | ret=lh_SSL_SESSION_retrieve(s->session_ctx->sessions,&data); | 494 | ret = lh_SSL_SESSION_retrieve(s->session_ctx->sessions, &data); |
512 | if (ret != NULL) | 495 | if (ret != NULL) { |
513 | { | ||
514 | /* don't allow other threads to steal it: */ | 496 | /* don't allow other threads to steal it: */ |
515 | CRYPTO_add(&ret->references,1,CRYPTO_LOCK_SSL_SESSION); | 497 | CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_SSL_SESSION); |
516 | } | 498 | } |
517 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); | 499 | CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX); |
518 | if (ret == NULL) | 500 | if (ret == NULL) |
519 | s->session_ctx->stats.sess_miss++; | 501 | s->session_ctx->stats.sess_miss++; |
520 | } | 502 | } |
521 | 503 | ||
522 | if (try_session_cache && | 504 | if (try_session_cache && |
523 | ret == NULL && | 505 | ret == NULL && |
524 | s->session_ctx->get_session_cb != NULL) | 506 | s->session_ctx->get_session_cb != NULL) { |
525 | { | 507 | int copy = 1; |
526 | int copy=1; | 508 | |
527 | 509 | if ((ret = s->session_ctx->get_session_cb(s, session_id, len, ©))) { | |
528 | if ((ret=s->session_ctx->get_session_cb(s,session_id,len,©))) | ||
529 | { | ||
530 | s->session_ctx->stats.sess_cb_hit++; | 510 | s->session_ctx->stats.sess_cb_hit++; |
531 | 511 | ||
532 | /* Increment reference count now if the session callback | 512 | /* Increment reference count now if the session callback |
@@ -535,16 +515,16 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
535 | * it must handle the reference count itself [i.e. copy == 0], | 515 | * it must handle the reference count itself [i.e. copy == 0], |
536 | * or things won't be thread-safe). */ | 516 | * or things won't be thread-safe). */ |
537 | if (copy) | 517 | if (copy) |
538 | CRYPTO_add(&ret->references,1,CRYPTO_LOCK_SSL_SESSION); | 518 | CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_SSL_SESSION); |
539 | 519 | ||
540 | /* Add the externally cached session to the internal | 520 | /* Add the externally cached session to the internal |
541 | * cache as well if and only if we are supposed to. */ | 521 | * cache as well if and only if we are supposed to. */ |
542 | if(!(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_STORE)) | 522 | if (!(s->session_ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_STORE)) |
543 | /* The following should not return 1, otherwise, | 523 | /* The following should not return 1, otherwise, |
544 | * things are very strange */ | 524 | * things are very strange */ |
545 | SSL_CTX_add_session(s->session_ctx,ret); | 525 | SSL_CTX_add_session(s->session_ctx, ret); |
546 | } | ||
547 | } | 526 | } |
527 | } | ||
548 | 528 | ||
549 | if (ret == NULL) | 529 | if (ret == NULL) |
550 | goto err; | 530 | goto err; |
@@ -552,15 +532,13 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
552 | /* Now ret is non-NULL and we own one of its reference counts. */ | 532 | /* Now ret is non-NULL and we own one of its reference counts. */ |
553 | 533 | ||
554 | if (ret->sid_ctx_length != s->sid_ctx_length | 534 | if (ret->sid_ctx_length != s->sid_ctx_length |
555 | || memcmp(ret->sid_ctx,s->sid_ctx,ret->sid_ctx_length)) | 535 | || memcmp(ret->sid_ctx, s->sid_ctx, ret->sid_ctx_length)) { |
556 | { | ||
557 | /* We have the session requested by the client, but we don't | 536 | /* We have the session requested by the client, but we don't |
558 | * want to use it in this context. */ | 537 | * want to use it in this context. */ |
559 | goto err; /* treat like cache miss */ | 538 | goto err; /* treat like cache miss */ |
560 | } | 539 | } |
561 | 540 | ||
562 | if((s->verify_mode & SSL_VERIFY_PEER) && s->sid_ctx_length == 0) | 541 | if ((s->verify_mode & SSL_VERIFY_PEER) && s->sid_ctx_length == 0) { |
563 | { | ||
564 | /* We can't be sure if this session is being used out of | 542 | /* We can't be sure if this session is being used out of |
565 | * context, which is especially important for SSL_VERIFY_PEER. | 543 | * context, which is especially important for SSL_VERIFY_PEER. |
566 | * The application should have used SSL[_CTX]_set_session_id_context. | 544 | * The application should have used SSL[_CTX]_set_session_id_context. |
@@ -570,87 +548,83 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len, | |||
570 | * applications to effectively disable the session cache by | 548 | * applications to effectively disable the session cache by |
571 | * accident without anyone noticing). | 549 | * accident without anyone noticing). |
572 | */ | 550 | */ |
573 | 551 | ||
574 | SSLerr(SSL_F_SSL_GET_PREV_SESSION,SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED); | 552 | SSLerr(SSL_F_SSL_GET_PREV_SESSION, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED); |
575 | fatal = 1; | 553 | fatal = 1; |
576 | goto err; | 554 | goto err; |
577 | } | 555 | } |
578 | 556 | ||
579 | if (ret->cipher == NULL) | 557 | if (ret->cipher == NULL) { |
580 | { | 558 | unsigned char buf[5], *p; |
581 | unsigned char buf[5],*p; | ||
582 | unsigned long l; | 559 | unsigned long l; |
583 | 560 | ||
584 | p=buf; | 561 | p = buf; |
585 | l=ret->cipher_id; | 562 | l = ret->cipher_id; |
586 | l2n(l,p); | 563 | l2n(l, p); |
587 | if ((ret->ssl_version>>8) >= SSL3_VERSION_MAJOR) | 564 | if ((ret->ssl_version >> 8) >= SSL3_VERSION_MAJOR) |
588 | ret->cipher=ssl_get_cipher_by_char(s,&(buf[2])); | 565 | ret->cipher = ssl_get_cipher_by_char(s, &(buf[2])); |
589 | else | 566 | else |
590 | ret->cipher=ssl_get_cipher_by_char(s,&(buf[1])); | 567 | ret->cipher = ssl_get_cipher_by_char(s, &(buf[1])); |
591 | if (ret->cipher == NULL) | 568 | if (ret->cipher == NULL) |
592 | goto err; | 569 | goto err; |
593 | } | 570 | } |
594 | 571 | ||
595 | if (ret->timeout < (long)(time(NULL) - ret->time)) /* timeout */ | 572 | if (ret->timeout < (long)(time(NULL) - ret->time)) /* timeout */ |
596 | { | 573 | { |
597 | s->session_ctx->stats.sess_timeout++; | 574 | s->session_ctx->stats.sess_timeout++; |
598 | if (try_session_cache) | 575 | if (try_session_cache) { |
599 | { | ||
600 | /* session was from the cache, so remove it */ | 576 | /* session was from the cache, so remove it */ |
601 | SSL_CTX_remove_session(s->session_ctx,ret); | 577 | SSL_CTX_remove_session(s->session_ctx, ret); |
602 | } | ||
603 | goto err; | ||
604 | } | 578 | } |
579 | goto err; | ||
580 | } | ||
605 | 581 | ||
606 | s->session_ctx->stats.sess_hit++; | 582 | s->session_ctx->stats.sess_hit++; |
607 | 583 | ||
608 | if (s->session != NULL) | 584 | if (s->session != NULL) |
609 | SSL_SESSION_free(s->session); | 585 | SSL_SESSION_free(s->session); |
610 | s->session=ret; | 586 | s->session = ret; |
611 | s->verify_result = s->session->verify_result; | 587 | s->verify_result = s->session->verify_result; |
612 | return 1; | 588 | return 1; |
613 | 589 | ||
614 | err: | 590 | err: |
615 | if (ret != NULL) | 591 | if (ret != NULL) { |
616 | { | ||
617 | SSL_SESSION_free(ret); | 592 | SSL_SESSION_free(ret); |
618 | #ifndef OPENSSL_NO_TLSEXT | 593 | #ifndef OPENSSL_NO_TLSEXT |
619 | if (!try_session_cache) | 594 | if (!try_session_cache) { |
620 | { | ||
621 | /* The session was from a ticket, so we should | 595 | /* The session was from a ticket, so we should |
622 | * issue a ticket for the new session */ | 596 | * issue a ticket for the new session */ |
623 | s->tlsext_ticket_expected = 1; | 597 | s->tlsext_ticket_expected = 1; |
624 | } | ||
625 | #endif | ||
626 | } | 598 | } |
599 | #endif | ||
600 | } | ||
627 | if (fatal) | 601 | if (fatal) |
628 | return -1; | 602 | return -1; |
629 | else | 603 | else |
630 | return 0; | 604 | return 0; |
631 | } | 605 | } |
632 | 606 | ||
633 | int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) | 607 | int |
634 | { | 608 | SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) |
635 | int ret=0; | 609 | { |
610 | int ret = 0; | ||
636 | SSL_SESSION *s; | 611 | SSL_SESSION *s; |
637 | 612 | ||
638 | /* add just 1 reference count for the SSL_CTX's session cache | 613 | /* add just 1 reference count for the SSL_CTX's session cache |
639 | * even though it has two ways of access: each session is in a | 614 | * even though it has two ways of access: each session is in a |
640 | * doubly linked list and an lhash */ | 615 | * doubly linked list and an lhash */ |
641 | CRYPTO_add(&c->references,1,CRYPTO_LOCK_SSL_SESSION); | 616 | CRYPTO_add(&c->references, 1, CRYPTO_LOCK_SSL_SESSION); |
642 | /* if session c is in already in cache, we take back the increment later */ | 617 | /* if session c is in already in cache, we take back the increment later */ |
643 | 618 | ||
644 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 619 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
645 | s=lh_SSL_SESSION_insert(ctx->sessions,c); | 620 | s = lh_SSL_SESSION_insert(ctx->sessions, c); |
646 | 621 | ||
647 | /* s != NULL iff we already had a session with the given PID. | 622 | /* s != NULL iff we already had a session with the given PID. |
648 | * In this case, s == c should hold (then we did not really modify | 623 | * In this case, s == c should hold (then we did not really modify |
649 | * ctx->sessions), or we're in trouble. */ | 624 | * ctx->sessions), or we're in trouble. */ |
650 | if (s != NULL && s != c) | 625 | if (s != NULL && s != c) { |
651 | { | ||
652 | /* We *are* in trouble ... */ | 626 | /* We *are* in trouble ... */ |
653 | SSL_SESSION_list_remove(ctx,s); | 627 | SSL_SESSION_list_remove(ctx, s); |
654 | SSL_SESSION_free(s); | 628 | SSL_SESSION_free(s); |
655 | /* ... so pretend the other session did not exist in cache | 629 | /* ... so pretend the other session did not exist in cache |
656 | * (we cannot handle two SSL_SESSION structures with identical | 630 | * (we cannot handle two SSL_SESSION structures with identical |
@@ -658,114 +632,117 @@ int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c) | |||
658 | * two threads concurrently obtain the same session from an external | 632 | * two threads concurrently obtain the same session from an external |
659 | * cache) */ | 633 | * cache) */ |
660 | s = NULL; | 634 | s = NULL; |
661 | } | 635 | } |
662 | 636 | ||
663 | /* Put at the head of the queue unless it is already in the cache */ | 637 | /* Put at the head of the queue unless it is already in the cache */ |
664 | if (s == NULL) | 638 | if (s == NULL) |
665 | SSL_SESSION_list_add(ctx,c); | 639 | SSL_SESSION_list_add(ctx, c); |
666 | 640 | ||
667 | if (s != NULL) | 641 | if (s != NULL) { |
668 | { | ||
669 | /* existing cache entry -- decrement previously incremented reference | 642 | /* existing cache entry -- decrement previously incremented reference |
670 | * count because it already takes into account the cache */ | 643 | * count because it already takes into account the cache */ |
671 | 644 | ||
672 | SSL_SESSION_free(s); /* s == c */ | 645 | SSL_SESSION_free(s); /* s == c */ |
673 | ret=0; | 646 | ret = 0; |
674 | } | 647 | } else { |
675 | else | ||
676 | { | ||
677 | /* new cache entry -- remove old ones if cache has become too large */ | 648 | /* new cache entry -- remove old ones if cache has become too large */ |
678 | |||
679 | ret=1; | ||
680 | 649 | ||
681 | if (SSL_CTX_sess_get_cache_size(ctx) > 0) | 650 | ret = 1; |
682 | { | 651 | |
652 | if (SSL_CTX_sess_get_cache_size(ctx) > 0) { | ||
683 | while (SSL_CTX_sess_number(ctx) > | 653 | while (SSL_CTX_sess_number(ctx) > |
684 | SSL_CTX_sess_get_cache_size(ctx)) | 654 | SSL_CTX_sess_get_cache_size(ctx)) { |
685 | { | ||
686 | if (!remove_session_lock(ctx, | 655 | if (!remove_session_lock(ctx, |
687 | ctx->session_cache_tail, 0)) | 656 | ctx->session_cache_tail, 0)) |
688 | break; | 657 | break; |
689 | else | 658 | else |
690 | ctx->stats.sess_cache_full++; | 659 | ctx->stats.sess_cache_full++; |
691 | } | ||
692 | } | 660 | } |
693 | } | 661 | } |
694 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | ||
695 | return(ret); | ||
696 | } | 662 | } |
663 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | ||
664 | return (ret); | ||
665 | } | ||
697 | 666 | ||
698 | int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c) | 667 | int |
668 | SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c) | ||
699 | { | 669 | { |
700 | return remove_session_lock(ctx, c, 1); | 670 | return remove_session_lock(ctx, c, 1); |
701 | } | 671 | } |
702 | 672 | ||
703 | static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck) | 673 | static int |
704 | { | 674 | remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck) |
675 | { | ||
705 | SSL_SESSION *r; | 676 | SSL_SESSION *r; |
706 | int ret=0; | 677 | int ret = 0; |
707 | 678 | ||
708 | if ((c != NULL) && (c->session_id_length != 0)) | 679 | if ((c != NULL) && (c->session_id_length != 0)) { |
709 | { | 680 | if (lck) |
710 | if(lck) CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 681 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
711 | if ((r = lh_SSL_SESSION_retrieve(ctx->sessions,c)) == c) | 682 | if ((r = lh_SSL_SESSION_retrieve(ctx->sessions, c)) == c) { |
712 | { | 683 | ret = 1; |
713 | ret=1; | 684 | r = lh_SSL_SESSION_delete(ctx->sessions, c); |
714 | r=lh_SSL_SESSION_delete(ctx->sessions,c); | 685 | SSL_SESSION_list_remove(ctx, c); |
715 | SSL_SESSION_list_remove(ctx,c); | 686 | } |
716 | } | ||
717 | 687 | ||
718 | if(lck) CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 688 | if (lck) |
689 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | ||
719 | 690 | ||
720 | if (ret) | 691 | if (ret) { |
721 | { | 692 | r->not_resumable = 1; |
722 | r->not_resumable=1; | ||
723 | if (ctx->remove_session_cb != NULL) | 693 | if (ctx->remove_session_cb != NULL) |
724 | ctx->remove_session_cb(ctx,r); | 694 | ctx->remove_session_cb(ctx, r); |
725 | SSL_SESSION_free(r); | 695 | SSL_SESSION_free(r); |
726 | } | ||
727 | } | 696 | } |
728 | else | 697 | } else |
729 | ret=0; | 698 | ret = 0; |
730 | return(ret); | 699 | return (ret); |
731 | } | 700 | } |
732 | 701 | ||
733 | void SSL_SESSION_free(SSL_SESSION *ss) | 702 | void |
734 | { | 703 | SSL_SESSION_free(SSL_SESSION *ss) |
704 | { | ||
735 | int i; | 705 | int i; |
736 | 706 | ||
737 | if(ss == NULL) | 707 | if (ss == NULL) |
738 | return; | 708 | return; |
739 | 709 | ||
740 | i=CRYPTO_add(&ss->references,-1,CRYPTO_LOCK_SSL_SESSION); | 710 | i = CRYPTO_add(&ss->references, -1, CRYPTO_LOCK_SSL_SESSION); |
741 | #ifdef REF_PRINT | 711 | #ifdef REF_PRINT |
742 | REF_PRINT("SSL_SESSION",ss); | 712 | REF_PRINT("SSL_SESSION", ss); |
743 | #endif | 713 | #endif |
744 | if (i > 0) return; | 714 | if (i > 0) |
715 | return; | ||
745 | #ifdef REF_CHECK | 716 | #ifdef REF_CHECK |
746 | if (i < 0) | 717 | if (i < 0) { |
747 | { | 718 | fprintf(stderr, "SSL_SESSION_free, bad reference count\n"); |
748 | fprintf(stderr,"SSL_SESSION_free, bad reference count\n"); | ||
749 | abort(); /* ok */ | 719 | abort(); /* ok */ |
750 | } | 720 | } |
751 | #endif | 721 | #endif |
752 | 722 | ||
753 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); | 723 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data); |
754 | 724 | ||
755 | OPENSSL_cleanse(ss->key_arg,sizeof ss->key_arg); | 725 | OPENSSL_cleanse(ss->key_arg, sizeof ss->key_arg); |
756 | OPENSSL_cleanse(ss->master_key,sizeof ss->master_key); | 726 | OPENSSL_cleanse(ss->master_key, sizeof ss->master_key); |
757 | OPENSSL_cleanse(ss->session_id,sizeof ss->session_id); | 727 | OPENSSL_cleanse(ss->session_id, sizeof ss->session_id); |
758 | if (ss->sess_cert != NULL) ssl_sess_cert_free(ss->sess_cert); | 728 | if (ss->sess_cert != NULL) |
759 | if (ss->peer != NULL) X509_free(ss->peer); | 729 | ssl_sess_cert_free(ss->sess_cert); |
760 | if (ss->ciphers != NULL) sk_SSL_CIPHER_free(ss->ciphers); | 730 | if (ss->peer != NULL) |
731 | X509_free(ss->peer); | ||
732 | if (ss->ciphers != NULL) | ||
733 | sk_SSL_CIPHER_free(ss->ciphers); | ||
761 | #ifndef OPENSSL_NO_TLSEXT | 734 | #ifndef OPENSSL_NO_TLSEXT |
762 | if (ss->tlsext_hostname != NULL) OPENSSL_free(ss->tlsext_hostname); | 735 | if (ss->tlsext_hostname != NULL) |
763 | if (ss->tlsext_tick != NULL) OPENSSL_free(ss->tlsext_tick); | 736 | OPENSSL_free(ss->tlsext_hostname); |
737 | if (ss->tlsext_tick != NULL) | ||
738 | OPENSSL_free(ss->tlsext_tick); | ||
764 | #ifndef OPENSSL_NO_EC | 739 | #ifndef OPENSSL_NO_EC |
765 | ss->tlsext_ecpointformatlist_length = 0; | 740 | ss->tlsext_ecpointformatlist_length = 0; |
766 | if (ss->tlsext_ecpointformatlist != NULL) OPENSSL_free(ss->tlsext_ecpointformatlist); | 741 | if (ss->tlsext_ecpointformatlist != NULL) |
742 | OPENSSL_free(ss->tlsext_ecpointformatlist); | ||
767 | ss->tlsext_ellipticcurvelist_length = 0; | 743 | ss->tlsext_ellipticcurvelist_length = 0; |
768 | if (ss->tlsext_ellipticcurvelist != NULL) OPENSSL_free(ss->tlsext_ellipticcurvelist); | 744 | if (ss->tlsext_ellipticcurvelist != NULL) |
745 | OPENSSL_free(ss->tlsext_ellipticcurvelist); | ||
769 | #endif /* OPENSSL_NO_EC */ | 746 | #endif /* OPENSSL_NO_EC */ |
770 | #endif | 747 | #endif |
771 | #ifndef OPENSSL_NO_PSK | 748 | #ifndef OPENSSL_NO_PSK |
@@ -778,382 +755,389 @@ void SSL_SESSION_free(SSL_SESSION *ss) | |||
778 | if (ss->srp_username != NULL) | 755 | if (ss->srp_username != NULL) |
779 | OPENSSL_free(ss->srp_username); | 756 | OPENSSL_free(ss->srp_username); |
780 | #endif | 757 | #endif |
781 | OPENSSL_cleanse(ss,sizeof(*ss)); | 758 | OPENSSL_cleanse(ss, sizeof(*ss)); |
782 | OPENSSL_free(ss); | 759 | OPENSSL_free(ss); |
783 | } | 760 | } |
784 | 761 | ||
785 | int SSL_set_session(SSL *s, SSL_SESSION *session) | 762 | int |
786 | { | 763 | SSL_set_session(SSL *s, SSL_SESSION *session) |
787 | int ret=0; | 764 | { |
765 | int ret = 0; | ||
788 | const SSL_METHOD *meth; | 766 | const SSL_METHOD *meth; |
789 | 767 | ||
790 | if (session != NULL) | 768 | if (session != NULL) { |
791 | { | 769 | meth = s->ctx->method->get_ssl_method(session->ssl_version); |
792 | meth=s->ctx->method->get_ssl_method(session->ssl_version); | ||
793 | if (meth == NULL) | 770 | if (meth == NULL) |
794 | meth=s->method->get_ssl_method(session->ssl_version); | 771 | meth = s->method->get_ssl_method(session->ssl_version); |
795 | if (meth == NULL) | 772 | if (meth == NULL) { |
796 | { | 773 | SSLerr(SSL_F_SSL_SET_SESSION, SSL_R_UNABLE_TO_FIND_SSL_METHOD); |
797 | SSLerr(SSL_F_SSL_SET_SESSION,SSL_R_UNABLE_TO_FIND_SSL_METHOD); | 774 | return (0); |
798 | return(0); | 775 | } |
799 | } | ||
800 | 776 | ||
801 | if (meth != s->method) | 777 | if (meth != s->method) { |
802 | { | 778 | if (!SSL_set_ssl_method(s, meth)) |
803 | if (!SSL_set_ssl_method(s,meth)) | 779 | return (0); |
804 | return(0); | 780 | } |
805 | } | ||
806 | 781 | ||
807 | #ifndef OPENSSL_NO_KRB5 | 782 | #ifndef OPENSSL_NO_KRB5 |
808 | if (s->kssl_ctx && !s->kssl_ctx->client_princ && | 783 | if (s->kssl_ctx && !s->kssl_ctx->client_princ && |
809 | session->krb5_client_princ_len > 0) | 784 | session->krb5_client_princ_len > 0) { |
810 | { | 785 | s->kssl_ctx->client_princ = (char *)OPENSSL_malloc(session->krb5_client_princ_len + 1); |
811 | s->kssl_ctx->client_princ = (char *)OPENSSL_malloc(session->krb5_client_princ_len + 1); | 786 | memcpy(s->kssl_ctx->client_princ, session->krb5_client_princ, |
812 | memcpy(s->kssl_ctx->client_princ,session->krb5_client_princ, | 787 | session->krb5_client_princ_len); |
813 | session->krb5_client_princ_len); | 788 | s->kssl_ctx->client_princ[session->krb5_client_princ_len] = '\0'; |
814 | s->kssl_ctx->client_princ[session->krb5_client_princ_len] = '\0'; | 789 | } |
815 | } | ||
816 | #endif /* OPENSSL_NO_KRB5 */ | 790 | #endif /* OPENSSL_NO_KRB5 */ |
817 | 791 | ||
818 | /* CRYPTO_w_lock(CRYPTO_LOCK_SSL);*/ | 792 | /* CRYPTO_w_lock(CRYPTO_LOCK_SSL);*/ |
819 | CRYPTO_add(&session->references,1,CRYPTO_LOCK_SSL_SESSION); | 793 | CRYPTO_add(&session->references, 1, CRYPTO_LOCK_SSL_SESSION); |
820 | if (s->session != NULL) | 794 | if (s->session != NULL) |
821 | SSL_SESSION_free(s->session); | 795 | SSL_SESSION_free(s->session); |
822 | s->session=session; | 796 | s->session = session; |
823 | s->verify_result = s->session->verify_result; | 797 | s->verify_result = s->session->verify_result; |
824 | /* CRYPTO_w_unlock(CRYPTO_LOCK_SSL);*/ | 798 | /* CRYPTO_w_unlock(CRYPTO_LOCK_SSL);*/ |
825 | ret=1; | 799 | ret = 1; |
826 | } | 800 | } else { |
827 | else | 801 | if (s->session != NULL) { |
828 | { | ||
829 | if (s->session != NULL) | ||
830 | { | ||
831 | SSL_SESSION_free(s->session); | 802 | SSL_SESSION_free(s->session); |
832 | s->session=NULL; | 803 | s->session = NULL; |
833 | } | 804 | } |
834 | 805 | ||
835 | meth=s->ctx->method; | 806 | meth = s->ctx->method; |
836 | if (meth != s->method) | 807 | if (meth != s->method) { |
837 | { | 808 | if (!SSL_set_ssl_method(s, meth)) |
838 | if (!SSL_set_ssl_method(s,meth)) | 809 | return (0); |
839 | return(0); | ||
840 | } | ||
841 | ret=1; | ||
842 | } | 810 | } |
843 | return(ret); | 811 | ret = 1; |
844 | } | 812 | } |
813 | return (ret); | ||
814 | } | ||
845 | 815 | ||
846 | long SSL_SESSION_set_timeout(SSL_SESSION *s, long t) | 816 | long |
847 | { | 817 | SSL_SESSION_set_timeout(SSL_SESSION *s, long t) |
848 | if (s == NULL) return(0); | 818 | { |
849 | s->timeout=t; | 819 | if (s == NULL) |
850 | return(1); | 820 | return (0); |
851 | } | 821 | s->timeout = t; |
822 | return (1); | ||
823 | } | ||
852 | 824 | ||
853 | long SSL_SESSION_get_timeout(const SSL_SESSION *s) | 825 | long |
854 | { | 826 | SSL_SESSION_get_timeout(const SSL_SESSION *s) |
855 | if (s == NULL) return(0); | 827 | { |
856 | return(s->timeout); | 828 | if (s == NULL) |
857 | } | 829 | return (0); |
830 | return (s->timeout); | ||
831 | } | ||
858 | 832 | ||
859 | long SSL_SESSION_get_time(const SSL_SESSION *s) | 833 | long |
860 | { | 834 | SSL_SESSION_get_time(const SSL_SESSION *s) |
861 | if (s == NULL) return(0); | 835 | { |
862 | return(s->time); | 836 | if (s == NULL) |
863 | } | 837 | return (0); |
838 | return (s->time); | ||
839 | } | ||
864 | 840 | ||
865 | long SSL_SESSION_set_time(SSL_SESSION *s, long t) | 841 | long |
866 | { | 842 | SSL_SESSION_set_time(SSL_SESSION *s, long t) |
867 | if (s == NULL) return(0); | 843 | { |
868 | s->time=t; | 844 | if (s == NULL) |
869 | return(t); | 845 | return (0); |
870 | } | 846 | s->time = t; |
847 | return (t); | ||
848 | } | ||
871 | 849 | ||
872 | X509 *SSL_SESSION_get0_peer(SSL_SESSION *s) | 850 | X509 |
873 | { | 851 | *SSL_SESSION_get0_peer(SSL_SESSION *s) |
852 | { | ||
874 | return s->peer; | 853 | return s->peer; |
875 | } | 854 | } |
876 | 855 | ||
877 | int SSL_SESSION_set1_id_context(SSL_SESSION *s,const unsigned char *sid_ctx, | 856 | int |
878 | unsigned int sid_ctx_len) | 857 | SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, |
879 | { | 858 | unsigned int sid_ctx_len) |
880 | if(sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) | 859 | { |
881 | { | 860 | if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) { |
882 | SSLerr(SSL_F_SSL_SESSION_SET1_ID_CONTEXT,SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); | 861 | SSLerr(SSL_F_SSL_SESSION_SET1_ID_CONTEXT, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); |
883 | return 0; | 862 | return 0; |
884 | } | 863 | } |
885 | s->sid_ctx_length=sid_ctx_len; | 864 | s->sid_ctx_length = sid_ctx_len; |
886 | memcpy(s->sid_ctx,sid_ctx,sid_ctx_len); | 865 | memcpy(s->sid_ctx, sid_ctx, sid_ctx_len); |
887 | 866 | ||
888 | return 1; | 867 | return 1; |
889 | } | 868 | } |
890 | 869 | ||
891 | long SSL_CTX_set_timeout(SSL_CTX *s, long t) | 870 | long |
892 | { | 871 | SSL_CTX_set_timeout(SSL_CTX *s, long t) |
872 | { | ||
893 | long l; | 873 | long l; |
894 | if (s == NULL) return(0); | 874 | if (s == NULL) |
895 | l=s->session_timeout; | 875 | return (0); |
896 | s->session_timeout=t; | 876 | l = s->session_timeout; |
897 | return(l); | 877 | s->session_timeout = t; |
898 | } | 878 | return (l); |
879 | } | ||
899 | 880 | ||
900 | long SSL_CTX_get_timeout(const SSL_CTX *s) | 881 | long |
901 | { | 882 | SSL_CTX_get_timeout(const SSL_CTX *s) |
902 | if (s == NULL) return(0); | 883 | { |
903 | return(s->session_timeout); | 884 | if (s == NULL) |
904 | } | 885 | return (0); |
886 | return (s->session_timeout); | ||
887 | } | ||
905 | 888 | ||
906 | #ifndef OPENSSL_NO_TLSEXT | 889 | #ifndef OPENSSL_NO_TLSEXT |
907 | int SSL_set_session_secret_cb(SSL *s, int (*tls_session_secret_cb)(SSL *s, void *secret, int *secret_len, | 890 | int |
908 | STACK_OF(SSL_CIPHER) *peer_ciphers, SSL_CIPHER **cipher, void *arg), void *arg) | 891 | SSL_set_session_secret_cb(SSL *s, int (*tls_session_secret_cb)(SSL *s, void *secret, int *secret_len, |
909 | { | 892 | STACK_OF(SSL_CIPHER) *peer_ciphers, SSL_CIPHER **cipher, void *arg), void *arg) |
910 | if (s == NULL) return(0); | 893 | { |
894 | if (s == NULL) | ||
895 | return (0); | ||
911 | s->tls_session_secret_cb = tls_session_secret_cb; | 896 | s->tls_session_secret_cb = tls_session_secret_cb; |
912 | s->tls_session_secret_cb_arg = arg; | 897 | s->tls_session_secret_cb_arg = arg; |
913 | return(1); | 898 | return (1); |
914 | } | 899 | } |
915 | 900 | ||
916 | int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, | 901 | int |
917 | void *arg) | 902 | SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, |
918 | { | 903 | void *arg) |
919 | if (s == NULL) return(0); | 904 | { |
905 | if (s == NULL) | ||
906 | return (0); | ||
920 | s->tls_session_ticket_ext_cb = cb; | 907 | s->tls_session_ticket_ext_cb = cb; |
921 | s->tls_session_ticket_ext_cb_arg = arg; | 908 | s->tls_session_ticket_ext_cb_arg = arg; |
922 | return(1); | 909 | return (1); |
923 | } | 910 | } |
924 | 911 | ||
925 | int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len) | 912 | int |
926 | { | 913 | SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len) |
927 | if (s->version >= TLS1_VERSION) | 914 | { |
928 | { | 915 | if (s->version >= TLS1_VERSION) { |
929 | if (s->tlsext_session_ticket) | 916 | if (s->tlsext_session_ticket) { |
930 | { | ||
931 | OPENSSL_free(s->tlsext_session_ticket); | 917 | OPENSSL_free(s->tlsext_session_ticket); |
932 | s->tlsext_session_ticket = NULL; | 918 | s->tlsext_session_ticket = NULL; |
933 | } | 919 | } |
934 | 920 | ||
935 | s->tlsext_session_ticket = OPENSSL_malloc(sizeof(TLS_SESSION_TICKET_EXT) + ext_len); | 921 | s->tlsext_session_ticket = OPENSSL_malloc(sizeof(TLS_SESSION_TICKET_EXT) + ext_len); |
936 | if (!s->tlsext_session_ticket) | 922 | if (!s->tlsext_session_ticket) { |
937 | { | ||
938 | SSLerr(SSL_F_SSL_SET_SESSION_TICKET_EXT, ERR_R_MALLOC_FAILURE); | 923 | SSLerr(SSL_F_SSL_SET_SESSION_TICKET_EXT, ERR_R_MALLOC_FAILURE); |
939 | return 0; | 924 | return 0; |
940 | } | 925 | } |
941 | 926 | ||
942 | if (ext_data) | 927 | if (ext_data) { |
943 | { | ||
944 | s->tlsext_session_ticket->length = ext_len; | 928 | s->tlsext_session_ticket->length = ext_len; |
945 | s->tlsext_session_ticket->data = s->tlsext_session_ticket + 1; | 929 | s->tlsext_session_ticket->data = s->tlsext_session_ticket + 1; |
946 | memcpy(s->tlsext_session_ticket->data, ext_data, ext_len); | 930 | memcpy(s->tlsext_session_ticket->data, ext_data, ext_len); |
947 | } | 931 | } else { |
948 | else | ||
949 | { | ||
950 | s->tlsext_session_ticket->length = 0; | 932 | s->tlsext_session_ticket->length = 0; |
951 | s->tlsext_session_ticket->data = NULL; | 933 | s->tlsext_session_ticket->data = NULL; |
952 | } | 934 | } |
953 | 935 | ||
954 | return 1; | 936 | return 1; |
955 | } | 937 | } |
956 | 938 | ||
957 | return 0; | 939 | return 0; |
958 | } | 940 | } |
959 | #endif /* OPENSSL_NO_TLSEXT */ | 941 | #endif /* OPENSSL_NO_TLSEXT */ |
960 | 942 | ||
961 | typedef struct timeout_param_st | 943 | typedef struct timeout_param_st { |
962 | { | ||
963 | SSL_CTX *ctx; | 944 | SSL_CTX *ctx; |
964 | long time; | 945 | long time; |
965 | LHASH_OF(SSL_SESSION) *cache; | 946 | LHASH_OF(SSL_SESSION) *cache; |
966 | } TIMEOUT_PARAM; | 947 | } TIMEOUT_PARAM; |
967 | 948 | ||
968 | static void timeout_doall_arg(SSL_SESSION *s, TIMEOUT_PARAM *p) | 949 | static void |
969 | { | 950 | timeout_doall_arg(SSL_SESSION *s, TIMEOUT_PARAM *p) |
951 | { | ||
970 | if ((p->time == 0) || (p->time > (s->time+s->timeout))) /* timeout */ | 952 | if ((p->time == 0) || (p->time > (s->time+s->timeout))) /* timeout */ |
971 | { | 953 | { |
972 | /* The reason we don't call SSL_CTX_remove_session() is to | 954 | /* The reason we don't call SSL_CTX_remove_session() is to |
973 | * save on locking overhead */ | 955 | * save on locking overhead */ |
974 | (void)lh_SSL_SESSION_delete(p->cache,s); | 956 | (void)lh_SSL_SESSION_delete(p->cache, s); |
975 | SSL_SESSION_list_remove(p->ctx,s); | 957 | SSL_SESSION_list_remove(p->ctx, s); |
976 | s->not_resumable=1; | 958 | s->not_resumable = 1; |
977 | if (p->ctx->remove_session_cb != NULL) | 959 | if (p->ctx->remove_session_cb != NULL) |
978 | p->ctx->remove_session_cb(p->ctx,s); | 960 | p->ctx->remove_session_cb(p->ctx, s); |
979 | SSL_SESSION_free(s); | 961 | SSL_SESSION_free(s); |
980 | } | ||
981 | } | 962 | } |
963 | } | ||
982 | 964 | ||
983 | static IMPLEMENT_LHASH_DOALL_ARG_FN(timeout, SSL_SESSION, TIMEOUT_PARAM) | 965 | static |
966 | IMPLEMENT_LHASH_DOALL_ARG_FN(timeout, SSL_SESSION, TIMEOUT_PARAM) | ||
984 | 967 | ||
985 | void SSL_CTX_flush_sessions(SSL_CTX *s, long t) | 968 | void |
986 | { | 969 | SSL_CTX_flush_sessions(SSL_CTX *s, long t) |
970 | { | ||
987 | unsigned long i; | 971 | unsigned long i; |
988 | TIMEOUT_PARAM tp; | 972 | TIMEOUT_PARAM tp; |
989 | 973 | ||
990 | tp.ctx=s; | 974 | tp.ctx = s; |
991 | tp.cache=s->sessions; | 975 | tp.cache = s->sessions; |
992 | if (tp.cache == NULL) return; | 976 | if (tp.cache == NULL) |
993 | tp.time=t; | 977 | return; |
978 | tp.time = t; | ||
994 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); | 979 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); |
995 | i=CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load; | 980 | i = CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load; |
996 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load=0; | 981 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load = 0; |
997 | lh_SSL_SESSION_doall_arg(tp.cache, LHASH_DOALL_ARG_FN(timeout), | 982 | lh_SSL_SESSION_doall_arg(tp.cache, LHASH_DOALL_ARG_FN(timeout), |
998 | TIMEOUT_PARAM, &tp); | 983 | TIMEOUT_PARAM, &tp); |
999 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load=i; | 984 | CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load = i; |
1000 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); | 985 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX); |
1001 | } | 986 | } |
1002 | 987 | ||
1003 | int ssl_clear_bad_session(SSL *s) | 988 | int |
1004 | { | 989 | ssl_clear_bad_session(SSL *s) |
1005 | if ( (s->session != NULL) && | 990 | { |
991 | if ((s->session != NULL) && | ||
1006 | !(s->shutdown & SSL_SENT_SHUTDOWN) && | 992 | !(s->shutdown & SSL_SENT_SHUTDOWN) && |
1007 | !(SSL_in_init(s) || SSL_in_before(s))) | 993 | !(SSL_in_init(s) || SSL_in_before(s))) { |
1008 | { | 994 | SSL_CTX_remove_session(s->ctx, s->session); |
1009 | SSL_CTX_remove_session(s->ctx,s->session); | 995 | return (1); |
1010 | return(1); | 996 | } else |
1011 | } | 997 | return (0); |
1012 | else | 998 | } |
1013 | return(0); | ||
1014 | } | ||
1015 | 999 | ||
1016 | /* locked by SSL_CTX in the calling function */ | 1000 | /* locked by SSL_CTX in the calling function */ |
1017 | static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s) | 1001 | static void |
1018 | { | 1002 | SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s) |
1019 | if ((s->next == NULL) || (s->prev == NULL)) return; | 1003 | { |
1004 | if ((s->next == NULL) | ||
1005 | || (s->prev == NULL)) return; | ||
1020 | 1006 | ||
1021 | if (s->next == (SSL_SESSION *)&(ctx->session_cache_tail)) | 1007 | if (s->next == (SSL_SESSION *)&(ctx->session_cache_tail)) |
1022 | { /* last element in list */ | 1008 | { /* last element in list */ |
1023 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) | 1009 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) |
1024 | { /* only one element in list */ | 1010 | { /* only one element in list */ |
1025 | ctx->session_cache_head=NULL; | 1011 | ctx->session_cache_head = NULL; |
1026 | ctx->session_cache_tail=NULL; | 1012 | ctx->session_cache_tail = NULL; |
1027 | } | 1013 | } else { |
1028 | else | 1014 | ctx->session_cache_tail = s->prev; |
1029 | { | 1015 | s->prev->next = (SSL_SESSION *)&(ctx->session_cache_tail); |
1030 | ctx->session_cache_tail=s->prev; | ||
1031 | s->prev->next=(SSL_SESSION *)&(ctx->session_cache_tail); | ||
1032 | } | ||
1033 | } | 1016 | } |
1034 | else | 1017 | } else { |
1035 | { | ||
1036 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) | 1018 | if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) |
1037 | { /* first element in list */ | 1019 | { /* first element in list */ |
1038 | ctx->session_cache_head=s->next; | 1020 | ctx->session_cache_head = s->next; |
1039 | s->next->prev=(SSL_SESSION *)&(ctx->session_cache_head); | 1021 | s->next->prev = (SSL_SESSION *)&(ctx->session_cache_head); |
1040 | } | 1022 | } else |
1041 | else | 1023 | { /* middle of list */ |
1042 | { /* middle of list */ | 1024 | s->next->prev = s->prev; |
1043 | s->next->prev=s->prev; | 1025 | s->prev->next = s->next; |
1044 | s->prev->next=s->next; | ||
1045 | } | ||
1046 | } | 1026 | } |
1047 | s->prev=s->next=NULL; | ||
1048 | } | 1027 | } |
1028 | s->prev = s->next = NULL; | ||
1029 | } | ||
1049 | 1030 | ||
1050 | static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s) | 1031 | static void |
1051 | { | 1032 | SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s) |
1033 | { | ||
1052 | if ((s->next != NULL) && (s->prev != NULL)) | 1034 | if ((s->next != NULL) && (s->prev != NULL)) |
1053 | SSL_SESSION_list_remove(ctx,s); | 1035 | SSL_SESSION_list_remove(ctx, s); |
1054 | 1036 | ||
1055 | if (ctx->session_cache_head == NULL) | 1037 | if (ctx->session_cache_head == NULL) { |
1056 | { | 1038 | ctx->session_cache_head = s; |
1057 | ctx->session_cache_head=s; | 1039 | ctx->session_cache_tail = s; |
1058 | ctx->session_cache_tail=s; | 1040 | s->prev = (SSL_SESSION *)&(ctx->session_cache_head); |
1059 | s->prev=(SSL_SESSION *)&(ctx->session_cache_head); | 1041 | s->next = (SSL_SESSION *)&(ctx->session_cache_tail); |
1060 | s->next=(SSL_SESSION *)&(ctx->session_cache_tail); | 1042 | } else { |
1061 | } | 1043 | s->next = ctx->session_cache_head; |
1062 | else | 1044 | s->next->prev = s; |
1063 | { | 1045 | s->prev = (SSL_SESSION *)&(ctx->session_cache_head); |
1064 | s->next=ctx->session_cache_head; | 1046 | ctx->session_cache_head = s; |
1065 | s->next->prev=s; | ||
1066 | s->prev=(SSL_SESSION *)&(ctx->session_cache_head); | ||
1067 | ctx->session_cache_head=s; | ||
1068 | } | ||
1069 | } | 1047 | } |
1048 | } | ||
1070 | 1049 | ||
1071 | void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, | 1050 | void |
1072 | int (*cb)(struct ssl_st *ssl,SSL_SESSION *sess)) | 1051 | SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, |
1073 | { | 1052 | int (*cb)(struct ssl_st *ssl, SSL_SESSION *sess)) { |
1074 | ctx->new_session_cb=cb; | 1053 | ctx->new_session_cb = cb; |
1075 | } | 1054 | } |
1076 | 1055 | ||
1077 | int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess) | 1056 | int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess) |
1078 | { | 1057 | { |
1079 | return ctx->new_session_cb; | 1058 | return ctx->new_session_cb; |
1080 | } | 1059 | } |
1081 | 1060 | ||
1082 | void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, | 1061 | void |
1083 | void (*cb)(SSL_CTX *ctx,SSL_SESSION *sess)) | 1062 | SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, |
1084 | { | 1063 | void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess)) |
1085 | ctx->remove_session_cb=cb; | 1064 | { |
1086 | } | 1065 | ctx->remove_session_cb = cb; |
1066 | } | ||
1087 | 1067 | ||
1088 | void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx,SSL_SESSION *sess) | 1068 | void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx, SSL_SESSION *sess) |
1089 | { | 1069 | { |
1090 | return ctx->remove_session_cb; | 1070 | return ctx->remove_session_cb; |
1091 | } | 1071 | } |
1092 | 1072 | ||
1093 | void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, | 1073 | void |
1094 | SSL_SESSION *(*cb)(struct ssl_st *ssl, | 1074 | SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, |
1095 | unsigned char *data,int len,int *copy)) | 1075 | SSL_SESSION *(*cb)(struct ssl_st *ssl, |
1096 | { | 1076 | unsigned char *data, int len, int *copy)) |
1097 | ctx->get_session_cb=cb; | 1077 | { |
1098 | } | 1078 | ctx->get_session_cb = cb; |
1079 | } | ||
1099 | 1080 | ||
1100 | SSL_SESSION * (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, | 1081 | SSL_SESSION * (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, |
1101 | unsigned char *data,int len,int *copy) | 1082 | unsigned char *data, int len, int *copy) |
1102 | { | 1083 | { |
1103 | return ctx->get_session_cb; | 1084 | return ctx->get_session_cb; |
1104 | } | 1085 | } |
1105 | 1086 | ||
1106 | void SSL_CTX_set_info_callback(SSL_CTX *ctx, | 1087 | void |
1107 | void (*cb)(const SSL *ssl,int type,int val)) | 1088 | SSL_CTX_set_info_callback(SSL_CTX *ctx, |
1108 | { | 1089 | void (*cb)(const SSL *ssl, int type, int val)) |
1109 | ctx->info_callback=cb; | 1090 | { |
1110 | } | 1091 | ctx->info_callback = cb; |
1092 | } | ||
1111 | 1093 | ||
1112 | void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val) | 1094 | void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl, int type, int val) |
1113 | { | 1095 | { |
1114 | return ctx->info_callback; | 1096 | return ctx->info_callback; |
1115 | } | 1097 | } |
1116 | 1098 | ||
1117 | void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, | 1099 | void |
1118 | int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)) | 1100 | SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, |
1119 | { | 1101 | int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)) |
1120 | ctx->client_cert_cb=cb; | 1102 | { |
1121 | } | 1103 | ctx->client_cert_cb = cb; |
1104 | } | ||
1122 | 1105 | ||
1123 | int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509 , EVP_PKEY **pkey) | 1106 | int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509 , EVP_PKEY **pkey) |
1124 | { | 1107 | { |
1125 | return ctx->client_cert_cb; | 1108 | return ctx->client_cert_cb; |
1126 | } | 1109 | } |
1127 | 1110 | ||
1128 | #ifndef OPENSSL_NO_ENGINE | 1111 | #ifndef OPENSSL_NO_ENGINE |
1129 | int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e) | 1112 | int |
1130 | { | 1113 | SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e) |
1131 | if (!ENGINE_init(e)) | 1114 | { |
1132 | { | 1115 | if (!ENGINE_init(e)) { |
1133 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, ERR_R_ENGINE_LIB); | 1116 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, ERR_R_ENGINE_LIB); |
1134 | return 0; | 1117 | return 0; |
1135 | } | 1118 | } |
1136 | if(!ENGINE_get_ssl_client_cert_function(e)) | 1119 | if (!ENGINE_get_ssl_client_cert_function(e)) { |
1137 | { | ||
1138 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, SSL_R_NO_CLIENT_CERT_METHOD); | 1120 | SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, SSL_R_NO_CLIENT_CERT_METHOD); |
1139 | ENGINE_finish(e); | 1121 | ENGINE_finish(e); |
1140 | return 0; | 1122 | return 0; |
1141 | } | 1123 | } |
1142 | ctx->client_cert_engine = e; | 1124 | ctx->client_cert_engine = e; |
1143 | return 1; | 1125 | return 1; |
1144 | } | 1126 | } |
1145 | #endif | 1127 | #endif |
1146 | 1128 | ||
1147 | void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, | 1129 | void |
1148 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)) | 1130 | SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, |
1149 | { | 1131 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)) |
1150 | ctx->app_gen_cookie_cb=cb; | 1132 | { |
1151 | } | 1133 | ctx->app_gen_cookie_cb = cb; |
1134 | } | ||
1152 | 1135 | ||
1153 | void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, | 1136 | void |
1154 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)) | 1137 | SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, |
1155 | { | 1138 | int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len)) |
1156 | ctx->app_verify_cookie_cb=cb; | 1139 | { |
1157 | } | 1140 | ctx->app_verify_cookie_cb = cb; |
1141 | } | ||
1158 | 1142 | ||
1159 | IMPLEMENT_PEM_rw(SSL_SESSION, SSL_SESSION, PEM_STRING_SSL_SESSION, SSL_SESSION) | 1143 | IMPLEMENT_PEM_rw(SSL_SESSION, SSL_SESSION, PEM_STRING_SSL_SESSION, SSL_SESSION) |
diff --git a/src/lib/libssl/ssl_stat.c b/src/lib/libssl/ssl_stat.c index 144b81e55f..3d9371cdd7 100644 --- a/src/lib/libssl/ssl_stat.c +++ b/src/lib/libssl/ssl_stat.c | |||
@@ -85,311 +85,533 @@ | |||
85 | #include <stdio.h> | 85 | #include <stdio.h> |
86 | #include "ssl_locl.h" | 86 | #include "ssl_locl.h" |
87 | 87 | ||
88 | const char *SSL_state_string_long(const SSL *s) | 88 | const char |
89 | { | 89 | *SSL_state_string_long(const SSL *s) |
90 | { | ||
90 | const char *str; | 91 | const char *str; |
91 | 92 | ||
92 | switch (s->state) | 93 | switch (s->state) { |
93 | { | 94 | case SSL_ST_BEFORE: |
94 | case SSL_ST_BEFORE: str="before SSL initialization"; break; | 95 | str="before SSL initialization"; break; |
95 | case SSL_ST_ACCEPT: str="before accept initialization"; break; | 96 | case SSL_ST_ACCEPT: |
96 | case SSL_ST_CONNECT: str="before connect initialization"; break; | 97 | str="before accept initialization"; break; |
97 | case SSL_ST_OK: str="SSL negotiation finished successfully"; break; | 98 | case SSL_ST_CONNECT: |
98 | case SSL_ST_RENEGOTIATE: str="SSL renegotiate ciphers"; break; | 99 | str="before connect initialization"; break; |
99 | case SSL_ST_BEFORE|SSL_ST_CONNECT: str="before/connect initialization"; break; | 100 | case SSL_ST_OK: |
100 | case SSL_ST_OK|SSL_ST_CONNECT: str="ok/connect SSL initialization"; break; | 101 | str="SSL negotiation finished successfully"; break; |
101 | case SSL_ST_BEFORE|SSL_ST_ACCEPT: str="before/accept initialization"; break; | 102 | case SSL_ST_RENEGOTIATE: |
102 | case SSL_ST_OK|SSL_ST_ACCEPT: str="ok/accept SSL initialization"; break; | 103 | str="SSL renegotiate ciphers"; break; |
104 | case SSL_ST_BEFORE|SSL_ST_CONNECT: | ||
105 | str="before/connect initialization"; break; | ||
106 | case SSL_ST_OK|SSL_ST_CONNECT: | ||
107 | str="ok/connect SSL initialization"; break; | ||
108 | case SSL_ST_BEFORE|SSL_ST_ACCEPT: | ||
109 | str="before/accept initialization"; break; | ||
110 | case SSL_ST_OK|SSL_ST_ACCEPT: | ||
111 | str="ok/accept SSL initialization"; break; | ||
103 | #ifndef OPENSSL_NO_SSL2 | 112 | #ifndef OPENSSL_NO_SSL2 |
104 | case SSL2_ST_CLIENT_START_ENCRYPTION: str="SSLv2 client start encryption"; break; | 113 | case SSL2_ST_CLIENT_START_ENCRYPTION: |
105 | case SSL2_ST_SERVER_START_ENCRYPTION: str="SSLv2 server start encryption"; break; | 114 | str="SSLv2 client start encryption"; break; |
106 | case SSL2_ST_SEND_CLIENT_HELLO_A: str="SSLv2 write client hello A"; break; | 115 | case SSL2_ST_SERVER_START_ENCRYPTION: |
107 | case SSL2_ST_SEND_CLIENT_HELLO_B: str="SSLv2 write client hello B"; break; | 116 | str="SSLv2 server start encryption"; break; |
108 | case SSL2_ST_GET_SERVER_HELLO_A: str="SSLv2 read server hello A"; break; | 117 | case SSL2_ST_SEND_CLIENT_HELLO_A: |
109 | case SSL2_ST_GET_SERVER_HELLO_B: str="SSLv2 read server hello B"; break; | 118 | str="SSLv2 write client hello A"; break; |
110 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="SSLv2 write client master key A"; break; | 119 | case SSL2_ST_SEND_CLIENT_HELLO_B: |
111 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="SSLv2 write client master key B"; break; | 120 | str="SSLv2 write client hello B"; break; |
112 | case SSL2_ST_SEND_CLIENT_FINISHED_A: str="SSLv2 write client finished A"; break; | 121 | case SSL2_ST_GET_SERVER_HELLO_A: |
113 | case SSL2_ST_SEND_CLIENT_FINISHED_B: str="SSLv2 write client finished B"; break; | 122 | str="SSLv2 read server hello A"; break; |
114 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="SSLv2 write client certificate A"; break; | 123 | case SSL2_ST_GET_SERVER_HELLO_B: |
115 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="SSLv2 write client certificate B"; break; | 124 | str="SSLv2 read server hello B"; break; |
116 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="SSLv2 write client certificate C"; break; | 125 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: |
117 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="SSLv2 write client certificate D"; break; | 126 | str="SSLv2 write client master key A"; break; |
118 | case SSL2_ST_GET_SERVER_VERIFY_A: str="SSLv2 read server verify A"; break; | 127 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: |
119 | case SSL2_ST_GET_SERVER_VERIFY_B: str="SSLv2 read server verify B"; break; | 128 | str="SSLv2 write client master key B"; break; |
120 | case SSL2_ST_GET_SERVER_FINISHED_A: str="SSLv2 read server finished A"; break; | 129 | case SSL2_ST_SEND_CLIENT_FINISHED_A: |
121 | case SSL2_ST_GET_SERVER_FINISHED_B: str="SSLv2 read server finished B"; break; | 130 | str="SSLv2 write client finished A"; break; |
122 | case SSL2_ST_GET_CLIENT_HELLO_A: str="SSLv2 read client hello A"; break; | 131 | case SSL2_ST_SEND_CLIENT_FINISHED_B: |
123 | case SSL2_ST_GET_CLIENT_HELLO_B: str="SSLv2 read client hello B"; break; | 132 | str="SSLv2 write client finished B"; break; |
124 | case SSL2_ST_GET_CLIENT_HELLO_C: str="SSLv2 read client hello C"; break; | 133 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: |
125 | case SSL2_ST_SEND_SERVER_HELLO_A: str="SSLv2 write server hello A"; break; | 134 | str="SSLv2 write client certificate A"; break; |
126 | case SSL2_ST_SEND_SERVER_HELLO_B: str="SSLv2 write server hello B"; break; | 135 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: |
127 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="SSLv2 read client master key A"; break; | 136 | str="SSLv2 write client certificate B"; break; |
128 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="SSLv2 read client master key B"; break; | 137 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: |
129 | case SSL2_ST_SEND_SERVER_VERIFY_A: str="SSLv2 write server verify A"; break; | 138 | str="SSLv2 write client certificate C"; break; |
130 | case SSL2_ST_SEND_SERVER_VERIFY_B: str="SSLv2 write server verify B"; break; | 139 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: |
131 | case SSL2_ST_SEND_SERVER_VERIFY_C: str="SSLv2 write server verify C"; break; | 140 | str="SSLv2 write client certificate D"; break; |
132 | case SSL2_ST_GET_CLIENT_FINISHED_A: str="SSLv2 read client finished A"; break; | 141 | case SSL2_ST_GET_SERVER_VERIFY_A: |
133 | case SSL2_ST_GET_CLIENT_FINISHED_B: str="SSLv2 read client finished B"; break; | 142 | str="SSLv2 read server verify A"; break; |
134 | case SSL2_ST_SEND_SERVER_FINISHED_A: str="SSLv2 write server finished A"; break; | 143 | case SSL2_ST_GET_SERVER_VERIFY_B: |
135 | case SSL2_ST_SEND_SERVER_FINISHED_B: str="SSLv2 write server finished B"; break; | 144 | str="SSLv2 read server verify B"; break; |
136 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="SSLv2 write request certificate A"; break; | 145 | case SSL2_ST_GET_SERVER_FINISHED_A: |
137 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="SSLv2 write request certificate B"; break; | 146 | str="SSLv2 read server finished A"; break; |
138 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="SSLv2 write request certificate C"; break; | 147 | case SSL2_ST_GET_SERVER_FINISHED_B: |
139 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="SSLv2 write request certificate D"; break; | 148 | str="SSLv2 read server finished B"; break; |
140 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="SSLv2 X509 read server certificate"; break; | 149 | case SSL2_ST_GET_CLIENT_HELLO_A: |
141 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="SSLv2 X509 read client certificate"; break; | 150 | str="SSLv2 read client hello A"; break; |
151 | case SSL2_ST_GET_CLIENT_HELLO_B: | ||
152 | str="SSLv2 read client hello B"; break; | ||
153 | case SSL2_ST_GET_CLIENT_HELLO_C: | ||
154 | str="SSLv2 read client hello C"; break; | ||
155 | case SSL2_ST_SEND_SERVER_HELLO_A: | ||
156 | str="SSLv2 write server hello A"; break; | ||
157 | case SSL2_ST_SEND_SERVER_HELLO_B: | ||
158 | str="SSLv2 write server hello B"; break; | ||
159 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: | ||
160 | str="SSLv2 read client master key A"; break; | ||
161 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: | ||
162 | str="SSLv2 read client master key B"; break; | ||
163 | case SSL2_ST_SEND_SERVER_VERIFY_A: | ||
164 | str="SSLv2 write server verify A"; break; | ||
165 | case SSL2_ST_SEND_SERVER_VERIFY_B: | ||
166 | str="SSLv2 write server verify B"; break; | ||
167 | case SSL2_ST_SEND_SERVER_VERIFY_C: | ||
168 | str="SSLv2 write server verify C"; break; | ||
169 | case SSL2_ST_GET_CLIENT_FINISHED_A: | ||
170 | str="SSLv2 read client finished A"; break; | ||
171 | case SSL2_ST_GET_CLIENT_FINISHED_B: | ||
172 | str="SSLv2 read client finished B"; break; | ||
173 | case SSL2_ST_SEND_SERVER_FINISHED_A: | ||
174 | str="SSLv2 write server finished A"; break; | ||
175 | case SSL2_ST_SEND_SERVER_FINISHED_B: | ||
176 | str="SSLv2 write server finished B"; break; | ||
177 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: | ||
178 | str="SSLv2 write request certificate A"; break; | ||
179 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: | ||
180 | str="SSLv2 write request certificate B"; break; | ||
181 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: | ||
182 | str="SSLv2 write request certificate C"; break; | ||
183 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: | ||
184 | str="SSLv2 write request certificate D"; break; | ||
185 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: | ||
186 | str="SSLv2 X509 read server certificate"; break; | ||
187 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: | ||
188 | str="SSLv2 X509 read client certificate"; break; | ||
142 | #endif | 189 | #endif |
143 | 190 | ||
144 | #ifndef OPENSSL_NO_SSL3 | 191 | #ifndef OPENSSL_NO_SSL3 |
145 | /* SSLv3 additions */ | 192 | /* SSLv3 additions */ |
146 | case SSL3_ST_CW_CLNT_HELLO_A: str="SSLv3 write client hello A"; break; | 193 | case SSL3_ST_CW_CLNT_HELLO_A: |
147 | case SSL3_ST_CW_CLNT_HELLO_B: str="SSLv3 write client hello B"; break; | 194 | str="SSLv3 write client hello A"; break; |
148 | case SSL3_ST_CR_SRVR_HELLO_A: str="SSLv3 read server hello A"; break; | 195 | case SSL3_ST_CW_CLNT_HELLO_B: |
149 | case SSL3_ST_CR_SRVR_HELLO_B: str="SSLv3 read server hello B"; break; | 196 | str="SSLv3 write client hello B"; break; |
150 | case SSL3_ST_CR_CERT_A: str="SSLv3 read server certificate A"; break; | 197 | case SSL3_ST_CR_SRVR_HELLO_A: |
151 | case SSL3_ST_CR_CERT_B: str="SSLv3 read server certificate B"; break; | 198 | str="SSLv3 read server hello A"; break; |
152 | case SSL3_ST_CR_KEY_EXCH_A: str="SSLv3 read server key exchange A"; break; | 199 | case SSL3_ST_CR_SRVR_HELLO_B: |
153 | case SSL3_ST_CR_KEY_EXCH_B: str="SSLv3 read server key exchange B"; break; | 200 | str="SSLv3 read server hello B"; break; |
154 | case SSL3_ST_CR_CERT_REQ_A: str="SSLv3 read server certificate request A"; break; | 201 | case SSL3_ST_CR_CERT_A: |
155 | case SSL3_ST_CR_CERT_REQ_B: str="SSLv3 read server certificate request B"; break; | 202 | str="SSLv3 read server certificate A"; break; |
156 | case SSL3_ST_CR_SESSION_TICKET_A: str="SSLv3 read server session ticket A";break; | 203 | case SSL3_ST_CR_CERT_B: |
157 | case SSL3_ST_CR_SESSION_TICKET_B: str="SSLv3 read server session ticket B";break; | 204 | str="SSLv3 read server certificate B"; break; |
158 | case SSL3_ST_CR_SRVR_DONE_A: str="SSLv3 read server done A"; break; | 205 | case SSL3_ST_CR_KEY_EXCH_A: |
159 | case SSL3_ST_CR_SRVR_DONE_B: str="SSLv3 read server done B"; break; | 206 | str="SSLv3 read server key exchange A"; break; |
160 | case SSL3_ST_CW_CERT_A: str="SSLv3 write client certificate A"; break; | 207 | case SSL3_ST_CR_KEY_EXCH_B: |
161 | case SSL3_ST_CW_CERT_B: str="SSLv3 write client certificate B"; break; | 208 | str="SSLv3 read server key exchange B"; break; |
162 | case SSL3_ST_CW_CERT_C: str="SSLv3 write client certificate C"; break; | 209 | case SSL3_ST_CR_CERT_REQ_A: |
163 | case SSL3_ST_CW_CERT_D: str="SSLv3 write client certificate D"; break; | 210 | str="SSLv3 read server certificate request A"; break; |
164 | case SSL3_ST_CW_KEY_EXCH_A: str="SSLv3 write client key exchange A"; break; | 211 | case SSL3_ST_CR_CERT_REQ_B: |
165 | case SSL3_ST_CW_KEY_EXCH_B: str="SSLv3 write client key exchange B"; break; | 212 | str="SSLv3 read server certificate request B"; break; |
166 | case SSL3_ST_CW_CERT_VRFY_A: str="SSLv3 write certificate verify A"; break; | 213 | case SSL3_ST_CR_SESSION_TICKET_A: |
167 | case SSL3_ST_CW_CERT_VRFY_B: str="SSLv3 write certificate verify B"; break; | 214 | str="SSLv3 read server session ticket A";break; |
215 | case SSL3_ST_CR_SESSION_TICKET_B: | ||
216 | str="SSLv3 read server session ticket B";break; | ||
217 | case SSL3_ST_CR_SRVR_DONE_A: | ||
218 | str="SSLv3 read server done A"; break; | ||
219 | case SSL3_ST_CR_SRVR_DONE_B: | ||
220 | str="SSLv3 read server done B"; break; | ||
221 | case SSL3_ST_CW_CERT_A: | ||
222 | str="SSLv3 write client certificate A"; break; | ||
223 | case SSL3_ST_CW_CERT_B: | ||
224 | str="SSLv3 write client certificate B"; break; | ||
225 | case SSL3_ST_CW_CERT_C: | ||
226 | str="SSLv3 write client certificate C"; break; | ||
227 | case SSL3_ST_CW_CERT_D: | ||
228 | str="SSLv3 write client certificate D"; break; | ||
229 | case SSL3_ST_CW_KEY_EXCH_A: | ||
230 | str="SSLv3 write client key exchange A"; break; | ||
231 | case SSL3_ST_CW_KEY_EXCH_B: | ||
232 | str="SSLv3 write client key exchange B"; break; | ||
233 | case SSL3_ST_CW_CERT_VRFY_A: | ||
234 | str="SSLv3 write certificate verify A"; break; | ||
235 | case SSL3_ST_CW_CERT_VRFY_B: | ||
236 | str="SSLv3 write certificate verify B"; break; | ||
168 | 237 | ||
169 | case SSL3_ST_CW_CHANGE_A: | 238 | case SSL3_ST_CW_CHANGE_A: |
170 | case SSL3_ST_SW_CHANGE_A: str="SSLv3 write change cipher spec A"; break; | 239 | case SSL3_ST_SW_CHANGE_A: |
171 | case SSL3_ST_CW_CHANGE_B: | 240 | str="SSLv3 write change cipher spec A"; break; |
172 | case SSL3_ST_SW_CHANGE_B: str="SSLv3 write change cipher spec B"; break; | 241 | case SSL3_ST_CW_CHANGE_B: |
173 | case SSL3_ST_CW_FINISHED_A: | 242 | case SSL3_ST_SW_CHANGE_B: |
174 | case SSL3_ST_SW_FINISHED_A: str="SSLv3 write finished A"; break; | 243 | str="SSLv3 write change cipher spec B"; break; |
175 | case SSL3_ST_CW_FINISHED_B: | 244 | case SSL3_ST_CW_FINISHED_A: |
176 | case SSL3_ST_SW_FINISHED_B: str="SSLv3 write finished B"; break; | 245 | case SSL3_ST_SW_FINISHED_A: |
177 | case SSL3_ST_CR_CHANGE_A: | 246 | str="SSLv3 write finished A"; break; |
178 | case SSL3_ST_SR_CHANGE_A: str="SSLv3 read change cipher spec A"; break; | 247 | case SSL3_ST_CW_FINISHED_B: |
179 | case SSL3_ST_CR_CHANGE_B: | 248 | case SSL3_ST_SW_FINISHED_B: |
180 | case SSL3_ST_SR_CHANGE_B: str="SSLv3 read change cipher spec B"; break; | 249 | str="SSLv3 write finished B"; break; |
181 | case SSL3_ST_CR_FINISHED_A: | 250 | case SSL3_ST_CR_CHANGE_A: |
182 | case SSL3_ST_SR_FINISHED_A: str="SSLv3 read finished A"; break; | 251 | case SSL3_ST_SR_CHANGE_A: |
183 | case SSL3_ST_CR_FINISHED_B: | 252 | str="SSLv3 read change cipher spec A"; break; |
184 | case SSL3_ST_SR_FINISHED_B: str="SSLv3 read finished B"; break; | 253 | case SSL3_ST_CR_CHANGE_B: |
254 | case SSL3_ST_SR_CHANGE_B: | ||
255 | str="SSLv3 read change cipher spec B"; break; | ||
256 | case SSL3_ST_CR_FINISHED_A: | ||
257 | case SSL3_ST_SR_FINISHED_A: | ||
258 | str="SSLv3 read finished A"; break; | ||
259 | case SSL3_ST_CR_FINISHED_B: | ||
260 | case SSL3_ST_SR_FINISHED_B: | ||
261 | str="SSLv3 read finished B"; break; | ||
185 | 262 | ||
186 | case SSL3_ST_CW_FLUSH: | 263 | case SSL3_ST_CW_FLUSH: |
187 | case SSL3_ST_SW_FLUSH: str="SSLv3 flush data"; break; | 264 | case SSL3_ST_SW_FLUSH: |
265 | str="SSLv3 flush data"; break; | ||
188 | 266 | ||
189 | case SSL3_ST_SR_CLNT_HELLO_A: str="SSLv3 read client hello A"; break; | 267 | case SSL3_ST_SR_CLNT_HELLO_A: |
190 | case SSL3_ST_SR_CLNT_HELLO_B: str="SSLv3 read client hello B"; break; | 268 | str="SSLv3 read client hello A"; break; |
191 | case SSL3_ST_SR_CLNT_HELLO_C: str="SSLv3 read client hello C"; break; | 269 | case SSL3_ST_SR_CLNT_HELLO_B: |
192 | case SSL3_ST_SW_HELLO_REQ_A: str="SSLv3 write hello request A"; break; | 270 | str="SSLv3 read client hello B"; break; |
193 | case SSL3_ST_SW_HELLO_REQ_B: str="SSLv3 write hello request B"; break; | 271 | case SSL3_ST_SR_CLNT_HELLO_C: |
194 | case SSL3_ST_SW_HELLO_REQ_C: str="SSLv3 write hello request C"; break; | 272 | str="SSLv3 read client hello C"; break; |
195 | case SSL3_ST_SW_SRVR_HELLO_A: str="SSLv3 write server hello A"; break; | 273 | case SSL3_ST_SW_HELLO_REQ_A: |
196 | case SSL3_ST_SW_SRVR_HELLO_B: str="SSLv3 write server hello B"; break; | 274 | str="SSLv3 write hello request A"; break; |
197 | case SSL3_ST_SW_CERT_A: str="SSLv3 write certificate A"; break; | 275 | case SSL3_ST_SW_HELLO_REQ_B: |
198 | case SSL3_ST_SW_CERT_B: str="SSLv3 write certificate B"; break; | 276 | str="SSLv3 write hello request B"; break; |
199 | case SSL3_ST_SW_KEY_EXCH_A: str="SSLv3 write key exchange A"; break; | 277 | case SSL3_ST_SW_HELLO_REQ_C: |
200 | case SSL3_ST_SW_KEY_EXCH_B: str="SSLv3 write key exchange B"; break; | 278 | str="SSLv3 write hello request C"; break; |
201 | case SSL3_ST_SW_CERT_REQ_A: str="SSLv3 write certificate request A"; break; | 279 | case SSL3_ST_SW_SRVR_HELLO_A: |
202 | case SSL3_ST_SW_CERT_REQ_B: str="SSLv3 write certificate request B"; break; | 280 | str="SSLv3 write server hello A"; break; |
203 | case SSL3_ST_SW_SESSION_TICKET_A: str="SSLv3 write session ticket A"; break; | 281 | case SSL3_ST_SW_SRVR_HELLO_B: |
204 | case SSL3_ST_SW_SESSION_TICKET_B: str="SSLv3 write session ticket B"; break; | 282 | str="SSLv3 write server hello B"; break; |
205 | case SSL3_ST_SW_SRVR_DONE_A: str="SSLv3 write server done A"; break; | 283 | case SSL3_ST_SW_CERT_A: |
206 | case SSL3_ST_SW_SRVR_DONE_B: str="SSLv3 write server done B"; break; | 284 | str="SSLv3 write certificate A"; break; |
207 | case SSL3_ST_SR_CERT_A: str="SSLv3 read client certificate A"; break; | 285 | case SSL3_ST_SW_CERT_B: |
208 | case SSL3_ST_SR_CERT_B: str="SSLv3 read client certificate B"; break; | 286 | str="SSLv3 write certificate B"; break; |
209 | case SSL3_ST_SR_KEY_EXCH_A: str="SSLv3 read client key exchange A"; break; | 287 | case SSL3_ST_SW_KEY_EXCH_A: |
210 | case SSL3_ST_SR_KEY_EXCH_B: str="SSLv3 read client key exchange B"; break; | 288 | str="SSLv3 write key exchange A"; break; |
211 | case SSL3_ST_SR_CERT_VRFY_A: str="SSLv3 read certificate verify A"; break; | 289 | case SSL3_ST_SW_KEY_EXCH_B: |
212 | case SSL3_ST_SR_CERT_VRFY_B: str="SSLv3 read certificate verify B"; break; | 290 | str="SSLv3 write key exchange B"; break; |
291 | case SSL3_ST_SW_CERT_REQ_A: | ||
292 | str="SSLv3 write certificate request A"; break; | ||
293 | case SSL3_ST_SW_CERT_REQ_B: | ||
294 | str="SSLv3 write certificate request B"; break; | ||
295 | case SSL3_ST_SW_SESSION_TICKET_A: | ||
296 | str="SSLv3 write session ticket A"; break; | ||
297 | case SSL3_ST_SW_SESSION_TICKET_B: | ||
298 | str="SSLv3 write session ticket B"; break; | ||
299 | case SSL3_ST_SW_SRVR_DONE_A: | ||
300 | str="SSLv3 write server done A"; break; | ||
301 | case SSL3_ST_SW_SRVR_DONE_B: | ||
302 | str="SSLv3 write server done B"; break; | ||
303 | case SSL3_ST_SR_CERT_A: | ||
304 | str="SSLv3 read client certificate A"; break; | ||
305 | case SSL3_ST_SR_CERT_B: | ||
306 | str="SSLv3 read client certificate B"; break; | ||
307 | case SSL3_ST_SR_KEY_EXCH_A: | ||
308 | str="SSLv3 read client key exchange A"; break; | ||
309 | case SSL3_ST_SR_KEY_EXCH_B: | ||
310 | str="SSLv3 read client key exchange B"; break; | ||
311 | case SSL3_ST_SR_CERT_VRFY_A: | ||
312 | str="SSLv3 read certificate verify A"; break; | ||
313 | case SSL3_ST_SR_CERT_VRFY_B: | ||
314 | str="SSLv3 read certificate verify B"; break; | ||
213 | #endif | 315 | #endif |
214 | 316 | ||
215 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) | 317 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) |
216 | /* SSLv2/v3 compatibility states */ | 318 | /* SSLv2/v3 compatibility states */ |
217 | /* client */ | 319 | /* client */ |
218 | case SSL23_ST_CW_CLNT_HELLO_A: str="SSLv2/v3 write client hello A"; break; | 320 | case SSL23_ST_CW_CLNT_HELLO_A: |
219 | case SSL23_ST_CW_CLNT_HELLO_B: str="SSLv2/v3 write client hello B"; break; | 321 | str="SSLv2/v3 write client hello A"; break; |
220 | case SSL23_ST_CR_SRVR_HELLO_A: str="SSLv2/v3 read server hello A"; break; | 322 | case SSL23_ST_CW_CLNT_HELLO_B: |
221 | case SSL23_ST_CR_SRVR_HELLO_B: str="SSLv2/v3 read server hello B"; break; | 323 | str="SSLv2/v3 write client hello B"; break; |
324 | case SSL23_ST_CR_SRVR_HELLO_A: | ||
325 | str="SSLv2/v3 read server hello A"; break; | ||
326 | case SSL23_ST_CR_SRVR_HELLO_B: | ||
327 | str="SSLv2/v3 read server hello B"; break; | ||
222 | /* server */ | 328 | /* server */ |
223 | case SSL23_ST_SR_CLNT_HELLO_A: str="SSLv2/v3 read client hello A"; break; | 329 | case SSL23_ST_SR_CLNT_HELLO_A: |
224 | case SSL23_ST_SR_CLNT_HELLO_B: str="SSLv2/v3 read client hello B"; break; | 330 | str="SSLv2/v3 read client hello A"; break; |
331 | case SSL23_ST_SR_CLNT_HELLO_B: | ||
332 | str="SSLv2/v3 read client hello B"; break; | ||
225 | #endif | 333 | #endif |
226 | 334 | ||
227 | /* DTLS */ | 335 | /* DTLS */ |
228 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: str="DTLS1 read hello verify request A"; break; | 336 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: |
229 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: str="DTLS1 read hello verify request B"; break; | 337 | str="DTLS1 read hello verify request A"; break; |
230 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: str="DTLS1 write hello verify request A"; break; | 338 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: |
231 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: str="DTLS1 write hello verify request B"; break; | 339 | str="DTLS1 read hello verify request B"; break; |
340 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: | ||
341 | str="DTLS1 write hello verify request A"; break; | ||
342 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: | ||
343 | str="DTLS1 write hello verify request B"; break; | ||
232 | 344 | ||
233 | default: str="unknown state"; break; | 345 | default: |
234 | } | 346 | str="unknown state"; break; |
235 | return(str); | ||
236 | } | 347 | } |
348 | return (str); | ||
349 | } | ||
237 | 350 | ||
238 | const char *SSL_rstate_string_long(const SSL *s) | 351 | const char |
239 | { | 352 | *SSL_rstate_string_long(const SSL *s) |
353 | { | ||
240 | const char *str; | 354 | const char *str; |
241 | 355 | ||
242 | switch (s->rstate) | 356 | switch (s->rstate) { |
243 | { | 357 | case SSL_ST_READ_HEADER: |
244 | case SSL_ST_READ_HEADER: str="read header"; break; | 358 | str="read header"; break; |
245 | case SSL_ST_READ_BODY: str="read body"; break; | 359 | case SSL_ST_READ_BODY: |
246 | case SSL_ST_READ_DONE: str="read done"; break; | 360 | str="read body"; break; |
247 | default: str="unknown"; break; | 361 | case SSL_ST_READ_DONE: |
248 | } | 362 | str="read done"; break; |
249 | return(str); | 363 | default: |
364 | str="unknown"; break; | ||
250 | } | 365 | } |
366 | return (str); | ||
367 | } | ||
251 | 368 | ||
252 | const char *SSL_state_string(const SSL *s) | 369 | const char |
253 | { | 370 | *SSL_state_string(const SSL *s) |
371 | { | ||
254 | const char *str; | 372 | const char *str; |
255 | 373 | ||
256 | switch (s->state) | 374 | switch (s->state) { |
257 | { | 375 | case SSL_ST_BEFORE: |
258 | case SSL_ST_BEFORE: str="PINIT "; break; | 376 | str="PINIT "; break; |
259 | case SSL_ST_ACCEPT: str="AINIT "; break; | 377 | case SSL_ST_ACCEPT: |
260 | case SSL_ST_CONNECT: str="CINIT "; break; | 378 | str="AINIT "; break; |
261 | case SSL_ST_OK: str="SSLOK "; break; | 379 | case SSL_ST_CONNECT: |
380 | str="CINIT "; break; | ||
381 | case SSL_ST_OK: | ||
382 | str="SSLOK "; break; | ||
262 | #ifndef OPENSSL_NO_SSL2 | 383 | #ifndef OPENSSL_NO_SSL2 |
263 | case SSL2_ST_CLIENT_START_ENCRYPTION: str="2CSENC"; break; | 384 | case SSL2_ST_CLIENT_START_ENCRYPTION: |
264 | case SSL2_ST_SERVER_START_ENCRYPTION: str="2SSENC"; break; | 385 | str="2CSENC"; break; |
265 | case SSL2_ST_SEND_CLIENT_HELLO_A: str="2SCH_A"; break; | 386 | case SSL2_ST_SERVER_START_ENCRYPTION: |
266 | case SSL2_ST_SEND_CLIENT_HELLO_B: str="2SCH_B"; break; | 387 | str="2SSENC"; break; |
267 | case SSL2_ST_GET_SERVER_HELLO_A: str="2GSH_A"; break; | 388 | case SSL2_ST_SEND_CLIENT_HELLO_A: |
268 | case SSL2_ST_GET_SERVER_HELLO_B: str="2GSH_B"; break; | 389 | str="2SCH_A"; break; |
269 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: str="2SCMKA"; break; | 390 | case SSL2_ST_SEND_CLIENT_HELLO_B: |
270 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: str="2SCMKB"; break; | 391 | str="2SCH_B"; break; |
271 | case SSL2_ST_SEND_CLIENT_FINISHED_A: str="2SCF_A"; break; | 392 | case SSL2_ST_GET_SERVER_HELLO_A: |
272 | case SSL2_ST_SEND_CLIENT_FINISHED_B: str="2SCF_B"; break; | 393 | str="2GSH_A"; break; |
273 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: str="2SCC_A"; break; | 394 | case SSL2_ST_GET_SERVER_HELLO_B: |
274 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: str="2SCC_B"; break; | 395 | str="2GSH_B"; break; |
275 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: str="2SCC_C"; break; | 396 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_A: |
276 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: str="2SCC_D"; break; | 397 | str="2SCMKA"; break; |
277 | case SSL2_ST_GET_SERVER_VERIFY_A: str="2GSV_A"; break; | 398 | case SSL2_ST_SEND_CLIENT_MASTER_KEY_B: |
278 | case SSL2_ST_GET_SERVER_VERIFY_B: str="2GSV_B"; break; | 399 | str="2SCMKB"; break; |
279 | case SSL2_ST_GET_SERVER_FINISHED_A: str="2GSF_A"; break; | 400 | case SSL2_ST_SEND_CLIENT_FINISHED_A: |
280 | case SSL2_ST_GET_SERVER_FINISHED_B: str="2GSF_B"; break; | 401 | str="2SCF_A"; break; |
281 | case SSL2_ST_GET_CLIENT_HELLO_A: str="2GCH_A"; break; | 402 | case SSL2_ST_SEND_CLIENT_FINISHED_B: |
282 | case SSL2_ST_GET_CLIENT_HELLO_B: str="2GCH_B"; break; | 403 | str="2SCF_B"; break; |
283 | case SSL2_ST_GET_CLIENT_HELLO_C: str="2GCH_C"; break; | 404 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_A: |
284 | case SSL2_ST_SEND_SERVER_HELLO_A: str="2SSH_A"; break; | 405 | str="2SCC_A"; break; |
285 | case SSL2_ST_SEND_SERVER_HELLO_B: str="2SSH_B"; break; | 406 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_B: |
286 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: str="2GCMKA"; break; | 407 | str="2SCC_B"; break; |
287 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: str="2GCMKA"; break; | 408 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_C: |
288 | case SSL2_ST_SEND_SERVER_VERIFY_A: str="2SSV_A"; break; | 409 | str="2SCC_C"; break; |
289 | case SSL2_ST_SEND_SERVER_VERIFY_B: str="2SSV_B"; break; | 410 | case SSL2_ST_SEND_CLIENT_CERTIFICATE_D: |
290 | case SSL2_ST_SEND_SERVER_VERIFY_C: str="2SSV_C"; break; | 411 | str="2SCC_D"; break; |
291 | case SSL2_ST_GET_CLIENT_FINISHED_A: str="2GCF_A"; break; | 412 | case SSL2_ST_GET_SERVER_VERIFY_A: |
292 | case SSL2_ST_GET_CLIENT_FINISHED_B: str="2GCF_B"; break; | 413 | str="2GSV_A"; break; |
293 | case SSL2_ST_SEND_SERVER_FINISHED_A: str="2SSF_A"; break; | 414 | case SSL2_ST_GET_SERVER_VERIFY_B: |
294 | case SSL2_ST_SEND_SERVER_FINISHED_B: str="2SSF_B"; break; | 415 | str="2GSV_B"; break; |
295 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: str="2SRC_A"; break; | 416 | case SSL2_ST_GET_SERVER_FINISHED_A: |
296 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: str="2SRC_B"; break; | 417 | str="2GSF_A"; break; |
297 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: str="2SRC_C"; break; | 418 | case SSL2_ST_GET_SERVER_FINISHED_B: |
298 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: str="2SRC_D"; break; | 419 | str="2GSF_B"; break; |
299 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: str="2X9GSC"; break; | 420 | case SSL2_ST_GET_CLIENT_HELLO_A: |
300 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: str="2X9GCC"; break; | 421 | str="2GCH_A"; break; |
422 | case SSL2_ST_GET_CLIENT_HELLO_B: | ||
423 | str="2GCH_B"; break; | ||
424 | case SSL2_ST_GET_CLIENT_HELLO_C: | ||
425 | str="2GCH_C"; break; | ||
426 | case SSL2_ST_SEND_SERVER_HELLO_A: | ||
427 | str="2SSH_A"; break; | ||
428 | case SSL2_ST_SEND_SERVER_HELLO_B: | ||
429 | str="2SSH_B"; break; | ||
430 | case SSL2_ST_GET_CLIENT_MASTER_KEY_A: | ||
431 | str="2GCMKA"; break; | ||
432 | case SSL2_ST_GET_CLIENT_MASTER_KEY_B: | ||
433 | str="2GCMKA"; break; | ||
434 | case SSL2_ST_SEND_SERVER_VERIFY_A: | ||
435 | str="2SSV_A"; break; | ||
436 | case SSL2_ST_SEND_SERVER_VERIFY_B: | ||
437 | str="2SSV_B"; break; | ||
438 | case SSL2_ST_SEND_SERVER_VERIFY_C: | ||
439 | str="2SSV_C"; break; | ||
440 | case SSL2_ST_GET_CLIENT_FINISHED_A: | ||
441 | str="2GCF_A"; break; | ||
442 | case SSL2_ST_GET_CLIENT_FINISHED_B: | ||
443 | str="2GCF_B"; break; | ||
444 | case SSL2_ST_SEND_SERVER_FINISHED_A: | ||
445 | str="2SSF_A"; break; | ||
446 | case SSL2_ST_SEND_SERVER_FINISHED_B: | ||
447 | str="2SSF_B"; break; | ||
448 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_A: | ||
449 | str="2SRC_A"; break; | ||
450 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_B: | ||
451 | str="2SRC_B"; break; | ||
452 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_C: | ||
453 | str="2SRC_C"; break; | ||
454 | case SSL2_ST_SEND_REQUEST_CERTIFICATE_D: | ||
455 | str="2SRC_D"; break; | ||
456 | case SSL2_ST_X509_GET_SERVER_CERTIFICATE: | ||
457 | str="2X9GSC"; break; | ||
458 | case SSL2_ST_X509_GET_CLIENT_CERTIFICATE: | ||
459 | str="2X9GCC"; break; | ||
301 | #endif | 460 | #endif |
302 | 461 | ||
303 | #ifndef OPENSSL_NO_SSL3 | 462 | #ifndef OPENSSL_NO_SSL3 |
304 | /* SSLv3 additions */ | 463 | /* SSLv3 additions */ |
305 | case SSL3_ST_SW_FLUSH: | 464 | case SSL3_ST_SW_FLUSH: |
306 | case SSL3_ST_CW_FLUSH: str="3FLUSH"; break; | 465 | case SSL3_ST_CW_FLUSH: |
307 | case SSL3_ST_CW_CLNT_HELLO_A: str="3WCH_A"; break; | 466 | str="3FLUSH"; break; |
308 | case SSL3_ST_CW_CLNT_HELLO_B: str="3WCH_B"; break; | 467 | case SSL3_ST_CW_CLNT_HELLO_A: |
309 | case SSL3_ST_CR_SRVR_HELLO_A: str="3RSH_A"; break; | 468 | str="3WCH_A"; break; |
310 | case SSL3_ST_CR_SRVR_HELLO_B: str="3RSH_B"; break; | 469 | case SSL3_ST_CW_CLNT_HELLO_B: |
311 | case SSL3_ST_CR_CERT_A: str="3RSC_A"; break; | 470 | str="3WCH_B"; break; |
312 | case SSL3_ST_CR_CERT_B: str="3RSC_B"; break; | 471 | case SSL3_ST_CR_SRVR_HELLO_A: |
313 | case SSL3_ST_CR_KEY_EXCH_A: str="3RSKEA"; break; | 472 | str="3RSH_A"; break; |
314 | case SSL3_ST_CR_KEY_EXCH_B: str="3RSKEB"; break; | 473 | case SSL3_ST_CR_SRVR_HELLO_B: |
315 | case SSL3_ST_CR_CERT_REQ_A: str="3RCR_A"; break; | 474 | str="3RSH_B"; break; |
316 | case SSL3_ST_CR_CERT_REQ_B: str="3RCR_B"; break; | 475 | case SSL3_ST_CR_CERT_A: |
317 | case SSL3_ST_CR_SRVR_DONE_A: str="3RSD_A"; break; | 476 | str="3RSC_A"; break; |
318 | case SSL3_ST_CR_SRVR_DONE_B: str="3RSD_B"; break; | 477 | case SSL3_ST_CR_CERT_B: |
319 | case SSL3_ST_CW_CERT_A: str="3WCC_A"; break; | 478 | str="3RSC_B"; break; |
320 | case SSL3_ST_CW_CERT_B: str="3WCC_B"; break; | 479 | case SSL3_ST_CR_KEY_EXCH_A: |
321 | case SSL3_ST_CW_CERT_C: str="3WCC_C"; break; | 480 | str="3RSKEA"; break; |
322 | case SSL3_ST_CW_CERT_D: str="3WCC_D"; break; | 481 | case SSL3_ST_CR_KEY_EXCH_B: |
323 | case SSL3_ST_CW_KEY_EXCH_A: str="3WCKEA"; break; | 482 | str="3RSKEB"; break; |
324 | case SSL3_ST_CW_KEY_EXCH_B: str="3WCKEB"; break; | 483 | case SSL3_ST_CR_CERT_REQ_A: |
325 | case SSL3_ST_CW_CERT_VRFY_A: str="3WCV_A"; break; | 484 | str="3RCR_A"; break; |
326 | case SSL3_ST_CW_CERT_VRFY_B: str="3WCV_B"; break; | 485 | case SSL3_ST_CR_CERT_REQ_B: |
486 | str="3RCR_B"; break; | ||
487 | case SSL3_ST_CR_SRVR_DONE_A: | ||
488 | str="3RSD_A"; break; | ||
489 | case SSL3_ST_CR_SRVR_DONE_B: | ||
490 | str="3RSD_B"; break; | ||
491 | case SSL3_ST_CW_CERT_A: | ||
492 | str="3WCC_A"; break; | ||
493 | case SSL3_ST_CW_CERT_B: | ||
494 | str="3WCC_B"; break; | ||
495 | case SSL3_ST_CW_CERT_C: | ||
496 | str="3WCC_C"; break; | ||
497 | case SSL3_ST_CW_CERT_D: | ||
498 | str="3WCC_D"; break; | ||
499 | case SSL3_ST_CW_KEY_EXCH_A: | ||
500 | str="3WCKEA"; break; | ||
501 | case SSL3_ST_CW_KEY_EXCH_B: | ||
502 | str="3WCKEB"; break; | ||
503 | case SSL3_ST_CW_CERT_VRFY_A: | ||
504 | str="3WCV_A"; break; | ||
505 | case SSL3_ST_CW_CERT_VRFY_B: | ||
506 | str="3WCV_B"; break; | ||
327 | 507 | ||
328 | case SSL3_ST_SW_CHANGE_A: | 508 | case SSL3_ST_SW_CHANGE_A: |
329 | case SSL3_ST_CW_CHANGE_A: str="3WCCSA"; break; | 509 | case SSL3_ST_CW_CHANGE_A: |
330 | case SSL3_ST_SW_CHANGE_B: | 510 | str="3WCCSA"; break; |
331 | case SSL3_ST_CW_CHANGE_B: str="3WCCSB"; break; | 511 | case SSL3_ST_SW_CHANGE_B: |
332 | case SSL3_ST_SW_FINISHED_A: | 512 | case SSL3_ST_CW_CHANGE_B: |
333 | case SSL3_ST_CW_FINISHED_A: str="3WFINA"; break; | 513 | str="3WCCSB"; break; |
334 | case SSL3_ST_SW_FINISHED_B: | 514 | case SSL3_ST_SW_FINISHED_A: |
335 | case SSL3_ST_CW_FINISHED_B: str="3WFINB"; break; | 515 | case SSL3_ST_CW_FINISHED_A: |
336 | case SSL3_ST_SR_CHANGE_A: | 516 | str="3WFINA"; break; |
337 | case SSL3_ST_CR_CHANGE_A: str="3RCCSA"; break; | 517 | case SSL3_ST_SW_FINISHED_B: |
338 | case SSL3_ST_SR_CHANGE_B: | 518 | case SSL3_ST_CW_FINISHED_B: |
339 | case SSL3_ST_CR_CHANGE_B: str="3RCCSB"; break; | 519 | str="3WFINB"; break; |
340 | case SSL3_ST_SR_FINISHED_A: | 520 | case SSL3_ST_SR_CHANGE_A: |
341 | case SSL3_ST_CR_FINISHED_A: str="3RFINA"; break; | 521 | case SSL3_ST_CR_CHANGE_A: |
342 | case SSL3_ST_SR_FINISHED_B: | 522 | str="3RCCSA"; break; |
343 | case SSL3_ST_CR_FINISHED_B: str="3RFINB"; break; | 523 | case SSL3_ST_SR_CHANGE_B: |
524 | case SSL3_ST_CR_CHANGE_B: | ||
525 | str="3RCCSB"; break; | ||
526 | case SSL3_ST_SR_FINISHED_A: | ||
527 | case SSL3_ST_CR_FINISHED_A: | ||
528 | str="3RFINA"; break; | ||
529 | case SSL3_ST_SR_FINISHED_B: | ||
530 | case SSL3_ST_CR_FINISHED_B: | ||
531 | str="3RFINB"; break; | ||
344 | 532 | ||
345 | case SSL3_ST_SW_HELLO_REQ_A: str="3WHR_A"; break; | 533 | case SSL3_ST_SW_HELLO_REQ_A: |
346 | case SSL3_ST_SW_HELLO_REQ_B: str="3WHR_B"; break; | 534 | str="3WHR_A"; break; |
347 | case SSL3_ST_SW_HELLO_REQ_C: str="3WHR_C"; break; | 535 | case SSL3_ST_SW_HELLO_REQ_B: |
348 | case SSL3_ST_SR_CLNT_HELLO_A: str="3RCH_A"; break; | 536 | str="3WHR_B"; break; |
349 | case SSL3_ST_SR_CLNT_HELLO_B: str="3RCH_B"; break; | 537 | case SSL3_ST_SW_HELLO_REQ_C: |
350 | case SSL3_ST_SR_CLNT_HELLO_C: str="3RCH_C"; break; | 538 | str="3WHR_C"; break; |
351 | case SSL3_ST_SW_SRVR_HELLO_A: str="3WSH_A"; break; | 539 | case SSL3_ST_SR_CLNT_HELLO_A: |
352 | case SSL3_ST_SW_SRVR_HELLO_B: str="3WSH_B"; break; | 540 | str="3RCH_A"; break; |
353 | case SSL3_ST_SW_CERT_A: str="3WSC_A"; break; | 541 | case SSL3_ST_SR_CLNT_HELLO_B: |
354 | case SSL3_ST_SW_CERT_B: str="3WSC_B"; break; | 542 | str="3RCH_B"; break; |
355 | case SSL3_ST_SW_KEY_EXCH_A: str="3WSKEA"; break; | 543 | case SSL3_ST_SR_CLNT_HELLO_C: |
356 | case SSL3_ST_SW_KEY_EXCH_B: str="3WSKEB"; break; | 544 | str="3RCH_C"; break; |
357 | case SSL3_ST_SW_CERT_REQ_A: str="3WCR_A"; break; | 545 | case SSL3_ST_SW_SRVR_HELLO_A: |
358 | case SSL3_ST_SW_CERT_REQ_B: str="3WCR_B"; break; | 546 | str="3WSH_A"; break; |
359 | case SSL3_ST_SW_SRVR_DONE_A: str="3WSD_A"; break; | 547 | case SSL3_ST_SW_SRVR_HELLO_B: |
360 | case SSL3_ST_SW_SRVR_DONE_B: str="3WSD_B"; break; | 548 | str="3WSH_B"; break; |
361 | case SSL3_ST_SR_CERT_A: str="3RCC_A"; break; | 549 | case SSL3_ST_SW_CERT_A: |
362 | case SSL3_ST_SR_CERT_B: str="3RCC_B"; break; | 550 | str="3WSC_A"; break; |
363 | case SSL3_ST_SR_KEY_EXCH_A: str="3RCKEA"; break; | 551 | case SSL3_ST_SW_CERT_B: |
364 | case SSL3_ST_SR_KEY_EXCH_B: str="3RCKEB"; break; | 552 | str="3WSC_B"; break; |
365 | case SSL3_ST_SR_CERT_VRFY_A: str="3RCV_A"; break; | 553 | case SSL3_ST_SW_KEY_EXCH_A: |
366 | case SSL3_ST_SR_CERT_VRFY_B: str="3RCV_B"; break; | 554 | str="3WSKEA"; break; |
555 | case SSL3_ST_SW_KEY_EXCH_B: | ||
556 | str="3WSKEB"; break; | ||
557 | case SSL3_ST_SW_CERT_REQ_A: | ||
558 | str="3WCR_A"; break; | ||
559 | case SSL3_ST_SW_CERT_REQ_B: | ||
560 | str="3WCR_B"; break; | ||
561 | case SSL3_ST_SW_SRVR_DONE_A: | ||
562 | str="3WSD_A"; break; | ||
563 | case SSL3_ST_SW_SRVR_DONE_B: | ||
564 | str="3WSD_B"; break; | ||
565 | case SSL3_ST_SR_CERT_A: | ||
566 | str="3RCC_A"; break; | ||
567 | case SSL3_ST_SR_CERT_B: | ||
568 | str="3RCC_B"; break; | ||
569 | case SSL3_ST_SR_KEY_EXCH_A: | ||
570 | str="3RCKEA"; break; | ||
571 | case SSL3_ST_SR_KEY_EXCH_B: | ||
572 | str="3RCKEB"; break; | ||
573 | case SSL3_ST_SR_CERT_VRFY_A: | ||
574 | str="3RCV_A"; break; | ||
575 | case SSL3_ST_SR_CERT_VRFY_B: | ||
576 | str="3RCV_B"; break; | ||
367 | #endif | 577 | #endif |
368 | 578 | ||
369 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) | 579 | #if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) |
370 | /* SSLv2/v3 compatibility states */ | 580 | /* SSLv2/v3 compatibility states */ |
371 | /* client */ | 581 | /* client */ |
372 | case SSL23_ST_CW_CLNT_HELLO_A: str="23WCHA"; break; | 582 | case SSL23_ST_CW_CLNT_HELLO_A: |
373 | case SSL23_ST_CW_CLNT_HELLO_B: str="23WCHB"; break; | 583 | str="23WCHA"; break; |
374 | case SSL23_ST_CR_SRVR_HELLO_A: str="23RSHA"; break; | 584 | case SSL23_ST_CW_CLNT_HELLO_B: |
375 | case SSL23_ST_CR_SRVR_HELLO_B: str="23RSHA"; break; | 585 | str="23WCHB"; break; |
586 | case SSL23_ST_CR_SRVR_HELLO_A: | ||
587 | str="23RSHA"; break; | ||
588 | case SSL23_ST_CR_SRVR_HELLO_B: | ||
589 | str="23RSHA"; break; | ||
376 | /* server */ | 590 | /* server */ |
377 | case SSL23_ST_SR_CLNT_HELLO_A: str="23RCHA"; break; | 591 | case SSL23_ST_SR_CLNT_HELLO_A: |
378 | case SSL23_ST_SR_CLNT_HELLO_B: str="23RCHB"; break; | 592 | str="23RCHA"; break; |
593 | case SSL23_ST_SR_CLNT_HELLO_B: | ||
594 | str="23RCHB"; break; | ||
379 | #endif | 595 | #endif |
380 | /* DTLS */ | 596 | /* DTLS */ |
381 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: str="DRCHVA"; break; | 597 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A: |
382 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: str="DRCHVB"; break; | 598 | str="DRCHVA"; break; |
383 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: str="DWCHVA"; break; | 599 | case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B: |
384 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: str="DWCHVB"; break; | 600 | str="DRCHVB"; break; |
601 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A: | ||
602 | str="DWCHVA"; break; | ||
603 | case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B: | ||
604 | str="DWCHVB"; break; | ||
385 | 605 | ||
386 | default: str="UNKWN "; break; | 606 | default: |
387 | } | 607 | str="UNKWN "; break; |
388 | return(str); | ||
389 | } | 608 | } |
609 | return (str); | ||
610 | } | ||
390 | 611 | ||
391 | const char *SSL_alert_type_string_long(int value) | 612 | const char |
392 | { | 613 | *SSL_alert_type_string_long(int value) |
614 | { | ||
393 | value>>=8; | 615 | value>>=8; |
394 | if (value == SSL3_AL_WARNING) | 616 | if (value == SSL3_AL_WARNING) |
395 | return("warning"); | 617 | return("warning"); |
@@ -397,10 +619,11 @@ const char *SSL_alert_type_string_long(int value) | |||
397 | return("fatal"); | 619 | return("fatal"); |
398 | else | 620 | else |
399 | return("unknown"); | 621 | return("unknown"); |
400 | } | 622 | } |
401 | 623 | ||
402 | const char *SSL_alert_type_string(int value) | 624 | const char |
403 | { | 625 | *SSL_alert_type_string(int value) |
626 | { | ||
404 | value>>=8; | 627 | value>>=8; |
405 | if (value == SSL3_AL_WARNING) | 628 | if (value == SSL3_AL_WARNING) |
406 | return("W"); | 629 | return("W"); |
@@ -408,55 +631,86 @@ const char *SSL_alert_type_string(int value) | |||
408 | return("F"); | 631 | return("F"); |
409 | else | 632 | else |
410 | return("U"); | 633 | return("U"); |
411 | } | 634 | } |
412 | 635 | ||
413 | const char *SSL_alert_desc_string(int value) | 636 | const char |
414 | { | 637 | *SSL_alert_desc_string(int value) |
638 | { | ||
415 | const char *str; | 639 | const char *str; |
416 | 640 | ||
417 | switch (value & 0xff) | 641 | switch (value & 0xff) { |
418 | { | 642 | case SSL3_AD_CLOSE_NOTIFY: |
419 | case SSL3_AD_CLOSE_NOTIFY: str="CN"; break; | 643 | str="CN"; break; |
420 | case SSL3_AD_UNEXPECTED_MESSAGE: str="UM"; break; | 644 | case SSL3_AD_UNEXPECTED_MESSAGE: |
421 | case SSL3_AD_BAD_RECORD_MAC: str="BM"; break; | 645 | str="UM"; break; |
422 | case SSL3_AD_DECOMPRESSION_FAILURE: str="DF"; break; | 646 | case SSL3_AD_BAD_RECORD_MAC: |
423 | case SSL3_AD_HANDSHAKE_FAILURE: str="HF"; break; | 647 | str="BM"; break; |
424 | case SSL3_AD_NO_CERTIFICATE: str="NC"; break; | 648 | case SSL3_AD_DECOMPRESSION_FAILURE: |
425 | case SSL3_AD_BAD_CERTIFICATE: str="BC"; break; | 649 | str="DF"; break; |
426 | case SSL3_AD_UNSUPPORTED_CERTIFICATE: str="UC"; break; | 650 | case SSL3_AD_HANDSHAKE_FAILURE: |
427 | case SSL3_AD_CERTIFICATE_REVOKED: str="CR"; break; | 651 | str="HF"; break; |
428 | case SSL3_AD_CERTIFICATE_EXPIRED: str="CE"; break; | 652 | case SSL3_AD_NO_CERTIFICATE: |
429 | case SSL3_AD_CERTIFICATE_UNKNOWN: str="CU"; break; | 653 | str="NC"; break; |
430 | case SSL3_AD_ILLEGAL_PARAMETER: str="IP"; break; | 654 | case SSL3_AD_BAD_CERTIFICATE: |
431 | case TLS1_AD_DECRYPTION_FAILED: str="DC"; break; | 655 | str="BC"; break; |
432 | case TLS1_AD_RECORD_OVERFLOW: str="RO"; break; | 656 | case SSL3_AD_UNSUPPORTED_CERTIFICATE: |
433 | case TLS1_AD_UNKNOWN_CA: str="CA"; break; | 657 | str="UC"; break; |
434 | case TLS1_AD_ACCESS_DENIED: str="AD"; break; | 658 | case SSL3_AD_CERTIFICATE_REVOKED: |
435 | case TLS1_AD_DECODE_ERROR: str="DE"; break; | 659 | str="CR"; break; |
436 | case TLS1_AD_DECRYPT_ERROR: str="CY"; break; | 660 | case SSL3_AD_CERTIFICATE_EXPIRED: |
437 | case TLS1_AD_EXPORT_RESTRICTION: str="ER"; break; | 661 | str="CE"; break; |
438 | case TLS1_AD_PROTOCOL_VERSION: str="PV"; break; | 662 | case SSL3_AD_CERTIFICATE_UNKNOWN: |
439 | case TLS1_AD_INSUFFICIENT_SECURITY: str="IS"; break; | 663 | str="CU"; break; |
440 | case TLS1_AD_INTERNAL_ERROR: str="IE"; break; | 664 | case SSL3_AD_ILLEGAL_PARAMETER: |
441 | case TLS1_AD_USER_CANCELLED: str="US"; break; | 665 | str="IP"; break; |
442 | case TLS1_AD_NO_RENEGOTIATION: str="NR"; break; | 666 | case TLS1_AD_DECRYPTION_FAILED: |
443 | case TLS1_AD_UNSUPPORTED_EXTENSION: str="UE"; break; | 667 | str="DC"; break; |
444 | case TLS1_AD_CERTIFICATE_UNOBTAINABLE: str="CO"; break; | 668 | case TLS1_AD_RECORD_OVERFLOW: |
445 | case TLS1_AD_UNRECOGNIZED_NAME: str="UN"; break; | 669 | str="RO"; break; |
446 | case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: str="BR"; break; | 670 | case TLS1_AD_UNKNOWN_CA: |
447 | case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: str="BH"; break; | 671 | str="CA"; break; |
448 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: str="UP"; break; | 672 | case TLS1_AD_ACCESS_DENIED: |
449 | default: str="UK"; break; | 673 | str="AD"; break; |
450 | } | 674 | case TLS1_AD_DECODE_ERROR: |
451 | return(str); | 675 | str="DE"; break; |
676 | case TLS1_AD_DECRYPT_ERROR: | ||
677 | str="CY"; break; | ||
678 | case TLS1_AD_EXPORT_RESTRICTION: | ||
679 | str="ER"; break; | ||
680 | case TLS1_AD_PROTOCOL_VERSION: | ||
681 | str="PV"; break; | ||
682 | case TLS1_AD_INSUFFICIENT_SECURITY: | ||
683 | str="IS"; break; | ||
684 | case TLS1_AD_INTERNAL_ERROR: | ||
685 | str="IE"; break; | ||
686 | case TLS1_AD_USER_CANCELLED: | ||
687 | str="US"; break; | ||
688 | case TLS1_AD_NO_RENEGOTIATION: | ||
689 | str="NR"; break; | ||
690 | case TLS1_AD_UNSUPPORTED_EXTENSION: | ||
691 | str="UE"; break; | ||
692 | case TLS1_AD_CERTIFICATE_UNOBTAINABLE: | ||
693 | str="CO"; break; | ||
694 | case TLS1_AD_UNRECOGNIZED_NAME: | ||
695 | str="UN"; break; | ||
696 | case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: | ||
697 | str="BR"; break; | ||
698 | case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: | ||
699 | str="BH"; break; | ||
700 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: | ||
701 | str="UP"; break; | ||
702 | default: | ||
703 | str="UK"; break; | ||
452 | } | 704 | } |
705 | return (str); | ||
706 | } | ||
453 | 707 | ||
454 | const char *SSL_alert_desc_string_long(int value) | 708 | const char |
455 | { | 709 | *SSL_alert_desc_string_long(int value) |
710 | { | ||
456 | const char *str; | 711 | const char *str; |
457 | 712 | ||
458 | switch (value & 0xff) | 713 | switch (value & 0xff) { |
459 | { | ||
460 | case SSL3_AD_CLOSE_NOTIFY: | 714 | case SSL3_AD_CLOSE_NOTIFY: |
461 | str="close notify"; | 715 | str="close notify"; |
462 | break; | 716 | break; |
@@ -547,21 +801,26 @@ const char *SSL_alert_desc_string_long(int value) | |||
547 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: | 801 | case TLS1_AD_UNKNOWN_PSK_IDENTITY: |
548 | str="unknown PSK identity"; | 802 | str="unknown PSK identity"; |
549 | break; | 803 | break; |
550 | default: str="unknown"; break; | 804 | default: |
551 | } | 805 | str="unknown"; break; |
552 | return(str); | ||
553 | } | 806 | } |
807 | return (str); | ||
808 | } | ||
554 | 809 | ||
555 | const char *SSL_rstate_string(const SSL *s) | 810 | const char |
556 | { | 811 | *SSL_rstate_string(const SSL *s) |
812 | { | ||
557 | const char *str; | 813 | const char *str; |
558 | 814 | ||
559 | switch (s->rstate) | 815 | switch (s->rstate) { |
560 | { | 816 | case SSL_ST_READ_HEADER: |
561 | case SSL_ST_READ_HEADER:str="RH"; break; | 817 | str="RH"; break; |
562 | case SSL_ST_READ_BODY: str="RB"; break; | 818 | case SSL_ST_READ_BODY: |
563 | case SSL_ST_READ_DONE: str="RD"; break; | 819 | str="RB"; break; |
564 | default: str="unknown"; break; | 820 | case SSL_ST_READ_DONE: |
565 | } | 821 | str="RD"; break; |
566 | return(str); | 822 | default: |
823 | str="unknown"; break; | ||
567 | } | 824 | } |
825 | return (str); | ||
826 | } | ||
diff --git a/src/lib/libssl/ssl_txt.c b/src/lib/libssl/ssl_txt.c index 6479d52c0c..5186e396ec 100644 --- a/src/lib/libssl/ssl_txt.c +++ b/src/lib/libssl/ssl_txt.c | |||
@@ -87,30 +87,33 @@ | |||
87 | #include "ssl_locl.h" | 87 | #include "ssl_locl.h" |
88 | 88 | ||
89 | #ifndef OPENSSL_NO_FP_API | 89 | #ifndef OPENSSL_NO_FP_API |
90 | int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *x) | 90 | int |
91 | { | 91 | SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *x) |
92 | { | ||
92 | BIO *b; | 93 | BIO *b; |
93 | int ret; | 94 | int ret; |
94 | 95 | ||
95 | if ((b=BIO_new(BIO_s_file_internal())) == NULL) | 96 | if ((b = BIO_new(BIO_s_file_internal())) == NULL) { |
96 | { | 97 | SSLerr(SSL_F_SSL_SESSION_PRINT_FP, ERR_R_BUF_LIB); |
97 | SSLerr(SSL_F_SSL_SESSION_PRINT_FP,ERR_R_BUF_LIB); | 98 | return (0); |
98 | return(0); | ||
99 | } | ||
100 | BIO_set_fp(b,fp,BIO_NOCLOSE); | ||
101 | ret=SSL_SESSION_print(b,x); | ||
102 | BIO_free(b); | ||
103 | return(ret); | ||
104 | } | 99 | } |
100 | BIO_set_fp(b, fp, BIO_NOCLOSE); | ||
101 | ret = SSL_SESSION_print(b, x); | ||
102 | BIO_free(b); | ||
103 | return (ret); | ||
104 | } | ||
105 | #endif | 105 | #endif |
106 | 106 | ||
107 | int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) | 107 | int |
108 | { | 108 | SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) |
109 | { | ||
109 | unsigned int i; | 110 | unsigned int i; |
110 | const char *s; | 111 | const char *s; |
111 | 112 | ||
112 | if (x == NULL) goto err; | 113 | if (x == NULL) |
113 | if (BIO_puts(bp,"SSL-Session:\n") <= 0) goto err; | 114 | goto err; |
115 | if (BIO_puts(bp, "SSL-Session:\n") | ||
116 | <= 0) goto err; | ||
114 | if (x->ssl_version == SSL2_VERSION) | 117 | if (x->ssl_version == SSL2_VERSION) |
115 | s="SSLv2"; | 118 | s="SSLv2"; |
116 | else if (x->ssl_version == SSL3_VERSION) | 119 | else if (x->ssl_version == SSL3_VERSION) |
@@ -127,122 +130,122 @@ int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) | |||
127 | s="DTLSv1-bad"; | 130 | s="DTLSv1-bad"; |
128 | else | 131 | else |
129 | s="unknown"; | 132 | s="unknown"; |
130 | if (BIO_printf(bp," Protocol : %s\n",s) <= 0) goto err; | 133 | if (BIO_printf(bp, " Protocol : %s\n", s) |
134 | <= 0) goto err; | ||
131 | 135 | ||
132 | if (x->cipher == NULL) | 136 | if (x->cipher == NULL) { |
133 | { | 137 | if (((x->cipher_id) & 0xff000000) == 0x02000000) { |
134 | if (((x->cipher_id) & 0xff000000) == 0x02000000) | 138 | if (BIO_printf(bp, " Cipher : %06lX\n", x->cipher_id&0xffffff) <= 0) |
135 | { | ||
136 | if (BIO_printf(bp," Cipher : %06lX\n",x->cipher_id&0xffffff) <= 0) | ||
137 | goto err; | 139 | goto err; |
138 | } | 140 | } else { |
139 | else | 141 | if (BIO_printf(bp, " Cipher : %04lX\n", x->cipher_id&0xffff) <= 0) |
140 | { | ||
141 | if (BIO_printf(bp," Cipher : %04lX\n",x->cipher_id&0xffff) <= 0) | ||
142 | goto err; | 142 | goto err; |
143 | } | ||
144 | } | 143 | } |
145 | else | 144 | } else { |
146 | { | 145 | if (BIO_printf(bp, " Cipher : %s\n",((x->cipher == NULL)?"unknown":x->cipher->name)) <= 0) |
147 | if (BIO_printf(bp," Cipher : %s\n",((x->cipher == NULL)?"unknown":x->cipher->name)) <= 0) | ||
148 | goto err; | 146 | goto err; |
149 | } | 147 | } |
150 | if (BIO_puts(bp," Session-ID: ") <= 0) goto err; | 148 | if (BIO_puts(bp, " Session-ID: ") |
151 | for (i=0; i<x->session_id_length; i++) | 149 | <= 0) goto err; |
152 | { | 150 | for (i = 0; i < x->session_id_length; i++) { |
153 | if (BIO_printf(bp,"%02X",x->session_id[i]) <= 0) goto err; | 151 | if (BIO_printf(bp, "%02X", x->session_id[i]) |
154 | } | 152 | <= 0) goto err; |
155 | if (BIO_puts(bp,"\n Session-ID-ctx: ") <= 0) goto err; | 153 | } |
156 | for (i=0; i<x->sid_ctx_length; i++) | 154 | if (BIO_puts(bp, "\n Session-ID-ctx: ") |
157 | { | 155 | <= 0) goto err; |
158 | if (BIO_printf(bp,"%02X",x->sid_ctx[i]) <= 0) | 156 | for (i = 0; i < x->sid_ctx_length; i++) { |
157 | if (BIO_printf(bp, "%02X", x->sid_ctx[i]) <= 0) | ||
159 | goto err; | 158 | goto err; |
160 | } | 159 | } |
161 | if (BIO_puts(bp,"\n Master-Key: ") <= 0) goto err; | 160 | if (BIO_puts(bp, "\n Master-Key: ") |
162 | for (i=0; i<(unsigned int)x->master_key_length; i++) | 161 | <= 0) goto err; |
163 | { | 162 | for (i = 0; i < (unsigned int)x->master_key_length; i++) { |
164 | if (BIO_printf(bp,"%02X",x->master_key[i]) <= 0) goto err; | 163 | if (BIO_printf(bp, "%02X", x->master_key[i]) |
165 | } | 164 | <= 0) goto err; |
166 | if (BIO_puts(bp,"\n Key-Arg : ") <= 0) goto err; | 165 | } |
167 | if (x->key_arg_length == 0) | 166 | if (BIO_puts(bp, "\n Key-Arg : ") |
168 | { | 167 | <= 0) goto err; |
169 | if (BIO_puts(bp,"None") <= 0) goto err; | 168 | if (x->key_arg_length == 0) { |
170 | } | 169 | if (BIO_puts(bp, "None") |
171 | else | 170 | <= 0) goto err; |
172 | for (i=0; i<x->key_arg_length; i++) | 171 | } else |
173 | { | 172 | for (i = 0; i < x->key_arg_length; i++) { |
174 | if (BIO_printf(bp,"%02X",x->key_arg[i]) <= 0) goto err; | 173 | if (BIO_printf(bp, "%02X", x->key_arg[i]) |
175 | } | 174 | <= 0) goto err; |
175 | } | ||
176 | #ifndef OPENSSL_NO_KRB5 | 176 | #ifndef OPENSSL_NO_KRB5 |
177 | if (BIO_puts(bp,"\n Krb5 Principal: ") <= 0) goto err; | 177 | if (BIO_puts(bp, "\n Krb5 Principal: ") |
178 | if (x->krb5_client_princ_len == 0) | 178 | <= 0) goto err; |
179 | { | 179 | if (x->krb5_client_princ_len == 0) { |
180 | if (BIO_puts(bp,"None") <= 0) goto err; | 180 | if (BIO_puts(bp, "None") |
181 | } | 181 | <= 0) goto err; |
182 | else | 182 | } else |
183 | for (i=0; i<x->krb5_client_princ_len; i++) | 183 | for (i = 0; i < x->krb5_client_princ_len; i++) { |
184 | { | 184 | if (BIO_printf(bp, "%02X", x->krb5_client_princ[i]) |
185 | if (BIO_printf(bp,"%02X",x->krb5_client_princ[i]) <= 0) goto err; | 185 | <= 0) goto err; |
186 | } | 186 | } |
187 | #endif /* OPENSSL_NO_KRB5 */ | 187 | #endif /* OPENSSL_NO_KRB5 */ |
188 | #ifndef OPENSSL_NO_PSK | 188 | #ifndef OPENSSL_NO_PSK |
189 | if (BIO_puts(bp,"\n PSK identity: ") <= 0) goto err; | 189 | if (BIO_puts(bp, "\n PSK identity: ") |
190 | if (BIO_printf(bp, "%s", x->psk_identity ? x->psk_identity : "None") <= 0) goto err; | 190 | <= 0) goto err; |
191 | if (BIO_puts(bp,"\n PSK identity hint: ") <= 0) goto err; | 191 | if (BIO_printf(bp, "%s", x->psk_identity ? x->psk_identity : "None") |
192 | if (BIO_printf(bp, "%s", x->psk_identity_hint ? x->psk_identity_hint : "None") <= 0) goto err; | 192 | <= 0) goto err; |
193 | if (BIO_puts(bp, "\n PSK identity hint: ") | ||
194 | <= 0) goto err; | ||
195 | if (BIO_printf(bp, "%s", x->psk_identity_hint ? x->psk_identity_hint : "None") | ||
196 | <= 0) goto err; | ||
193 | #endif | 197 | #endif |
194 | #ifndef OPENSSL_NO_SRP | 198 | #ifndef OPENSSL_NO_SRP |
195 | if (BIO_puts(bp,"\n SRP username: ") <= 0) goto err; | 199 | if (BIO_puts(bp, "\n SRP username: ") |
196 | if (BIO_printf(bp, "%s", x->srp_username ? x->srp_username : "None") <= 0) goto err; | 200 | <= 0) goto err; |
201 | if (BIO_printf(bp, "%s", x->srp_username ? x->srp_username : "None") | ||
202 | <= 0) goto err; | ||
197 | #endif | 203 | #endif |
198 | #ifndef OPENSSL_NO_TLSEXT | 204 | #ifndef OPENSSL_NO_TLSEXT |
199 | if (x->tlsext_tick_lifetime_hint) | 205 | if (x->tlsext_tick_lifetime_hint) { |
200 | { | ||
201 | if (BIO_printf(bp, | 206 | if (BIO_printf(bp, |
202 | "\n TLS session ticket lifetime hint: %ld (seconds)", | 207 | "\n TLS session ticket lifetime hint: %ld (seconds)", |
203 | x->tlsext_tick_lifetime_hint) <=0) | 208 | x->tlsext_tick_lifetime_hint) <=0) |
204 | goto err; | 209 | goto err; |
205 | } | 210 | } |
206 | if (x->tlsext_tick) | 211 | if (x->tlsext_tick) { |
207 | { | 212 | if (BIO_puts(bp, "\n TLS session ticket:\n") |
208 | if (BIO_puts(bp, "\n TLS session ticket:\n") <= 0) goto err; | 213 | <= 0) goto err; |
209 | if (BIO_dump_indent(bp, (char *)x->tlsext_tick, x->tlsext_ticklen, 4) <= 0) | 214 | if (BIO_dump_indent(bp, (char *)x->tlsext_tick, x->tlsext_ticklen, 4) <= 0) |
210 | goto err; | 215 | goto err; |
211 | } | 216 | } |
212 | #endif | 217 | #endif |
213 | 218 | ||
214 | #ifndef OPENSSL_NO_COMP | 219 | #ifndef OPENSSL_NO_COMP |
215 | if (x->compress_meth != 0) | 220 | if (x->compress_meth != 0) { |
216 | { | ||
217 | SSL_COMP *comp = NULL; | 221 | SSL_COMP *comp = NULL; |
218 | 222 | ||
219 | ssl_cipher_get_evp(x,NULL,NULL,NULL,NULL,&comp); | 223 | ssl_cipher_get_evp(x, NULL, NULL, NULL, NULL, &comp); |
220 | if (comp == NULL) | 224 | if (comp == NULL) { |
221 | { | 225 | if (BIO_printf(bp, "\n Compression: %d", x->compress_meth) |
222 | if (BIO_printf(bp,"\n Compression: %d",x->compress_meth) <= 0) goto err; | 226 | <= 0) goto err; |
227 | } else { | ||
228 | if (BIO_printf(bp, "\n Compression: %d (%s)", comp->id, comp->method->name) <= 0) goto err; | ||
223 | } | 229 | } |
224 | else | 230 | } |
225 | { | ||
226 | if (BIO_printf(bp,"\n Compression: %d (%s)", comp->id,comp->method->name) <= 0) goto err; | ||
227 | } | ||
228 | } | ||
229 | #endif | 231 | #endif |
230 | if (x->time != 0L) | 232 | if (x->time != 0L) { |
231 | { | 233 | if (BIO_printf(bp, "\n Start Time: %ld", x->time) |
232 | if (BIO_printf(bp, "\n Start Time: %ld",x->time) <= 0) goto err; | 234 | <= 0) goto err; |
233 | } | 235 | } |
234 | if (x->timeout != 0L) | 236 | if (x->timeout != 0L) { |
235 | { | 237 | if (BIO_printf(bp, "\n Timeout : %ld (sec)", x->timeout) <= 0) goto err; |
236 | if (BIO_printf(bp, "\n Timeout : %ld (sec)",x->timeout) <= 0) goto err; | ||
237 | } | 238 | } |
238 | if (BIO_puts(bp,"\n") <= 0) goto err; | 239 | if (BIO_puts(bp, "\n") |
240 | <= 0) goto err; | ||
239 | 241 | ||
240 | if (BIO_puts(bp, " Verify return code: ") <= 0) goto err; | 242 | if (BIO_puts(bp, " Verify return code: ") |
243 | <= 0) goto err; | ||
241 | if (BIO_printf(bp, "%ld (%s)\n", x->verify_result, | 244 | if (BIO_printf(bp, "%ld (%s)\n", x->verify_result, |
242 | X509_verify_cert_error_string(x->verify_result)) <= 0) goto err; | 245 | X509_verify_cert_error_string(x->verify_result)) <= 0) goto err; |
243 | 246 | ||
244 | return(1); | 247 | return (1); |
245 | err: | 248 | err: |
246 | return(0); | 249 | return (0); |
247 | } | 250 | } |
248 | 251 | ||