#include "xyssl/config.h"
#include "xyssl/aes.h"
#include "xyssl/arc4.h"
#include "xyssl/des.h"
#include "xyssl/debug.h"
#include "xyssl/ssl.h"
#include <string.h>
#include <stdlib.h>
#include <time.h>
Go to the source code of this file.
Functions | |
static int | tls1_prf (unsigned char *secret, int slen, char *label, unsigned char *random, int rlen, unsigned char *dstbuf, int dlen) |
int | ssl_derive_keys (ssl_context *ssl) |
void | ssl_calc_verify (ssl_context *ssl, unsigned char hash[36]) |
static void | ssl_mac_md5 (unsigned char *secret, unsigned char *buf, int len, unsigned char *ctr, int type) |
static void | ssl_mac_sha1 (unsigned char *secret, unsigned char *buf, int len, unsigned char *ctr, int type) |
static int | ssl_encrypt_buf (ssl_context *ssl) |
static int | ssl_decrypt_buf (ssl_context *ssl) |
int | ssl_fetch_input (ssl_context *ssl, int nb_want) |
int | ssl_flush_output (ssl_context *ssl) |
int | ssl_write_record (ssl_context *ssl) |
int | ssl_read_record (ssl_context *ssl) |
int | ssl_write_certificate (ssl_context *ssl) |
int | ssl_parse_certificate (ssl_context *ssl) |
int | ssl_write_change_cipher_spec (ssl_context *ssl) |
int | ssl_parse_change_cipher_spec (ssl_context *ssl) |
static void | ssl_calc_finished (ssl_context *ssl, unsigned char *buf, int from, md5_context *md5, sha1_context *sha1) |
int | ssl_write_finished (ssl_context *ssl) |
int | ssl_parse_finished (ssl_context *ssl) |
int | ssl_init (ssl_context *ssl) |
Initialize an SSL context. | |
void | ssl_set_endpoint (ssl_context *ssl, int endpoint) |
Set the current endpoint type. | |
void | ssl_set_authmode (ssl_context *ssl, int authmode) |
Set the certificate verification mode. | |
void | ssl_set_rng (ssl_context *ssl, int(*f_rng)(void *), void *p_rng) |
Set the random number generator callback. | |
void | ssl_set_dbg (ssl_context *ssl, void(*f_dbg)(void *, int, char *), void *p_dbg) |
Set the debug callback. | |
void | ssl_set_bio (ssl_context *ssl, int(*f_recv)(void *, unsigned char *, int), void *p_recv, int(*f_send)(void *, unsigned char *, int), void *p_send) |
Set the underlying BIO read and write callbacks. | |
void | ssl_set_scb (ssl_context *ssl, int(*s_get)(ssl_context *), int(*s_set)(ssl_context *)) |
Set the session callbacks (server-side only). | |
void | ssl_set_session (ssl_context *ssl, int resume, int timeout, ssl_session *session) |
Set the session resuming flag, timeout and data. | |
void | ssl_set_ciphers (ssl_context *ssl, int *ciphers) |
Set the list of allowed ciphersuites. | |
void | ssl_set_ca_chain (ssl_context *ssl, x509_cert *ca_chain, char *peer_cn) |
Set the data required to verify peer certificate. | |
void | ssl_set_own_cert (ssl_context *ssl, x509_cert *own_cert, rsa_context *rsa_key) |
Set own certificate and private key. | |
int | ssl_set_dh_param (ssl_context *ssl, char *dhm_P, char *dhm_G) |
Set the Diffie-Hellman public P and G values, read as hexadecimal strings (server-side only). | |
int | ssl_set_hostname (ssl_context *ssl, char *hostname) |
Set hostname for ServerName TLS Extension. | |
int | ssl_get_bytes_avail (ssl_context *ssl) |
Return the number of data bytes available to read. | |
int | ssl_get_verify_result (ssl_context *ssl) |
Return the result of the certificate verification. | |
char * | ssl_get_cipher (ssl_context *ssl) |
Return the name of the current cipher. | |
int | ssl_handshake (ssl_context *ssl) |
Perform the SSL handshake. | |
int | ssl_read (ssl_context *ssl, unsigned char *buf, int len) |
Read at most 'len' application data bytes. | |
int | ssl_write (ssl_context *ssl, unsigned char *buf, int len) |
Write exactly 'len' application data bytes. | |
int | ssl_close_notify (ssl_context *ssl) |
Notify the peer that the connection is being closed. | |
void | ssl_free (ssl_context *ssl) |
Free an SSL context. | |
Variables | |
int | ssl_default_ciphers [] |
static void ssl_calc_finished | ( | ssl_context * | ssl, | |
unsigned char * | buf, | |||
int | from, | |||
md5_context * | md5, | |||
sha1_context * | sha1 | |||
) | [static] |
Definition at line 1344 of file ssl_tls.c.
References _ssl_session::master, md5_finish(), md5_starts(), md5_update(), _ssl_context::minor_ver, _ssl_context::session, sha1_finish(), sha1_starts(), sha1_update(), SSL_DEBUG_BUF, SSL_DEBUG_MSG, SSL_IS_CLIENT, SSL_MINOR_VERSION_0, sha1_context::state, md5_context::state, and tls1_prf().
Referenced by ssl_parse_finished(), and ssl_write_finished().
void ssl_calc_verify | ( | ssl_context * | ssl, | |
unsigned char | hash[36] | |||
) |
Definition at line 335 of file ssl_tls.c.
References _ssl_context::fin_md5, _ssl_context::fin_sha1, _ssl_session::master, md5(), md5_finish(), md5_starts(), md5_update(), _ssl_context::minor_ver, _ssl_context::session, sha1(), sha1_finish(), sha1_starts(), sha1_update(), SSL_DEBUG_BUF, SSL_DEBUG_MSG, and SSL_MINOR_VERSION_0.
Referenced by ssl_parse_certificate_verify(), and ssl_write_certificate_verify().
int ssl_close_notify | ( | ssl_context * | ssl | ) |
Notify the peer that the connection is being closed.
Definition at line 1904 of file ssl_tls.c.
References _ssl_context::out_msg, _ssl_context::out_msglen, _ssl_context::out_msgtype, SSL_ALERT_CLOSE_NOTIFY, SSL_ALERT_WARNING, SSL_DEBUG_MSG, SSL_DEBUG_RET, ssl_flush_output(), SSL_HANDSHAKE_OVER, SSL_MSG_ALERT, ssl_write_record(), and _ssl_context::state.
Referenced by main(), and ssl_test().
static int ssl_decrypt_buf | ( | ssl_context * | ssl | ) | [static] |
Definition at line 555 of file ssl_tls.c.
References aes_crypt_cbc(), AES_DECRYPT, arc4_crypt(), _ssl_context::ctx_dec, des3_crypt_cbc(), DES_DECRYPT, _ssl_context::in_ctr, _ssl_context::in_hdr, _ssl_context::in_msg, _ssl_context::in_msglen, _ssl_context::in_msgtype, _ssl_context::iv_dec, _ssl_context::ivlen, _ssl_context::mac_dec, _ssl_context::maclen, md5_hmac(), _ssl_context::minlen, _ssl_context::minor_ver, _ssl_context::nb_zero, sha1_hmac(), SSL_DEBUG_BUF, SSL_DEBUG_MSG, ssl_mac_md5(), ssl_mac_sha1(), SSL_MINOR_VERSION_0, XYSSL_ERR_SSL_FEATURE_UNAVAILABLE, and XYSSL_ERR_SSL_INVALID_MAC.
Referenced by ssl_read_record().
int ssl_derive_keys | ( | ssl_context * | ssl | ) |
Definition at line 106 of file ssl_tls.c.
References aes_setkey_dec(), aes_setkey_enc(), arc4_setup(), _ssl_session::cipher, _ssl_context::ctx_dec, _ssl_context::ctx_enc, des3_set3key_dec(), des3_set3key_enc(), _ssl_context::endpoint, _ssl_context::iv_dec, _ssl_context::iv_enc, _ssl_context::ivlen, _ssl_context::keylen, _ssl_context::mac_dec, _ssl_context::mac_enc, _ssl_context::maclen, _ssl_session::master, md5(), md5_finish(), md5_starts(), md5_update(), _ssl_context::minlen, _ssl_context::minor_ver, _ssl_context::pmslen, _ssl_context::premaster, _ssl_context::randbytes, _ssl_context::resume, _ssl_context::session, sha1(), sha1_finish(), sha1_starts(), sha1_update(), SSL_DEBUG_BUF, SSL_DEBUG_MSG, SSL_EDH_RSA_AES_256_SHA, SSL_EDH_RSA_DES_168_SHA, ssl_get_cipher(), SSL_IS_CLIENT, SSL_MINOR_VERSION_0, SSL_RSA_AES_128_SHA, SSL_RSA_AES_256_SHA, SSL_RSA_DES_168_SHA, SSL_RSA_RC4_128_MD5, SSL_RSA_RC4_128_SHA, tls1_prf(), and XYSSL_ERR_SSL_FEATURE_UNAVAILABLE.
Referenced by ssl_parse_client_key_exchange(), ssl_parse_server_hello(), ssl_write_client_key_exchange(), and ssl_write_server_hello().
static int ssl_encrypt_buf | ( | ssl_context * | ssl | ) | [static] |
Definition at line 448 of file ssl_tls.c.
References aes_crypt_cbc(), AES_ENCRYPT, arc4_crypt(), _ssl_context::ctx_enc, des3_crypt_cbc(), DES_ENCRYPT, _ssl_context::iv_enc, _ssl_context::ivlen, _ssl_context::mac_enc, _ssl_context::maclen, md5_hmac(), _ssl_context::minor_ver, _ssl_context::out_ctr, _ssl_context::out_msg, _ssl_context::out_msglen, _ssl_context::out_msgtype, sha1_hmac(), SSL_DEBUG_BUF, SSL_DEBUG_MSG, ssl_mac_md5(), ssl_mac_sha1(), SSL_MINOR_VERSION_0, and XYSSL_ERR_SSL_FEATURE_UNAVAILABLE.
Referenced by ssl_write_record().
int ssl_fetch_input | ( | ssl_context * | ssl, | |
int | nb_want | |||
) |
Definition at line 727 of file ssl_tls.c.
References _ssl_context::f_recv, _ssl_context::in_hdr, _ssl_context::in_left, _ssl_context::p_recv, SSL_DEBUG_MSG, and SSL_DEBUG_RET.
Referenced by ssl_parse_client_hello(), and ssl_read_record().
int ssl_flush_output | ( | ssl_context * | ssl | ) |
Definition at line 756 of file ssl_tls.c.
References buf, _ssl_context::f_send, _ssl_context::out_hdr, _ssl_context::out_left, _ssl_context::out_msglen, _ssl_context::p_send, SSL_DEBUG_MSG, and SSL_DEBUG_RET.
Referenced by ssl_close_notify(), ssl_handshake_client(), ssl_handshake_server(), ssl_write(), and ssl_write_record().
void ssl_free | ( | ssl_context * | ssl | ) |
Free an SSL context.
Definition at line 1938 of file ssl_tls.c.
References _ssl_context::dhm_ctx, dhm_free(), _ssl_context::hostname, _ssl_context::hostname_len, _ssl_context::in_ctr, _ssl_context::out_ctr, _ssl_context::peer_cert, SSL_BUFFER_LEN, SSL_DEBUG_MSG, and x509_free().
Referenced by main(), and ssl_test().
int ssl_get_bytes_avail | ( | ssl_context * | ssl | ) |
Return the number of data bytes available to read.
ssl | SSL context |
Definition at line 1691 of file ssl_tls.c.
References _ssl_context::in_msglen, and _ssl_context::in_offt.
char* ssl_get_cipher | ( | ssl_context * | ssl | ) |
Return the name of the current cipher.
ssl | SSL context |
Definition at line 1701 of file ssl_tls.c.
References _ssl_session::cipher, _ssl_context::session, SSL_EDH_RSA_AES_256_SHA, SSL_EDH_RSA_DES_168_SHA, SSL_RSA_AES_128_SHA, SSL_RSA_AES_256_SHA, SSL_RSA_DES_168_SHA, SSL_RSA_RC4_128_MD5, and SSL_RSA_RC4_128_SHA.
Referenced by main(), and ssl_derive_keys().
int ssl_get_verify_result | ( | ssl_context * | ssl | ) |
Return the result of the certificate verification.
ssl | SSL context |
Definition at line 1696 of file ssl_tls.c.
References _ssl_context::verify_result.
Referenced by main().
int ssl_handshake | ( | ssl_context * | ssl | ) |
Perform the SSL handshake.
ssl | SSL context |
Definition at line 1767 of file ssl_tls.c.
References _ssl_context::endpoint, SSL_DEBUG_MSG, ssl_handshake_client(), ssl_handshake_server(), SSL_IS_CLIENT, SSL_IS_SERVER, and XYSSL_ERR_SSL_FEATURE_UNAVAILABLE.
Referenced by main(), ssl_read(), and ssl_write().
int ssl_init | ( | ssl_context * | ssl | ) |
Initialize an SSL context.
ssl | SSL context |
Definition at line 1542 of file ssl_tls.c.
References _ssl_context::fin_md5, _ssl_context::fin_sha1, _ssl_context::hostname, _ssl_context::hostname_len, _ssl_context::in_ctr, _ssl_context::in_hdr, _ssl_context::in_msg, md5_starts(), _ssl_context::out_ctr, _ssl_context::out_hdr, _ssl_context::out_msg, sha1_starts(), SSL_BUFFER_LEN, and SSL_DEBUG_MSG.
Referenced by main(), and ssl_test().
static void ssl_mac_md5 | ( | unsigned char * | secret, | |
unsigned char * | buf, | |||
int | len, | |||
unsigned char * | ctr, | |||
int | type | |||
) | [static] |
Definition at line 387 of file ssl_tls.c.
References md5(), md5_finish(), md5_starts(), and md5_update().
Referenced by ssl_decrypt_buf(), and ssl_encrypt_buf().
static void ssl_mac_sha1 | ( | unsigned char * | secret, | |
unsigned char * | buf, | |||
int | len, | |||
unsigned char * | ctr, | |||
int | type | |||
) | [static] |
Definition at line 416 of file ssl_tls.c.
References sha1(), sha1_finish(), sha1_starts(), and sha1_update().
Referenced by ssl_decrypt_buf(), and ssl_encrypt_buf().
int ssl_parse_certificate | ( | ssl_context * | ssl | ) |
Definition at line 1140 of file ssl_tls.c.
References _ssl_context::authmode, _ssl_context::ca_chain, _ssl_context::endpoint, _ssl_context::in_hslen, _ssl_context::in_msg, _ssl_context::in_msglen, _ssl_context::in_msgtype, int, _ssl_context::minor_ver, _ssl_context::peer_cert, _ssl_context::peer_cn, SSL_ALERT_NO_CERTIFICATE, SSL_ALERT_WARNING, SSL_DEBUG_CRT, SSL_DEBUG_MSG, SSL_DEBUG_RET, SSL_HS_CERTIFICATE, SSL_IS_SERVER, SSL_MINOR_VERSION_0, SSL_MSG_ALERT, SSL_MSG_HANDSHAKE, ssl_read_record(), SSL_VERIFY_NONE, SSL_VERIFY_OPTIONAL, SSL_VERIFY_REQUIRED, _ssl_context::state, _ssl_context::verify_result, x509parse_crt(), x509parse_verify(), XYSSL_ERR_SSL_BAD_HS_CERTIFICATE, XYSSL_ERR_SSL_CA_CHAIN_REQUIRED, XYSSL_ERR_SSL_NO_CLIENT_CERTIFICATE, and XYSSL_ERR_SSL_UNEXPECTED_MESSAGE.
Referenced by ssl_handshake_client(), and ssl_handshake_server().
int ssl_parse_change_cipher_spec | ( | ssl_context * | ssl | ) |
Definition at line 1311 of file ssl_tls.c.
References _ssl_context::do_crypt, _ssl_context::in_msg, _ssl_context::in_msglen, _ssl_context::in_msgtype, SSL_DEBUG_MSG, SSL_DEBUG_RET, SSL_MSG_CHANGE_CIPHER_SPEC, ssl_read_record(), _ssl_context::state, XYSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC, and XYSSL_ERR_SSL_UNEXPECTED_MESSAGE.
Referenced by ssl_handshake_client(), and ssl_handshake_server().
int ssl_parse_finished | ( | ssl_context * | ssl | ) |
Definition at line 1480 of file ssl_tls.c.
References buf, _ssl_context::do_crypt, _ssl_context::endpoint, _ssl_context::fin_md5, _ssl_context::fin_sha1, _ssl_context::in_hslen, _ssl_context::in_msg, _ssl_context::in_msgtype, md5(), _ssl_context::minor_ver, _ssl_context::resume, sha1(), ssl_calc_finished(), SSL_CLIENT_CHANGE_CIPHER_SPEC, SSL_DEBUG_MSG, SSL_DEBUG_RET, SSL_HANDSHAKE_OVER, SSL_HS_FINISHED, SSL_IS_CLIENT, SSL_IS_SERVER, SSL_MINOR_VERSION_0, SSL_MSG_HANDSHAKE, ssl_read_record(), _ssl_context::state, XYSSL_ERR_SSL_BAD_HS_FINISHED, and XYSSL_ERR_SSL_UNEXPECTED_MESSAGE.
Referenced by ssl_handshake_client(), and ssl_handshake_server().
int ssl_read | ( | ssl_context * | ssl, | |
unsigned char * | buf, | |||
int | len | |||
) |
Read at most 'len' application data bytes.
ssl | SSL context | |
buf | buffer that will hold the data | |
len | how many bytes must be read |
Definition at line 1791 of file ssl_tls.c.
References _ssl_context::in_msg, _ssl_context::in_msglen, _ssl_context::in_msgtype, _ssl_context::in_offt, SSL_DEBUG_MSG, SSL_DEBUG_RET, ssl_handshake(), SSL_HANDSHAKE_OVER, SSL_MSG_APPLICATION_DATA, ssl_read_record(), _ssl_context::state, and XYSSL_ERR_SSL_UNEXPECTED_MESSAGE.
Referenced by main(), and ssl_test().
int ssl_read_record | ( | ssl_context * | ssl | ) |
Definition at line 842 of file ssl_tls.c.
References _ssl_context::do_crypt, _ssl_context::fin_md5, _ssl_context::fin_sha1, _ssl_context::in_hdr, _ssl_context::in_hslen, _ssl_context::in_left, _ssl_context::in_msg, _ssl_context::in_msglen, _ssl_context::in_msgtype, _ssl_context::major_ver, md5_update(), _ssl_context::minlen, _ssl_context::minor_ver, sha1_update(), SSL_ALERT_CLOSE_NOTIFY, SSL_ALERT_FATAL, SSL_ALERT_WARNING, SSL_DEBUG_BUF, SSL_DEBUG_MSG, SSL_DEBUG_RET, ssl_decrypt_buf(), ssl_fetch_input(), SSL_MAX_CONTENT_LEN, SSL_MINOR_VERSION_0, SSL_MINOR_VERSION_1, SSL_MSG_ALERT, SSL_MSG_HANDSHAKE, XYSSL_ERR_SSL_FATAL_ALERT_MESSAGE, XYSSL_ERR_SSL_INVALID_RECORD, and XYSSL_ERR_SSL_PEER_CLOSE_NOTIFY.
Referenced by ssl_parse_certificate(), ssl_parse_certificate_request(), ssl_parse_certificate_verify(), ssl_parse_change_cipher_spec(), ssl_parse_client_key_exchange(), ssl_parse_finished(), ssl_parse_server_hello(), ssl_parse_server_hello_done(), ssl_parse_server_key_exchange(), and ssl_read().
void ssl_set_authmode | ( | ssl_context * | ssl, | |
int | authmode | |||
) |
Set the certificate verification mode.
ssl | SSL context | |
mode | can be: |
SSL_VERIFY_NONE: peer certificate is not checked (default), this is insecure and SHOULD be avoided.
SSL_VERIFY_OPTIONAL: peer certificate is checked, however the handshake continues even if verification failed; ssl_get_verify_result() can be called after the handshake is complete.
SSL_VERIFY_REQUIRED: peer *must* present a valid certificate, handshake is aborted if verification failed.
Definition at line 1589 of file ssl_tls.c.
References _ssl_context::authmode.
Referenced by main(), and ssl_test().
void ssl_set_bio | ( | ssl_context * | ssl, | |
int(*)(void *, unsigned char *, int) | f_recv, | |||
void * | p_recv, | |||
int(*)(void *, unsigned char *, int) | f_send, | |||
void * | p_send | |||
) |
Set the underlying BIO read and write callbacks.
ssl | SSL context | |
f_recv | read callback | |
p_recv | read parameter | |
f_send | write callback | |
p_send | write parameter |
Definition at line 1610 of file ssl_tls.c.
References _ssl_context::f_recv, _ssl_context::f_send, _ssl_context::p_recv, and _ssl_context::p_send.
Referenced by main(), and ssl_test().
void ssl_set_ca_chain | ( | ssl_context * | ssl, | |
x509_cert * | ca_chain, | |||
char * | peer_cn | |||
) |
Set the data required to verify peer certificate.
ssl | SSL context | |
ca_chain | trusted CA chain | |
peer_cn | expected peer CommonName (or NULL) |
Definition at line 1641 of file ssl_tls.c.
References _ssl_context::ca_chain, and _ssl_context::peer_cn.
Referenced by main(), and ssl_test().
void ssl_set_ciphers | ( | ssl_context * | ssl, | |
int * | ciphers | |||
) |
Set the list of allowed ciphersuites.
ssl | SSL context | |
ciphers | 0-terminated list of allowed ciphers |
Definition at line 1636 of file ssl_tls.c.
References _ssl_context::ciphers.
Referenced by main(), and ssl_test().
void ssl_set_dbg | ( | ssl_context * | ssl, | |
void(*)(void *, int, char *) | f_dbg, | |||
void * | p_dbg | |||
) |
Set the debug callback.
ssl | SSL context | |
f_dbg | debug function | |
p_dbg | debug parameter |
Definition at line 1602 of file ssl_tls.c.
References _ssl_context::f_dbg, and _ssl_context::p_dbg.
Referenced by main(), and ssl_test().
int ssl_set_dh_param | ( | ssl_context * | ssl, | |
char * | dhm_P, | |||
char * | dhm_G | |||
) |
Set the Diffie-Hellman public P and G values, read as hexadecimal strings (server-side only).
ssl | SSL context | |
dhm_P | Diffie-Hellman-Merkle modulus | |
dhm_G | Diffie-Hellman-Merkle generator |
Definition at line 1655 of file ssl_tls.c.
References _ssl_context::dhm_ctx, dhm_context::G, mpi_read_string(), dhm_context::P, and SSL_DEBUG_RET.
Referenced by main(), and ssl_test().
void ssl_set_endpoint | ( | ssl_context * | ssl, | |
int | endpoint | |||
) |
Set the current endpoint type.
ssl | SSL context | |
endpoint | must be SSL_IS_CLIENT or SSL_IS_SERVER |
Definition at line 1584 of file ssl_tls.c.
References _ssl_context::endpoint.
Referenced by main(), and ssl_test().
int ssl_set_hostname | ( | ssl_context * | ssl, | |
char * | hostname | |||
) |
Set hostname for ServerName TLS Extension.
ssl | SSL context | |
hostname | the server hostname |
Definition at line 1674 of file ssl_tls.c.
References _ssl_context::hostname, _ssl_context::hostname_len, and XYSSL_ERR_SSL_BAD_INPUT_DATA.
Referenced by main().
void ssl_set_own_cert | ( | ssl_context * | ssl, | |
x509_cert * | own_cert, | |||
rsa_context * | rsa_key | |||
) |
Set own certificate and private key.
ssl | SSL context | |
own_cert | own public certificate | |
rsa_key | own private RSA key |
Definition at line 1648 of file ssl_tls.c.
References _ssl_context::own_cert, and _ssl_context::rsa_key.
Referenced by main(), and ssl_test().
void ssl_set_rng | ( | ssl_context * | ssl, | |
int(*)(void *) | f_rng, | |||
void * | p_rng | |||
) |
Set the random number generator callback.
ssl | SSL context | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 1594 of file ssl_tls.c.
References _ssl_context::f_rng, and _ssl_context::p_rng.
Referenced by main(), and ssl_test().
void ssl_set_scb | ( | ssl_context * | ssl, | |
int(*)(ssl_context *) | s_get, | |||
int(*)(ssl_context *) | s_set | |||
) |
Set the session callbacks (server-side only).
ssl | SSL context | |
s_get | session get callback | |
s_set | session set callback |
Definition at line 1620 of file ssl_tls.c.
References _ssl_context::s_get, and _ssl_context::s_set.
Referenced by main().
void ssl_set_session | ( | ssl_context * | ssl, | |
int | resume, | |||
int | timeout, | |||
ssl_session * | session | |||
) |
Set the session resuming flag, timeout and data.
ssl | SSL context | |
resume | if 0 (default), the session will not be resumed | |
timeout | session timeout in seconds, or 0 (no timeout) | |
session | session context |
Definition at line 1628 of file ssl_tls.c.
References _ssl_context::resume, _ssl_context::session, and _ssl_context::timeout.
Referenced by main(), and ssl_test().
int ssl_write | ( | ssl_context * | ssl, | |
unsigned char * | buf, | |||
int | len | |||
) |
Write exactly 'len' application data bytes.
ssl | SSL context | |
buf | buffer holding the data | |
len | how many bytes must be written |
Definition at line 1857 of file ssl_tls.c.
References _ssl_context::out_left, _ssl_context::out_msg, _ssl_context::out_msglen, _ssl_context::out_msgtype, SSL_DEBUG_MSG, SSL_DEBUG_RET, ssl_flush_output(), ssl_handshake(), SSL_HANDSHAKE_OVER, SSL_MAX_CONTENT_LEN, SSL_MSG_APPLICATION_DATA, ssl_write_record(), and _ssl_context::state.
Referenced by main(), and ssl_test().
int ssl_write_certificate | ( | ssl_context * | ssl | ) |
Definition at line 1044 of file ssl_tls.c.
References _ssl_context::client_auth, _ssl_context::endpoint, _x509_buf::len, _ssl_context::minor_ver, _x509_cert::next, _ssl_context::out_msg, _ssl_context::out_msglen, _ssl_context::out_msgtype, _ssl_context::own_cert, _x509_buf::p, _x509_cert::raw, SSL_ALERT_NO_CERTIFICATE, SSL_ALERT_WARNING, SSL_DEBUG_CRT, SSL_DEBUG_MSG, SSL_DEBUG_RET, SSL_HS_CERTIFICATE, SSL_IS_CLIENT, SSL_MAX_CONTENT_LEN, SSL_MINOR_VERSION_0, SSL_MSG_ALERT, SSL_MSG_HANDSHAKE, ssl_write_record(), _ssl_context::state, XYSSL_ERR_SSL_CERTIFICATE_REQUIRED, and XYSSL_ERR_SSL_CERTIFICATE_TOO_LARGE.
Referenced by ssl_handshake_client(), and ssl_handshake_server().
int ssl_write_change_cipher_spec | ( | ssl_context * | ssl | ) |
Definition at line 1287 of file ssl_tls.c.
References _ssl_context::do_crypt, _ssl_context::out_msg, _ssl_context::out_msglen, _ssl_context::out_msgtype, SSL_DEBUG_MSG, SSL_DEBUG_RET, SSL_MSG_CHANGE_CIPHER_SPEC, ssl_write_record(), and _ssl_context::state.
Referenced by ssl_handshake_client(), and ssl_handshake_server().
int ssl_write_finished | ( | ssl_context * | ssl | ) |
Definition at line 1433 of file ssl_tls.c.
References _ssl_context::do_crypt, _ssl_context::endpoint, _ssl_context::fin_md5, _ssl_context::fin_sha1, md5(), _ssl_context::minor_ver, _ssl_context::out_msg, _ssl_context::out_msglen, _ssl_context::out_msgtype, _ssl_context::resume, sha1(), ssl_calc_finished(), SSL_CLIENT_CHANGE_CIPHER_SPEC, SSL_DEBUG_MSG, SSL_DEBUG_RET, SSL_HANDSHAKE_OVER, SSL_HS_FINISHED, SSL_IS_CLIENT, SSL_MINOR_VERSION_0, SSL_MSG_HANDSHAKE, ssl_write_record(), and _ssl_context::state.
Referenced by ssl_handshake_client(), and ssl_handshake_server().
int ssl_write_record | ( | ssl_context * | ssl | ) |
Definition at line 786 of file ssl_tls.c.
References _ssl_context::do_crypt, _ssl_context::fin_md5, _ssl_context::fin_sha1, _ssl_context::major_ver, md5_update(), _ssl_context::minor_ver, _ssl_context::out_hdr, _ssl_context::out_left, _ssl_context::out_msg, _ssl_context::out_msglen, _ssl_context::out_msgtype, sha1_update(), SSL_DEBUG_BUF, SSL_DEBUG_MSG, SSL_DEBUG_RET, ssl_encrypt_buf(), ssl_flush_output(), and SSL_MSG_HANDSHAKE.
Referenced by ssl_close_notify(), ssl_write(), ssl_write_certificate(), ssl_write_certificate_request(), ssl_write_certificate_verify(), ssl_write_change_cipher_spec(), ssl_write_client_hello(), ssl_write_client_key_exchange(), ssl_write_finished(), ssl_write_server_hello(), ssl_write_server_hello_done(), and ssl_write_server_key_exchange().
static int tls1_prf | ( | unsigned char * | secret, | |
int | slen, | |||
char * | label, | |||
unsigned char * | random, | |||
int | rlen, | |||
unsigned char * | dstbuf, | |||
int | dlen | |||
) | [static] |
Definition at line 46 of file ssl_tls.c.
References md5_hmac(), S1, S2, sha1_hmac(), and XYSSL_ERR_SSL_BAD_INPUT_DATA.
Referenced by ssl_calc_finished(), and ssl_derive_keys().
{ SSL_EDH_RSA_AES_256_SHA, SSL_EDH_RSA_DES_168_SHA, SSL_RSA_AES_128_SHA, SSL_RSA_AES_256_SHA, SSL_RSA_DES_168_SHA, SSL_RSA_RC4_128_SHA, SSL_RSA_RC4_128_MD5, 0 }
Definition at line 1739 of file ssl_tls.c.
Referenced by main(), and ssl_test().