diff options
Diffstat (limited to 'src/lib/libssl/ssl_locl.h')
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 152 |
1 files changed, 104 insertions, 48 deletions
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 0bfd57db32..9a52bab254 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -155,6 +155,19 @@ | |||
155 | #define DEC32(a) ((a)=((a)-1)&0xffffffffL) | 155 | #define DEC32(a) ((a)=((a)-1)&0xffffffffL) |
156 | #define MAX_MAC_SIZE 20 /* up from 16 for SSLv3 */ | 156 | #define MAX_MAC_SIZE 20 /* up from 16 for SSLv3 */ |
157 | 157 | ||
158 | /* | ||
159 | * Define the Bitmasks for SSL_CIPHER.algorithms. | ||
160 | * This bits are used packed as dense as possible. If new methods/ciphers | ||
161 | * etc will be added, the bits a likely to change, so this information | ||
162 | * is for internal library use only, even though SSL_CIPHER.algorithms | ||
163 | * can be publicly accessed. | ||
164 | * Use the according functions for cipher management instead. | ||
165 | * | ||
166 | * The bit mask handling in the selection and sorting scheme in | ||
167 | * ssl_create_cipher_list() has only limited capabilities, reflecting | ||
168 | * that the different entities within are mutually exclusive: | ||
169 | * ONLY ONE BIT PER MASK CAN BE SET AT A TIME. | ||
170 | */ | ||
158 | #define SSL_MKEY_MASK 0x0000001FL | 171 | #define SSL_MKEY_MASK 0x0000001FL |
159 | #define SSL_kRSA 0x00000001L /* RSA key exchange */ | 172 | #define SSL_kRSA 0x00000001L /* RSA key exchange */ |
160 | #define SSL_kDHr 0x00000002L /* DH cert RSA CA cert */ | 173 | #define SSL_kDHr 0x00000002L /* DH cert RSA CA cert */ |
@@ -191,36 +204,75 @@ | |||
191 | #define SSL_SHA1 0x00040000L | 204 | #define SSL_SHA1 0x00040000L |
192 | #define SSL_SHA (SSL_SHA1) | 205 | #define SSL_SHA (SSL_SHA1) |
193 | 206 | ||
194 | #define SSL_EXP_MASK 0x00300000L | 207 | #define SSL_SSL_MASK 0x00180000L |
195 | #define SSL_EXP40 0x00100000L | 208 | #define SSL_SSLV2 0x00080000L |
196 | #define SSL_NOT_EXP 0x00200000L | 209 | #define SSL_SSLV3 0x00100000L |
197 | #define SSL_EXP56 0x00300000L | 210 | #define SSL_TLSV1 SSL_SSLV3 /* for now */ |
198 | #define SSL_IS_EXPORT(a) ((a)&SSL_EXP40) | 211 | |
199 | #define SSL_IS_EXPORT56(a) (((a)&SSL_EXP_MASK) == SSL_EXP56) | 212 | /* we have used 001fffff - 11 bits left to go */ |
200 | #define SSL_IS_EXPORT40(a) (((a)&SSL_EXP_MASK) == SSL_EXP40) | 213 | |
201 | #define SSL_C_IS_EXPORT(c) SSL_IS_EXPORT((c)->algorithms) | 214 | /* |
202 | #define SSL_C_IS_EXPORT56(c) SSL_IS_EXPORT56((c)->algorithms) | 215 | * Export and cipher strength information. For each cipher we have to decide |
203 | #define SSL_C_IS_EXPORT40(c) SSL_IS_EXPORT40((c)->algorithms) | 216 | * whether it is exportable or not. This information is likely to change |
204 | #define SSL_EXPORT_KEYLENGTH(a) (SSL_IS_EXPORT40(a) ? 5 : \ | 217 | * over time, since the export control rules are no static technical issue. |
218 | * | ||
219 | * Independent of the export flag the cipher strength is sorted into classes. | ||
220 | * SSL_EXP40 was denoting the 40bit US export limit of past times, which now | ||
221 | * is at 56bit (SSL_EXP56). If the exportable cipher class is going to change | ||
222 | * again (eg. to 64bit) the use of "SSL_EXP*" becomes blurred even more, | ||
223 | * since SSL_EXP64 could be similar to SSL_LOW. | ||
224 | * For this reason SSL_MICRO and SSL_MINI macros are included to widen the | ||
225 | * namespace of SSL_LOW-SSL_HIGH to lower values. As development of speed | ||
226 | * and ciphers goes, another extension to SSL_SUPER and/or SSL_ULTRA would | ||
227 | * be possible. | ||
228 | */ | ||
229 | #define SSL_EXP_MASK 0x00000003L | ||
230 | #define SSL_NOT_EXP 0x00000001L | ||
231 | #define SSL_EXPORT 0x00000002L | ||
232 | |||
233 | #define SSL_STRONG_MASK 0x0000007cL | ||
234 | #define SSL_EXP40 0x00000004L | ||
235 | #define SSL_MICRO (SSL_EXP40) | ||
236 | #define SSL_EXP56 0x00000008L | ||
237 | #define SSL_MINI (SSL_EXP56) | ||
238 | #define SSL_LOW 0x00000010L | ||
239 | #define SSL_MEDIUM 0x00000020L | ||
240 | #define SSL_HIGH 0x00000040L | ||
241 | |||
242 | /* we have used 0000007f - 25 bits left to go */ | ||
243 | |||
244 | /* | ||
245 | * Macros to check the export status and cipher strength for export ciphers. | ||
246 | * Even though the macros for EXPORT and EXPORT40/56 have similar names, | ||
247 | * their meaning is different: | ||
248 | * *_EXPORT macros check the 'exportable' status. | ||
249 | * *_EXPORT40/56 macros are used to check whether a certain cipher strength | ||
250 | * is given. | ||
251 | * Since the SSL_IS_EXPORT* and SSL_EXPORT* macros depend on the correct | ||
252 | * algorithm structure element to be passed (algorithms, algo_strength) and no | ||
253 | * typechecking can be done as they are all of type unsigned long, their | ||
254 | * direct usage is discouraged. | ||
255 | * Use the SSL_C_* macros instead. | ||
256 | */ | ||
257 | #define SSL_IS_EXPORT(a) ((a)&SSL_EXPORT) | ||
258 | #define SSL_IS_EXPORT56(a) ((a)&SSL_EXP56) | ||
259 | #define SSL_IS_EXPORT40(a) ((a)&SSL_EXP40) | ||
260 | #define SSL_C_IS_EXPORT(c) SSL_IS_EXPORT((c)->algo_strength) | ||
261 | #define SSL_C_IS_EXPORT56(c) SSL_IS_EXPORT56((c)->algo_strength) | ||
262 | #define SSL_C_IS_EXPORT40(c) SSL_IS_EXPORT40((c)->algo_strength) | ||
263 | |||
264 | #define SSL_EXPORT_KEYLENGTH(a,s) (SSL_IS_EXPORT40(s) ? 5 : \ | ||
205 | ((a)&SSL_ENC_MASK) == SSL_DES ? 8 : 7) | 265 | ((a)&SSL_ENC_MASK) == SSL_DES ? 8 : 7) |
206 | #define SSL_EXPORT_PKEYLENGTH(a) (SSL_IS_EXPORT40(a) ? 512 : 1024) | 266 | #define SSL_EXPORT_PKEYLENGTH(a) (SSL_IS_EXPORT40(a) ? 512 : 1024) |
207 | #define SSL_C_EXPORT_KEYLENGTH(c) SSL_EXPORT_KEYLENGTH((c)->algorithms) | 267 | #define SSL_C_EXPORT_KEYLENGTH(c) SSL_EXPORT_KEYLENGTH((c)->algorithms, \ |
208 | #define SSL_C_EXPORT_PKEYLENGTH(c) SSL_EXPORT_PKEYLENGTH((c)->algorithms) | 268 | (c)->algo_strength) |
209 | 269 | #define SSL_C_EXPORT_PKEYLENGTH(c) SSL_EXPORT_PKEYLENGTH((c)->algo_strength) | |
210 | #define SSL_SSL_MASK 0x00c00000L | ||
211 | #define SSL_SSLV2 0x00400000L | ||
212 | #define SSL_SSLV3 0x00800000L | ||
213 | #define SSL_TLSV1 SSL_SSLV3 /* for now */ | ||
214 | 270 | ||
215 | #define SSL_STRONG_MASK 0x07000000L | ||
216 | #define SSL_LOW 0x01000000L | ||
217 | #define SSL_MEDIUM 0x02000000L | ||
218 | #define SSL_HIGH 0x04000000L | ||
219 | 271 | ||
220 | /* we have used 0fffffff - 4 bits left to go */ | ||
221 | #define SSL_ALL 0xffffffffL | 272 | #define SSL_ALL 0xffffffffL |
222 | #define SSL_ALL_CIPHERS (SSL_MKEY_MASK|SSL_AUTH_MASK|SSL_ENC_MASK|\ | 273 | #define SSL_ALL_CIPHERS (SSL_MKEY_MASK|SSL_AUTH_MASK|SSL_ENC_MASK|\ |
223 | SSL_MAC_MASK|SSL_EXP_MASK) | 274 | SSL_MAC_MASK) |
275 | #define SSL_ALL_STRENGTHS (SSL_EXP_MASK|SSL_STRONG_MASK) | ||
224 | 276 | ||
225 | /* Mostly for SSLv3 */ | 277 | /* Mostly for SSLv3 */ |
226 | #define SSL_PKEY_RSA_ENC 0 | 278 | #define SSL_PKEY_RSA_ENC 0 |
@@ -254,9 +306,9 @@ typedef struct cert_st | |||
254 | { | 306 | { |
255 | /* Current active set */ | 307 | /* Current active set */ |
256 | CERT_PKEY *key; /* ALWAYS points to an element of the pkeys array | 308 | CERT_PKEY *key; /* ALWAYS points to an element of the pkeys array |
257 | * Probably it would make more sense to store | 309 | * Probably it would make more sense to store |
258 | * an index, not a pointer. */ | 310 | * an index, not a pointer. */ |
259 | 311 | ||
260 | /* The following masks are for the key and auth | 312 | /* The following masks are for the key and auth |
261 | * algorithms that are supported by the certs below */ | 313 | * algorithms that are supported by the certs below */ |
262 | int valid; | 314 | int valid; |
@@ -319,28 +371,28 @@ typedef struct sess_cert_st | |||
319 | 371 | ||
320 | /* This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff | 372 | /* This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff |
321 | * It is a bit of a mess of functions, but hell, think of it as | 373 | * It is a bit of a mess of functions, but hell, think of it as |
322 | * an opaque strucute :-) */ | 374 | * an opaque structure :-) */ |
323 | typedef struct ssl3_enc_method | 375 | typedef struct ssl3_enc_method |
324 | { | 376 | { |
325 | int (*enc)(); | 377 | int (*enc)(SSL *, int); |
326 | int (*mac)(); | 378 | int (*mac)(SSL *, unsigned char *, int); |
327 | int (*setup_key_block)(); | 379 | int (*setup_key_block)(SSL *); |
328 | int (*generate_master_secret)(); | 380 | int (*generate_master_secret)(SSL *, unsigned char *, unsigned char *, int); |
329 | int (*change_cipher_state)(); | 381 | int (*change_cipher_state)(SSL *, int); |
330 | int (*final_finish_mac)(); | 382 | int (*final_finish_mac)(SSL *, EVP_MD_CTX *, EVP_MD_CTX *, const char *, int, unsigned char *); |
331 | int finish_mac_length; | 383 | int finish_mac_length; |
332 | int (*cert_verify_mac)(); | 384 | int (*cert_verify_mac)(SSL *, EVP_MD_CTX *, unsigned char *); |
333 | unsigned char client_finished[20]; | 385 | const char *client_finished_label; |
334 | int client_finished_len; | 386 | int client_finished_label_len; |
335 | unsigned char server_finished[20]; | 387 | const char *server_finished_label; |
336 | int server_finished_len; | 388 | int server_finished_label_len; |
337 | int (*alert_value)(); | 389 | int (*alert_value)(int); |
338 | } SSL3_ENC_METHOD; | 390 | } SSL3_ENC_METHOD; |
339 | 391 | ||
340 | /* Used for holding the relevant compression methods loaded into SSL_CTX */ | 392 | /* Used for holding the relevant compression methods loaded into SSL_CTX */ |
341 | typedef struct ssl3_comp_st | 393 | typedef struct ssl3_comp_st |
342 | { | 394 | { |
343 | int comp_id; /* The identifer byte for this compression type */ | 395 | int comp_id; /* The identifier byte for this compression type */ |
344 | char *name; /* Text name used for the compression type */ | 396 | char *name; /* Text name used for the compression type */ |
345 | COMP_METHOD *method; /* The method :-) */ | 397 | COMP_METHOD *method; /* The method :-) */ |
346 | } SSL3_COMP; | 398 | } SSL3_COMP; |
@@ -376,10 +428,10 @@ int ssl_cipher_ptr_id_cmp(SSL_CIPHER **ap,SSL_CIPHER **bp); | |||
376 | STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num, | 428 | STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num, |
377 | STACK_OF(SSL_CIPHER) **skp); | 429 | STACK_OF(SSL_CIPHER) **skp); |
378 | int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p); | 430 | int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p); |
379 | STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(SSL_METHOD *meth, | 431 | STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth, |
380 | STACK_OF(SSL_CIPHER) **pref, | 432 | STACK_OF(SSL_CIPHER) **pref, |
381 | STACK_OF(SSL_CIPHER) **sorted, | 433 | STACK_OF(SSL_CIPHER) **sorted, |
382 | char *str); | 434 | const char *rule_str); |
383 | void ssl_update_cache(SSL *s, int mode); | 435 | void ssl_update_cache(SSL *s, int mode); |
384 | int ssl_cipher_get_evp(SSL_SESSION *s,const EVP_CIPHER **enc,const EVP_MD **md, | 436 | int ssl_cipher_get_evp(SSL_SESSION *s,const EVP_CIPHER **enc,const EVP_MD **md, |
385 | SSL_COMP **comp); | 437 | SSL_COMP **comp); |
@@ -416,6 +468,8 @@ int ssl2_shutdown(SSL *s); | |||
416 | void ssl2_clear(SSL *s); | 468 | void ssl2_clear(SSL *s); |
417 | long ssl2_ctrl(SSL *s,int cmd, long larg, char *parg); | 469 | long ssl2_ctrl(SSL *s,int cmd, long larg, char *parg); |
418 | long ssl2_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg); | 470 | long ssl2_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg); |
471 | long ssl2_callback_ctrl(SSL *s,int cmd, void (*fp)()); | ||
472 | long ssl2_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)()); | ||
419 | int ssl2_pending(SSL *s); | 473 | int ssl2_pending(SSL *s); |
420 | 474 | ||
421 | SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p); | 475 | SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p); |
@@ -433,17 +487,16 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, | |||
433 | unsigned char *p, int len); | 487 | unsigned char *p, int len); |
434 | int ssl3_get_req_cert_type(SSL *s,unsigned char *p); | 488 | int ssl3_get_req_cert_type(SSL *s,unsigned char *p); |
435 | long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok); | 489 | long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok); |
436 | int ssl3_send_finished(SSL *s, int a, int b, unsigned char *sender,int slen); | 490 | int ssl3_send_finished(SSL *s, int a, int b, const char *sender,int slen); |
437 | int ssl3_num_ciphers(void); | 491 | int ssl3_num_ciphers(void); |
438 | SSL_CIPHER *ssl3_get_cipher(unsigned int u); | 492 | SSL_CIPHER *ssl3_get_cipher(unsigned int u); |
439 | int ssl3_renegotiate(SSL *ssl); | 493 | int ssl3_renegotiate(SSL *ssl); |
440 | int ssl3_renegotiate_check(SSL *ssl); | 494 | int ssl3_renegotiate_check(SSL *ssl); |
441 | int ssl3_dispatch_alert(SSL *s); | 495 | int ssl3_dispatch_alert(SSL *s); |
442 | int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len); | 496 | int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len); |
443 | int ssl3_part_read(SSL *s, int i); | ||
444 | int ssl3_write_bytes(SSL *s, int type, const void *buf, int len); | 497 | int ssl3_write_bytes(SSL *s, int type, const void *buf, int len); |
445 | int ssl3_final_finish_mac(SSL *s, EVP_MD_CTX *ctx1,EVP_MD_CTX *ctx2, | 498 | int ssl3_final_finish_mac(SSL *s, EVP_MD_CTX *ctx1, EVP_MD_CTX *ctx2, |
446 | unsigned char *sender, int slen,unsigned char *p); | 499 | const char *sender, int slen,unsigned char *p); |
447 | int ssl3_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p); | 500 | int ssl3_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p); |
448 | void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len); | 501 | void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len); |
449 | int ssl3_enc(SSL *s, int send_data); | 502 | int ssl3_enc(SSL *s, int send_data); |
@@ -463,6 +516,8 @@ int ssl3_shutdown(SSL *s); | |||
463 | void ssl3_clear(SSL *s); | 516 | void ssl3_clear(SSL *s); |
464 | long ssl3_ctrl(SSL *s,int cmd, long larg, char *parg); | 517 | long ssl3_ctrl(SSL *s,int cmd, long larg, char *parg); |
465 | long ssl3_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg); | 518 | long ssl3_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg); |
519 | long ssl3_callback_ctrl(SSL *s,int cmd, void (*fp)()); | ||
520 | long ssl3_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)()); | ||
466 | int ssl3_pending(SSL *s); | 521 | int ssl3_pending(SSL *s); |
467 | 522 | ||
468 | int ssl23_accept(SSL *s); | 523 | int ssl23_accept(SSL *s); |
@@ -474,6 +529,7 @@ int tls1_new(SSL *s); | |||
474 | void tls1_free(SSL *s); | 529 | void tls1_free(SSL *s); |
475 | void tls1_clear(SSL *s); | 530 | void tls1_clear(SSL *s); |
476 | long tls1_ctrl(SSL *s,int cmd, long larg, char *parg); | 531 | long tls1_ctrl(SSL *s,int cmd, long larg, char *parg); |
532 | long tls1_callback_ctrl(SSL *s,int cmd, void (*fp)()); | ||
477 | SSL_METHOD *tlsv1_base_method(void ); | 533 | SSL_METHOD *tlsv1_base_method(void ); |
478 | 534 | ||
479 | int ssl_init_wbio_buffer(SSL *s, int push); | 535 | int ssl_init_wbio_buffer(SSL *s, int push); |
@@ -483,7 +539,7 @@ int tls1_change_cipher_state(SSL *s, int which); | |||
483 | int tls1_setup_key_block(SSL *s); | 539 | int tls1_setup_key_block(SSL *s); |
484 | int tls1_enc(SSL *s, int snd); | 540 | int tls1_enc(SSL *s, int snd); |
485 | int tls1_final_finish_mac(SSL *s, EVP_MD_CTX *in1_ctx, EVP_MD_CTX *in2_ctx, | 541 | int tls1_final_finish_mac(SSL *s, EVP_MD_CTX *in1_ctx, EVP_MD_CTX *in2_ctx, |
486 | unsigned char *str, int slen, unsigned char *p); | 542 | const char *str, int slen, unsigned char *p); |
487 | int tls1_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p); | 543 | int tls1_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p); |
488 | int tls1_mac(SSL *ssl, unsigned char *md, int snd); | 544 | int tls1_mac(SSL *ssl, unsigned char *md, int snd); |
489 | int tls1_generate_master_secret(SSL *s, unsigned char *out, | 545 | int tls1_generate_master_secret(SSL *s, unsigned char *out, |