psk.c | psk.c | |||
---|---|---|---|---|
skipping to change at line 164 | skipping to change at line 164 | |||
* | * | |||
*/ | */ | |||
int | int | |||
_gnutls_gen_psk_client_kx(gnutls_session_t session, | _gnutls_gen_psk_client_kx(gnutls_session_t session, | |||
gnutls_buffer_st * data) | gnutls_buffer_st * data) | |||
{ | { | |||
int ret, free; | int ret, free; | |||
gnutls_datum_t username = {NULL, 0}; | gnutls_datum_t username = {NULL, 0}; | |||
gnutls_datum_t key; | gnutls_datum_t key; | |||
gnutls_psk_client_credentials_t cred; | gnutls_psk_client_credentials_t cred; | |||
psk_auth_info_t info; | ||||
cred = (gnutls_psk_client_credentials_t) | cred = (gnutls_psk_client_credentials_t) | |||
_gnutls_get_cred(session, GNUTLS_CRD_PSK); | _gnutls_get_cred(session, GNUTLS_CRD_PSK); | |||
if (cred == NULL) { | if (cred == NULL) { | |||
gnutls_assert(); | gnutls_assert(); | |||
return GNUTLS_E_INSUFFICIENT_CREDENTIALS; | return GNUTLS_E_INSUFFICIENT_CREDENTIALS; | |||
} | } | |||
info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); | ||||
if (info == NULL) { | ||||
gnutls_assert(); | ||||
return GNUTLS_E_INTERNAL_ERROR; | ||||
} | ||||
ret = _gnutls_find_psk_key(session, cred, &username, &key, &free); | ret = _gnutls_find_psk_key(session, cred, &username, &key, &free); | |||
if (ret < 0) | if (ret < 0) | |||
return gnutls_assert_val(ret); | return gnutls_assert_val(ret); | |||
ret = _gnutls_set_psk_session_key(session, &key, NULL); | ret = _gnutls_set_psk_session_key(session, &key, NULL); | |||
if (ret < 0) { | if (ret < 0) { | |||
gnutls_assert(); | gnutls_assert(); | |||
goto cleanup; | goto cleanup; | |||
} | } | |||
ret = | ret = | |||
_gnutls_buffer_append_data_prefix(data, 16, username.data, | _gnutls_buffer_append_data_prefix(data, 16, username.data, | |||
username.size); | username.size); | |||
if (ret < 0) { | if (ret < 0) { | |||
gnutls_assert(); | gnutls_assert(); | |||
} | } | |||
if (username.size > sizeof(info->username)-1) { | ||||
gnutls_assert(); | ||||
ret = GNUTLS_E_ILLEGAL_SRP_USERNAME; | ||||
goto cleanup; | ||||
} | ||||
memcpy(info->username, username.data, username.size); | ||||
info->username[username.size] = 0; | ||||
cleanup: | cleanup: | |||
if (free) { | if (free) { | |||
gnutls_free(username.data); | gnutls_free(username.data); | |||
_gnutls_free_temp_key_datum(&key); | _gnutls_free_temp_key_datum(&key); | |||
} | } | |||
return ret; | return ret; | |||
} | } | |||
/* just read the username from the client key exchange. | /* just read the username from the client key exchange. | |||
skipping to change at line 349 | skipping to change at line 365 | |||
hint.data = &data[2]; | hint.data = &data[2]; | |||
/* copy the hint to the auth info structures | /* copy the hint to the auth info structures | |||
*/ | */ | |||
info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); | info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); | |||
if (info == NULL) { | if (info == NULL) { | |||
gnutls_assert(); | gnutls_assert(); | |||
return GNUTLS_E_INTERNAL_ERROR; | return GNUTLS_E_INTERNAL_ERROR; | |||
} | } | |||
if (hint.size > MAX_USERNAME_SIZE) { | if (hint.size > sizeof(info->hint)-1) { | |||
gnutls_assert(); | gnutls_assert(); | |||
return GNUTLS_E_ILLEGAL_SRP_USERNAME; | return GNUTLS_E_ILLEGAL_SRP_USERNAME; | |||
} | } | |||
memcpy(info->hint, hint.data, hint.size); | memcpy(info->hint, hint.data, hint.size); | |||
info->hint[hint.size] = 0; | info->hint[hint.size] = 0; | |||
ret = 0; | ret = 0; | |||
return ret; | return ret; | |||
End of changes. 4 change blocks. | ||||
1 lines changed or deleted | 17 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |