diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2018-04-04 15:28:37 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2018-04-06 13:28:55 +0200 |
commit | 7d60d1e971ac8412b2592666a121008987e23f1e (patch) | |
tree | bb77ca61d788f6f7754083b603a6122b75c53196 /lib/ext | |
parent | 3437fdde655a73af380018ce22435628d557036e (diff) | |
download | gnutls-7d60d1e971ac8412b2592666a121008987e23f1e.tar.gz |
psk: save the username on auth info struct under TLS1.3
Add the necessary tests to verify that gnutls_psk_server_get_username()
reports the right username under TLS1.2 and TLS1.3.
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
Diffstat (limited to 'lib/ext')
-rw-r--r-- | lib/ext/pre_shared_key.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/ext/pre_shared_key.c b/lib/ext/pre_shared_key.c index 920ae17398..d4ea982cbb 100644 --- a/lib/ext/pre_shared_key.c +++ b/lib/ext/pre_shared_key.c @@ -261,6 +261,7 @@ static int server_recv_params(gnutls_session_t session, unsigned hash_size; psk_ext_parser_st psk_parser; struct psk_st psk; + psk_auth_info_t info; ret = _gnutls13_psk_ext_parser_init(&psk_parser, data, len); if (ret < 0) { @@ -319,6 +320,23 @@ static int server_recv_params(gnutls_session_t session, _gnutls_handshake_log("EXT[%p]: Selected PSK mode\n", session); } + /* save the username in psk_auth_info to make it available + * using gnutls_psk_server_get_username() */ + if (psk.ob_ticket_age == 0) { + if (psk.identity.size >= sizeof(info->username)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1); + if (ret < 0) + return gnutls_assert_val(ret); + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); + assert(info != NULL); + + memcpy(info->username, psk.identity.data, psk.identity.size); + info->username[psk.identity.size] = 0; + } + session->internals.hsk_flags |= HSK_PSK_SELECTED; /* Reference the selected pre-shared key */ |