27 #ifndef _DTLS_CRYPTO_H_ 
   28 #define _DTLS_CRYPTO_H_ 
   35 #include "aes/rijndael.h" 
   44 #define DTLS_MAC_KEY_LENGTH    0 
   45 #define DTLS_KEY_LENGTH        16  
   46 #define DTLS_BLK_LENGTH        16  
   47 #define DTLS_MAC_LENGTH        DTLS_HMAC_DIGEST_SIZE 
   48 #define DTLS_IV_LENGTH         4   
   55 #define MAX_KEYBLOCK_LENGTH  \ 
   56   (2 * DTLS_MAC_KEY_LENGTH + 2 * DTLS_KEY_LENGTH + 2 * DTLS_IV_LENGTH) 
   59 #define DTLS_MASTER_SECRET_LENGTH 48 
   60 #define DTLS_RANDOM_LENGTH 32 
   89 #define DTLS_PSK_MAX_CLIENT_IDENTITY_LEN   32 
   92 #define DTLS_PSK_MAX_KEY_LEN 32 
  129   unsigned int do_client_auth:1;
 
  143 #define dtls_kb_client_mac_secret(Param, Role) ((Param)->key_block) 
  144 #define dtls_kb_server_mac_secret(Param, Role)              \ 
  145   (dtls_kb_client_mac_secret(Param, Role) + DTLS_MAC_KEY_LENGTH) 
  146 #define dtls_kb_remote_mac_secret(Param, Role)              \ 
  147   ((Role) == DTLS_SERVER                        \ 
  148    ? dtls_kb_client_mac_secret(Param, Role)             \ 
  149    : dtls_kb_server_mac_secret(Param, Role)) 
  150 #define dtls_kb_local_mac_secret(Param, Role)               \ 
  151   ((Role) == DTLS_CLIENT                        \ 
  152    ? dtls_kb_client_mac_secret(Param, Role)             \ 
  153    : dtls_kb_server_mac_secret(Param, Role)) 
  154 #define dtls_kb_mac_secret_size(Param, Role) DTLS_MAC_KEY_LENGTH 
  155 #define dtls_kb_client_write_key(Param, Role)               \ 
  156   (dtls_kb_server_mac_secret(Param, Role) + DTLS_MAC_KEY_LENGTH) 
  157 #define dtls_kb_server_write_key(Param, Role)               \ 
  158   (dtls_kb_client_write_key(Param, Role) + DTLS_KEY_LENGTH) 
  159 #define dtls_kb_remote_write_key(Param, Role)               \ 
  160   ((Role) == DTLS_SERVER                        \ 
  161    ? dtls_kb_client_write_key(Param, Role)              \ 
  162    : dtls_kb_server_write_key(Param, Role)) 
  163 #define dtls_kb_local_write_key(Param, Role)                \ 
  164   ((Role) == DTLS_CLIENT                        \ 
  165    ? dtls_kb_client_write_key(Param, Role)              \ 
  166    : dtls_kb_server_write_key(Param, Role)) 
  167 #define dtls_kb_key_size(Param, Role) DTLS_KEY_LENGTH 
  168 #define dtls_kb_client_iv(Param, Role)                  \ 
  169   (dtls_kb_server_write_key(Param, Role) + DTLS_KEY_LENGTH) 
  170 #define dtls_kb_server_iv(Param, Role)                  \ 
  171   (dtls_kb_client_iv(Param, Role) + DTLS_IV_LENGTH) 
  172 #define dtls_kb_remote_iv(Param, Role)                  \ 
  173   ((Role) == DTLS_SERVER                        \ 
  174    ? dtls_kb_client_iv(Param, Role)                 \ 
  175    : dtls_kb_server_iv(Param, Role)) 
  176 #define dtls_kb_local_iv(Param, Role)                   \ 
  177   ((Role) == DTLS_CLIENT                        \ 
  178    ? dtls_kb_client_iv(Param, Role)                 \ 
  179    : dtls_kb_server_iv(Param, Role)) 
  180 #define dtls_kb_iv_size(Param, Role) DTLS_IV_LENGTH 
  182 #define dtls_kb_size(Param, Role)                   \ 
  183   (2 * (dtls_kb_mac_secret_size(Param, Role) +              \ 
  184     dtls_kb_key_size(Param, Role) + dtls_kb_iv_size(Param, Role))) 
  187 #define dtls_kb_digest_size(Param, Role) DTLS_MAC_LENGTH 
  206            const unsigned char *key, 
size_t keylen,
 
  207            const unsigned char *label, 
size_t labellen,
 
  208            const unsigned char *random1, 
size_t random1len,
 
  209            const unsigned char *random2, 
size_t random2len,
 
  210            unsigned char *buf, 
size_t buflen);
 
  217 size_t dtls_prf(
const unsigned char *key, 
size_t keylen,
 
  218         const unsigned char *label, 
size_t labellen,
 
  219         const unsigned char *random1, 
size_t random1len,
 
  220         const unsigned char *random2, 
size_t random2len,
 
  221         unsigned char *buf, 
size_t buflen);
 
  240           const unsigned char *record,
 
  241           const unsigned char *packet, 
size_t length,
 
  264 int dtls_encrypt(
const unsigned char *src, 
size_t length,
 
  266          unsigned char *nounce,
 
  267          unsigned char *key, 
size_t keylen,
 
  268          const unsigned char *aad, 
size_t aad_length);
 
  288 int dtls_decrypt(
const unsigned char *src, 
size_t length,
 
  290          unsigned char *nounce,
 
  291          unsigned char *key, 
size_t keylen,
 
  292          const unsigned char *a_data, 
size_t a_data_length);
 
  307                    unsigned char *result, 
size_t result_len);
 
  309 #define DTLS_EC_KEY_SIZE 32 
  312                 unsigned char *pub_key_x,
 
  313                                 unsigned char *pub_key_y,
 
  315                                 unsigned char *result,
 
  319                  unsigned char *pub_key_x,
 
  320                  unsigned char *pub_key_y,
 
  324                 const unsigned char *sign_hash, 
size_t sign_hash_size,
 
  325                 uint32_t point_r[9], uint32_t point_s[9]);
 
  328                const unsigned char *client_random, 
size_t client_random_size,
 
  329                const unsigned char *server_random, 
size_t server_random_size,
 
  330                const unsigned char *keyx_params, 
size_t keyx_params_size,
 
  331                uint32_t point_r[9], uint32_t point_s[9]);
 
  334                    const unsigned char *pub_key_y, 
size_t key_size,
 
  335                    const unsigned char *sign_hash, 
size_t sign_hash_size,
 
  336                    unsigned char *result_r, 
unsigned char *result_s);
 
  339               const unsigned char *pub_key_y, 
size_t key_size,
 
  340               const unsigned char *client_random, 
size_t client_random_size,
 
  341               const unsigned char *server_random, 
size_t server_random_size,
 
  342               const unsigned char *keyx_params, 
size_t keyx_params_size,
 
  343               unsigned char *result_r, 
unsigned char *result_s);
 
int dtls_ecdh_pre_master_secret(unsigned char *priv_key, unsigned char *pub_key_x, unsigned char *pub_key_y, size_t key_size, unsigned char *result, size_t result_len)
void dtls_security_free(dtls_security_parameters_t *security)
size_t dtls_prf(const unsigned char *key, size_t keylen, const unsigned char *label, size_t labellen, const unsigned char *random1, size_t random1len, const unsigned char *random2, size_t random2len, unsigned char *buf, size_t buflen)
Wrappers for list structures and functions. 
int dtls_encrypt(const unsigned char *src, size_t length, unsigned char *buf, unsigned char *nounce, unsigned char *key, size_t keylen, const unsigned char *aad, size_t aad_length)
void dtls_mac(dtls_hmac_context_t *hmac_ctx, const unsigned char *record, const unsigned char *packet, size_t length, unsigned char *buf)
dtls_handshake_parameters_t * dtls_handshake_new()
int dtls_psk_pre_master_secret(unsigned char *key, size_t keylen, unsigned char *result, size_t result_len)
void dtls_ecdsa_generate_key(unsigned char *priv_key, unsigned char *pub_key_x, unsigned char *pub_key_y, size_t key_size)
int dtls_decrypt(const unsigned char *src, size_t length, unsigned char *buf, unsigned char *nounce, unsigned char *key, size_t keylen, const unsigned char *a_data, size_t a_data_length)
size_t dtls_p_hash(dtls_hashfunc_t h, const unsigned char *key, size_t keylen, const unsigned char *label, size_t labellen, const unsigned char *random1, size_t random1len, const unsigned char *random2, size_t random2len, unsigned char *buf, size_t buflen)
#define DTLS_PSK_MAX_CLIENT_IDENTITY_LEN
#define MAX_KEYBLOCK_LENGTH
void dtls_handshake_free(dtls_handshake_parameters_t *handshake)
#define DTLS_RANDOM_LENGTH
dtls_compression_t compression
dtls_compression_t compression
#define DTLS_MASTER_SECRET_LENGTH
void dtls_ecdsa_create_sig(const unsigned char *priv_key, size_t key_size, const unsigned char *client_random, size_t client_random_size, const unsigned char *server_random, size_t server_random_size, const unsigned char *keyx_params, size_t keyx_params_size, uint32_t point_r[9], uint32_t point_s[9])
int dtls_ecdsa_verify_sig_hash(const unsigned char *pub_key_x, const unsigned char *pub_key_y, size_t key_size, const unsigned char *sign_hash, size_t sign_hash_size, unsigned char *result_r, unsigned char *result_s)
state information for DTLS FSM 
int dtls_ec_key_from_uint32_asn1(const uint32_t *key, size_t key_size, unsigned char *buf)
#define LIST_STRUCT(name)
dtls_security_parameters_t * dtls_security_new()
struct dtls_cipher_context_t dtls_cipher_context_t
int dtls_ecdsa_verify_sig(const unsigned char *pub_key_x, const unsigned char *pub_key_y, size_t key_size, const unsigned char *client_random, size_t client_random_size, const unsigned char *server_random, size_t server_random_size, const unsigned char *keyx_params, size_t keyx_params_size, unsigned char *result_r, unsigned char *result_s)
void dtls_ecdsa_create_sig_hash(const unsigned char *priv_key, size_t key_size, const unsigned char *sign_hash, size_t sign_hash_size, uint32_t point_r[9], uint32_t point_s[9])