/* Format: * 1 byte the credentials type * 4 bytes the size of the whole structure * 2 bytes the size of secret key in bits * 4 bytes the size of the prime * x bytes the prime * 4 bytes the size of the generator * x bytes the generator * 4 bytes the size of the public key * x bytes the public key */ static int pack_anon_auth_info (gnutls_session_t session, gnutls_buffer_st * ps) { int cur_size, ret; anon_auth_info_t info = _gnutls_get_auth_info (session); int size_offset; size_offset = ps->length; BUFFER_APPEND_NUM (ps, 0); cur_size = ps->length; if (info) { BUFFER_APPEND_NUM (ps, info->dh.secret_bits); BUFFER_APPEND_PFX (ps, info->dh.prime.data, info->dh.prime.size); BUFFER_APPEND_PFX (ps, info->dh.generator.data, info->dh.generator.size); BUFFER_APPEND_PFX (ps, info->dh.public_key.data, info->dh.public_key.size); } /* write the real size */ _gnutls_write_uint32 (ps->length - cur_size, ps->data + size_offset); return 0; }
static int ia_pack (extension_priv_data_t epriv, gnutls_buffer_st * ps) { ia_ext_st *priv = epriv.ptr; int ret; BUFFER_APPEND_NUM (ps, priv->flags); BUFFER_APPEND_PFX (ps, priv->inner_secret, GNUTLS_MASTER_SIZE); return 0; }
/* Format: * 1 byte the credentials type * 4 bytes the size of the whole structure * * 4 bytes the size of the PSK username (x) * x bytes the PSK username * 2 bytes the size of secret key in bits * 4 bytes the size of the prime * x bytes the prime * 4 bytes the size of the generator * x bytes the generator * 4 bytes the size of the public key * x bytes the public key */ static int pack_psk_auth_info (gnutls_session_t session, gnutls_buffer_st * ps) { psk_auth_info_t info; int username_len; int hint_len, ret; int size_offset; size_t cur_size; info = _gnutls_get_auth_info (session); if (info && info->username) username_len = strlen (info->username) + 1; /* include the terminating null */ else username_len = 0; if (info && info->hint) hint_len = strlen (info->hint) + 1; /* include the terminating null */ else hint_len = 0; size_offset = ps->length; BUFFER_APPEND_NUM (ps, 0); cur_size = ps->length; BUFFER_APPEND_PFX (ps, info->username, username_len); BUFFER_APPEND_PFX (ps, info->hint, hint_len); BUFFER_APPEND_NUM (ps, info->dh.secret_bits); BUFFER_APPEND_PFX (ps, info->dh.prime.data, info->dh.prime.size); BUFFER_APPEND_PFX (ps, info->dh.generator.data, info->dh.generator.size); BUFFER_APPEND_PFX (ps, info->dh.public_key.data, info->dh.public_key.size); /* write the real size */ _gnutls_write_uint32 (ps->length - cur_size, ps->data + size_offset); return 0; }
static int _proxyinfo_pack (extension_priv_data_t epriv, gnutls_buffer_st * ps) { // Append the extension's internal state to buffer ProxyInfo_ext_st *priv = epriv.ptr; int i, ret; BUFFER_APPEND_NUM (ps, priv->proxy_cnt); BUFFER_APPEND_NUM (ps, priv->server_names_size); for (i = 0; i < priv->server_names_size; i++) { BUFFER_APPEND_NUM (ps, priv->server_names[i].type); BUFFER_APPEND_PFX (ps, priv->server_names[i].name, priv->server_names[i].name_length); } return 0; }
/* Format: * 1 byte the credentials type * 4 bytes the size of the SRP username (x) * x bytes the SRP username */ static int pack_srp_auth_info (gnutls_session_t session, gnutls_buffer_st * ps) { srp_server_auth_info_t info = _gnutls_get_auth_info (session); int len, ret; int size_offset; size_t cur_size; if (info && info->username) len = strlen (info->username) + 1; /* include the terminating null */ else len = 0; size_offset = ps->length; BUFFER_APPEND_NUM (ps, 0); cur_size = ps->length; BUFFER_APPEND_PFX (ps, info->username, len); /* write the real size */ _gnutls_write_uint32 (ps->length - cur_size, ps->data + size_offset); return 0; }
/* Format: * 1 byte the credentials type * 4 bytes the size of the whole structure * DH stuff * 2 bytes the size of secret key in bits * 4 bytes the size of the prime * x bytes the prime * 4 bytes the size of the generator * x bytes the generator * 4 bytes the size of the public key * x bytes the public key * RSA stuff * 4 bytes the size of the modulus * x bytes the modulus * 4 bytes the size of the exponent * x bytes the exponent * CERTIFICATES * 4 bytes the length of the certificate list * 4 bytes the size of first certificate * x bytes the certificate * and so on... */ static int pack_certificate_auth_info (gnutls_session_t session, gnutls_buffer_st * ps) { unsigned int i; int cur_size, ret; cert_auth_info_t info = _gnutls_get_auth_info (session); int size_offset; size_offset = ps->length; BUFFER_APPEND_NUM (ps, 0); cur_size = ps->length; if (info) { BUFFER_APPEND_NUM (ps, info->dh.secret_bits); BUFFER_APPEND_PFX (ps, info->dh.prime.data, info->dh.prime.size); BUFFER_APPEND_PFX (ps, info->dh.generator.data, info->dh.generator.size); BUFFER_APPEND_PFX (ps, info->dh.public_key.data, info->dh.public_key.size); BUFFER_APPEND_PFX (ps, info->rsa_export.modulus.data, info->rsa_export.modulus.size); BUFFER_APPEND_PFX (ps, info->rsa_export.exponent.data, info->rsa_export.exponent.size); BUFFER_APPEND_NUM (ps, info->ncerts); for (i = 0; i < info->ncerts; i++) BUFFER_APPEND_PFX (ps, info->raw_certificate_list[i].data, info->raw_certificate_list[i].size); } /* write the real size */ _gnutls_write_uint32 (ps->length - cur_size, ps->data + size_offset); return 0; }