/home/dko/Projects/mobilec/src/security/xyssl-0.9/library/ssl_tls.c File Reference

#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 []

Function Documentation

static void ssl_calc_finished ( ssl_context ssl,
unsigned char *  buf,
int  from,
md5_context md5,
sha1_context sha1 
) [static]
void ssl_calc_verify ( ssl_context ssl,
unsigned char  hash[36] 
)
int ssl_close_notify ( ssl_context ssl  ) 
static int ssl_decrypt_buf ( ssl_context ssl  )  [static]
int ssl_derive_keys ( ssl_context ssl  ) 
static int ssl_encrypt_buf ( ssl_context ssl  )  [static]
int ssl_fetch_input ( ssl_context ssl,
int  nb_want 
)
int ssl_flush_output ( ssl_context ssl  ) 
void ssl_free ( ssl_context ssl  ) 
int ssl_get_bytes_avail ( ssl_context ssl  ) 

Return the number of data bytes available to read.

Parameters:
ssl SSL context
Returns:
how many bytes are available in the read buffer

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.

Parameters:
ssl SSL context
Returns:
a string containing the cipher name

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.

Parameters:
ssl SSL context
Returns:
0 if successful, or a combination of: BADCERT_EXPIRED BADCERT_REVOKED BADCERT_CN_MISMATCH BADCERT_NOT_TRUSTED

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.

Parameters:
ssl SSL context
Returns:
0 if successful, XYSSL_ERR_NET_TRY_AGAIN, or a specific SSL error code.

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.

Parameters:
ssl SSL context
Returns:
0 if successful, or 1 if memory allocation failed

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  ) 
int ssl_parse_change_cipher_spec ( ssl_context ssl  ) 
int ssl_parse_finished ( ssl_context ssl  ) 
int ssl_read ( ssl_context ssl,
unsigned char *  buf,
int  len 
)

Read at most 'len' application data bytes.

Parameters:
ssl SSL context
buf buffer that will hold the data
len how many bytes must be read
Returns:
This function returns the number of bytes read, or a negative error code.

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  ) 
void ssl_set_authmode ( ssl_context ssl,
int  authmode 
)

Set the certificate verification mode.

Parameters:
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.

Parameters:
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.

Parameters:
ssl SSL context
ca_chain trusted CA chain
peer_cn expected peer CommonName (or NULL)
Note:
TODO: add two more parameters: depth and crl

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.

Parameters:
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.

Parameters:
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).

Parameters:
ssl SSL context
dhm_P Diffie-Hellman-Merkle modulus
dhm_G Diffie-Hellman-Merkle generator
Returns:
0 if successful

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.

Parameters:
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.

Parameters:
ssl SSL context
hostname the server hostname
Returns:
0 if successful

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.

Parameters:
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.

Parameters:
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).

Parameters:
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.

Parameters:
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.

Parameters:
ssl SSL context
buf buffer holding the data
len how many bytes must be written
Returns:
This function returns the number of bytes written, or a negative error code.
Note:
When this function returns XYSSL_ERR_NET_TRY_AGAIN, it must be called later with the *same* arguments, until it returns a positive value.

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  ) 
int ssl_write_change_cipher_spec ( ssl_context ssl  ) 
int ssl_write_finished ( ssl_context ssl  ) 
int ssl_write_record ( ssl_context ssl  ) 
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().


Variable Documentation

Generated on Tue Dec 28 15:15:29 2010 for Mobile-C by  doxygen 1.6.3