Unroll ASN1_SEQUENCE() ASN1_CHOICE() ASN1_ITEM_TEMPLATE()
authorjob <job@openbsd.org>
Thu, 2 Sep 2021 20:11:07 +0000 (20:11 +0000)
committerjob <job@openbsd.org>
Thu, 2 Sep 2021 20:11:07 +0000 (20:11 +0000)
OK jsing@

lib/libcrypto/x509/x509_addr.c
lib/libcrypto/x509/x509_asid.c

index 5946c71..4e5e0b3 100644 (file)
  * OpenSSL ASN.1 template translation of RFC 3779 2.2.3.
  */
 
-ASN1_SEQUENCE(IPAddressRange) = {
-  ASN1_SIMPLE(IPAddressRange, min, ASN1_BIT_STRING),
-  ASN1_SIMPLE(IPAddressRange, max, ASN1_BIT_STRING)
-} ASN1_SEQUENCE_END(IPAddressRange)
-
-ASN1_CHOICE(IPAddressOrRange) = {
-  ASN1_SIMPLE(IPAddressOrRange, u.addressPrefix, ASN1_BIT_STRING),
-  ASN1_SIMPLE(IPAddressOrRange, u.addressRange,  IPAddressRange)
-} ASN1_CHOICE_END(IPAddressOrRange)
-
-ASN1_CHOICE(IPAddressChoice) = {
-  ASN1_SIMPLE(IPAddressChoice,      u.inherit,           ASN1_NULL),
-  ASN1_SEQUENCE_OF(IPAddressChoice, u.addressesOrRanges, IPAddressOrRange)
-} ASN1_CHOICE_END(IPAddressChoice)
-
-ASN1_SEQUENCE(IPAddressFamily) = {
-  ASN1_SIMPLE(IPAddressFamily, addressFamily,   ASN1_OCTET_STRING),
-  ASN1_SIMPLE(IPAddressFamily, ipAddressChoice, IPAddressChoice)
-} ASN1_SEQUENCE_END(IPAddressFamily)
-
-ASN1_ITEM_TEMPLATE(IPAddrBlocks) =
-  ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
-                        IPAddrBlocks, IPAddressFamily)
+static const ASN1_TEMPLATE IPAddressRange_seq_tt[] = {
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(IPAddressRange, min),
+               .field_name = "min",
+               .item = &ASN1_BIT_STRING_it,
+       },
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(IPAddressRange, max),
+               .field_name = "max",
+               .item = &ASN1_BIT_STRING_it,
+       },
+};
+
+const ASN1_ITEM IPAddressRange_it = {
+       .itype = ASN1_ITYPE_SEQUENCE,
+       .utype = V_ASN1_SEQUENCE,
+       .templates = IPAddressRange_seq_tt,
+       .tcount = sizeof(IPAddressRange_seq_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(IPAddressRange),
+       .sname = "IPAddressRange",
+};
+
+static const ASN1_TEMPLATE IPAddressOrRange_ch_tt[] = {
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(IPAddressOrRange, u.addressPrefix),
+               .field_name = "u.addressPrefix",
+               .item = &ASN1_BIT_STRING_it,
+       },
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(IPAddressOrRange, u.addressRange),
+               .field_name = "u.addressRange",
+               .item = &IPAddressRange_it,
+       },
+};
+
+const ASN1_ITEM IPAddressOrRange_it = {
+       .itype = ASN1_ITYPE_CHOICE,
+       .utype = offsetof(IPAddressOrRange, type),
+       .templates = IPAddressOrRange_ch_tt,
+       .tcount = sizeof(IPAddressOrRange_ch_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(IPAddressOrRange),
+       .sname = "IPAddressOrRange",
+};
+
+static const ASN1_TEMPLATE IPAddressChoice_ch_tt[] = {
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(IPAddressChoice, u.inherit),
+               .field_name = "u.inherit",
+               .item = &ASN1_NULL_it,
+       },
+       {
+               .flags = ASN1_TFLG_SEQUENCE_OF,
+               .tag = 0,
+               .offset = offsetof(IPAddressChoice, u.addressesOrRanges),
+               .field_name = "u.addressesOrRanges",
+               .item = &IPAddressOrRange_it,
+       },
+};
+
+const ASN1_ITEM IPAddressChoice_it = {
+       .itype = ASN1_ITYPE_CHOICE,
+       .utype = offsetof(IPAddressChoice, type),
+       .templates = IPAddressChoice_ch_tt,
+       .tcount = sizeof(IPAddressChoice_ch_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(IPAddressChoice),
+       .sname = "IPAddressChoice",
+};
+
+static const ASN1_TEMPLATE IPAddressFamily_seq_tt[] = {
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(IPAddressFamily, addressFamily),
+               .field_name = "addressFamily",
+               .item = &ASN1_OCTET_STRING_it,
+       },
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(IPAddressFamily, ipAddressChoice),
+               .field_name = "ipAddressChoice",
+               .item = &IPAddressChoice_it,
+       },
+};
+
+const ASN1_ITEM IPAddressFamily_it = {
+       .itype = ASN1_ITYPE_SEQUENCE,
+       .utype = V_ASN1_SEQUENCE,
+       .templates = IPAddressFamily_seq_tt,
+       .tcount = sizeof(IPAddressFamily_seq_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(IPAddressFamily),
+       .sname = "IPAddressFamily",
+};
+
+static const ASN1_TEMPLATE IPAddrBlocks_item_tt =
+    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, IPAddrBlocks,
+    IPAddressFamily)
 static_ASN1_ITEM_TEMPLATE_END(IPAddrBlocks)
 
 IPAddressRange *
@@ -1154,7 +1242,7 @@ static void *v2i_IPAddrBlocks(const struct v3_ext_method *method,
 const X509V3_EXT_METHOD v3_addr = {
     NID_sbgp_ipAddrBlock,       /* nid */
     0,                          /* flags */
-    ASN1_ITEM_ref(IPAddrBlocks), /* template */
+    &IPAddrBlocks_it,
     0, 0, 0, 0,                 /* old functions, ignored */
     0,                          /* i2s */
     0,                          /* s2i */
index bcb6e4e..59c7cab 100644 (file)
 
 #ifndef OPENSSL_NO_RFC3779
 
-/*
- * OpenSSL ASN.1 template translation of RFC 3779 3.2.3.
- */
+static const ASN1_TEMPLATE ASRange_seq_tt[] = {
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(ASRange, min),
+               .field_name = "min",
+               .item = &ASN1_INTEGER_it,
+       },
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(ASRange, max),
+               .field_name = "max",
+               .item = &ASN1_INTEGER_it,
+       },
+};
+
+const ASN1_ITEM ASRange_it = {
+       .itype = ASN1_ITYPE_SEQUENCE,
+       .utype = V_ASN1_SEQUENCE,
+       .templates = ASRange_seq_tt,
+       .tcount = sizeof(ASRange_seq_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(ASRange),
+       .sname = "ASRange",
+};
+
+static const ASN1_TEMPLATE ASIdOrRange_ch_tt[] = {
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(ASIdOrRange, u.id),
+               .field_name = "u.id",
+               .item = &ASN1_INTEGER_it,
+       },
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(ASIdOrRange, u.range),
+               .field_name = "u.range",
+               .item = &ASRange_it,
+       },
+};
+
+const ASN1_ITEM ASIdOrRange_it = {
+       .itype = ASN1_ITYPE_CHOICE,
+       .utype = offsetof(ASIdOrRange, type),
+       .templates = ASIdOrRange_ch_tt,
+       .tcount = sizeof(ASIdOrRange_ch_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(ASIdOrRange),
+       .sname = "ASIdOrRange",
+};
+
+static const ASN1_TEMPLATE ASIdentifierChoice_ch_tt[] = {
+       {
+               .flags = 0,
+               .tag = 0,
+               .offset = offsetof(ASIdentifierChoice, u.inherit),
+               .field_name = "u.inherit",
+               .item = &ASN1_NULL_it,
+       },
+       {
+               .flags = ASN1_TFLG_SEQUENCE_OF,
+               .tag = 0,
+               .offset = offsetof(ASIdentifierChoice, u.asIdsOrRanges),
+               .field_name = "u.asIdsOrRanges",
+               .item = &ASIdOrRange_it,
+       },
+};
+
+const ASN1_ITEM ASIdentifierChoice_it = {
+       .itype = ASN1_ITYPE_CHOICE,
+       .utype = offsetof(ASIdentifierChoice, type),
+       .templates = ASIdentifierChoice_ch_tt,
+       .tcount = sizeof(ASIdentifierChoice_ch_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(ASIdentifierChoice),
+       .sname = "ASIdentifierChoice",
+};
+
+static const ASN1_TEMPLATE ASIdentifiers_seq_tt[] = {
+       {
+               .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
+               .tag = 0,
+               .offset = offsetof(ASIdentifiers, asnum),
+               .field_name = "asnum",
+               .item = &ASIdentifierChoice_it,
+       },
+       {
+               .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
+               .tag = 1,
+               .offset = offsetof(ASIdentifiers, rdi),
+               .field_name = "rdi",
+               .item = &ASIdentifierChoice_it,
+       },
+};
 
-ASN1_SEQUENCE(ASRange) = {
-  ASN1_SIMPLE(ASRange, min, ASN1_INTEGER),
-  ASN1_SIMPLE(ASRange, max, ASN1_INTEGER)
-} ASN1_SEQUENCE_END(ASRange)
-
-ASN1_CHOICE(ASIdOrRange) = {
-  ASN1_SIMPLE(ASIdOrRange, u.id,    ASN1_INTEGER),
-  ASN1_SIMPLE(ASIdOrRange, u.range, ASRange)
-} ASN1_CHOICE_END(ASIdOrRange)
-
-ASN1_CHOICE(ASIdentifierChoice) = {
-  ASN1_SIMPLE(ASIdentifierChoice,      u.inherit,       ASN1_NULL),
-  ASN1_SEQUENCE_OF(ASIdentifierChoice, u.asIdsOrRanges, ASIdOrRange)
-} ASN1_CHOICE_END(ASIdentifierChoice)
-
-ASN1_SEQUENCE(ASIdentifiers) = {
-  ASN1_EXP_OPT(ASIdentifiers, asnum, ASIdentifierChoice, 0),
-  ASN1_EXP_OPT(ASIdentifiers, rdi,   ASIdentifierChoice, 1)
-} ASN1_SEQUENCE_END(ASIdentifiers)
+const ASN1_ITEM ASIdentifiers_it = {
+       .itype = ASN1_ITYPE_SEQUENCE,
+       .utype = V_ASN1_SEQUENCE,
+       .templates = ASIdentifiers_seq_tt,
+       .tcount = sizeof(ASIdentifiers_seq_tt) / sizeof(ASN1_TEMPLATE),
+       .funcs = NULL,
+       .size = sizeof(ASIdentifiers),
+       .sname = "ASIdentifiers",
+};
 
 ASRange *
 d2i_ASRange(ASRange **a, const unsigned char **in, long len)