+int list_subkeys(struct openpgp_signedpacket_list *subkeys, bool verbose,
+ bool html)
+{
+ struct tm *created = NULL;
+ time_t created_time = 0;
+ int type = 0;
+ int length = 0;
+
+ while (subkeys != NULL) {
+ if (subkeys->packet->tag == 14) {
+
+ created_time = (subkeys->packet->data[1] << 24) +
+ (subkeys->packet->data[2] << 16) +
+ (subkeys->packet->data[3] << 8) +
+ subkeys->packet->data[4];
+ created = gmtime(&created_time);
+
+ switch (subkeys->packet->data[0]) {
+ case 2:
+ case 3:
+ type = subkeys->packet->data[7];
+ length = (subkeys->packet->data[8] << 8) +
+ subkeys->packet->data[9];
+ break;
+ case 4:
+ type = subkeys->packet->data[5];
+ length = (subkeys->packet->data[6] << 8) +
+ subkeys->packet->data[7];
+ break;
+ default:
+ fprintf(stderr, "Unknown key type: %d\n",
+ subkeys->packet->data[0]);
+ }
+
+ printf("sub %5d%c/%08X %04d/%02d/%02d\n",
+ length,
+ (type == 1) ? 'R' : ((type == 16) ? 'g' :
+ ((type == 17) ? 'D' : '?')),
+ (uint32_t) (get_packetid(subkeys->packet) &
+ 0xFFFFFFFF),
+ created->tm_year + 1900,
+ created->tm_mon + 1,
+ created->tm_mday);
+
+ }
+ if (verbose) {
+ list_sigs(subkeys->sigs, html);
+ }
+ subkeys = subkeys->next;
+ }
+
+ return 0;
+}
+
+