浏览代码

der tests: improve/implement handling of context-specific data

no more "EOL" in the output as the flexi decoder handles now
context-specific data
Steffen Jaeckel 11 年之前
父节点
当前提交
f75b5ec8f4
共有 1 个文件被更改,包括 31 次插入2 次删除
  1. 31 2
      testprof/der_tests.c

+ 31 - 2
testprof/der_tests.c

@@ -326,8 +326,37 @@ static void _der_tests_print_flexi(ltc_asn1_list* l, unsigned int level)
     text = l->data;
     text = l->data;
     break;
     break;
   case LTC_ASN1_CONSTRUCTED:
   case LTC_ASN1_CONSTRUCTED:
-    name = "CONSTRUCTED";
-    text = "";
+    if (l->used & 0x80)
+      name = "CONTEXT SPECIFIC";
+    else
+      name = "CONSTRUCTED";
+    snprintf(buf, sizeof(buf), "[%d]", l->used & 0x1f);
+    text = buf;
+    break;
+  case LTC_ASN1_CONTEXT_SPECIFIC:
+    name = "CONTEXT SPECIFIC";
+    {
+      int r;
+      char* s = buf;
+      int sz = sizeof(buf);
+      r = snprintf(s, sz, "[%d] ", l->used & 0x1f);
+      if (r < 0 || r >= sz) {
+          printf("Context Specific boom");
+          exit(EXIT_FAILURE);
+      }
+      s += r;
+      sz -= r;
+      for (n = 0; n < l->size; ++n) {
+          r = snprintf(s, sz, "%02X", ((unsigned char*)l->data)[n]);
+          if (r < 0 || r >= sz) {
+              printf("Context Specific boom");
+              exit(EXIT_FAILURE);
+          }
+          s += r;
+          sz -= r;
+      }
+      text = buf;
+    }
     break;
     break;
   }
   }