172
180
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
173
181
*((c)++)=(unsigned char)(((l) )&0xff))
183
#define l2n6(l,c) (*((c)++)=(unsigned char)(((l)>>40)&0xff), \
184
*((c)++)=(unsigned char)(((l)>>32)&0xff), \
185
*((c)++)=(unsigned char)(((l)>>24)&0xff), \
186
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
187
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
188
*((c)++)=(unsigned char)(((l) )&0xff))
190
#define n2l6(c,l) (l =((BN_ULLONG)(*((c)++)))<<40, \
191
l|=((BN_ULLONG)(*((c)++)))<<32, \
192
l|=((BN_ULLONG)(*((c)++)))<<24, \
193
l|=((BN_ULLONG)(*((c)++)))<<16, \
194
l|=((BN_ULLONG)(*((c)++)))<< 8, \
195
l|=((BN_ULLONG)(*((c)++))))
175
197
/* NOTE - c is not incremented as per l2c */
176
198
#define l2cn(l1,l2,c,n) { \
227
249
* that the different entities within are mutually exclusive:
228
250
* ONLY ONE BIT PER MASK CAN BE SET AT A TIME.
230
#define SSL_MKEY_MASK 0x0000003FL
252
#define SSL_MKEY_MASK 0x000000FFL
231
253
#define SSL_kRSA 0x00000001L /* RSA key exchange */
232
254
#define SSL_kDHr 0x00000002L /* DH cert RSA CA cert */
233
255
#define SSL_kDHd 0x00000004L /* DH cert DSA CA cert */
234
256
#define SSL_kFZA 0x00000008L
235
257
#define SSL_kEDH 0x00000010L /* tmp DH key no DH cert */
236
258
#define SSL_kKRB5 0x00000020L /* Kerberos5 key exchange */
259
#define SSL_kECDH 0x00000040L /* ECDH w/ long-term keys */
260
#define SSL_kECDHE 0x00000080L /* ephemeral ECDH */
237
261
#define SSL_EDH (SSL_kEDH|(SSL_AUTH_MASK^SSL_aNULL))
239
#define SSL_AUTH_MASK 0x00000FC0L
240
#define SSL_aRSA 0x00000040L /* Authenticate with RSA */
241
#define SSL_aDSS 0x00000080L /* Authenticate with DSS */
263
#define SSL_AUTH_MASK 0x00007F00L
264
#define SSL_aRSA 0x00000100L /* Authenticate with RSA */
265
#define SSL_aDSS 0x00000200L /* Authenticate with DSS */
242
266
#define SSL_DSS SSL_aDSS
243
#define SSL_aFZA 0x00000100L
244
#define SSL_aNULL 0x00000200L /* no Authenticate, ADH */
245
#define SSL_aDH 0x00000400L /* no Authenticate, ADH */
246
#define SSL_aKRB5 0x00000800L /* Authenticate with KRB5 */
267
#define SSL_aFZA 0x00000400L
268
#define SSL_aNULL 0x00000800L /* no Authenticate, ADH */
269
#define SSL_aDH 0x00001000L /* no Authenticate, ADH */
270
#define SSL_aKRB5 0x00002000L /* Authenticate with KRB5 */
271
#define SSL_aECDSA 0x00004000L /* Authenticate with ECDSA */
248
273
#define SSL_NULL (SSL_eNULL)
249
274
#define SSL_ADH (SSL_kEDH|SSL_aNULL)
250
275
#define SSL_RSA (SSL_kRSA|SSL_aRSA)
251
276
#define SSL_DH (SSL_kDHr|SSL_kDHd|SSL_kEDH)
277
#define SSL_ECDH (SSL_kECDH|SSL_kECDHE)
252
278
#define SSL_FZA (SSL_aFZA|SSL_kFZA|SSL_eFZA)
253
279
#define SSL_KRB5 (SSL_kKRB5|SSL_aKRB5)
255
#define SSL_ENC_MASK 0x0087F000L
256
#define SSL_DES 0x00001000L
257
#define SSL_3DES 0x00002000L
258
#define SSL_RC4 0x00004000L
259
#define SSL_RC2 0x00008000L
260
#define SSL_IDEA 0x00010000L
261
#define SSL_eFZA 0x00020000L
262
#define SSL_eNULL 0x00040000L
263
#define SSL_AES 0x00800000L
281
#define SSL_ENC_MASK 0x043F8000L
282
#define SSL_DES 0x00008000L
283
#define SSL_3DES 0x00010000L
284
#define SSL_RC4 0x00020000L
285
#define SSL_RC2 0x00040000L
286
#define SSL_IDEA 0x00080000L
287
#define SSL_eFZA 0x00100000L
288
#define SSL_eNULL 0x00200000L
289
#define SSL_AES 0x04000000L
265
#define SSL_MAC_MASK 0x00180000L
266
#define SSL_MD5 0x00080000L
267
#define SSL_SHA1 0x00100000L
291
#define SSL_MAC_MASK 0x00c00000L
292
#define SSL_MD5 0x00400000L
293
#define SSL_SHA1 0x00800000L
268
294
#define SSL_SHA (SSL_SHA1)
270
#define SSL_SSL_MASK 0x00600000L
271
#define SSL_SSLV2 0x00200000L
272
#define SSL_SSLV3 0x00400000L
296
#define SSL_SSL_MASK 0x03000000L
297
#define SSL_SSLV2 0x01000000L
298
#define SSL_SSLV3 0x02000000L
273
299
#define SSL_TLSV1 SSL_SSLV3 /* for now */
275
/* we have used 007fffff - 9 bits left to go */
301
/* we have used 07ffffff - 5 bits left to go. */
278
304
* Export and cipher strength information. For each cipher we have to decide
462
505
COMP_METHOD *method; /* The method :-) */
465
OPENSSL_EXTERN SSL3_ENC_METHOD ssl3_undef_enc_method;
508
extern SSL3_ENC_METHOD ssl3_undef_enc_method;
466
509
OPENSSL_EXTERN SSL_CIPHER ssl2_ciphers[];
467
510
OPENSSL_EXTERN SSL_CIPHER ssl3_ciphers[];
469
#ifdef OPENSSL_SYS_VMS
470
#undef SSL_COMP_get_compression_methods
471
#define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods
475
513
SSL_METHOD *ssl_bad_method(int ver);
476
514
SSL_METHOD *sslv2_base_method(void);
477
515
SSL_METHOD *sslv23_base_method(void);
478
516
SSL_METHOD *sslv3_base_method(void);
518
extern SSL3_ENC_METHOD TLSv1_enc_data;
519
extern SSL3_ENC_METHOD SSLv3_enc_data;
520
extern SSL3_ENC_METHOD DTLSv1_enc_data;
522
#define IMPLEMENT_tls1_meth_func(func_name, s_accept, s_connect, s_get_meth) \
523
SSL_METHOD *func_name(void) \
525
static SSL_METHOD func_name##_data= { \
537
ssl3_renegotiate_check, \
541
ssl3_dispatch_alert, \
544
ssl3_get_cipher_by_char, \
545
ssl3_put_cipher_by_char, \
550
tls1_default_timeout, \
552
ssl_undefined_void_function, \
553
ssl3_callback_ctrl, \
554
ssl3_ctx_callback_ctrl, \
556
return &func_name##_data; \
559
#define IMPLEMENT_ssl3_meth_func(func_name, s_accept, s_connect, s_get_meth) \
560
SSL_METHOD *func_name(void) \
562
static SSL_METHOD func_name##_data= { \
574
ssl3_renegotiate_check, \
578
ssl3_dispatch_alert, \
581
ssl3_get_cipher_by_char, \
582
ssl3_put_cipher_by_char, \
587
ssl3_default_timeout, \
589
ssl_undefined_void_function, \
590
ssl3_callback_ctrl, \
591
ssl3_ctx_callback_ctrl, \
593
return &func_name##_data; \
596
#define IMPLEMENT_ssl23_meth_func(func_name, s_accept, s_connect, s_get_meth) \
597
SSL_METHOD *func_name(void) \
599
static SSL_METHOD func_name##_data= { \
609
ssl_undefined_function, \
610
ssl_undefined_function, \
615
ssl3_dispatch_alert, \
618
ssl23_get_cipher_by_char, \
619
ssl23_put_cipher_by_char, \
620
ssl_undefined_const_function, \
624
ssl23_default_timeout, \
625
&ssl3_undef_enc_method, \
626
ssl_undefined_void_function, \
627
ssl3_callback_ctrl, \
628
ssl3_ctx_callback_ctrl, \
630
return &func_name##_data; \
633
#define IMPLEMENT_ssl2_meth_func(func_name, s_accept, s_connect, s_get_meth) \
634
SSL_METHOD *func_name(void) \
636
static SSL_METHOD func_name##_data= { \
638
ssl2_new, /* local */ \
639
ssl2_clear, /* local */ \
640
ssl2_free, /* local */ \
647
ssl_ok, /* NULL - renegotiate */ \
648
ssl_ok, /* NULL - check renegotiate */ \
649
NULL, /* NULL - ssl_get_message */ \
650
NULL, /* NULL - ssl_get_record */ \
651
NULL, /* NULL - ssl_write_bytes */ \
652
NULL, /* NULL - dispatch_alert */ \
653
ssl2_ctrl, /* local */ \
654
ssl2_ctx_ctrl, /* local */ \
655
ssl2_get_cipher_by_char, \
656
ssl2_put_cipher_by_char, \
661
ssl2_default_timeout, \
662
&ssl3_undef_enc_method, \
663
ssl_undefined_void_function, \
664
ssl2_callback_ctrl, /* local */ \
665
ssl2_ctx_callback_ctrl, /* local */ \
667
return &func_name##_data; \
670
#define IMPLEMENT_dtls1_meth_func(func_name, s_accept, s_connect, s_get_meth) \
671
SSL_METHOD *func_name(void) \
673
static SSL_METHOD func_name##_data= { \
685
ssl3_renegotiate_check, \
688
dtls1_write_app_data_bytes, \
689
dtls1_dispatch_alert, \
692
ssl3_get_cipher_by_char, \
693
ssl3_put_cipher_by_char, \
698
dtls1_default_timeout, \
700
ssl_undefined_void_function, \
701
ssl3_callback_ctrl, \
702
ssl3_ctx_callback_ctrl, \
704
return &func_name##_data; \
480
707
void ssl_clear_cipher_ctx(SSL *s);
481
708
int ssl_clear_bad_session(SSL *s);
482
709
CERT *ssl_cert_new(void);
493
720
const SSL_CIPHER * const *bp);
494
721
STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num,
495
722
STACK_OF(SSL_CIPHER) **skp);
496
int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p);
723
int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p,
724
int (*put_cb)(const SSL_CIPHER *, unsigned char *));
497
725
STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth,
498
726
STACK_OF(SSL_CIPHER) **pref,
499
727
STACK_OF(SSL_CIPHER) **sorted,
500
728
const char *rule_str);
501
729
void ssl_update_cache(SSL *s, int mode);
502
int ssl_cipher_get_evp(SSL_SESSION *s,const EVP_CIPHER **enc,const EVP_MD **md,
730
int ssl_cipher_get_evp(const SSL_SESSION *s,const EVP_CIPHER **enc,
731
const EVP_MD **md,SSL_COMP **comp);
504
732
int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk);
505
733
int ssl_undefined_function(SSL *s);
734
int ssl_undefined_void_function(void);
735
int ssl_undefined_const_function(const SSL *s);
506
736
X509 *ssl_get_server_send_cert(SSL *);
507
737
EVP_PKEY *ssl_get_sign_pkey(SSL *,SSL_CIPHER *);
508
738
int ssl_cert_type(X509 *x,EVP_PKEY *pkey);
509
739
void ssl_set_cert_masks(CERT *c, SSL_CIPHER *cipher);
510
740
STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s);
511
741
int ssl_verify_alarm_type(long type);
742
void ssl_load_ciphers(void);
513
744
int ssl2_enc_init(SSL *s, int client);
514
745
int ssl2_generate_key_material(SSL *s);
534
765
void ssl2_clear(SSL *s);
535
766
long ssl2_ctrl(SSL *s,int cmd, long larg, void *parg);
536
767
long ssl2_ctx_ctrl(SSL_CTX *s,int cmd, long larg, void *parg);
537
long ssl2_callback_ctrl(SSL *s,int cmd, void (*fp)());
538
long ssl2_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)());
539
int ssl2_pending(SSL *s);
768
long ssl2_callback_ctrl(SSL *s,int cmd, void (*fp)(void));
769
long ssl2_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)(void));
770
int ssl2_pending(const SSL *s);
771
long ssl2_default_timeout(void );
541
773
SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p);
542
774
int ssl3_put_cipher_by_char(const SSL_CIPHER *c,unsigned char *p);
582
814
void ssl3_clear(SSL *s);
583
815
long ssl3_ctrl(SSL *s,int cmd, long larg, void *parg);
584
816
long ssl3_ctx_ctrl(SSL_CTX *s,int cmd, long larg, void *parg);
585
long ssl3_callback_ctrl(SSL *s,int cmd, void (*fp)());
586
long ssl3_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)());
587
int ssl3_pending(SSL *s);
817
long ssl3_callback_ctrl(SSL *s,int cmd, void (*fp)(void));
818
long ssl3_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)(void));
819
int ssl3_pending(const SSL *s);
821
void ssl3_record_sequence_update(unsigned char *seq);
822
int ssl3_do_change_cipher_spec(SSL *ssl);
823
long ssl3_default_timeout(void );
825
int ssl23_num_ciphers(void );
826
SSL_CIPHER *ssl23_get_cipher(unsigned int u);
827
int ssl23_read(SSL *s, void *buf, int len);
828
int ssl23_peek(SSL *s, void *buf, int len);
829
int ssl23_write(SSL *s, const void *buf, int len);
830
int ssl23_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p);
831
SSL_CIPHER *ssl23_get_cipher_by_char(const unsigned char *p);
832
long ssl23_default_timeout(void );
834
long tls1_default_timeout(void);
835
int dtls1_do_write(SSL *s,int type);
836
int ssl3_read_n(SSL *s, int n, int max, int extend);
837
int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek);
838
int ssl3_do_compress(SSL *ssl);
839
int ssl3_do_uncompress(SSL *ssl);
840
int ssl3_write_pending(SSL *s, int type, const unsigned char *buf,
842
unsigned char *dtls1_set_message_header(SSL *s,
843
unsigned char *p, unsigned char mt, unsigned long len,
844
unsigned long frag_off, unsigned long frag_len);
846
int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf, int len);
847
int dtls1_write_bytes(SSL *s, int type, const void *buf, int len);
849
int dtls1_send_change_cipher_spec(SSL *s, int a, int b);
850
int dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen);
851
unsigned long dtls1_output_cert_chain(SSL *s, X509 *x);
852
int dtls1_read_failed(SSL *s, int code);
853
int dtls1_buffer_message(SSL *s, int ccs);
854
int dtls1_retransmit_message(SSL *s, unsigned short seq,
855
unsigned long frag_off, int *found);
856
void dtls1_clear_record_buffer(SSL *s);
857
void dtls1_get_message_header(unsigned char *data, struct hm_header_st *msg_hdr);
858
void dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr);
859
void dtls1_reset_seq_numbers(SSL *s, int rw);
860
long dtls1_default_timeout(void);
863
/* some client-only functions */
864
int ssl3_client_hello(SSL *s);
865
int ssl3_get_server_hello(SSL *s);
866
int ssl3_get_certificate_request(SSL *s);
867
int ssl3_get_server_done(SSL *s);
868
int ssl3_send_client_verify(SSL *s);
869
int ssl3_send_client_certificate(SSL *s);
870
int ssl3_send_client_key_exchange(SSL *s);
871
int ssl3_get_key_exchange(SSL *s);
872
int ssl3_get_server_certificate(SSL *s);
873
int ssl3_check_cert_and_algorithm(SSL *s);
875
int dtls1_client_hello(SSL *s);
876
int dtls1_send_client_certificate(SSL *s);
877
int dtls1_send_client_key_exchange(SSL *s);
878
int dtls1_send_client_verify(SSL *s);
880
/* some server-only functions */
881
int ssl3_get_client_hello(SSL *s);
882
int ssl3_send_server_hello(SSL *s);
883
int ssl3_send_hello_request(SSL *s);
884
int ssl3_send_server_key_exchange(SSL *s);
885
int ssl3_send_certificate_request(SSL *s);
886
int ssl3_send_server_done(SSL *s);
887
int ssl3_check_client_hello(SSL *s);
888
int ssl3_get_client_certificate(SSL *s);
889
int ssl3_get_client_key_exchange(SSL *s);
890
int ssl3_get_cert_verify(SSL *s);
892
int dtls1_send_hello_request(SSL *s);
893
int dtls1_send_server_hello(SSL *s);
894
int dtls1_send_server_certificate(SSL *s);
895
int dtls1_send_server_key_exchange(SSL *s);
896
int dtls1_send_certificate_request(SSL *s);
897
int dtls1_send_server_done(SSL *s);
589
901
int ssl23_accept(SSL *s);
590
902
int ssl23_connect(SSL *s);
595
907
void tls1_free(SSL *s);
596
908
void tls1_clear(SSL *s);
597
909
long tls1_ctrl(SSL *s,int cmd, long larg, void *parg);
598
long tls1_callback_ctrl(SSL *s,int cmd, void (*fp)());
910
long tls1_callback_ctrl(SSL *s,int cmd, void (*fp)(void));
599
911
SSL_METHOD *tlsv1_base_method(void );
913
int dtls1_new(SSL *s);
914
int dtls1_accept(SSL *s);
915
int dtls1_connect(SSL *s);
916
void dtls1_free(SSL *s);
917
void dtls1_clear(SSL *s);
918
long dtls1_ctrl(SSL *s,int cmd, long larg, void *parg);
919
SSL_METHOD *dtlsv1_base_method(void );
921
long dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok);
922
int dtls1_get_record(SSL *s);
923
int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
924
unsigned int len, int create_empty_fragement);
925
int dtls1_dispatch_alert(SSL *s);
926
int dtls1_enc(SSL *s, int snd);
601
928
int ssl_init_wbio_buffer(SSL *s, int push);
602
929
void ssl_free_wbio_buffer(SSL *s);