globus_i_gsi_proxy.h

00001 /*
00002  * Copyright 1999-2006 University of Chicago
00003  * 
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  * 
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
00018 
00025 #include "globus_gsi_proxy.h"
00026 #include "proxycertinfo.h"
00027 #include "globus_common.h"
00028 
00029 #ifndef GLOBUS_I_GSI_PROXY_H
00030 #define GLOBUS_I_GSI_PROXY_H
00031 
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035 
00036 /* DEBUG MACROS */
00037 
00038 #ifdef BUILD_DEBUG
00039 
00040 extern int                              globus_i_gsi_proxy_debug_level;
00041 extern FILE *                           globus_i_gsi_proxy_debug_fstream;
00042 
00043 #define GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_) \
00044     (globus_i_gsi_proxy_debug_level >= (_LEVEL_))
00045 
00046 #define GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) \
00047     { \
00048         if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00049         { \
00050            globus_libc_fprintf _MESSAGE_; \
00051         } \
00052     }
00053 
00054 #define GLOBUS_I_GSI_PROXY_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) \
00055     { \
00056         if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00057         { \
00058            char *                          _tmp_str_ = \
00059                globus_common_create_nstring _MESSAGE_; \
00060            globus_libc_fprintf(globus_i_gsi_proxy_debug_fstream, \
00061                                _tmp_str_); \
00062            globus_libc_free(_tmp_str_); \
00063         } \
00064     }
00065 
00066 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT(_LEVEL_, _MESSAGE_) \
00067     { \
00068         if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00069         { \
00070            globus_libc_fprintf(globus_i_gsi_proxy_debug_fstream, _MESSAGE_); \
00071         } \
00072     }
00073 
00074 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) \
00075     { \
00076         if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00077         { \
00078            _OBJ_NAME_##_print_fp(globus_i_gsi_proxy_debug_fstream, _OBJ_); \
00079         } \
00080     }
00081 
00082 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_PCI(_LEVEL_, _OBJ_) \
00083     { \
00084         if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00085         { \
00086             BIO *b = BIO_new_fp(globus_i_gsi_proxy_debug_fstream, BIO_NOCLOSE); \
00087             const X509V3_EXT_METHOD *meth = X509V3_EXT_get_nid(NID_proxyCertInfo); \
00088             meth->i2r(meth, (_OBJ_), b, 4); \
00089             BIO_flush(b); \
00090             BIO_free(b); \
00091         } \
00092     }
00093 #else
00094 
00095 #define GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) {}
00096 #define GLOBUS_I_GSI_PROXY_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) {}
00097 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT(_LEVEL_, _MESSAGE_) {}
00098 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) {}
00099 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_PCI(_LEVEL_, _OBJ_) {}
00100 
00101 #endif
00102 
00103 #define GLOBUS_I_GSI_PROXY_DEBUG_ENTER \
00104             GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF( \
00105                 1, (globus_i_gsi_proxy_debug_fstream, \
00106                     "%s entering\n", __func__))
00107 
00108 #define GLOBUS_I_GSI_PROXY_DEBUG_EXIT \
00109             GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF( \
00110                 1, (globus_i_gsi_proxy_debug_fstream, \
00111                     "%s exiting\n", __func__))
00112 
00113 /* ERROR MACROS */
00114 
00115 #define GLOBUS_GSI_PROXY_OPENSSL_ERROR_RESULT(_RESULT_, \
00116                                               _ERRORTYPE_, _ERRORSTR_) \
00117     char *                              _tmp_string_ = \
00118         globus_common_create_string _ERRORSTR_; \
00119     _RESULT_ = globus_i_gsi_proxy_openssl_error_result( \
00120         _ERRORTYPE_, \
00121         __FILE__, \
00122         __func__, \
00123         __LINE__, \
00124         _tmp_string_, \
00125         NULL); \
00126     globus_libc_free(_tmp_string_)
00127 
00128 #define GLOBUS_GSI_PROXY_ERROR_RESULT(_RESULT_, \
00129                                       _ERRORTYPE_, _ERRORSTR_) \
00130     char *                              _tmp_string_ = \
00131         globus_common_create_string _ERRORSTR_; \
00132     _RESULT_ = globus_i_gsi_proxy_error_result( \
00133         _ERRORTYPE_, \
00134         __FILE__, \
00135         __func__, \
00136         __LINE__, \
00137         _tmp_string_, \
00138         NULL); \
00139     globus_libc_free(_tmp_string_)
00140 
00141 #define GLOBUS_GSI_PROXY_ERROR_CHAIN_RESULT(_RESULT_, \
00142                                             _ERRORTYPE_) \
00143     _RESULT_ = globus_i_gsi_proxy_error_chain_result( \
00144         (_RESULT_), \
00145         (_ERRORTYPE_), \
00146         __FILE__, \
00147         __func__, \
00148         __LINE__, \
00149         NULL, \
00150         NULL)
00151 
00152 #define GLOBUS_GSI_PROXY_OPENSSL_LONG_ERROR_RESULT(_RESULT_, \
00153                                                    _ERRORTYPE_, \
00154                                                    _ERRORSTR_, \
00155                                                    _LONG_DESC_) \
00156     char *                              _tmp_string_ = \
00157         globus_common_create_string _ERRORSTR_; \
00158     _RESULT_ = globus_i_gsi_proxy_openssl_error_result( \
00159         _ERRORTYPE_, \
00160         __FILE__, \
00161         __func__, \
00162         __LINE__, \
00163         _tmp_string_, \
00164         _LONG_DESC_); \
00165     globus_libc_free(_tmp_string_)
00166 
00167 #define GLOBUS_GSI_PROXY_LONG_ERROR_RESULT(_RESULT_, \
00168                                            _ERRORTYPE_, \
00169                                            _ERRORSTR_, \
00170                                            _LONG_DESC_) \
00171     char *                              _tmp_string_ = \
00172         globus_common_create_string _ERRORSTR_; \
00173     _RESULT_ = globus_i_gsi_proxy_error_result( \
00174         _ERRORTYPE_, \
00175         __FILE__, \
00176         __func__, \
00177         __LINE__, \
00178         _tmp_string_, \
00179         NULL, \
00180         _LONG_DESC_); \
00181     globus_libc_free(_tmp_string_)
00182 
00183 #define GLOBUS_GSI_PROXY_LONG_ERROR_CHAIN_RESULT(_RESULT_, \
00184                                                  _ERRORTYPE_, \
00185                                                  _LONG_DESC_) \
00186     _RESULT_ = globus_i_gsi_proxy_error_chain_result( \
00187         _RESULT_, \
00188         _ERRORTYPE_, \
00189         __FILE__, \
00190         __func__, \
00191         __LINE__, \
00192         NULL, \
00193         _LONG_DESC_)
00194 
00195 #include "globus_gsi_proxy_constants.h"
00196 
00210 typedef struct globus_l_gsi_proxy_handle_attrs_s
00211 {
00216     int                                 key_bits;
00221     int                                 init_prime;
00226     const EVP_MD *                      signing_algorithm;
00232     int                                 clock_skew;
00237     void (*key_gen_callback)(int, int, void *);
00238 
00239 } globus_i_gsi_proxy_handle_attrs_t;
00240 
00252 typedef struct globus_l_gsi_proxy_handle_s
00253 {
00255     X509_REQ *                          req;
00257     EVP_PKEY *                          proxy_key;
00259     globus_gsi_proxy_handle_attrs_t     attrs;
00261     PROXY_CERT_INFO_EXTENSION *         proxy_cert_info;    
00263     int                                 time_valid;
00265     globus_gsi_cert_utils_cert_type_t   type;
00267     char *                              common_name;
00269     STACK_OF(X509_EXTENSION)*           extensions;
00270 } globus_i_gsi_proxy_handle_t;
00271 
00272 
00273 /* used for printing the status of a private key generating algorithm */
00274 void 
00275 globus_i_gsi_proxy_create_private_key_cb(
00276     int                                 num1,
00277     int                                 num2,
00278     BIO *                               output);
00279 
00280 globus_result_t
00281 globus_i_gsi_proxy_set_pc_times(
00282     X509 *                              new_pc, 
00283     X509 *                              issuer_cert,
00284     int                                 clock_skew,
00285     int                                 time_valid);
00286 
00287 globus_result_t
00288 globus_i_gsi_proxy_set_subject(
00289     X509 *                              new_pc, 
00290     X509 *                              issuer_cert,
00291     char *                              common_name);
00292 
00293 globus_result_t
00294 globus_i_gsi_proxy_openssl_error_result(
00295     int                                 error_type,
00296     const char *                        filename,
00297     const char *                        function_name,
00298     int                                 line_number,
00299     const char *                        short_desc,
00300     const char *                        long_desc);
00301 
00302 globus_result_t
00303 globus_i_gsi_proxy_error_result(
00304     int                                 error_type,
00305     const char *                        filename,
00306     const char *                        function_name,
00307     int                                 line_number,
00308     const char *                        short_desc,
00309     const char *                        long_desc);
00310 
00311 globus_result_t
00312 globus_i_gsi_proxy_error_chain_result(
00313     globus_result_t                     chain_result,
00314     int                                 error_type,
00315     const char *                        filename,
00316     const char *                        function_name,
00317     int                                 line_number,
00318     const char *                        short_desc,
00319     const char *                        long_desc);
00320 
00321 #ifdef __cplusplus
00322 }
00323 #endif
00324 
00325 #endif /* GLOBUS_I_GSI_PROXY_H */
00326 
00327 #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */

Generated on 5 Nov 2016 for globus_gsi_proxy_core by  doxygen 1.4.7