summaryrefslogtreecommitdiff
path: root/tests/tls13/psk-ext.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tls13/psk-ext.c')
-rw-r--r--tests/tls13/psk-ext.c45
1 files changed, 40 insertions, 5 deletions
diff --git a/tests/tls13/psk-ext.c b/tests/tls13/psk-ext.c
index 3d5c5956ed..27dca45eda 100644
--- a/tests/tls13/psk-ext.c
+++ b/tests/tls13/psk-ext.c
@@ -40,9 +40,11 @@ static void decode(const char *test_name, const gnutls_datum_t *raw, const gnutl
{
int ret;
psk_ext_parser_st p;
+ psk_ext_iter_st iter;
struct psk_st psk;
gnutls_datum_t binder;
unsigned found = 0;
+ unsigned i, j;
ret = _gnutls13_psk_ext_parser_init(&p, raw->data, raw->size);
if (ret < 0) {
@@ -52,8 +54,16 @@ static void decode(const char *test_name, const gnutls_datum_t *raw, const gnutl
exit(1);
}
- while ((ret = _gnutls13_psk_ext_parser_next_psk(&p, &psk)) >= 0) {
- if (ret == (int)idx) {
+ _gnutls13_psk_ext_iter_init(&iter, &p);
+ for (i = 0; ; i++) {
+ ret = _gnutls13_psk_ext_iter_next_identity(&iter, &psk);
+ if (ret < 0) {
+ if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE)
+ break;
+ if (res == ret) /* expected */
+ return;
+ }
+ if (i == idx) {
if (psk.identity.size == id->size && memcmp(psk.identity.data, id->data, id->size) == 0) {
if (debug)
success("%s: found id\n", test_name);
@@ -68,11 +78,20 @@ static void decode(const char *test_name, const gnutls_datum_t *raw, const gnutl
if (found == 0)
fail("%s: did not found identity!\n", test_name);
- ret = _gnutls13_psk_ext_parser_find_binder(&p, idx, &binder);
- if (ret < 0) {
- fail("%s: could not extract binder: %s\n", test_name, gnutls_strerror(ret));
+ _gnutls13_psk_ext_iter_init(&iter, &p);
+ for (j = 0; j <= i; j++) {
+ ret = _gnutls13_psk_ext_iter_next_binder(&iter, &binder);
+ if (ret < 0) {
+ if (res == ret) /* expected */
+ return;
+ fail("%s: could not extract binder: %s\n",
+ test_name, gnutls_strerror(ret));
+ }
}
+ if (debug)
+ success("%s: found binder\n", test_name);
+
if (binder.size != b->size || memcmp(binder.data, b->data, b->size) != 0) {
hexprint(binder.data, binder.size);
fail("%s: did not match binder on index %d\n", test_name, idx);
@@ -155,6 +174,22 @@ struct decode_tests_st decode_tests[] = {
.binder = { (unsigned char*)"\x71\x83\x89\x3d\xcc\x46\xad\x83\x18\x98\x59\x46\x0b\xb2\x51\x24\x53\x41\xb4\x35\x04\x22\x90\x02\xac\x5e\xc1\xe7\xbc\xca\x52\x16", 32},
.idx = 2,
.res = 0
+ },
+ {
+ .name = "multiple psks id3",
+ .psk = { (unsigned char*)"\x00\x20\x00\x04\x70\x73\x6b\x31\x00\x00\x00\x00"
+ "\x00\x06\x70\x73\x6b\x69\x64\x00\x00\x00\x00\x00"
+ "\x00\x04\x74\x65\x73\x74\x00\x00\x00\x00\x00\x42"
+ "\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00", 102},
+ .id = { (unsigned char*)"test", 4 },
+ .binder = { NULL, 0 },
+ .idx = 2,
+ .res = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE
}
};