X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcasn1%2Ftests%2Ftest_silcasn1.c;h=c6266e1e2e311eb1d23f207a54b683d6aed507f1;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hp=74bd8c807f142bdb34d1c1c4fc3c8c62f237c6e1;hpb=8fd8212bcd16f2b53fbedff2a9b9a4e8c15b9695;p=silc.git diff --git a/lib/silcasn1/tests/test_silcasn1.c b/lib/silcasn1/tests/test_silcasn1.c index 74bd8c80..c6266e1e 100644 --- a/lib/silcasn1/tests/test_silcasn1.c +++ b/lib/silcasn1/tests/test_silcasn1.c @@ -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: