+
+ if ((op_msk & B_TRNG) || (op_msk & B_KEYIN)) {
+ if (len < PTH_DESC_SIZE) {
+ printf("pathlength %d with key/range too short %d\n",
+ len, PTH_DESC_SIZE);
+ return -1;
+ }
+
+ if (op_msk & B_TRNG) {
+ u_int32_t starti, endi;
+ pptr += sizeof(struct forces_tlv);
+ len -= sizeof(struct forces_tlv);
+
+ starti = EXTRACT_32BITS(pptr);
+ pptr += 4;
+ len -= 4;
+
+ endi = EXTRACT_32BITS(pptr);
+ pptr += 4;
+ len -= 4;
+
+ if (vflag >= 3)
+ printf("%sTable range: [%d,%d]\n", ib, starti, endi);
+ }
+
+ if (op_msk & B_KEYIN) {
+ struct forces_tlv *keytlv;
+ u_int16_t tll;
+ u_int32_t keyid = EXTRACT_32BITS(pptr);
+ /* skip keyid */
+ pptr += 4;
+ len -= 4;
+ keytlv = (struct forces_tlv *)pptr;
+ /* skip header */
+ pptr += sizeof(struct forces_tlv);
+ len -= sizeof(struct forces_tlv);
+ /* skip key content */
+ tll = EXTRACT_16BITS(&keytlv->length) - TLV_HDRL;
+ pptr += tll;
+ len -= tll;
+ if (len < 0) {
+ printf("Key content too short\n");
+ return -1;
+ }
+ }
+
+ }
+