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;