Added SILC Thread Queue API
[silc.git] / lib / silcasn1 / tests / test_silcasn1.c
index 74bd8c807f142bdb34d1c1c4fc3c8c62f237c6e1..c6266e1e2e311eb1d23f207a54b683d6aed507f1 100644 (file)
@@ -48,13 +48,14 @@ int main(int argc, char **argv)
   SilcBufferStruct node, node2;
   SilcAsn1 asn1;
   SilcBool success = FALSE;
-  SilcBool val = TRUE;
+  SilcBool val = TRUE, nval;
   int i;
-  unsigned char *str;
-  SilcUInt32 str_len, tmpint;
+  unsigned char *str, buf[512];
+  SilcUInt32 str_len, tmpint, choice;
   char tmp[32];
   SilcRng rng;
   SilcMPInt mpint, mpint2;
+  SilcStack stack;
 
   memset(&node, 0, sizeof(node));
   memset(&node2, 0, sizeof(node2));
@@ -62,15 +63,17 @@ int main(int argc, char **argv)
   if (argc > 1 && !strcmp(argv[1], "-d")) {
     silc_log_debug(TRUE);
     silc_log_debug_hexdump(TRUE);
-    silc_log_set_debug_string("*asn1*,*ber*");
+    silc_log_set_debug_string("*asn1*,*ber*,*stack*");
   }
 
   silc_hash_register_default();
   rng = silc_rng_alloc();
   silc_rng_init(rng);
 
+  stack = silc_stack_alloc(0, NULL);
+
   SILC_LOG_DEBUG(("Allocating ASN.1 context"));
-  asn1 = silc_asn1_alloc();
+  asn1 = silc_asn1_alloc(stack);
   if (!asn1)
     goto out;
 
@@ -180,7 +183,10 @@ int main(int argc, char **argv)
                       SILC_ASN1_SEQUENCE_T(SILC_ASN1_EXPLICIT, 9),
                         SILC_ASN1_SEQUENCE_T(SILC_ASN1_INDEFINITE, 0),
                           SILC_ASN1_BOOLEAN_T(0, 4, &val),
-                          SILC_ASN1_BOOLEAN(&val),
+                          SILC_ASN1_CHOICE(&choice),
+                            SILC_ASN1_SHORT_INT(&tmpint),
+                            SILC_ASN1_BOOLEAN(&val),
+                          SILC_ASN1_END,
                         SILC_ASN1_END,
                       SILC_ASN1_END,
                     SILC_ASN1_END, SILC_ASN1_END);
@@ -190,6 +196,9 @@ int main(int argc, char **argv)
   }
   SILC_LOG_DEBUG(("Decoding success"));
   SILC_LOG_DEBUG(("Boolean val %d", val));
+  SILC_LOG_DEBUG(("Choice index %d", choice));
+  if (choice != 2)
+    goto out;
   printf("\n");
 
 
@@ -604,7 +613,7 @@ int main(int argc, char **argv)
                         SILC_ASN1_BOOLEAN_T(0, 100, val),
                       SILC_ASN1_END,
                       SILC_ASN1_SEQUENCE,
-                        SILC_ASN1_NULL,
+                        SILC_ASN1_NULL(TRUE),
                         SILC_ASN1_BOOLEAN_T(SILC_ASN1_EXPLICIT, 0, val),
                         SILC_ASN1_OCTET_STRING("foobar", 6),
                         SILC_ASN1_BOOLEAN_T(SILC_ASN1_PRIVATE, 43, val),
@@ -631,7 +640,7 @@ int main(int argc, char **argv)
                         SILC_ASN1_BOOLEAN_T(0, 100, &val),
                       SILC_ASN1_END,
                       SILC_ASN1_SEQUENCE,
-                        SILC_ASN1_NULL,
+                        SILC_ASN1_NULL(&nval),
                         SILC_ASN1_BOOLEAN_T(SILC_ASN1_EXPLICIT, 0, &val),
                         SILC_ASN1_OCTET_STRING(&str, &str_len),
                         SILC_ASN1_BOOLEAN_T(SILC_ASN1_PRIVATE, 43, &val),
@@ -645,16 +654,17 @@ int main(int argc, char **argv)
   }
   SILC_LOG_DEBUG(("Decoding success"));
   SILC_LOG_DEBUG(("Boolean val %d", val));
+  SILC_LOG_DEBUG(("NULL is present %s", nval ? "yes" : "no"));
   SILC_LOG_DEBUG(("Ooctet-string %s, len %d", str, str_len));
   printf("\n");
 
 
   memset(&node, 0, sizeof(node));
   SILC_LOG_DEBUG(("Encoding ASN.1 tree 10 (INTEGER)"));
-  str = silc_rng_get_rn_data(rng, 256);
+  silc_rng_get_rn_data(rng, 256, buf, sizeof(buf));
   silc_mp_init(&mpint);
   silc_mp_init(&mpint2);
-  silc_mp_bin2mp(str, 256, &mpint);
+  silc_mp_bin2mp(buf, 256, &mpint);
   success =
     silc_asn1_encode(asn1, &node,
                     SILC_ASN1_INT(&mpint),
@@ -744,6 +754,9 @@ int main(int argc, char **argv)
 
 #endif /* 1 */
   silc_asn1_free(asn1);
+  silc_rng_free(rng);
+  silc_hash_unregister_all();
+  silc_stack_free(stack);
 
   success = TRUE;
  out: