ARC SDK
VOMSAttribute.h
1 
8 #ifndef ARC_VOMSATTRIBUTE_H
9 #define ARC_VOMSATTRIBUTE_H
10 
11 #include <openssl/asn1t.h>
12 #include <openssl/safestack.h>
13 #include <openssl/x509v3.h>
14 
15 
16 #if (OPENSSL_VERSION_NUMBER < 0x10100000L)
17 
18 #define DEFINE_STACK_OF(S) \
19 inline STACK_OF(S)* sk_##S##_new(int (*cmp) (const S* const *, const S* const *)) { return SKM_sk_new(S, (cmp)); } \
20 inline STACK_OF(S)* sk_##S##_new_null() { return SKM_sk_new_null(S); } \
21 inline int sk_##S##_is_sorted(STACK_OF(S) const *st) { return SKM_sk_is_sorted(S, st); } \
22 inline void sk_##S##_free(STACK_OF(S)* st) { SKM_sk_free(S, st); } \
23 inline int sk_##S##_num(STACK_OF(S) const* st) { return SKM_sk_num(S, st); } \
24 inline int sk_##S##_push(STACK_OF(S)* st, S* val) { return SKM_sk_push(S, st, val); } \
25 inline S* sk_##S##_value(STACK_OF(S) const* st, int i) { return SKM_sk_value(S, st, i); } \
26 inline void sk_##S##_pop_free(STACK_OF(S)* st, void (*free_func)(S*)) { SKM_sk_pop_free(S, st, free_func); } \
27 DECLARE_STACK_OF(S)
28 /*
29 # define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val))
30 # define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st))
31 # define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val))
32 # define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val))
33 # define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val))
34 # define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i))
35 # define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr))
36 # define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i))
37 # define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp))
38 # define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st)
39 # define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st),
40  (copy_func), (free_func))
41 # define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st))
42 # define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st))
43 # define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st))
44 */
45 
46 #endif
47 
48 
49 #define VOMS_AC_HEADER "-----BEGIN VOMS AC-----"
50 #define VOMS_AC_TRAILER "-----END VOMS AC-----"
51 
52 namespace ArcCredential {
53 
54 #define ASN1_F_D2I_AC_ATTR 5000
55 #define AC_F_ATTR_New 5001
56 #define ASN1_F_D2I_AC_ROLE 5002
57 #define AC_F_ROLE_New 5003
58 #define ASN1_F_D2I_AC_IETFATTR 5004
59 #define AC_F_IETFATTR_New 5005
60 #define ASN1_F_D2I_AC_IETFATTRVAL 5006
61 #define ASN1_F_D2I_AC_DIGEST 5007
62 #define AC_F_DIGEST_New 5008
63 #define ASN1_F_D2I_AC_IS 5009
64 #define AC_F_AC_IS_New 5010
65 #define ASN1_F_D2I_AC_FORM 5011
66 #define AC_F_AC_FORM_New 5012
67 #define ASN1_F_D2I_AC_ACI 5013
68 #define ASN1_F_AC_ACI_New 5014
69 #define ASN1_F_D2I_AC_HOLDER 5015
70 #define ASN1_F_AC_HOLDER_New 5016
71 #define ASN1_F_AC_VAL_New 5017
72 #define AC_F_AC_INFO_NEW 5018
73 #define AC_F_D2I_AC 5019
74 #define AC_F_AC_New 5020
75 #define ASN1_F_I2D_AC_IETFATTRVAL 5021
76 #define AC_F_D2I_AC_DIGEST 5022
77 #define AC_F_AC_DIGEST_New 5023
78 #define AC_F_D2I_AC_IS 5024
79 #define AC_ERR_UNSET 5025
80 #define AC_ERR_SET 5026
81 #define AC_ERR_SIGNATURE 5027
82 #define AC_ERR_VERSION 5028
83 #define AC_ERR_HOLDER_SERIAL 5029
84 #define AC_ERR_HOLDER 5030
85 #define AC_ERR_UID_MISMATCH 5031
86 #define AC_ERR_ISSUER_NAME 5032
87 #define AC_ERR_SERIAL 5033
88 #define AC_ERR_DATES 5034
89 #define AC_ERR_ATTRIBS 5035
90 #define AC_F_AC_TARGET_New 5036
91 #define ASN1_F_D2I_AC_TARGET 5037
92 #define AC_F_AC_TARGETS_New 5036
93 #define ASN1_F_D2I_AC_TARGETS 5037
94 #define ASN1_F_D2I_AC_SEQ 5038
95 #define AC_F_AC_SEQ_new 5039
96 #define AC_ERR_ATTRIB_URI 5040
97 #define AC_ERR_ATTRIB_FQAN 5041
98 #define AC_ERR_EXTS_ABSENT 5042
99 #define AC_ERR_MEMORY 5043
100 #define AC_ERR_EXT_CRIT 5044
101 #define AC_ERR_EXT_TARGET 5045
102 #define AC_ERR_EXT_KEY 5046
103 #define AC_ERR_UNKNOWN 5047
104 
105 #define AC_ERR_PARAMETERS 5048
106 #define X509_ERR_ISSUER_NAME 5049
107 #define X509_ERR_HOLDER_NAME 5050
108 #define AC_ERR_NO_EXTENSION 5051
109 
110 #define ASN1_F_D2I_AC_CERTS 5052
111 #define AC_F_X509_New 5053
112 
113 #define AC_F_D2I_AC_ATTRIBUTE 5054
114 #define AC_F_ATTRIBUTE_New 5055
115 #define ASN1_F_D2I_AC_ATT_HOLDER 5056
116 #define AC_F_AC_ATT_HOLDER_New 5057
117 #define ASN1_F_D2I_AC_FULL_ATTRIBUTES 5058
118 #define AC_F_AC_FULL_ATTRIBUTES_New 5059
119 #define ASN1_F_D2I_AC_ATTRIBUTEVAL 5060
120 #define ASN1_F_I2D_AC_ATTRIBUTEVAL 5061
121 #define AC_F_AC_ATTRIBUTEVAL_New 5062
122 #define AC_ERR_ATTRIB 5063
123 
124 typedef struct ACDIGEST {
125  ASN1_ENUMERATED *type;
126  ASN1_OBJECT *oid;
127  X509_ALGOR *algor;
128  ASN1_BIT_STRING *digest;
129 } AC_DIGEST;
130 
131 DECLARE_ASN1_FUNCTIONS(AC_DIGEST)
132 
133 typedef struct ACIS {
134  STACK_OF(GENERAL_NAME) *issuer;
135  ASN1_INTEGER *serial;
136  ASN1_BIT_STRING *uid;
137 } AC_IS;
138 
139 DECLARE_ASN1_FUNCTIONS(AC_IS)
140 
141 typedef struct ACFORM {
142  STACK_OF(GENERAL_NAME) *names;
143  AC_IS *is;
144  AC_DIGEST *digest;
145 } AC_FORM;
146 
147 DECLARE_ASN1_FUNCTIONS(AC_FORM)
148 
149 typedef struct ACACI {
150  STACK_OF(GENERAL_NAME) *names;
151  AC_FORM *form;
152 } AC_ACI;
153 
154 DECLARE_ASN1_FUNCTIONS(AC_ACI)
155 
156 typedef struct ACHOLDER {
157  AC_IS *baseid;
158  STACK_OF(GENERAL_NAME) *name;
159  AC_DIGEST *digest;
160 } AC_HOLDER;
161 
162 DECLARE_ASN1_FUNCTIONS(AC_HOLDER)
163 
164 typedef struct ACVAL {
165  ASN1_GENERALIZEDTIME *notBefore;
166  ASN1_GENERALIZEDTIME *notAfter;
167 } AC_VAL;
168 
169 DECLARE_ASN1_FUNCTIONS(AC_VAL)
170 
171 //typedef struct asn1_string_st AC_IETFATTRVAL;
172 //typedef ASN1_TYPE AC_IETFATTRVAL;
173 #define AC_IETFATTRVAL ASN1_TYPE
174 #define AC_IETFATTRVAL_new ASN1_TYPE_new
175 #define AC_IETFATTRVAL_free ASN1_TYPE_free
176 #define sk_AC_IETFATTRVAL_push sk_ASN1_TYPE_push
177 #define stack_st_AC_IETFATTRVAL stack_st_ASN1_TYPE
178 #define sk_AC_IETFATTRVAL_num sk_ASN1_TYPE_num
179 #define sk_AC_IETFATTRVAL_value sk_ASN1_TYPE_value
180 #define sk_AC_IETFATTRVAL_new_null sk_ASN1_TYPE_new_null
181 
182 typedef struct ACIETFATTR {
183  STACK_OF(GENERAL_NAME) *names;
184  STACK_OF(AC_IETFATTRVAL) *values;
185 } AC_IETFATTR;
186 
187 DECLARE_ASN1_FUNCTIONS(AC_IETFATTR)
188 
189 typedef struct ACTARGET {
190  GENERAL_NAME *name;
191  GENERAL_NAME *group;
192  AC_IS *cert;
193 } AC_TARGET;
194 
195 DECLARE_ASN1_FUNCTIONS(AC_TARGET)
196 
197 typedef struct ACTARGETS {
198  STACK_OF(AC_TARGET) *targets;
199 } AC_TARGETS;
200 
201 DECLARE_ASN1_FUNCTIONS(AC_TARGETS)
202 
203 typedef struct ACATTR {
204  ASN1_OBJECT * type;
205  //int get_type;
206  STACK_OF(AC_IETFATTR) *ietfattr;
207  //STACK_OF(AC_FULL_ATTRIBUTES) *fullattributes;
208 } AC_ATTR;
209 #define GET_TYPE_FQAN 1
210 #define GET_TYPE_ATTRIBUTES 2
211 
212 DECLARE_ASN1_FUNCTIONS(AC_ATTR)
213 
214 typedef struct ACINFO {
215  ASN1_INTEGER *version;
216  AC_HOLDER *holder;
217  AC_FORM *form;
218  X509_ALGOR *alg;
219  ASN1_INTEGER *serial;
220  AC_VAL *validity;
221  STACK_OF(AC_ATTR) *attrib;
222  ASN1_BIT_STRING *id;
223  STACK_OF(X509_EXTENSION) *exts;
224 } AC_INFO;
225 
226 DECLARE_ASN1_FUNCTIONS(AC_INFO)
227 
228 typedef struct ACC {
229  AC_INFO *acinfo;
230  X509_ALGOR *sig_alg;
231  ASN1_BIT_STRING *signature;
232 } AC;
233 
234 DECLARE_ASN1_FUNCTIONS(AC)
235 
236 typedef struct ACSEQ {
237  STACK_OF(AC) *acs;
238 } AC_SEQ;
239 
240 DECLARE_ASN1_FUNCTIONS(AC_SEQ)
241 
242 typedef struct ACCERTS {
243  STACK_OF(X509) *stackcert;
244 } AC_CERTS;
245 
246 DECLARE_ASN1_FUNCTIONS(AC_CERTS)
247 
248 typedef struct ACATTRIBUTE {
249  ASN1_OCTET_STRING *name;
250  ASN1_OCTET_STRING *qualifier;
251  ASN1_OCTET_STRING *value;
252 } AC_ATTRIBUTE;
253 
254 DECLARE_ASN1_FUNCTIONS(AC_ATTRIBUTE)
255 
256 typedef struct ACATTHOLDER {
257  STACK_OF(GENERAL_NAME) *grantor;
258  STACK_OF(AC_ATTRIBUTE) *attributes;
259 } AC_ATT_HOLDER;
260 
261 DECLARE_ASN1_FUNCTIONS(AC_ATT_HOLDER)
262 
263 typedef struct ACFULLATTRIBUTES {
264  STACK_OF(AC_ATT_HOLDER) *providers;
265 } AC_FULL_ATTRIBUTES;
266 
267 DECLARE_ASN1_FUNCTIONS(AC_FULL_ATTRIBUTES)
268 
269 
270 DEFINE_STACK_OF(AC_TARGET)
271 DEFINE_STACK_OF(AC_TARGETS)
272 DEFINE_STACK_OF(AC_IETFATTR)
273 //DEFINE_STACK_OF(AC_IETFATTRVAL)
274 DEFINE_STACK_OF(AC_ATTR)
275 DEFINE_STACK_OF(AC)
276 DEFINE_STACK_OF(AC_INFO)
277 DEFINE_STACK_OF(AC_VAL)
278 DEFINE_STACK_OF(AC_HOLDER)
279 DEFINE_STACK_OF(AC_ACI)
280 DEFINE_STACK_OF(AC_FORM)
281 DEFINE_STACK_OF(AC_IS)
282 DEFINE_STACK_OF(AC_DIGEST)
283 DEFINE_STACK_OF(AC_CERTS)
284 DEFINE_STACK_OF(AC_ATTRIBUTE)
285 DEFINE_STACK_OF(AC_ATT_HOLDER)
286 DEFINE_STACK_OF(AC_FULL_ATTRIBUTES)
287 
288 
289 X509V3_EXT_METHOD * VOMSAttribute_auth_x509v3_ext_meth();
290 X509V3_EXT_METHOD * VOMSAttribute_avail_x509v3_ext_meth();
291 X509V3_EXT_METHOD * VOMSAttribute_targets_x509v3_ext_meth();
292 X509V3_EXT_METHOD * VOMSAttribute_acseq_x509v3_ext_meth();
293 X509V3_EXT_METHOD * VOMSAttribute_certseq_x509v3_ext_meth();
294 X509V3_EXT_METHOD * VOMSAttribute_attribs_x509v3_ext_meth();
295 
296 } // namespace ArcCredential
297 
298 #endif
299 
Internal code for low-level credential handling.
Definition: CertUtil.h:11