1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
|
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
|
+
-
|
*
*/
static struct cackey_tlv_entity *cackey_read_tlv(struct cackey_slot *slot) {
struct cackey_tlv_entity *curr_entity, *root = NULL, *last = NULL;
unsigned char tlen_buf[2], tval_buf[1024], *tval;
unsigned char vlen_buf[2], vval_buf[8192], *vval;
unsigned char *tmpbuf;
unsigned long tmpbuflen;
ssize_t tlen, vlen;
ssize_t read_ret;
size_t offset_t = 0, offset_v = 0;
unsigned char tag;
size_t length;
#ifdef HAVE_LIBZ
uLongf tmpbuflen;
int uncompress_ret;
#endif
CACKEY_DEBUG_PRINTF("Called.");
read_ret = cackey_read_buffer(slot, tlen_buf, sizeof(tlen_buf), 1, offset_t);
if (read_ret != sizeof(tlen_buf)) {
|
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
|
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
|
+
-
|
curr_entity->value = tmpbuf;
curr_entity->_next = NULL;
break;
case GSCIS_TAG_CERTIFICATE:
curr_entity = malloc(sizeof(*curr_entity));
#ifdef HAVE_LIBZ
tmpbuflen = length * 2;
tmpbuf = malloc(tmpbuflen);
#ifdef HAVE_LIBZ
uncompress_ret = uncompress(tmpbuf, &tmpbuflen, vval, length);
if (uncompress_ret != Z_OK) {
CACKEY_DEBUG_PRINTF("Failed to decompress, uncompress() returned %i -- resorting to direct copy", uncompress_ret);
tmpbuflen = length;
memcpy(tmpbuf, vval, length);
}
|