From: Nikos Mavrogiannopoulos Date: Sun, 9 May 2010 15:20:40 +0000 (+0200) Subject: Added initial PKCS #11 support. Certtool can now print lists of certificates X-Git-Tag: gnutls_2_11_3~279 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=09c8ad2bb46799cd92580694008d11b6db479c40;p=thirdparty%2Fgnutls.git Added initial PKCS #11 support. Certtool can now print lists of certificates available in system. --- diff --git a/lib/Makefile.am b/lib/Makefile.am index 6eeb5a216a..dac14faf4c 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -95,6 +95,10 @@ else SUBDIRS += gcrypt endif +if ENABLE_PKCS11 +COBJECTS += pkcs11.c +endif + if ENABLE_OPRFI COBJECTS += $(OPRFI_COBJECTS) endif diff --git a/lib/configure.ac b/lib/configure.ac index a372b89a14..0918742d52 100644 --- a/lib/configure.ac +++ b/lib/configure.ac @@ -90,10 +90,6 @@ if test x$ac_pakchois != xno; then AC_MSG_ERROR( *** *** Pakchois was not found. This is required for PKCS11 support.) - fi -else - AC_MSG_RESULT(no) -fi AM_CONDITIONAL(ENABLE_PAKCHOIS, test "$ac_cv_libpakchois" = "yes") lgl_INIT diff --git a/lib/includes/gnutls/pkcs11.h b/lib/includes/gnutls/pkcs11.h index cc2f861cd1..f121b0f5cf 100644 --- a/lib/includes/gnutls/pkcs11.h +++ b/lib/includes/gnutls/pkcs11.h @@ -18,7 +18,6 @@ #include #include - #define GNUTLS_PKCS11_MAX_PIN_LEN 32 /** @@ -70,8 +69,6 @@ typedef int (*gnutls_pkcs11_pin_callback_t)(void *userdata, int attempt, struct gnutls_pkcs11_obj_st; typedef struct gnutls_pkcs11_obj_st* gnutls_pkcs11_obj_t; - - #define GNUTLS_PKCS11_FLAG_MANUAL 0 /* Manual loading of libraries */ #define GNUTLS_PKCS11_FLAG_AUTO 1 /* Automatically load libraries by reading /etc/gnutls/pkcs11.conf */ @@ -113,7 +110,7 @@ void gnutls_pkcs11_set_token_function(gnutls_pkcs11_token_callback_t fn, void *u * @param data Data to use when calling callback. * @return gnutls status. */ -void gnutls_pkcs11_set_pin_function (gnutls_pkcs11_pin_callback_t callback, void * const data); +void gnutls_pkcs11_set_pin_function (gnutls_pkcs11_pin_callback_t callback, void * data); /** * @brief Add PKCS#11 provider. diff --git a/lib/pkcs11.c b/lib/pkcs11.c index cfb9550716..5e9bfeeccf 100644 --- a/lib/pkcs11.c +++ b/lib/pkcs11.c @@ -491,7 +491,6 @@ size_t l; ret = 0; cleanup: - return ret; } @@ -572,7 +571,6 @@ int pkcs11_info_to_url(const struct pkcs11_url_info* info, char** url) init = 1; } - if (info->manufacturer[0]) { ret = append(&str, info->manufacturer, "manufacturer", init); if (ret < 0) { diff --git a/src/certtool-gaa.c b/src/certtool-gaa.c index 8d2a250577..f70ecadf52 100644 --- a/src/certtool-gaa.c +++ b/src/certtool-gaa.c @@ -201,37 +201,37 @@ typedef struct _gaainfo gaainfo; struct _gaainfo { -#line 149 "certtool.gaa" +#line 148 "certtool.gaa" int debug; -#line 142 "certtool.gaa" +#line 141 "certtool.gaa" int pkcs11_type; -#line 139 "certtool.gaa" +#line 138 "certtool.gaa" char* pkcs11_url; -#line 136 "certtool.gaa" +#line 135 "certtool.gaa" char* pkcs11_provider; -#line 133 "certtool.gaa" +#line 132 "certtool.gaa" char *pkcs_cipher; -#line 130 "certtool.gaa" +#line 129 "certtool.gaa" char *template; -#line 127 "certtool.gaa" +#line 126 "certtool.gaa" char *infile; -#line 124 "certtool.gaa" +#line 123 "certtool.gaa" char *outfile; -#line 121 "certtool.gaa" +#line 120 "certtool.gaa" int quick_random; -#line 118 "certtool.gaa" +#line 117 "certtool.gaa" int bits; -#line 114 "certtool.gaa" +#line 113 "certtool.gaa" int outcert_format; -#line 110 "certtool.gaa" +#line 109 "certtool.gaa" int incert_format; -#line 107 "certtool.gaa" +#line 106 "certtool.gaa" int export; -#line 104 "certtool.gaa" +#line 103 "certtool.gaa" char *hash; -#line 101 "certtool.gaa" +#line 100 "certtool.gaa" int dsa; -#line 98 "certtool.gaa" +#line 97 "certtool.gaa" int pkcs8; #line 90 "certtool.gaa" int v1_cert; @@ -853,14 +853,14 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) { case GAAOPTID_version: OK = 0; -#line 154 "certtool.gaa" +#line 153 "certtool.gaa" { certtool_version(); exit(0); ;}; return GAA_OK; break; case GAAOPTID_help: OK = 0; -#line 152 "certtool.gaa" +#line 151 "certtool.gaa" { gaa_help(); exit(0); ;}; return GAA_OK; @@ -870,42 +870,42 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_debug.arg1, gaa_getint, GAATMP_debug.size1); gaa_index++; -#line 150 "certtool.gaa" +#line 149 "certtool.gaa" { gaaval->debug = GAATMP_debug.arg1 ;}; return GAA_OK; break; case GAAOPTID_pkcs11_list_tokens: OK = 0; -#line 147 "certtool.gaa" +#line 146 "certtool.gaa" { gaaval->action = ACTION_PKCS11_TOKENS; ;}; return GAA_OK; break; case GAAOPTID_pkcs11_list_all: OK = 0; -#line 146 "certtool.gaa" +#line 145 "certtool.gaa" { gaaval->action = ACTION_PKCS11_LIST; gaaval->pkcs11_type=PKCS11_TYPE_ALL; ;}; return GAA_OK; break; case GAAOPTID_pkcs11_list_all_certs: OK = 0; -#line 145 "certtool.gaa" +#line 144 "certtool.gaa" { gaaval->action = ACTION_PKCS11_LIST; gaaval->pkcs11_type=PKCS11_TYPE_CRT_ALL; ;}; return GAA_OK; break; case GAAOPTID_pkcs11_list_trusted: OK = 0; -#line 144 "certtool.gaa" +#line 143 "certtool.gaa" { gaaval->action = ACTION_PKCS11_LIST; gaaval->pkcs11_type=PKCS11_TYPE_TRUSTED; ;}; return GAA_OK; break; case GAAOPTID_pkcs11_list_certs: OK = 0; -#line 143 "certtool.gaa" +#line 142 "certtool.gaa" { gaaval->action = ACTION_PKCS11_LIST; gaaval->pkcs11_type=PKCS11_TYPE_PK; ;}; return GAA_OK; @@ -915,7 +915,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_pkcs11_export_url.arg1, gaa_getstr, GAATMP_pkcs11_export_url.size1); gaa_index++; -#line 140 "certtool.gaa" +#line 139 "certtool.gaa" { gaaval->action = ACTION_PKCS11_EXPORT_URL; gaaval->pkcs11_url = GAATMP_pkcs11_export_url.arg1; ;}; return GAA_OK; @@ -925,7 +925,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_pkcs11_provider.arg1, gaa_getstr, GAATMP_pkcs11_provider.size1); gaa_index++; -#line 137 "certtool.gaa" +#line 136 "certtool.gaa" { gaaval->pkcs11_provider = GAATMP_pkcs11_provider.arg1 ;}; return GAA_OK; @@ -935,7 +935,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_pkcs_cipher.arg1, gaa_getstr, GAATMP_pkcs_cipher.size1); gaa_index++; -#line 134 "certtool.gaa" +#line 133 "certtool.gaa" { gaaval->pkcs_cipher = GAATMP_pkcs_cipher.arg1 ;}; return GAA_OK; @@ -945,7 +945,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_template.arg1, gaa_getstr, GAATMP_template.size1); gaa_index++; -#line 131 "certtool.gaa" +#line 130 "certtool.gaa" { gaaval->template = GAATMP_template.arg1 ;}; return GAA_OK; @@ -955,7 +955,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_infile.arg1, gaa_getstr, GAATMP_infile.size1); gaa_index++; -#line 128 "certtool.gaa" +#line 127 "certtool.gaa" { gaaval->infile = GAATMP_infile.arg1 ;}; return GAA_OK; @@ -965,14 +965,14 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_outfile.arg1, gaa_getstr, GAATMP_outfile.size1); gaa_index++; -#line 125 "certtool.gaa" +#line 124 "certtool.gaa" { gaaval->outfile = GAATMP_outfile.arg1 ;}; return GAA_OK; break; case GAAOPTID_disable_quick_random: OK = 0; -#line 122 "certtool.gaa" +#line 121 "certtool.gaa" { gaaval->quick_random = 0; ;}; return GAA_OK; @@ -982,42 +982,42 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_bits.arg1, gaa_getint, GAATMP_bits.size1); gaa_index++; -#line 119 "certtool.gaa" +#line 118 "certtool.gaa" { gaaval->bits = GAATMP_bits.arg1 ;}; return GAA_OK; break; case GAAOPTID_outraw: OK = 0; -#line 116 "certtool.gaa" +#line 115 "certtool.gaa" { gaaval->outcert_format=1 ;}; return GAA_OK; break; case GAAOPTID_outder: OK = 0; -#line 115 "certtool.gaa" +#line 114 "certtool.gaa" { gaaval->outcert_format=1 ;}; return GAA_OK; break; case GAAOPTID_inraw: OK = 0; -#line 112 "certtool.gaa" +#line 111 "certtool.gaa" { gaaval->incert_format=1 ;}; return GAA_OK; break; case GAAOPTID_inder: OK = 0; -#line 111 "certtool.gaa" +#line 110 "certtool.gaa" { gaaval->incert_format=1 ;}; return GAA_OK; break; case GAAOPTID_export_ciphers: OK = 0; -#line 108 "certtool.gaa" +#line 107 "certtool.gaa" { gaaval->export=1 ;}; return GAA_OK; @@ -1027,21 +1027,21 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list) GAA_TESTMOREARGS; GAA_FILL(GAATMP_hash.arg1, gaa_getstr, GAATMP_hash.size1); gaa_index++; -#line 105 "certtool.gaa" +#line 104 "certtool.gaa" { gaaval->hash = GAATMP_hash.arg1 ;}; return GAA_OK; break; case GAAOPTID_dsa: OK = 0; -#line 102 "certtool.gaa" +#line 101 "certtool.gaa" { gaaval->dsa=1 ;}; return GAA_OK; break; case GAAOPTID_pkcs8: OK = 0; -#line 99 "certtool.gaa" +#line 98 "certtool.gaa" { gaaval->pkcs8=1 ;}; return GAA_OK; @@ -1329,13 +1329,13 @@ int gaa(int argc, char **argv, gaainfo *gaaval) if(inited == 0) { -#line 156 "certtool.gaa" +#line 155 "certtool.gaa" { gaaval->bits = 2048; gaaval->pkcs8 = 0; gaaval->privkey = NULL; gaaval->ca=NULL; gaaval->ca_privkey = NULL; gaaval->debug=1; gaaval->request = NULL; gaaval->infile = NULL; gaaval->outfile = NULL; gaaval->cert = NULL; gaaval->incert_format = 0; gaaval->outcert_format = 0; gaaval->action=-1; gaaval->pass = NULL; gaaval->v1_cert = 0; gaaval->export = 0; gaaval->template = NULL; gaaval->hash=NULL; gaaval->fix_key = 0; gaaval->quick_random=1; gaaval->privkey_op = 0; gaaval->pkcs_cipher = "3des"; gaaval->crq_extensions=1; gaaval->pkcs11_provider= NULL; - gaaval->pkcs11_url = NULL; gaaval->pkcs11_type = PKCS11_TYPE_PK; gaaval->pubkey=NULL; ;}; + gaaval->pkcs11_url = NULL; ;}; } inited = 1; diff --git a/src/certtool-gaa.h b/src/certtool-gaa.h index 80b022a1bb..b96924aa61 100644 --- a/src/certtool-gaa.h +++ b/src/certtool-gaa.h @@ -8,37 +8,37 @@ typedef struct _gaainfo gaainfo; struct _gaainfo { -#line 149 "certtool.gaa" +#line 148 "certtool.gaa" int debug; -#line 142 "certtool.gaa" +#line 141 "certtool.gaa" int pkcs11_type; -#line 139 "certtool.gaa" +#line 138 "certtool.gaa" char* pkcs11_url; -#line 136 "certtool.gaa" +#line 135 "certtool.gaa" char* pkcs11_provider; -#line 133 "certtool.gaa" +#line 132 "certtool.gaa" char *pkcs_cipher; -#line 130 "certtool.gaa" +#line 129 "certtool.gaa" char *template; -#line 127 "certtool.gaa" +#line 126 "certtool.gaa" char *infile; -#line 124 "certtool.gaa" +#line 123 "certtool.gaa" char *outfile; -#line 121 "certtool.gaa" +#line 120 "certtool.gaa" int quick_random; -#line 118 "certtool.gaa" +#line 117 "certtool.gaa" int bits; -#line 114 "certtool.gaa" +#line 113 "certtool.gaa" int outcert_format; -#line 110 "certtool.gaa" +#line 109 "certtool.gaa" int incert_format; -#line 107 "certtool.gaa" +#line 106 "certtool.gaa" int export; -#line 104 "certtool.gaa" +#line 103 "certtool.gaa" char *hash; -#line 101 "certtool.gaa" +#line 100 "certtool.gaa" int dsa; -#line 98 "certtool.gaa" +#line 97 "certtool.gaa" int pkcs8; #line 90 "certtool.gaa" int v1_cert; diff --git a/src/certtool.gaa b/src/certtool.gaa index 7ad13a114a..aaeb93daaa 100644 --- a/src/certtool.gaa +++ b/src/certtool.gaa @@ -94,7 +94,6 @@ option (to-p12) { $action = ACTION_TO_PKCS12; } "Generate a PKCS #12 structure." option (to-p8) { $action = ACTION_GENERATE_PKCS8; } "Generate a PKCS #8 key structure." - #int pkcs8; option (8, pkcs8) { $pkcs8=1 } "Use PKCS #8 format for private keys." @@ -158,4 +157,4 @@ init { $bits = 2048; $pkcs8 = 0; $privkey = NULL; $ca=NULL; $ca_privkey = NULL; $incert_format = 0; $outcert_format = 0; $action=-1; $pass = NULL; $v1_cert = 0; $export = 0; $template = NULL; $hash=NULL; $fix_key = 0; $quick_random=1; $privkey_op = 0; $pkcs_cipher = "3des"; $crq_extensions=1; $pkcs11_provider= NULL; - $pkcs11_url = NULL; $pkcs11_type = PKCS11_TYPE_PK; $pubkey=NULL; } + $pkcs11_url = NULL; } diff --git a/src/pkcs11.c b/src/pkcs11.c index cfd23408d4..94704e324d 100644 --- a/src/pkcs11.c +++ b/src/pkcs11.c @@ -341,6 +341,4 @@ size_t size; return; - - }