summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_locl.h
diff options
context:
space:
mode:
authorbeck <>2000-03-19 11:13:58 +0000
committerbeck <>2000-03-19 11:13:58 +0000
commit796d609550df3a33fc11468741c5d2f6d3df4c11 (patch)
tree6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libssl/ssl_locl.h
parent5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff)
downloadopenbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.gz
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.bz2
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.zip
OpenSSL 0.9.5 merge
*warning* this bumps shared lib minors for libssl and libcrypto from 2.1 to 2.2 if you are using the ssl26 packages for ssh and other things to work you will need to get new ones (see ~beck/libsslsnap/<arch>) on cvs or ~beck/src-patent.tar.gz on cvs
Diffstat (limited to 'src/lib/libssl/ssl_locl.h')
-rw-r--r--src/lib/libssl/ssl_locl.h152
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 :-) */
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,