ARC SDK
Proxycertinfo.h
1 #ifndef ARC_PROXYCERTINFO_H
2 #define ARC_PROXYCERTINFO_H
3 
4 #include <openssl/x509.h>
5 #include <openssl/x509v3.h>
6 #include <string>
7 
9 namespace ArcCredential {
21 /* predefined policy language */
22 #define ANYLANGUAGE_PROXY_OID "1.3.6.1.5.5.7.21.0"
23 #define ANYLANGUAGE_PROXY_SN "ANYLANGUAGE_PROXY" //"anyLanguage" in openssl >= 098
24 #define ANYLANGUAGE_PROXY_LN "anyLanguage proxy"
25 
26 #define IMPERSONATION_PROXY_OID "1.3.6.1.5.5.7.21.1"
27 #define IMPERSONATION_PROXY_SN "IMPERSONATION_PROXY" //"inheritAll" in openssl >= 098
28 #define IMPERSONATION_PROXY_LN "GSI impersonation proxy"
29 
30 #define INDEPENDENT_PROXY_OID "1.3.6.1.5.5.7.21.2"
31 #define INDEPENDENT_PROXY_SN "INDEPENDENT_PROXY" //"independent" in openssl >=098
32 #define INDEPENDENT_PROXY_LN "GSI independent proxy"
33 
34 /* generic policy language */
35 #define GLOBUS_GSI_PROXY_GENERIC_POLICY_OID "1.3.6.1.4.1.3536.1.1.1.8"
36 
37 #define LIMITED_PROXY_OID "1.3.6.1.4.1.3536.1.1.1.9"
38 #define LIMITED_PROXY_SN "LIMITED_PROXY"
39 #define LIMITED_PROXY_LN "GSI limited proxy"
40 
41 /* error handling */
42 #define ASN1_F_PROXYPOLICY_NEW 450
43 #define ASN1_F_D2I_PROXYPOLICY 451
44 #define ASN1_F_PROXYCERTINFO_NEW 430
45 #define ASN1_F_D2I_PROXYCERTINFO 431
46 
47 /* Error codes for the X509V3 functions. */
48 /* Function codes. */
49 #define X509V3_F_PROCESS_PCI_VALUE 150
50 #define X509V3_F_R2I_PCI 155
51 
52 /* Reason Code */
53 #define X509V3_R_INVALID_PROXY_POLICY_SETTING 153
54 #define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154
55 #define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159
56 
57 /* data structure */
59 typedef struct PROXYPOLICY_st {
60  ASN1_OBJECT * policy_language;
61  ASN1_OCTET_STRING * policy;
62 } PROXYPOLICY;
63 
64 typedef struct PROXYCERTINFO_st {
65  ASN1_INTEGER * path_length;
66  PROXYPOLICY * proxypolicy;
67  int version;
68 } PROXYCERTINFO;
70 
71 /* PROXYPOLICY function */
72 
73 /* allocating and free memory */
74 PROXYPOLICY * PROXYPOLICY_new();
75 void PROXYPOLICY_free(PROXYPOLICY * proxypolicy);
76 
77 /* duplicate */
78 PROXYPOLICY * PROXYPOLICY_dup(PROXYPOLICY * policy);
79 
80 /* set policy language */
81 int PROXYPOLICY_set_policy_language(PROXYPOLICY * policy, ASN1_OBJECT * policy_language);
82 
83 /* Returns newly allocated policy language object copied from policy */
84 ASN1_OBJECT * PROXYPOLICY_get_policy_language(PROXYPOLICY * policy);
85 
86 /* set policy contents */
87 int PROXYPOLICY_set_policy(PROXYPOLICY * proxypolicy, unsigned char * policy, int length);
88 
89 /* get policy contents */
90 unsigned char * PROXYPOLICY_get_policy(PROXYPOLICY * policy, int * length);
91 
92 /* internal to der conversion */
93 int i2d_PROXYPOLICY(PROXYPOLICY * policy, unsigned char ** pp);
94 
95 /* der to internal conversion */
96 PROXYPOLICY * d2i_PROXYPOLICY(PROXYPOLICY ** policy, unsigned char ** pp, long length);
97 
98 X509V3_EXT_METHOD * PROXYPOLICY_x509v3_ext_meth();
99 
100 STACK_OF(CONF_VALUE) * i2v_PROXYPOLICY(struct v3_ext_method * method, PROXYPOLICY * ext, STACK_OF(CONF_VALUE) * extlist);
101 
102 /*PROXYCERTINFO function */
103 
104 /* allocating and free memory */
105 PROXYCERTINFO * PROXYCERTINFO_new();
106 void PROXYCERTINFO_free(PROXYCERTINFO * proxycertinfo);
107 
108 /* duplicate */
109 PROXYCERTINFO * PROXYCERTINFO_dup(PROXYCERTINFO * proxycertinfo);
110 
111 int PROXYCERTINFO_print_fp(FILE* fp, PROXYCERTINFO* cert_info);
112 
113 /* set path_length */
114 int PROXYCERTINFO_set_path_length(PROXYCERTINFO * proxycertinfo, long path_length);
115 
116 /* get ptah length */
117 long PROXYCERTINFO_get_path_length(PROXYCERTINFO * proxycertinfo);
118 
119 /* set proxypolicy */
120 int PROXYCERTINFO_set_proxypolicy(PROXYCERTINFO * proxycertinfo, PROXYPOLICY * proxypolicy);
121 
122 /* get proxypolicy */
123 PROXYPOLICY * PROXYCERTINFO_get_proxypolicy(PROXYCERTINFO * proxycertinfo);
124 
125 /* internal to der conversion */
126 int i2d_PROXYCERTINFO(PROXYCERTINFO * proxycertinfo, unsigned char ** pp);
127 
128 /* der to internal conversion */
129 PROXYCERTINFO * d2i_PROXYCERTINFO(PROXYCERTINFO ** cert_info, unsigned char ** a, long length);
130 
131 int PROXYCERTINFO_set_version(PROXYCERTINFO *cert_info, int version);
132 
133 STACK_OF(CONF_VALUE) * i2v_PROXYCERTINFO(
134  struct v3_ext_method * method,
135  PROXYCERTINFO * ext,
136  STACK_OF(CONF_VALUE) * extlist);
137 
138 int i2r_PROXYCERTINFO(X509V3_EXT_METHOD *method, PROXYCERTINFO *ext, BIO *out, int indent);
139 
140 PROXYCERTINFO *r2i_PROXYCERTINFO(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *value);
141 
142 X509V3_EXT_METHOD * PROXYCERTINFO_v3_x509v3_ext_meth();
143 
144 X509V3_EXT_METHOD * PROXYCERTINFO_v4_x509v3_ext_meth();
145 
146 } //namespace ArcCredential
147 
148 #endif