Parameterize the tag in IMPLEMENT_EXTERN_ASN1_SIMPLE

Change-Id: Ie43577f0131daaf42b847d9f2c3617b3a2bbf219
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/81890
Reviewed-by: Adam Langley <agl@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/asn1/internal.h b/crypto/asn1/internal.h
index 9be2fe3..2ddabc8 100644
--- a/crypto/asn1/internal.h
+++ b/crypto/asn1/internal.h
@@ -314,8 +314,8 @@
   ASN1_ex_i2d *asn1_ex_i2d;
 } ASN1_EXTERN_FUNCS;
 
-#define IMPLEMENT_EXTERN_ASN1_SIMPLE(name, new_func, free_func, parse_func,    \
-                                     i2d_func)                                 \
+#define IMPLEMENT_EXTERN_ASN1_SIMPLE(name, new_func, free_func, tag,           \
+                                     parse_func, i2d_func)                     \
   static int name##_new_cb(ASN1_VALUE **pval, const ASN1_ITEM *it) {           \
     *pval = (ASN1_VALUE *)new_func();                                          \
     return *pval != nullptr;                                                   \
@@ -328,7 +328,7 @@
                                                                                \
   static int name##_parse_cb(ASN1_VALUE **pval, CBS *cbs, const ASN1_ITEM *it, \
                              int opt) {                                        \
-    if (opt && !CBS_peek_asn1_tag(cbs, CBS_ASN1_SEQUENCE)) {                   \
+    if (opt && !CBS_peek_asn1_tag(cbs, (tag))) {                               \
       return 1;                                                                \
     }                                                                          \
                                                                                \
diff --git a/crypto/x509/x_algor.cc b/crypto/x509/x_algor.cc
index 1d8b4fa..f807459 100644
--- a/crypto/x509/x_algor.cc
+++ b/crypto/x509/x_algor.cc
@@ -112,7 +112,8 @@
 }
 
 IMPLEMENT_EXTERN_ASN1_SIMPLE(X509_ALGOR, X509_ALGOR_new, X509_ALGOR_free,
-                             x509_parse_algorithm, i2d_X509_ALGOR)
+                             CBS_ASN1_SEQUENCE, x509_parse_algorithm,
+                             i2d_X509_ALGOR)
 
 X509_ALGOR *X509_ALGOR_dup(const X509_ALGOR *alg) {
   bssl::UniquePtr<X509_ALGOR> copy(X509_ALGOR_new());
diff --git a/crypto/x509/x_pubkey.cc b/crypto/x509/x_pubkey.cc
index 8b74f65..3d2ad4a 100644
--- a/crypto/x509/x_pubkey.cc
+++ b/crypto/x509/x_pubkey.cc
@@ -130,7 +130,8 @@
 // TODO(crbug.com/42290417): Remove this when |X509| and |X509_REQ| no longer
 // depend on the tables.
 IMPLEMENT_EXTERN_ASN1_SIMPLE(X509_PUBKEY, X509_PUBKEY_new, X509_PUBKEY_free,
-                             x509_parse_public_key_default, i2d_X509_PUBKEY)
+                             CBS_ASN1_SEQUENCE, x509_parse_public_key_default,
+                             i2d_X509_PUBKEY)
 
 int x509_pubkey_set1(X509_PUBKEY *key, EVP_PKEY *pkey) {
   bssl::ScopedCBB cbb;