windows-nt/Source/XPSP1/NT/ds/security/asn1/asn1c/builtin.c
2020-09-26 16:20:57 +08:00

678 lines
28 KiB
C

/* Copyright (C) Boris Nikolaus, Germany, 1996-1997. All rights reserved. */
/* Copyright (C) Microsoft Corporation, 1997-1998. All rights reserved. */
#include "precomp.h"
Type_t *Builtin_Type_Null;
Type_t *Builtin_Type_Boolean;
Type_t *Builtin_Type_Integer;
Type_t *Builtin_Type_PositiveInteger;
Type_t *Builtin_Type_ObjectIdentifier;
Type_t *Builtin_Type_ObjectDescriptor;
Type_t *Builtin_Type_Open;
Type_t *Builtin_Type_BitString;
Type_t *Builtin_Type_OctetString;
Type_t *Builtin_Type_UTF8String;
Type_t *Builtin_Type_BMPString;
Type_t *Builtin_Type_GeneralString;
Type_t *Builtin_Type_GraphicString;
Type_t *Builtin_Type_IA5String;
Type_t *Builtin_Type_ISO646String;
Type_t *Builtin_Type_NumericString;
Type_t *Builtin_Type_PrintableString;
Type_t *Builtin_Type_TeletexString;
Type_t *Builtin_Type_T61String;
Type_t *Builtin_Type_UniversalString;
Type_t *Builtin_Type_VideotexString;
Type_t *Builtin_Type_VisibleString;
Type_t *Builtin_Type_CharacterString;
Type_t *Builtin_Type_GeneralizedTime;
Type_t *Builtin_Type_UTCTime;
Type_t *Builtin_Type_Real;
Type_t *Builtin_Type_External;
Type_t *Builtin_Type_EmbeddedPdv;
Value_t *Builtin_Value_Null;
Value_t *Builtin_Value_Integer_0;
Value_t *Builtin_Value_Integer_1;
Value_t *Builtin_Value_Integer_2;
Value_t *Builtin_Value_Integer_10;
ObjectClass_t *Builtin_ObjectClass_AbstractSyntax;
ObjectClass_t *Builtin_ObjectClass_TypeIdentifier;
ModuleIdentifier_t *Builtin_Module;
AssignmentList_t Builtin_Assignments;
AssignedObjIdList_t Builtin_ObjIds;
/* create a type with a given tag */
static Type_t *
NewTaggedType(Type_e type, TagType_e tag, uint32_t val)
{
Type_t *ty;
Tag_t *ta;
Value_t *va;
ty = NewType(type);
ty->Tags = ta = NewTag(tag);
ta->Tag = va = NewValue(NULL, Builtin_Type_Integer);
intx_setuint32(&va->U.Integer.Value, val);
return ty;
}
/* create a type with a given permitted alphabet constraint */
/* n is the number of character ranges, the lower and upper characters */
/* of these ranges will follow in the vararg list */
static Type_t *
NewTypeWithPermittedAlphabetConstraint(Type_e type, int n, ...)
{
va_list args;
Type_t *ty;
Value_t *va;
Constraint_t **cc;
ElementSetSpec_t *s, **ss;
char32_t lo, up;
int i;
va_start(args, n);
/* create type with permitted alphabet constraint */
ty = NewType(type);
cc = &ty->Constraints;
*cc = NewConstraint();
(*cc)->Root = NewElementSetSpec(eElementSetSpec_SubtypeElement);
(*cc)->Root->U.SubtypeElement.SubtypeElement =
NewSubtypeElement(eSubtypeElement_PermittedAlphabet);
cc = &(*cc)->Root->U.SubtypeElement.SubtypeElement->
U.PermittedAlphabet.Constraints;
*cc = NewConstraint();
ss = &(*cc)->Root;
/* n character ranges will be needed */
for (i = 0; i < n; i++) {
/* get the lower and upper character of one range */
lo = va_arg(args, char32_t);
up = va_arg(args, char32_t);
/* create an element set spec for this range */
s = NewElementSetSpec(eElementSetSpec_SubtypeElement);
s->U.SubtypeElement.SubtypeElement =
NewSubtypeElement(eSubtypeElement_ValueRange);
s->U.SubtypeElement.SubtypeElement->U.ValueRange.Lower.Flags = 0;
s->U.SubtypeElement.SubtypeElement->U.ValueRange.Lower.Value = va =
NewValue(NULL, ty);
va->U.RestrictedString.Value.length = 1;
va->U.RestrictedString.Value.value =
(char32_t *)malloc(sizeof(char32_t));
*va->U.RestrictedString.Value.value = lo;
s->U.SubtypeElement.SubtypeElement->U.ValueRange.Upper.Flags = 0;
s->U.SubtypeElement.SubtypeElement->U.ValueRange.Upper.Value = va =
NewValue(NULL, ty);
va->U.RestrictedString.Value.length = 1;
va->U.RestrictedString.Value.value =
(char32_t *)malloc(sizeof(char32_t));
*va->U.RestrictedString.Value.value = up;
/* setup for next range or last range */
if (i < n - 1) {
*ss = NewElementSetSpec(eElementSetSpec_Union);
(*ss)->U.Union.Elements1 = s;
ss = &(*ss)->U.Union.Elements2;
} else {
*ss = s;
}
}
return ty;
}
/* initialize internally needed builtin types, values, information object */
/* classes and object identifier components */
void
InitBuiltin()
{
Type_t *ty;
Component_t *co1, *co2, *co3, *co4, *co5, *co6;
Assignment_t *a;
AssignedObjId_t *oi0, *oi1, *oi2, *oi0_0, *oi0_1, *oi0_2, *oi0_3, *oi0_4,
*oi1_0, *oi1_2, *oi1_3, **oi;
String_t *s1, *s2;
int i;
FieldSpec_t *fs1, *fs2, *fs3;
Constraint_t *c;
SubtypeElement_t *s;
SyntaxSpec_t *sy1, *sy2, *sy3, *sy4, *sy5, *sy6, *sy7, *sy8;
/* allocate a builtin module name */
Builtin_Assignments = NULL;
Builtin_Module = NewModuleIdentifier();
Builtin_Module->Identifier = "<Internal>";
/* allocate basic ASN.1 types */
Builtin_Type_Null = NewType(eType_Null);
Builtin_Type_Boolean = NewType(eType_Boolean);
Builtin_Type_Integer = NewType(eType_Integer);
Builtin_Type_ObjectIdentifier = NewType(eType_ObjectIdentifier);
Builtin_Type_Open = NewType(eType_Open);
Builtin_Type_BitString = NewType(eType_BitString);
Builtin_Type_OctetString = NewType(eType_OctetString);
Builtin_Type_UTF8String = NewType(eType_UTF8String);
Builtin_Type_ObjectDescriptor = NewTypeWithPermittedAlphabetConstraint(
eType_ObjectDescriptor, 1, 0x00, 0xff);
Builtin_Type_BMPString = NewTypeWithPermittedAlphabetConstraint(
eType_BMPString, 1, 0x0000, 0xffff);
Builtin_Type_GeneralString = NewTypeWithPermittedAlphabetConstraint(
eType_GeneralString, 1, 0x00, 0xff);
Builtin_Type_GraphicString = NewTypeWithPermittedAlphabetConstraint(
eType_GraphicString, 1, 0x00, 0xff);
Builtin_Type_IA5String = NewTypeWithPermittedAlphabetConstraint(
eType_IA5String, 1, 0x00, 0x7f);
Builtin_Type_ISO646String = NewTypeWithPermittedAlphabetConstraint(
eType_ISO646String, 1, 0x20, 0x7e);
Builtin_Type_NumericString = NewTypeWithPermittedAlphabetConstraint(
eType_NumericString, 2, 0x20, 0x20, 0x30, 0x39);
Builtin_Type_PrintableString = NewTypeWithPermittedAlphabetConstraint(
eType_PrintableString, 7, 0x20, 0x20, 0x27, 0x29, 0x2b, 0x3a,
0x3d, 0x3d, 0x3f, 0x3f, 0x41, 0x5a, 0x61, 0x7a);
Builtin_Type_TeletexString = NewTypeWithPermittedAlphabetConstraint(
eType_TeletexString, 1, 0x00, 0xff);
Builtin_Type_T61String = NewTypeWithPermittedAlphabetConstraint(
eType_T61String, 1, 0x00, 0xff);
Builtin_Type_UniversalString = NewTypeWithPermittedAlphabetConstraint(
eType_UniversalString, 1, 0x00000000, 0xffffffff);
Builtin_Type_VideotexString = NewTypeWithPermittedAlphabetConstraint(
eType_VideotexString, 1, 0x00, 0xff);
Builtin_Type_VisibleString = NewTypeWithPermittedAlphabetConstraint(
eType_VisibleString, 1, 0x20, 0x7e);
Builtin_Type_GeneralizedTime = NewTypeWithPermittedAlphabetConstraint(
eType_GeneralizedTime, 1, 0x20, 0x7e);
Builtin_Type_UTCTime = NewTypeWithPermittedAlphabetConstraint(
eType_UTCTime, 1, 0x20, 0x7e);
/* allocate basic ASN.1 values */
Builtin_Value_Null = NewValue(NULL, Builtin_Type_Null);
Builtin_Value_Integer_0 = NewValue(NULL, Builtin_Type_Integer);
intx_setuint32(&Builtin_Value_Integer_0->U.Integer.Value, 0);
Builtin_Value_Integer_1 = NewValue(NULL, Builtin_Type_Integer);
intx_setuint32(&Builtin_Value_Integer_1->U.Integer.Value, 1);
Builtin_Value_Integer_2 = NewValue(NULL, Builtin_Type_Integer);
intx_setuint32(&Builtin_Value_Integer_2->U.Integer.Value, 2);
Builtin_Value_Integer_10 = NewValue(NULL, Builtin_Type_Integer);
intx_setuint32(&Builtin_Value_Integer_10->U.Integer.Value, 10);
/* allocate a positive integer type */
Builtin_Type_PositiveInteger = NewType(eType_Integer);
Builtin_Type_PositiveInteger->Constraints = c = NewConstraint();
c->Root = NewElementSetSpec(eElementSetSpec_SubtypeElement);
c->Root->U.SubtypeElement.SubtypeElement = s =
NewSubtypeElement(eSubtypeElement_ValueRange);
s->U.ValueRange.Lower.Flags = 0;
s->U.ValueRange.Lower.Value = Builtin_Value_Integer_0;
s->U.ValueRange.Upper.Flags = eEndPoint_Max;
#ifndef NO_BUILTIN
/* REAL */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
co3 = co2->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Integer, eTagType_Implicit, 0);
co1->U.Normal.NamedType = NewNamedType("mantissa", ty);
ty = NewTaggedType(eType_Integer, eTagType_Implicit, 1);
ty->Constraints = c = NewConstraint();
c->Root = NewElementSetSpec(eElementSetSpec_Union);
c->Root->U.Union.Elements1 =
NewElementSetSpec(eElementSetSpec_SubtypeElement);
c->Root->U.Union.Elements1->U.SubtypeElement.SubtypeElement = s =
NewSubtypeElement(eSubtypeElement_SingleValue);
s->U.SingleValue.Value = Builtin_Value_Integer_2;
c->Root->U.Union.Elements2 =
NewElementSetSpec(eElementSetSpec_SubtypeElement);
c->Root->U.Union.Elements2->U.SubtypeElement.SubtypeElement = s =
NewSubtypeElement(eSubtypeElement_SingleValue);
s->U.SingleValue.Value = Builtin_Value_Integer_10;
co2->U.Normal.NamedType = NewNamedType("base", ty);
ty = NewTaggedType(eType_Integer, eTagType_Implicit, 2);
co3->U.Normal.NamedType = NewNamedType("exponent", ty);
Builtin_Type_Real = NewType(eType_Real);
Builtin_Type_Real->U.Real.Components = co1;
/* EXTERNAL.identification.syntaxes */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 0);
co1->U.Normal.NamedType = NewNamedType("abstract", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 1);
co2->U.Normal.NamedType = NewNamedType("transfer", ty);
ty = NewType(eType_Sequence);
ty->U.Sequence.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "<ASN1external_identification_syntaxes_t>";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EXTERNAL.identification.context-negotiation */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Integer, eTagType_Implicit, 0);
co1->U.Normal.NamedType = NewNamedType("presentation-context-id", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 1);
co2->U.Normal.NamedType = NewNamedType("transfer-syntax", ty);
ty = NewType(eType_Sequence);
ty->U.Sequence.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1external_identification_context_negotiation_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EXTERNAL.identification */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
co3 = co2->Next = NewComponent(eComponent_Normal);
co4 = co3->Next = NewComponent(eComponent_Normal);
co5 = co4->Next = NewComponent(eComponent_Normal);
co6 = co5->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Reference, eTagType_Explicit, 0);
ty->U.Reference.Identifier = "<ASN1external_identification_syntaxes_t>";
ty->U.Reference.Module = Builtin_Module;
co1->U.Normal.NamedType = NewNamedType("<syntaxes>", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Explicit, 1);
co2->U.Normal.NamedType = NewNamedType("syntax", ty);
ty = NewTaggedType(eType_Integer, eTagType_Explicit, 2);
co3->U.Normal.NamedType = NewNamedType("presentation-context-id", ty);
ty = NewTaggedType(eType_Reference, eTagType_Explicit, 3);
ty->U.Reference.Identifier =
"ASN1external_identification_context_negotiation_t";
ty->U.Reference.Module = Builtin_Module;
co4->U.Normal.NamedType = NewNamedType("context-negotiation", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Explicit, 4);
co5->U.Normal.NamedType = NewNamedType("<transfer-syntax>", ty);
ty = NewTaggedType(eType_Null, eTagType_Explicit, 5);
co6->U.Normal.NamedType = NewNamedType("<fixed>", ty);
ty = NewType(eType_Choice);
ty->U.Choice.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1external_identification_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EXTERNAL.data-value */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Open, eTagType_Explicit, 0);
co1->U.Normal.NamedType = NewNamedType("notation", ty);
ty = NewTaggedType(eType_BitString, eTagType_Explicit, 1);
co2->U.Normal.NamedType = NewNamedType("encoded", ty);
ty = NewType(eType_Choice);
ty->U.Choice.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1external_data_value_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EXTERNAL */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Optional);
co3 = co2->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Reference, eTagType_Implicit, 0);
ty->U.Reference.Identifier = "ASN1external_identification_t";
ty->U.Reference.Module = Builtin_Module;
co1->U.Normal.NamedType = NewNamedType("identification", ty);
ty = NewTaggedType(eType_ObjectDescriptor, eTagType_Implicit, 1);
co2->U.Optional.NamedType = NewNamedType("data-value-descriptor", ty);
ty = NewTaggedType(eType_Reference, eTagType_Implicit, 2);
ty->U.Reference.Identifier = "ASN1external_data_value_t";
ty->U.Reference.Module = Builtin_Module;
co3->U.Normal.NamedType = NewNamedType("data-value", ty);
Builtin_Type_External = NewType(eType_External);
Builtin_Type_External->U.External.Components = co1;
Builtin_Type_External->U.External.Optionals = 1;
/* EMBEDDED PDV.identification.syntaxes */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 0);
co1->U.Normal.NamedType = NewNamedType("abstract", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 1);
co2->U.Normal.NamedType = NewNamedType("transfer", ty);
ty = NewType(eType_Sequence);
ty->U.Sequence.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1embeddedpdv_identification_syntaxes_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EMBEDDED PDV.identification.context-negotiation */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Integer, eTagType_Implicit, 0);
co1->U.Normal.NamedType = NewNamedType("presentation-context-id", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 1);
co2->U.Normal.NamedType = NewNamedType("transfer-syntax", ty);
ty = NewType(eType_Sequence);
ty->U.Sequence.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1embeddedpdv_identification_context_negotiation_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EMBEDDED PDV.identification */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
co3 = co2->Next = NewComponent(eComponent_Normal);
co4 = co3->Next = NewComponent(eComponent_Normal);
co5 = co4->Next = NewComponent(eComponent_Normal);
co6 = co5->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Reference, eTagType_Explicit, 0);
ty->U.Reference.Identifier = "ASN1embeddedpdv_identification_syntaxes_t";
ty->U.Reference.Module = Builtin_Module;
co1->U.Normal.NamedType = NewNamedType("syntaxes", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Explicit, 1);
co2->U.Normal.NamedType = NewNamedType("syntax", ty);
ty = NewTaggedType(eType_Integer, eTagType_Explicit, 2);
co3->U.Normal.NamedType = NewNamedType("presentation-context-id", ty);
ty = NewTaggedType(eType_Reference, eTagType_Explicit, 3);
ty->U.Reference.Identifier =
"ASN1embeddedpdv_identification_context_negotiation_t";
ty->U.Reference.Module = Builtin_Module;
co4->U.Normal.NamedType = NewNamedType("context-negotiation", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Explicit, 4);
co5->U.Normal.NamedType = NewNamedType("transfer-syntax", ty);
ty = NewTaggedType(eType_Null, eTagType_Explicit, 5);
co6->U.Normal.NamedType = NewNamedType("fixed", ty);
ty = NewType(eType_Choice);
ty->U.Choice.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1embeddedpdv_identification_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EMBEDDED PDV.data-value */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Open, eTagType_Explicit, 0);
co1->U.Normal.NamedType = NewNamedType("notation", ty);
ty = NewTaggedType(eType_BitString, eTagType_Explicit, 1);
co2->U.Normal.NamedType = NewNamedType("encoded", ty);
ty = NewType(eType_Choice);
ty->U.Choice.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1embeddedpdv_data_value_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* EMBEDDED PDV */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Reference, eTagType_Implicit, 0);
ty->U.Reference.Identifier = "ASN1embeddedpdv_identification_t";
ty->U.Reference.Module = Builtin_Module;
co1->U.Normal.NamedType = NewNamedType("identification", ty);
ty = NewTaggedType(eType_Reference, eTagType_Implicit, 2);
ty->U.Reference.Identifier = "ASN1embeddedpdv_data_value_t";
ty->U.Reference.Module = Builtin_Module;
co2->U.Normal.NamedType = NewNamedType("data-value", ty);
Builtin_Type_EmbeddedPdv = NewType(eType_EmbeddedPdv);
Builtin_Type_EmbeddedPdv->U.EmbeddedPdv.Components = co1;
/* CHARACTER STRING.identification.syntaxes */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 0);
co1->U.Normal.NamedType = NewNamedType("abstract", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 1);
co2->U.Normal.NamedType = NewNamedType("transfer", ty);
ty = NewType(eType_Sequence);
ty->U.Sequence.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1characterstring_identification_syntaxes_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* CHARACTER STRING.identification.context-negotiation */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Integer, eTagType_Implicit, 0);
co1->U.Normal.NamedType = NewNamedType("presentation-context-id", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Implicit, 1);
co2->U.Normal.NamedType = NewNamedType("transfer-syntax", ty);
ty = NewType(eType_Sequence);
ty->U.Sequence.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1characterstring_identification_context_negotiation_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* CHARACTER STRING.identification */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
co3 = co2->Next = NewComponent(eComponent_Normal);
co4 = co3->Next = NewComponent(eComponent_Normal);
co5 = co4->Next = NewComponent(eComponent_Normal);
co6 = co5->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Reference, eTagType_Explicit, 0);
ty->U.Reference.Identifier = "ASN1characterstring_identification_syntaxes_t";
ty->U.Reference.Module = Builtin_Module;
co1->U.Normal.NamedType = NewNamedType("syntaxes", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Explicit, 1);
co2->U.Normal.NamedType = NewNamedType("syntax", ty);
ty = NewTaggedType(eType_Integer, eTagType_Explicit, 2);
co3->U.Normal.NamedType = NewNamedType("presentation-context-id", ty);
ty = NewTaggedType(eType_Reference, eTagType_Explicit, 3);
ty->U.Reference.Identifier =
"ASN1characterstring_identification_context_negotiation_t";
ty->U.Reference.Module = Builtin_Module;
co4->U.Normal.NamedType = NewNamedType("context-negotiation", ty);
ty = NewTaggedType(eType_ObjectIdentifier, eTagType_Explicit, 4);
co5->U.Normal.NamedType = NewNamedType("transfer-syntax", ty);
ty = NewTaggedType(eType_Null, eTagType_Explicit, 5);
co6->U.Normal.NamedType = NewNamedType("fixed", ty);
ty = NewType(eType_Choice);
ty->U.Choice.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1characterstring_identification_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* CHARACTER STRING.data-value */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Open, eTagType_Explicit, 0);
co1->U.Normal.NamedType = NewNamedType("notation", ty);
ty = NewTaggedType(eType_OctetString, eTagType_Explicit, 1);
co2->U.Normal.NamedType = NewNamedType("encoded", ty);
ty = NewType(eType_Choice);
ty->U.Choice.Components = co1;
a = NewAssignment(eAssignment_Type);
a->U.Type.Type = ty;
a->Identifier = "ASN1characterstring_data_value_t";
a->Module = Builtin_Module;
a->Next = Builtin_Assignments;
Builtin_Assignments = a;
/* CHARACTER STRING */
co1 = NewComponent(eComponent_Normal);
co2 = co1->Next = NewComponent(eComponent_Normal);
ty = NewTaggedType(eType_Reference, eTagType_Implicit, 0);
ty->U.Reference.Identifier = "ASN1characterstring_identification_t";
ty->U.Reference.Module = Builtin_Module;
co1->U.Normal.NamedType = NewNamedType("identification", ty);
ty = NewTaggedType(eType_Reference, eTagType_Implicit, 2);
ty->U.Reference.Identifier = "ASN1characterstring_data_value_t";
ty->U.Reference.Module = Builtin_Module;
co2->U.Normal.NamedType = NewNamedType("data-value", ty);
Builtin_Type_CharacterString = NewType(eType_CharacterString);
Builtin_Type_CharacterString->U.CharacterString.Components = co1;
/* ABSTRACT-SYNTAX */
fs1 = NewFieldSpec(eFieldSpec_FixedTypeValue);
fs2 = fs1->Next = NewFieldSpec(eFieldSpec_Type);
fs3 = fs2->Next = NewFieldSpec(eFieldSpec_FixedTypeValue);
fs1->Identifier = "&id";
fs1->U.FixedTypeValue.Type = Builtin_Type_ObjectIdentifier;
fs1->U.FixedTypeValue.Unique = 1;
fs1->U.FixedTypeValue.Optionality = NewOptionality(eOptionality_Normal);
fs2->Identifier = "&Type";
fs2->U.Type.Optionality = NewOptionality(eOptionality_Normal);
fs3->U.FixedTypeValue.Type = ty = NewType(eType_BitString);
ty->U.BitString.NamedNumbers = NewNamedNumber(eNamedNumber_Normal);
ty->U.BitString.NamedNumbers->U.Normal.Identifier =
"handles-invalid-encodings";
ty->U.BitString.NamedNumbers->U.Normal.Value = Builtin_Value_Integer_0;
fs3->U.FixedTypeValue.Optionality =
NewOptionality(eOptionality_Default_Value);
fs3->U.FixedTypeValue.Optionality->U.Value = NewValue(NULL, ty);
sy1 = NewSyntaxSpec(eSyntaxSpec_Field);
sy2 = sy1->Next = NewSyntaxSpec(eSyntaxSpec_Literal);
sy3 = sy2->Next = NewSyntaxSpec(eSyntaxSpec_Literal);
sy4 = sy3->Next = NewSyntaxSpec(eSyntaxSpec_Field);
sy5 = sy4->Next = NewSyntaxSpec(eSyntaxSpec_Optional);
sy6 = sy5->U.Optional.SyntaxSpec = NewSyntaxSpec(eSyntaxSpec_Literal);
sy7 = sy6->Next = NewSyntaxSpec(eSyntaxSpec_Literal);
sy8 = sy7->Next = NewSyntaxSpec(eSyntaxSpec_Field);
sy1->U.Field.Field = "&Type";
sy2->U.Literal.Literal = "IDENTIFIED";
sy3->U.Literal.Literal = "BY";
sy4->U.Field.Field = "&id";
sy6->U.Literal.Literal = "HAS";
sy7->U.Literal.Literal = "PROPERTY";
sy8->U.Field.Field = "&property";
Builtin_ObjectClass_AbstractSyntax =
NewObjectClass(eObjectClass_ObjectClass);
Builtin_ObjectClass_AbstractSyntax->U.ObjectClass.FieldSpec = fs1;
Builtin_ObjectClass_AbstractSyntax->U.ObjectClass.SyntaxSpec = sy1;
/* TYPE-IDENTIFIER */
fs1 = NewFieldSpec(eFieldSpec_FixedTypeValue);
fs2 = fs1->Next = NewFieldSpec(eFieldSpec_Type);
fs1->Identifier = "&id";
fs1->U.FixedTypeValue.Type = Builtin_Type_ObjectIdentifier;
fs1->U.FixedTypeValue.Unique = 1;
fs1->U.FixedTypeValue.Optionality = NewOptionality(eOptionality_Normal);
fs2->Identifier = "&Type";
fs2->U.Type.Optionality = NewOptionality(eOptionality_Normal);
sy1 = NewSyntaxSpec(eSyntaxSpec_Field);
sy2 = sy1->Next = NewSyntaxSpec(eSyntaxSpec_Literal);
sy3 = sy2->Next = NewSyntaxSpec(eSyntaxSpec_Literal);
sy4 = sy3->Next = NewSyntaxSpec(eSyntaxSpec_Field);
sy1->U.Field.Field = "&Type";
sy2->U.Literal.Literal = "IDENTIFIED";
sy3->U.Literal.Literal = "BY";
sy4->U.Field.Field = "&id";
Builtin_ObjectClass_TypeIdentifier =
NewObjectClass(eObjectClass_ObjectClass);
Builtin_ObjectClass_TypeIdentifier->U.ObjectClass.FieldSpec = fs1;
Builtin_ObjectClass_TypeIdentifier->U.ObjectClass.SyntaxSpec = sy1;
#endif
/* object identifiers components */
#ifndef NO_OBJID
Builtin_ObjIds = oi0 = NewAssignedObjId();
oi0->Next = oi1 = NewAssignedObjId();
oi1->Next = oi2 = NewAssignedObjId();
/* { itu-t(0) }, { ccitt(0) } */
oi0->Number = 0;
oi0->Names = s1 = NewString();
s1->Next = s2 = NewString();
s1->String = "itu-t";
s2->String = "ccitt";
/* { iso(1) } */
oi1->Number = 1;
oi1->Names = s1 = NewString();
s1->String = "iso";
/* { joint-iso-itu-t(2) }, { joint-iso-ccitt(2) } */
oi2->Number = 2;
oi2->Names = s1 = NewString();
s1->Next = s2 = NewString();
s1->String = "joint-iso-itu-t";
s2->String = "joint-iso-ccitt";
oi0->Child = oi0_0 = NewAssignedObjId();
oi0_0->Next = oi0_1 = NewAssignedObjId();
oi0_1->Next = oi0_2 = NewAssignedObjId();
oi0_2->Next = oi0_3 = NewAssignedObjId();
oi0_3->Next = oi0_4 = NewAssignedObjId();
/* { itu-t recommendation(0) } */
oi0_0->Number = 0;
oi0_0->Names = s1 = NewString();
s1->String = "recommendation";
/* { itu-t question(1) } */
oi0_1->Number = 1;
oi0_1->Names = s1 = NewString();
s1->String = "question";
/* { itu-t administration(2) } */
oi0_2->Number = 2;
oi0_2->Names = s1 = NewString();
s1->String = "administration";
/* { itu-t network-operator(3) } */
oi0_3->Number = 3;
oi0_3->Names = s1 = NewString();
s1->String = "network-operator";
/* { itu-t identified-organization(4) } */
oi0_4->Number = 4;
oi0_4->Names = s1 = NewString();
s1->String = "identified-organization";
/* { itu-t recommendation a(1) } .. { itu-t recommendation z(26) } */
oi = &oi0_0->Child;
for (i = 'a'; i <= 'z'; i++) {
*oi = NewAssignedObjId();
(*oi)->Number = i - 'a' + 1;
(*oi)->Names = s1 = NewString();
s1->String = (char *)malloc(2);
s1->String[0] = (char)i;
s1->String[1] = 0;
oi = &(*oi)->Next;
}
oi1->Child = oi1_0 = NewAssignedObjId();
oi1_0->Next = oi1_2 = NewAssignedObjId();
oi1_2->Next = oi1_3 = NewAssignedObjId();
/* { iso standard(0) } */
oi1_0->Number = 0;
oi1_0->Names = s1 = NewString();
s1->String = "standard";
/* { iso member-body(2) } */
oi1_2->Number = 2;
oi1_2->Names = s1 = NewString();
s1->String = "member-body";
/* { iso identified-organization(3) } */
oi1_3->Number = 3;
oi1_3->Names = s1 = NewString();
s1->String = "identified-organization";
#endif
/* initialize ASN1-CHARACTER-MODULE */
InitBuiltinASN1CharacterModule();
}