From afb72c7fb8953ade3f713148efaea4b25375c765 Mon Sep 17 00:00:00 2001
From: inoguchi <>
Date: Tue, 20 Aug 2019 13:10:09 +0000
Subject: Add static_ASN1_* macro

- Add static_ASN1_* macro. Patch was provided by steils AT gentoo.org
---
 src/lib/libcrypto/asn1/asn1t.h | 73 +++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 72 insertions(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/lib/libcrypto/asn1/asn1t.h b/src/lib/libcrypto/asn1/asn1t.h
index ba380bdf41..d6168b65e1 100644
--- a/src/lib/libcrypto/asn1/asn1t.h
+++ b/src/lib/libcrypto/asn1/asn1t.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: asn1t.h,v 1.14 2016/12/27 15:12:51 jsing Exp $ */
+/* $OpenBSD: asn1t.h,v 1.15 2019/08/20 13:10:09 inoguchi Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2000.
  */
@@ -81,6 +81,9 @@ extern "C" {
 #define ASN1_ITEM_start(itname) \
 	const ASN1_ITEM itname##_it = {
 
+#define static_ASN1_ITEM_start(itname) \
+	static const ASN1_ITEM itname##_it = {
+
 #define ASN1_ITEM_end(itname) \
 		};
 
@@ -103,6 +106,18 @@ extern "C" {
 		#tname \
 	ASN1_ITEM_end(tname)
 
+#define static_ASN1_ITEM_TEMPLATE_END(tname) \
+	;\
+	static_ASN1_ITEM_start(tname) \
+		ASN1_ITYPE_PRIMITIVE,\
+		-1,\
+		&tname##_item_tt,\
+		0,\
+		NULL,\
+		0,\
+		#tname \
+	ASN1_ITEM_end(tname)
+
 
 /* This is a ASN1 type which just embeds a template */
  
@@ -131,6 +146,8 @@ extern "C" {
 
 #define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname)
 
+#define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname)
+
 #define ASN1_SEQUENCE_END_name(stname, tname) \
 	;\
 	ASN1_ITEM_start(tname) \
@@ -143,6 +160,18 @@ extern "C" {
 		#stname \
 	ASN1_ITEM_end(tname)
 
+#define static_ASN1_SEQUENCE_END_name(stname, tname) \
+	;\
+	static_ASN1_ITEM_start(tname) \
+		ASN1_ITYPE_SEQUENCE,\
+		V_ASN1_SEQUENCE,\
+		tname##_seq_tt,\
+		sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
+		NULL,\
+		sizeof(stname),\
+		#stname \
+	ASN1_ITEM_end(tname)
+
 #define ASN1_NDEF_SEQUENCE(tname) \
 	ASN1_SEQUENCE(tname)
 
@@ -177,12 +206,26 @@ extern "C" {
 		#tname \
 	ASN1_ITEM_end(tname)
 
+#define static_ASN1_NDEF_SEQUENCE_END(tname) \
+	;\
+	static_ASN1_ITEM_start(tname) \
+		ASN1_ITYPE_NDEF_SEQUENCE,\
+		V_ASN1_SEQUENCE,\
+		tname##_seq_tt,\
+		sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
+		NULL,\
+		sizeof(tname),\
+		#tname \
+	ASN1_ITEM_end(tname)
+
 #define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname)
 
 #define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
 
 #define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
 
+#define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname)
+
 #define ASN1_SEQUENCE_END_ref(stname, tname) \
 	;\
 	ASN1_ITEM_start(tname) \
@@ -195,6 +238,18 @@ extern "C" {
 		#stname \
 	ASN1_ITEM_end(tname)
 
+#define static_ASN1_SEQUENCE_END_ref(stname, tname) \
+	;\
+	static_ASN1_ITEM_start(tname) \
+		ASN1_ITYPE_SEQUENCE,\
+		V_ASN1_SEQUENCE,\
+		tname##_seq_tt,\
+		sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
+		&tname##_aux,\
+		sizeof(stname),\
+		#stname \
+	ASN1_ITEM_end(tname)
+
 #define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \
 	;\
 	ASN1_ITEM_start(tname) \
@@ -239,8 +294,12 @@ extern "C" {
 
 #define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname)
 
+#define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname)
+
 #define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type)
 
+#define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type)
+
 #define ASN1_CHOICE_END_selector(stname, tname, selname) \
 	;\
 	ASN1_ITEM_start(tname) \
@@ -253,6 +312,18 @@ extern "C" {
 		#stname \
 	ASN1_ITEM_end(tname)
 
+#define static_ASN1_CHOICE_END_selector(stname, tname, selname) \
+	;\
+	static_ASN1_ITEM_start(tname) \
+		ASN1_ITYPE_CHOICE,\
+		offsetof(stname,selname) ,\
+		tname##_ch_tt,\
+		sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\
+		NULL,\
+		sizeof(stname),\
+		#stname \
+	ASN1_ITEM_end(tname)
+
 #define ASN1_CHOICE_END_cb(stname, tname, selname) \
 	;\
 	ASN1_ITEM_start(tname) \
-- 
cgit v1.2.3-55-g6feb