summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/ssl/ssl_locl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/ssl/ssl_locl.h')
-rw-r--r--src/lib/libssl/src/ssl/ssl_locl.h152
1 files changed, 104 insertions, 48 deletions
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h
index 0bfd57db32..9a52bab254 100644
--- a/src/lib/libssl/src/ssl/ssl_locl.h
+++ b/src/lib/libssl/src/ssl/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 :-) */
323typedef struct ssl3_enc_method 375typedef 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 */
341typedef struct ssl3_comp_st 393typedef 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);
376STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num, 428STACK_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);
378int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p); 430int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p);
379STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(SSL_METHOD *meth, 431STACK_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);
383void ssl_update_cache(SSL *s, int mode); 435void ssl_update_cache(SSL *s, int mode);
384int ssl_cipher_get_evp(SSL_SESSION *s,const EVP_CIPHER **enc,const EVP_MD **md, 436int 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);
416void ssl2_clear(SSL *s); 468void ssl2_clear(SSL *s);
417long ssl2_ctrl(SSL *s,int cmd, long larg, char *parg); 469long ssl2_ctrl(SSL *s,int cmd, long larg, char *parg);
418long ssl2_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg); 470long ssl2_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg);
471long ssl2_callback_ctrl(SSL *s,int cmd, void (*fp)());
472long ssl2_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)());
419int ssl2_pending(SSL *s); 473int ssl2_pending(SSL *s);
420 474
421SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p); 475SSL_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);
434int ssl3_get_req_cert_type(SSL *s,unsigned char *p); 488int ssl3_get_req_cert_type(SSL *s,unsigned char *p);
435long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok); 489long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok);
436int ssl3_send_finished(SSL *s, int a, int b, unsigned char *sender,int slen); 490int ssl3_send_finished(SSL *s, int a, int b, const char *sender,int slen);
437int ssl3_num_ciphers(void); 491int ssl3_num_ciphers(void);
438SSL_CIPHER *ssl3_get_cipher(unsigned int u); 492SSL_CIPHER *ssl3_get_cipher(unsigned int u);
439int ssl3_renegotiate(SSL *ssl); 493int ssl3_renegotiate(SSL *ssl);
440int ssl3_renegotiate_check(SSL *ssl); 494int ssl3_renegotiate_check(SSL *ssl);
441int ssl3_dispatch_alert(SSL *s); 495int ssl3_dispatch_alert(SSL *s);
442int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len); 496int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len);
443int ssl3_part_read(SSL *s, int i);
444int ssl3_write_bytes(SSL *s, int type, const void *buf, int len); 497int ssl3_write_bytes(SSL *s, int type, const void *buf, int len);
445int ssl3_final_finish_mac(SSL *s, EVP_MD_CTX *ctx1,EVP_MD_CTX *ctx2, 498int 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);
447int ssl3_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p); 500int ssl3_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p);
448void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len); 501void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len);
449int ssl3_enc(SSL *s, int send_data); 502int ssl3_enc(SSL *s, int send_data);
@@ -463,6 +516,8 @@ int ssl3_shutdown(SSL *s);
463void ssl3_clear(SSL *s); 516void ssl3_clear(SSL *s);
464long ssl3_ctrl(SSL *s,int cmd, long larg, char *parg); 517long ssl3_ctrl(SSL *s,int cmd, long larg, char *parg);
465long ssl3_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg); 518long ssl3_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg);
519long ssl3_callback_ctrl(SSL *s,int cmd, void (*fp)());
520long ssl3_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)());
466int ssl3_pending(SSL *s); 521int ssl3_pending(SSL *s);
467 522
468int ssl23_accept(SSL *s); 523int ssl23_accept(SSL *s);
@@ -474,6 +529,7 @@ int tls1_new(SSL *s);
474void tls1_free(SSL *s); 529void tls1_free(SSL *s);
475void tls1_clear(SSL *s); 530void tls1_clear(SSL *s);
476long tls1_ctrl(SSL *s,int cmd, long larg, char *parg); 531long tls1_ctrl(SSL *s,int cmd, long larg, char *parg);
532long tls1_callback_ctrl(SSL *s,int cmd, void (*fp)());
477SSL_METHOD *tlsv1_base_method(void ); 533SSL_METHOD *tlsv1_base_method(void );
478 534
479int ssl_init_wbio_buffer(SSL *s, int push); 535int ssl_init_wbio_buffer(SSL *s, int push);
@@ -483,7 +539,7 @@ int tls1_change_cipher_state(SSL *s, int which);
483int tls1_setup_key_block(SSL *s); 539int tls1_setup_key_block(SSL *s);
484int tls1_enc(SSL *s, int snd); 540int tls1_enc(SSL *s, int snd);
485int tls1_final_finish_mac(SSL *s, EVP_MD_CTX *in1_ctx, EVP_MD_CTX *in2_ctx, 541int 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);
487int tls1_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p); 543int tls1_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p);
488int tls1_mac(SSL *ssl, unsigned char *md, int snd); 544int tls1_mac(SSL *ssl, unsigned char *md, int snd);
489int tls1_generate_master_secret(SSL *s, unsigned char *out, 545int tls1_generate_master_secret(SSL *s, unsigned char *out,