[Spice-devel] [PATCH libcacard v2 09/35] tests: Verify cardURLs are present in CCC
Jakub Jelen
jjelen at redhat.com
Thu Aug 2 09:43:41 UTC 2018
Signed-off-by: Jakub Jelen <jjelen at redhat.com>
Reviewed-by: Robert Relyea <rrelyea at redhat.com>
---
tests/libcacard.c | 48 ++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 41 insertions(+), 7 deletions(-)
diff --git a/tests/libcacard.c b/tests/libcacard.c
index 01335c2..838e3c1 100644
--- a/tests/libcacard.c
+++ b/tests/libcacard.c
@@ -431,15 +431,17 @@ static void get_acr(VReader *reader)
}
-static void read_buffer(VReader *reader, uint8_t type)
+static void read_buffer(VReader *reader, uint8_t type, int object_type)
{
int dwRecvLength = APDUBufSize, dwLength, dwReadLength, offset;
VReaderStatus status;
uint8_t pbRecvBuffer[APDUBufSize];
+ uint8_t *data;
uint8_t read_buffer[] = {
/*Read Buffer OFFSET TYPE LENGTH a_Le */
0x80, 0x52, 0x00, 0x00, 0x02, 0x01, 0x02, 0x02
};
+ int card_urls = 0;
dwRecvLength = 4;
read_buffer[5] = type;
@@ -452,9 +454,9 @@ static void read_buffer(VReader *reader, uint8_t type)
g_assert_cmphex(pbRecvBuffer[3], ==, 0x00);
dwLength = (pbRecvBuffer[0] & 0xff) | ((pbRecvBuffer[1] << 8) & 0xff);
+ data = g_malloc(dwLength);
offset = 0x02;
do {
- /* This returns only success -- get response is needed to get the actual data */
dwReadLength = MIN(255, dwLength);
dwRecvLength = dwReadLength+2;
read_buffer[2] = (unsigned char) ((offset >> 8) & 0xff);
@@ -469,9 +471,41 @@ static void read_buffer(VReader *reader, uint8_t type)
g_assert_cmphex(pbRecvBuffer[dwRecvLength-2], ==, VCARD7816_SW1_SUCCESS);
g_assert_cmphex(pbRecvBuffer[dwRecvLength-1], ==, 0x00);
- dwLength -= dwReadLength;
+ memcpy(data + offset - 2, pbRecvBuffer, dwReadLength);
offset += dwLength;
+ dwLength -= dwReadLength;
} while (dwLength != 0);
+
+ /* Try to parse the TAG buffer, if it makes sense */
+ if (type == CAC_FILE_TAG) {
+ uint8_t *p = data;
+ uint8_t *p_end = p + offset - 2;
+ while (p < p_end) {
+ uint8_t tag;
+ size_t vlen;
+ if (simpletlv_read_tag(&p, p_end - p, &tag, &vlen) < 0) {
+ g_debug("The generated SimpleTLV can not be parsed");
+ g_assert_not_reached();
+ }
+ g_debug("Tag: 0x%02x, Len: %lu", tag, vlen);
+
+ switch (tag) {
+ case 0xF3: /* CardURL from CCC */
+ if (object_type == TEST_CCC) {
+ card_urls++;
+ } else {
+ g_debug("CardURLs found outside of CCC buffer");
+ g_assert_not_reached();
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (object_type == TEST_CCC)
+ g_assert_cmpint(card_urls, ==, 4);
+ }
+ g_free(data);
}
static void select_aid(VReader *reader, int type)
@@ -535,10 +569,10 @@ static void test_cac_pki(void)
get_properties(reader, TEST_PKI);
/* get the TAG buffer length */
- read_buffer(reader, CAC_FILE_TAG);
+ read_buffer(reader, CAC_FILE_TAG, TEST_PKI);
/* get the VALUE buffer length */
- read_buffer(reader, CAC_FILE_VALUE);
+ read_buffer(reader, CAC_FILE_VALUE, TEST_PKI);
vreader_free(reader); /* get by id ref */
}
@@ -554,10 +588,10 @@ static void test_cac_ccc(void)
get_properties(reader, TEST_CCC);
/* get the TAG buffer length */
- read_buffer(reader, CAC_FILE_TAG);
+ read_buffer(reader, CAC_FILE_TAG, TEST_CCC);
/* get the VALUE buffer length */
- read_buffer(reader, CAC_FILE_VALUE);
+ read_buffer(reader, CAC_FILE_VALUE, TEST_CCC);
vreader_free(reader); /* get by id ref */
}
--
2.17.1
More information about the Spice-devel
mailing list