diff options
author | beck <> | 2000-03-19 11:13:58 +0000 |
---|---|---|
committer | beck <> | 2000-03-19 11:13:58 +0000 |
commit | 796d609550df3a33fc11468741c5d2f6d3df4c11 (patch) | |
tree | 6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libssl/ssl_locl.h | |
parent | 5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff) | |
download | openbsd-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.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, |