@@ -48,77 +48,6 @@ typedef enum {
4848
4949extern fr_der_tag_constructed_t tag_labels [];
5050
51- /*
52- * Create a mapping between FR_TYPE_* and valid FR_DER_TAG_*'s
53- */
54- static bool * fr_type_to_der_tags [] = {
55- [FR_TYPE_MAX ] = NULL ,
56- [FR_TYPE_BOOL ] = (bool []){[FR_DER_TAG_BOOLEAN ] = true,
57- [FR_DER_TAG_INTEGER ] = true,
58- [FR_DER_TAG_NULL ] = true,
59- [FR_DER_TAG_MAX ] = false},
60- [FR_TYPE_UINT8 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
61- [FR_DER_TAG_ENUMERATED ] = true,
62- [FR_DER_TAG_MAX ] = false},
63- [FR_TYPE_UINT16 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
64- [FR_DER_TAG_ENUMERATED ] = true,
65- [FR_DER_TAG_MAX ] = false},
66- [FR_TYPE_UINT32 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
67- [FR_DER_TAG_ENUMERATED ] = true,
68- [FR_DER_TAG_MAX ] = false},
69- [FR_TYPE_UINT64 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
70- [FR_DER_TAG_ENUMERATED ] = true,
71- [FR_DER_TAG_MAX ] = false},
72- [FR_TYPE_INT8 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
73- [FR_DER_TAG_ENUMERATED ] = true,
74- [FR_DER_TAG_MAX ] = false},
75- [FR_TYPE_INT16 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
76- [FR_DER_TAG_ENUMERATED ] = true,
77- [FR_DER_TAG_MAX ] = false},
78- [FR_TYPE_INT32 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
79- [FR_DER_TAG_ENUMERATED ] = true,
80- [FR_DER_TAG_MAX ] = false},
81- [FR_TYPE_INT64 ] = (bool []){[FR_DER_TAG_INTEGER ] = true,
82- [FR_DER_TAG_ENUMERATED ] = true,
83- [FR_DER_TAG_MAX ] = false},
84- [FR_TYPE_OCTETS ] = (bool []){[FR_DER_TAG_BITSTRING ] = true,
85- [FR_DER_TAG_OCTETSTRING ] = true,
86- [FR_DER_TAG_MAX ] = false},
87- [FR_TYPE_STRING ] = (bool []){[FR_DER_TAG_OID ] = true,
88- [FR_DER_TAG_UTF8_STRING ] = true,
89- [FR_DER_TAG_PRINTABLE_STRING ] = true,
90- [FR_DER_TAG_T61_STRING ] = true,
91- [FR_DER_TAG_IA5_STRING ] = true,
92- [FR_DER_TAG_VISIBLE_STRING ] = true,
93- [FR_DER_TAG_GENERAL_STRING ] = true,
94- [FR_DER_TAG_UNIVERSAL_STRING ] = true,
95- [FR_DER_TAG_MAX ] = false},
96- [FR_TYPE_DATE ] = (bool []){[FR_DER_TAG_UTC_TIME ] = true,
97- [FR_DER_TAG_GENERALIZED_TIME ] = true,
98- [FR_DER_TAG_MAX ] = false},
99- [FR_TYPE_TLV ] = (bool []){[FR_DER_TAG_SEQUENCE ] = true,
100- [FR_DER_TAG_SET ] = true,
101- [FR_DER_TAG_MAX ] = false},
102- [FR_TYPE_STRUCT ] = (bool []){[FR_DER_TAG_BITSTRING ] = true,
103- [FR_DER_TAG_SEQUENCE ] = true,
104- [FR_DER_TAG_SET ] = true,
105- [FR_DER_TAG_MAX ] = false},
106- [FR_TYPE_GROUP ] = (bool []){[FR_DER_TAG_SEQUENCE ] = true,
107- [FR_DER_TAG_SET ] = true,
108- [FR_DER_TAG_MAX ] = false}
109- };
110-
111- /*
112- * Return true if the given type can be encoded as the given tag.
113- * @param[in] type The fr_type to check.
114- * @param[in] tag The der tag to check.
115- * @return true if the type can be encoded as the given tag.
116- */
117- static inline CC_HINT (always_inline ) bool fr_type_to_der_tag_valid (fr_type_t type , fr_der_tag_num_t tag )
118- {
119- return fr_type_to_der_tags [type ][tag ];
120- }
121-
12251#define DER_MAX_STR 16384
12352
12453#define DER_UTC_TIME_LEN 13 //!< Length of the UTC time string.
@@ -179,6 +108,7 @@ static inline fr_der_attr_flags_t const *fr_der_attr_flags(fr_dict_attr_t const
179108 * base.c
180109 */
181110fr_der_tag_num_t fr_type_to_der_tag_default (fr_type_t type );
111+ bool fr_type_to_der_tag_valid (fr_type_t type , fr_der_tag_num_t tag );
182112
183113int fr_der_global_init (void );
184114void fr_der_global_free (void );
0 commit comments