diff options
| author | erdgeist <> | 2010-08-27 13:20:16 +0000 |
|---|---|---|
| committer | erdgeist <> | 2010-08-27 13:20:16 +0000 |
| commit | edad5cf6e2b7604204d6246be5fe6b6dd8532fa0 (patch) | |
| tree | d47c713620fcaa097ea66c19b285bb8be62c2f03 | |
| parent | 6eb716f8db302dcf51113a7f8c99c18ebcb6b07e (diff) | |
Tidy up ssl code, move all ssl related stuff to vchat-ssl and clean up some wrinkles in cert verification
| -rwxr-xr-x | vchat-config.h | 3 | ||||
| -rwxr-xr-x | vchat-protocol.c | 42 | ||||
| -rwxr-xr-x | vchat-ssl.c | 144 | ||||
| -rwxr-xr-x | vchat-ssl.h | 8 |
4 files changed, 41 insertions, 156 deletions
diff --git a/vchat-config.h b/vchat-config.h index 3511c68..4409107 100755 --- a/vchat-config.h +++ b/vchat-config.h | |||
| @@ -23,7 +23,6 @@ | |||
| 23 | #endif | 23 | #endif |
| 24 | 24 | ||
| 25 | /* configuration array with structure as defined in vchat.h */ | 25 | /* configuration array with structure as defined in vchat.h */ |
| 26 | extern unsigned int ignssl; | ||
| 27 | extern unsigned int usetime; | 26 | extern unsigned int usetime; |
| 28 | extern unsigned int hscroll; | 27 | extern unsigned int hscroll; |
| 29 | 28 | ||
| @@ -41,7 +40,7 @@ static volatile configoption configoptions[] = { | |||
| 41 | {CF_LOGINSCRIPT, CO_STR, "loginscript","~/.vchat/loginscript", NULL, { NULL } }, | 40 | {CF_LOGINSCRIPT, CO_STR, "loginscript","~/.vchat/loginscript", NULL, { NULL } }, |
| 42 | {CF_ENCODING, CO_STR, "encoding", NULL, NULL, { .pstr = &encoding }}, | 41 | {CF_ENCODING, CO_STR, "encoding", NULL, NULL, { .pstr = &encoding }}, |
| 43 | {CF_USESSL, CO_INT, "usessl", (char *) 1, (char *)-1, { NULL } }, | 42 | {CF_USESSL, CO_INT, "usessl", (char *) 1, (char *)-1, { NULL } }, |
| 44 | {CF_IGNSSL, CO_INT, "ignssl", (char *) 0, (char *)-1, { .pint = &ignssl } }, | 43 | {CF_IGNSSL, CO_INT, "ignssl", (char *) 0, (char *)-1, { NULL } }, |
| 45 | {CF_USECERT, CO_INT, "usecert", (char *) 1, (char *)-1, { NULL } }, | 44 | {CF_USECERT, CO_INT, "usecert", (char *) 1, (char *)-1, { NULL } }, |
| 46 | {CF_USETIME, CO_INT, "usetime", (char *) 1, (char *)-1, { .pint = &usetime } }, | 45 | {CF_USETIME, CO_INT, "usetime", (char *) 1, (char *)-1, { .pint = &usetime } }, |
| 47 | {CF_USETOPIC, CO_INT, "usetopicbar",(char *) 1, (char *)-1, { NULL } }, | 46 | {CF_USETOPIC, CO_INT, "usetopicbar",(char *) 1, (char *)-1, { NULL } }, |
diff --git a/vchat-protocol.c b/vchat-protocol.c index 700f6c7..ef035fe 100755 --- a/vchat-protocol.c +++ b/vchat-protocol.c | |||
| @@ -70,7 +70,6 @@ static void pmnotsent (char *message); | |||
| 70 | /* status-variable from vchat-client.c | 70 | /* status-variable from vchat-client.c |
| 71 | * eventloop is done as long as this is true */ | 71 | * eventloop is done as long as this is true */ |
| 72 | extern int status; | 72 | extern int status; |
| 73 | int ignssl = 0; | ||
| 74 | char *encoding; | 73 | char *encoding; |
| 75 | 74 | ||
| 76 | static int connect_socket( char *server, char *port ) { | 75 | static int connect_socket( char *server, char *port ) { |
| @@ -107,9 +106,6 @@ vcconnect (char *server, char *port) | |||
| 107 | /* vchat connection x509 store */ | 106 | /* vchat connection x509 store */ |
| 108 | vc_x509store_t vc_store; | 107 | vc_x509store_t vc_store; |
| 109 | 108 | ||
| 110 | /* SSL-context */ | ||
| 111 | SSL_CTX *sslctx = NULL; | ||
| 112 | |||
| 113 | /* pointer to tilde-expanded certificate/keyfile-names */ | 109 | /* pointer to tilde-expanded certificate/keyfile-names */ |
| 114 | char *certfile = NULL, *keyfile = NULL; | 110 | char *certfile = NULL, *keyfile = NULL; |
| 115 | 111 | ||
| @@ -164,10 +160,9 @@ vcconnect (char *server, char *port) | |||
| 164 | vc_x509store_set_pkeycb(&vc_store, (vc_askpass_cb_t)passprompt); | 160 | vc_x509store_set_pkeycb(&vc_store, (vc_askpass_cb_t)passprompt); |
| 165 | vc_x509store_setkeyfile(&vc_store, tildex); | 161 | vc_x509store_setkeyfile(&vc_store, tildex); |
| 166 | } | 162 | } |
| 167 | vc_x509store_setignssl(&vc_store, getintoption(CF_IGNSSL)); | ||
| 168 | 163 | ||
| 169 | /* upgrade our plain BIO to ssl */ | 164 | /* upgrade our plain BIO to ssl */ |
| 170 | if( vc_connect_ssl( &server_conn, &vc_store, &sslctx ) ) | 165 | if( vc_connect_ssl( &server_conn, &vc_store ) ) |
| 171 | BIO_free_all( server_conn ); | 166 | BIO_free_all( server_conn ); |
| 172 | } | 167 | } |
| 173 | 168 | ||
| @@ -279,7 +274,7 @@ topicinfo (char *message) | |||
| 279 | { | 274 | { |
| 280 | char *channel = NULL, *topic = NULL; | 275 | char *channel = NULL, *topic = NULL; |
| 281 | int tmpchan = 0; | 276 | int tmpchan = 0; |
| 282 | 277 | ||
| 283 | /* search start of channel number */ | 278 | /* search start of channel number */ |
| 284 | channel = strchr (message, ' '); | 279 | channel = strchr (message, ' '); |
| 285 | channel++; | 280 | channel++; |
| @@ -443,7 +438,7 @@ nickerr (char *message) | |||
| 443 | setstroption(CF_NICK,NULL); | 438 | setstroption(CF_NICK,NULL); |
| 444 | /* get new nick via vchat-ui.c */ | 439 | /* get new nick via vchat-ui.c */ |
| 445 | nickprompt (); | 440 | nickprompt (); |
| 446 | 441 | ||
| 447 | /* form login message and send it to server */ | 442 | /* form login message and send it to server */ |
| 448 | snprintf (tmpstr, TMPSTRSIZE, ".l %s %s %d", nick, getstroption (CF_FROM), getintoption (CF_CHANNEL)); | 443 | snprintf (tmpstr, TMPSTRSIZE, ".l %s %s %d", nick, getstroption (CF_FROM), getintoption (CF_CHANNEL)); |
| 449 | networkoutput (tmpstr); | 444 | networkoutput (tmpstr); |
| @@ -455,8 +450,7 @@ nickerr (char *message) | |||
| 455 | * vars: %s - this users registered nick | 450 | * vars: %s - this users registered nick |
| 456 | * %s msg - server message */ | 451 | * %s msg - server message */ |
| 457 | static void | 452 | static void |
| 458 | login (char *message) | 453 | login (char *message) { |
| 459 | { | ||
| 460 | char *msg = NULL; | 454 | char *msg = NULL; |
| 461 | 455 | ||
| 462 | /* mutate message for output */ | 456 | /* mutate message for output */ |
| @@ -465,23 +459,19 @@ login (char *message) | |||
| 465 | writecf (FS_SERV,&message[2]); | 459 | writecf (FS_SERV,&message[2]); |
| 466 | 460 | ||
| 467 | /* we don't know our nick? */ | 461 | /* we don't know our nick? */ |
| 468 | if (!nick) | 462 | if (!nick) { |
| 469 | { | 463 | /* find message after nick */ |
| 470 | /* find message after nick */ | 464 | msg = strchr (&message[4], ' '); |
| 471 | msg = strchr (&message[4], ' '); | 465 | if (msg) { |
| 472 | if (msg) | 466 | /* terminate string before message and copy nick */ |
| 473 | { | 467 | msg[0] = '\0'; |
| 474 | /* terminate string before message and copy nick */ | 468 | setstroption(CF_NICK,&message[4]); |
| 475 | msg[0] = '\0'; | 469 | } else { |
| 476 | setstroption(CF_NICK,&message[4]); | 470 | /* no string in servers message (huh?), ask user for nick */ |
| 477 | } | 471 | nickprompt (); |
| 478 | else | ||
| 479 | { | ||
| 480 | /* no string in servers message (huh?), ask user for nick */ | ||
| 481 | nickprompt (); | ||
| 482 | } | ||
| 483 | } | 472 | } |
| 484 | 473 | } | |
| 474 | |||
| 485 | /* form login message and send it to server */ | 475 | /* form login message and send it to server */ |
| 486 | snprintf (tmpstr, TMPSTRSIZE, ".l %s %s %d", nick, getstroption (CF_FROM), getintoption (CF_CHANNEL)); | 476 | snprintf (tmpstr, TMPSTRSIZE, ".l %s %s %d", nick, getstroption (CF_FROM), getintoption (CF_CHANNEL)); |
| 487 | networkoutput (tmpstr); | 477 | networkoutput (tmpstr); |
diff --git a/vchat-ssl.c b/vchat-ssl.c index 1a1ff16..652ca09 100755 --- a/vchat-ssl.c +++ b/vchat-ssl.c | |||
| @@ -27,13 +27,13 @@ | |||
| 27 | #include <openssl/x509v3.h> | 27 | #include <openssl/x509v3.h> |
| 28 | #include <openssl/conf.h> | 28 | #include <openssl/conf.h> |
| 29 | 29 | ||
| 30 | #include <readline/readline.h> | ||
| 31 | |||
| 30 | #include "vchat.h" | 32 | #include "vchat.h" |
| 31 | #include "vchat-ssl.h" | 33 | #include "vchat-ssl.h" |
| 32 | 34 | ||
| 33 | char *vchat_ssl_version = "$Id$"; | 35 | char *vchat_ssl_version = "$Id$"; |
| 34 | 36 | ||
| 35 | static int ignore_ssl; | ||
| 36 | |||
| 37 | #define VC_CTX_ERR_EXIT(se, cx) do { \ | 37 | #define VC_CTX_ERR_EXIT(se, cx) do { \ |
| 38 | snprintf(tmpstr, TMPSTRSIZE, "CREATE CTX: %s", \ | 38 | snprintf(tmpstr, TMPSTRSIZE, "CREATE CTX: %s", \ |
| 39 | ERR_error_string (ERR_get_error (), NULL)); \ | 39 | ERR_error_string (ERR_get_error (), NULL)); \ |
| @@ -119,25 +119,16 @@ SSL_CTX * vc_create_sslctx( vc_x509store_t *vc_store ) | |||
| 119 | return(ctx); | 119 | return(ctx); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | int vc_connect_ssl( BIO **conn, vc_x509store_t *vc_store, SSL_CTX **ctx) | 122 | int vc_connect_ssl( BIO **conn, vc_x509store_t *vc_store ) |
| 123 | { | 123 | { |
| 124 | BIO *ssl_conn = NULL; | 124 | BIO *ssl_conn = NULL; |
| 125 | int _ctx = 0; | 125 | SSL_CTX * ctx = vc_create_sslctx(vc_store); |
| 126 | 126 | ||
| 127 | if(*ctx) { | 127 | if( !ctx ) |
| 128 | CRYPTO_add( &((*ctx)->references), 1, CRYPTO_LOCK_SSL_CTX ); | 128 | return 1; |
| 129 | if( vc_store && vc_store != SSL_CTX_get_app_data(*ctx) ) { | ||
| 130 | SSL_CTX_set_cert_store(*ctx, vc_x509store_create(vc_store)); | ||
| 131 | SSL_CTX_set_app_data(*ctx, vc_store); | ||
| 132 | } | ||
| 133 | } else { | ||
| 134 | *ctx = vc_create_sslctx(vc_store); | ||
| 135 | _ctx = 1; | ||
| 136 | } | ||
| 137 | 129 | ||
| 138 | ssl_conn = BIO_new_ssl(*ctx, 1); | 130 | ssl_conn = BIO_new_ssl(ctx, 1); |
| 139 | if(_ctx) | 131 | SSL_CTX_free(ctx); |
| 140 | SSL_CTX_free(*ctx); | ||
| 141 | 132 | ||
| 142 | if( ssl_conn ) { | 133 | if( ssl_conn ) { |
| 143 | BIO_push( ssl_conn, *conn ); | 134 | BIO_push( ssl_conn, *conn ); |
| @@ -153,88 +144,6 @@ int vc_connect_ssl( BIO **conn, vc_x509store_t *vc_store, SSL_CTX **ctx) | |||
| 153 | return 1; | 144 | return 1; |
| 154 | } | 145 | } |
| 155 | 146 | ||
| 156 | int vc_verify_cert_hostname(X509 *cert, char *host) | ||
| 157 | { | ||
| 158 | int i = 0; | ||
| 159 | int j = 0; | ||
| 160 | int n = 0; | ||
| 161 | int extcount = 0; | ||
| 162 | int ok = 0; | ||
| 163 | |||
| 164 | X509_NAME *subj = NULL; | ||
| 165 | const char *extstr = NULL; | ||
| 166 | CONF_VALUE *nval = NULL; | ||
| 167 | const unsigned char *data = NULL; | ||
| 168 | X509_EXTENSION *ext = NULL; | ||
| 169 | X509V3_EXT_METHOD *meth = NULL; | ||
| 170 | STACK_OF(CONF_VALUE) *val = NULL; | ||
| 171 | |||
| 172 | char name[256]; | ||
| 173 | memset(&name, 0, sizeof(name)); | ||
| 174 | |||
| 175 | if((extcount = X509_get_ext_count(cert)) > 0) { | ||
| 176 | |||
| 177 | for(i=0; !ok && i < extcount; i++) { | ||
| 178 | |||
| 179 | meth = NULL; | ||
| 180 | |||
| 181 | ext = X509_get_ext(cert, i); | ||
| 182 | extstr = OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(ext))); | ||
| 183 | |||
| 184 | if(!strcasecmp(extstr, "subjectAltName")) { | ||
| 185 | |||
| 186 | if( !(meth = X509V3_EXT_get(ext)) ) | ||
| 187 | break; | ||
| 188 | |||
| 189 | if( !(meth->d2i) ) | ||
| 190 | break; | ||
| 191 | |||
| 192 | data = ext->value->data; | ||
| 193 | |||
| 194 | val = meth->i2v(meth, meth->d2i(0, &data, ext->value->length), 0); | ||
| 195 | for( j=0, n=sk_CONF_VALUE_num(val); j<n; j++ ) { | ||
| 196 | nval = sk_CONF_VALUE_value(val, j); | ||
| 197 | if( !strcasecmp(nval->name, "DNS") && | ||
| 198 | !strcasecmp(nval->value, host) ) { | ||
| 199 | ok = 1; | ||
| 200 | break; | ||
| 201 | } | ||
| 202 | } | ||
| 203 | } | ||
| 204 | } | ||
| 205 | } | ||
| 206 | |||
| 207 | if( !ok && (subj = X509_get_subject_name(cert)) && | ||
| 208 | X509_NAME_get_text_by_NID(subj, NID_commonName, | ||
| 209 | name, sizeof(name)) > 0 ) { | ||
| 210 | name[sizeof(name)-1] = '\0'; | ||
| 211 | if(!strcasecmp(name, host)) | ||
| 212 | ok = 1; | ||
| 213 | } | ||
| 214 | |||
| 215 | //printf("[*] vc_verify_cert_hostname() return: %d\n", ok); | ||
| 216 | return(ok); | ||
| 217 | } | ||
| 218 | |||
| 219 | int vc_verify_cert(X509 *cert, vc_x509store_t *vc_store) | ||
| 220 | { | ||
| 221 | int result = -1; | ||
| 222 | X509_STORE *store = NULL; | ||
| 223 | X509_STORE_CTX *ctx = NULL; | ||
| 224 | |||
| 225 | if( !(store = vc_x509store_create(vc_store)) ) | ||
| 226 | return(result); | ||
| 227 | |||
| 228 | if( (ctx = X509_STORE_CTX_new()) != 0 ) { | ||
| 229 | if(X509_STORE_CTX_init(ctx, store, cert, 0) == 1) | ||
| 230 | result = (X509_verify_cert(ctx) == 1); | ||
| 231 | X509_STORE_CTX_free(ctx); | ||
| 232 | } | ||
| 233 | |||
| 234 | X509_STORE_free(store); | ||
| 235 | return(result); | ||
| 236 | } | ||
| 237 | |||
| 238 | #define VC_STORE_ERR_EXIT(s) do { \ | 147 | #define VC_STORE_ERR_EXIT(s) do { \ |
| 239 | fprintf(stderr, "[E] SSL_STORE: %s\n", ERR_error_string (ERR_get_error (), NULL)); \ | 148 | fprintf(stderr, "[E] SSL_STORE: %s\n", ERR_error_string (ERR_get_error (), NULL)); \ |
| 240 | if(s) X509_STORE_free(s); \ | 149 | if(s) X509_STORE_free(s); \ |
| @@ -300,7 +209,7 @@ int vc_verify_callback(int ok, X509_STORE_CTX *store) | |||
| 300 | { | 209 | { |
| 301 | if(!ok) { | 210 | if(!ok) { |
| 302 | /* XXX handle action/abort */ | 211 | /* XXX handle action/abort */ |
| 303 | if(!ignore_ssl) | 212 | if(!(ok=getintoption(CF_IGNSSL))) |
| 304 | snprintf(tmpstr, TMPSTRSIZE, "[SSL ERROR] %s", | 213 | snprintf(tmpstr, TMPSTRSIZE, "[SSL ERROR] %s", |
| 305 | X509_verify_cert_error_string(store->error)); | 214 | X509_verify_cert_error_string(store->error)); |
| 306 | else | 215 | else |
| @@ -308,7 +217,6 @@ int vc_verify_callback(int ok, X509_STORE_CTX *store) | |||
| 308 | X509_verify_cert_error_string(store->error)); | 217 | X509_verify_cert_error_string(store->error)); |
| 309 | 218 | ||
| 310 | writecf(FS_ERR, tmpstr); | 219 | writecf(FS_ERR, tmpstr); |
| 311 | ok = ignore_ssl; | ||
| 312 | } | 220 | } |
| 313 | return(ok); | 221 | return(ok); |
| 314 | } | 222 | } |
| @@ -318,12 +226,6 @@ void vc_x509store_setflags(vc_x509store_t *store, int flags) | |||
| 318 | store->flags |= flags; | 226 | store->flags |= flags; |
| 319 | } | 227 | } |
| 320 | 228 | ||
| 321 | void vc_x509store_setignssl(vc_x509store_t *store, int ignore) | ||
| 322 | { | ||
| 323 | store->ignore_ssl |= ignore; | ||
| 324 | ignore_ssl = ignore; | ||
| 325 | } | ||
| 326 | |||
| 327 | void vc_x509store_clearflags(vc_x509store_t *store, int flags) | 229 | void vc_x509store_clearflags(vc_x509store_t *store, int flags) |
| 328 | { | 230 | { |
| 329 | store->flags &= ~flags; | 231 | store->flags &= ~flags; |
| @@ -348,31 +250,31 @@ void vc_x509store_addcert(vc_x509store_t *store, X509 *cert) | |||
| 348 | 250 | ||
| 349 | void vc_x509store_setcafile(vc_x509store_t *store, char *file) | 251 | void vc_x509store_setcafile(vc_x509store_t *store, char *file) |
| 350 | { | 252 | { |
| 351 | if( store->cafile) free(store->cafile); | 253 | free(store->cafile); |
| 352 | store->cafile = ( file ? strdup(file) : 0 ); | 254 | store->cafile = ( file ? strdup(file) : 0 ); |
| 353 | } | 255 | } |
| 354 | 256 | ||
| 355 | void vc_x509store_setcapath(vc_x509store_t *store, char *path) | 257 | void vc_x509store_setcapath(vc_x509store_t *store, char *path) |
| 356 | { | 258 | { |
| 357 | if( store->capath) free(store->capath); | 259 | free(store->capath); |
| 358 | store->capath = ( path ? strdup(path) : 0 ); | 260 | store->capath = ( path ? strdup(path) : 0 ); |
| 359 | } | 261 | } |
| 360 | 262 | ||
| 361 | void vc_x509store_setcrlfile(vc_x509store_t *store, char *file) | 263 | void vc_x509store_setcrlfile(vc_x509store_t *store, char *file) |
| 362 | { | 264 | { |
| 363 | if( store->crlfile) free(store->crlfile); | 265 | free(store->crlfile); |
| 364 | store->crlfile = ( file ? strdup(file) : 0 ); | 266 | store->crlfile = ( file ? strdup(file) : 0 ); |
| 365 | } | 267 | } |
| 366 | 268 | ||
| 367 | void vc_x509store_setkeyfile(vc_x509store_t *store, char *file) | 269 | void vc_x509store_setkeyfile(vc_x509store_t *store, char *file) |
| 368 | { | 270 | { |
| 369 | if( store->use_keyfile) free(store->use_keyfile); | 271 | free(store->use_keyfile); |
| 370 | store->use_keyfile = ( file ? strdup(file) : 0 ); | 272 | store->use_keyfile = ( file ? strdup(file) : 0 ); |
| 371 | } | 273 | } |
| 372 | 274 | ||
| 373 | void vc_x509store_setcertfile(vc_x509store_t *store, char *file) | 275 | void vc_x509store_setcertfile(vc_x509store_t *store, char *file) |
| 374 | { | 276 | { |
| 375 | if( store->use_certfile) free(store->use_certfile); | 277 | free(store->use_certfile); |
| 376 | store->use_certfile = ( file ? strdup(file) : 0 ); | 278 | store->use_certfile = ( file ? strdup(file) : 0 ); |
| 377 | } | 279 | } |
| 378 | 280 | ||
| @@ -391,19 +293,17 @@ void vc_init_x509store(vc_x509store_t *s) | |||
| 391 | s->use_keyfile = NULL; | 293 | s->use_keyfile = NULL; |
| 392 | s->use_key = NULL; | 294 | s->use_key = NULL; |
| 393 | s->flags = 0; | 295 | s->flags = 0; |
| 394 | s->ignore_ssl = 0; | ||
| 395 | } | 296 | } |
| 396 | 297 | ||
| 397 | void vc_cleanup_x509store(vc_x509store_t *s) | 298 | void vc_cleanup_x509store(vc_x509store_t *s) |
| 398 | { | 299 | { |
| 399 | if(s->cafile) free(s->cafile); | 300 | free(s->cafile); |
| 400 | if(s->capath) free(s->capath); | 301 | free(s->capath); |
| 401 | if(s->crlfile) free(s->crlfile); | 302 | free(s->crlfile); |
| 402 | if(s->use_certfile) free(s->use_certfile); | 303 | free(s->use_certfile); |
| 403 | if(s->use_keyfile) free(s->use_keyfile); | 304 | free(s->use_keyfile); |
| 404 | if(s->use_key) free(s->use_key); | 305 | free(s->use_key); |
| 405 | sk_X509_free(s->certs); | 306 | sk_X509_free(s->certs); |
| 406 | sk_X509_free(s->crls); | 307 | sk_X509_free(s->crls); |
| 407 | sk_X509_free(s->use_certs); | 308 | sk_X509_free(s->use_certs); |
| 408 | s->ignore_ssl = 0; | ||
| 409 | } | 309 | } |
diff --git a/vchat-ssl.h b/vchat-ssl.h index c745c97..baaa3c4 100755 --- a/vchat-ssl.h +++ b/vchat-ssl.h | |||
| @@ -16,12 +16,11 @@ typedef struct { | |||
| 16 | char *use_keyfile; | 16 | char *use_keyfile; |
| 17 | EVP_PKEY *use_key; | 17 | EVP_PKEY *use_key; |
| 18 | int flags; | 18 | int flags; |
| 19 | int ignore_ssl; | ||
| 20 | } vc_x509store_t; | 19 | } vc_x509store_t; |
| 21 | 20 | ||
| 22 | /* prototypes */ | 21 | /* prototypes */ |
| 23 | 22 | ||
| 24 | int vc_connect_ssl(BIO **conn, vc_x509store_t *, SSL_CTX **); | 23 | int vc_connect_ssl(BIO **conn, vc_x509store_t * ); |
| 25 | SSL_CTX * vc_create_sslctx( vc_x509store_t *); | 24 | SSL_CTX * vc_create_sslctx( vc_x509store_t *); |
| 26 | void vc_init_x509store(vc_x509store_t *); | 25 | void vc_init_x509store(vc_x509store_t *); |
| 27 | void vc_cleanup_x509store(vc_x509store_t *); | 26 | void vc_cleanup_x509store(vc_x509store_t *); |
| @@ -34,15 +33,12 @@ void vc_x509store_addcert(vc_x509store_t *, X509 *); | |||
| 34 | void vc_x509store_setcb(vc_x509store_t *, vc_x509verify_cb_t); | 33 | void vc_x509store_setcb(vc_x509store_t *, vc_x509verify_cb_t); |
| 35 | void vc_x509store_set_pkeycb(vc_x509store_t *, vc_askpass_cb_t); | 34 | void vc_x509store_set_pkeycb(vc_x509store_t *, vc_askpass_cb_t); |
| 36 | void vc_x509store_setflags(vc_x509store_t *, int); | 35 | void vc_x509store_setflags(vc_x509store_t *, int); |
| 37 | void vc_x509store_setignssl(vc_x509store_t *, int); | ||
| 38 | void vc_x509store_clearflags(vc_x509store_t *, int); | 36 | void vc_x509store_clearflags(vc_x509store_t *, int); |
| 39 | int vc_verify_cert(X509 *, vc_x509store_t *); | ||
| 40 | int vc_verify_cert_hostname(X509 *, char *); | ||
| 41 | int vc_verify_callback(int, X509_STORE_CTX *); | 37 | int vc_verify_callback(int, X509_STORE_CTX *); |
| 42 | X509_STORE * vc_x509store_create(vc_x509store_t *); | 38 | X509_STORE * vc_x509store_create(vc_x509store_t *); |
| 43 | 39 | ||
| 44 | #define VC_X509S_NODEF_CAFILE 0x01 | 40 | #define VC_X509S_NODEF_CAFILE 0x01 |
| 45 | #define VC_X509S_NODEF_CAPATH 0x02 | 41 | #define VC_X509S_NODEF_CAPATH 0x02 |
| 46 | #define VC_X509S_USE_CERTIFICATE 0x04 | 42 | #define VC_X509S_USE_CERTIFICATE 0x04 |
| 47 | #define VC_X509S_SSL_VERIFY_NONE 0x10 | 43 | #define VC_X509S_SSL_VERIFY_NONE 0x10 |
| 48 | #define VC_X509S_SSL_VERIFY_PEER 0x20 | 44 | #define VC_X509S_SSL_VERIFY_PEER 0x20 |
