new test files


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@171 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/tests/19-param-OK.asn1.-P b/tests/19-param-OK.asn1.-P
new file mode 100644
index 0000000..a9f48e7
--- /dev/null
+++ b/tests/19-param-OK.asn1.-P
@@ -0,0 +1,315 @@
+
+/*** <<< INCLUDES [Certificate] >>> ***/
+
+#include <OBJECT_IDENTIFIER.h>
+#include <BIT_STRING.h>
+#include <INTEGER.h>
+#include <Name.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Certificate] >>> ***/
+
+extern asn1_TYPE_descriptor_t asn1_DEF_Certificate;
+
+/*** <<< TYPE-DECLS [Certificate] >>> ***/
+
+
+typedef struct Certificate {
+	struct toBeSigned {
+		INTEGER_t	 version;
+		OBJECT_IDENTIFIER_t	 signature;
+		Name_t	 issuer;
+		
+		/* Context for parsing across buffer boundaries */
+		ber_dec_ctx_t _ber_dec_ctx;
+	} toBeSigned;
+	OBJECT_IDENTIFIER_t	 algorithm;
+	BIT_STRING_t	 signature;
+	
+	/* Context for parsing across buffer boundaries */
+	ber_dec_ctx_t _ber_dec_ctx;
+} Certificate_t;
+
+/*** <<< STAT-DEFS [Certificate] >>> ***/
+
+static asn1_TYPE_member_t asn1_MBR_toBeSigned[] = {
+	{ 0, offsetof(struct toBeSigned, version),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "version"
+		},
+	{ 0, offsetof(struct toBeSigned, signature),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_OBJECT_IDENTIFIER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "signature"
+		},
+	{ 0, offsetof(struct toBeSigned, issuer),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_Name,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "issuer"
+		},
+};
+static ber_tlv_tag_t asn1_DEF_toBeSigned_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_toBeSigned_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* version at 21 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)), 1, 0, 0 }, /* signature at 22 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* issuer at 24 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_toBeSigned_specs = {
+	sizeof(struct toBeSigned),
+	offsetof(struct toBeSigned, _ber_dec_ctx),
+	asn1_DEF_toBeSigned_tag2el,
+	3,	/* Count of tags in the map */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_toBeSigned = {
+	"toBeSigned",
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_print,
+	SEQUENCE_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_toBeSigned_tags,
+	sizeof(asn1_DEF_toBeSigned_tags)
+		/sizeof(asn1_DEF_toBeSigned_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_toBeSigned,
+	3,	/* Elements count */
+	&asn1_DEF_toBeSigned_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_Certificate[] = {
+	{ 0, offsetof(struct Certificate, toBeSigned),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_toBeSigned,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "toBeSigned"
+		},
+	{ 0, offsetof(struct Certificate, algorithm),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_OBJECT_IDENTIFIER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "algorithm"
+		},
+	{ 0, offsetof(struct Certificate, signature),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_BIT_STRING,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "signature"
+		},
+};
+static ber_tlv_tag_t asn1_DEF_Certificate_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_Certificate_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* signature at 18 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)), 1, 0, 0 }, /* algorithm at 16 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* toBeSigned at 21 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_Certificate_specs = {
+	sizeof(struct Certificate),
+	offsetof(struct Certificate, _ber_dec_ctx),
+	asn1_DEF_Certificate_tag2el,
+	3,	/* Count of tags in the map */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_Certificate = {
+	"Certificate",
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_print,
+	SEQUENCE_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_Certificate_tags,
+	sizeof(asn1_DEF_Certificate_tags)
+		/sizeof(asn1_DEF_Certificate_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_Certificate,
+	3,	/* Elements count */
+	&asn1_DEF_Certificate_specs	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Name] >>> ***/
+
+#include <RelativeDistinguishedName.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< DEPS [Name] >>> ***/
+
+extern asn1_TYPE_descriptor_t asn1_DEF_Name;
+
+/*** <<< TYPE-DECLS [Name] >>> ***/
+
+
+typedef struct Name {
+	A_SEQUENCE_OF(struct RelativeDistinguishedName) list;
+	
+	/* Context for parsing across buffer boundaries */
+	ber_dec_ctx_t _ber_dec_ctx;
+} Name_t;
+
+/*** <<< STAT-DEFS [Name] >>> ***/
+
+static asn1_TYPE_member_t asn1_MBR_Name[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_RelativeDistinguishedName,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
+		},
+};
+static ber_tlv_tag_t asn1_DEF_Name_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_Name_specs = {
+	sizeof(struct Name),
+	offsetof(struct Name, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_Name = {
+	"Name",
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_Name_tags,
+	sizeof(asn1_DEF_Name_tags)
+		/sizeof(asn1_DEF_Name_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_Name,
+	1,	/* Single element */
+	&asn1_DEF_Name_specs	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [RelativeDistinguishedName] >>> ***/
+
+#include <IA5String.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< DEPS [RelativeDistinguishedName] >>> ***/
+
+extern asn1_TYPE_descriptor_t asn1_DEF_RelativeDistinguishedName;
+
+/*** <<< TYPE-DECLS [RelativeDistinguishedName] >>> ***/
+
+
+typedef struct RelativeDistinguishedName {
+	A_SET_OF(IA5String_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	ber_dec_ctx_t _ber_dec_ctx;
+} RelativeDistinguishedName_t;
+
+/*** <<< CTABLES [RelativeDistinguishedName] >>> ***/
+
+static int permitted_alphabet_table_1[256] = {
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	/*                  */
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	/*                  */
+0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,	/*             ,-.  */
+1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,	/* 0        9       */
+0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,	/*  ABCDEFGHIJKLMNO */
+1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,	/* PQRSTUVWXYZ      */
+0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,	/*  abcdefghijklmno */
+1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,	/* pqrstuvwxyz      */
+};
+
+static int check_permitted_alphabet_1(const void *sptr) {
+	int *table = permitted_alphabet_table_1;
+	/* The underlying type is IA5String */
+	const (null)_t *st = sptr;
+	uint8_t *ch = st->buf;
+	uint8_t *end = ch + st->size;
+	
+	for(; ch < end; ch++) {
+		uint8_t cv = *ch;
+		if(!table[cv]) return 0;
+	}
+	return 1;
+}
+
+
+/*** <<< CODE [RelativeDistinguishedName] >>> ***/
+
+static int
+memb_IA5String_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	const (null)_t *st = sptr;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given", td->name);
+		return -1;
+	}
+	
+	
+	if(check_permitted_alphabet_1(sptr)) {
+		/* Constraint check succeeded */
+		return 1;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed", td->name);
+		return -1;
+	}
+}
+
+
+/*** <<< STAT-DEFS [RelativeDistinguishedName] >>> ***/
+
+static asn1_TYPE_member_t asn1_MBR_RelativeDistinguishedName[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_IA5String,
+		.memb_constraints = memb_IA5String_constraint,
+		.name = ""
+		},
+};
+static ber_tlv_tag_t asn1_DEF_RelativeDistinguishedName_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_RelativeDistinguishedName_specs = {
+	sizeof(struct RelativeDistinguishedName),
+	offsetof(struct RelativeDistinguishedName, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_RelativeDistinguishedName = {
+	"RelativeDistinguishedName",
+	SET_OF_constraint,
+	SET_OF_decode_ber,
+	SET_OF_encode_der,
+	SET_OF_print,
+	SET_OF_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_RelativeDistinguishedName_tags,
+	sizeof(asn1_DEF_RelativeDistinguishedName_tags)
+		/sizeof(asn1_DEF_RelativeDistinguishedName_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_RelativeDistinguishedName,
+	1,	/* Single element */
+	&asn1_DEF_RelativeDistinguishedName_specs	/* Additional specs */
+};
+